.module-tabs{display:flex;gap:8px;margin:18px 0;flex-wrap:wrap}.module-tabs button[aria-pressed=true]{background:#416a5b;color:#fff}.music-page{--music-ink:#355448;--music-leaf:#e3f0dd;color:var(--music-ink)}.music-intro{display:flex;align-items:center;gap:20px;background:linear-gradient(130deg,#edf5e8,#fff3de);border-radius:24px;padding:24px}.music-intro h1{font-size:clamp(1.8rem,5vw,2.7rem);margin:8px 0}.music-mascot{width:130px;flex:0 0 130px}.music-mascot svg{width:100%;height:auto}.music-page .panel{margin-top:18px}.music-page label{display:block;margin:12px 0}.music-page input,.music-page textarea,.music-page select{max-width:100%;width:100%;box-sizing:border-box}.music-page input[type=checkbox],.music-page input[type=radio]{width:auto;min-height:20px;margin-right:8px}.music-page textarea{min-height:80px}.music-page fieldset{min-width:0;border:1px solid #b6cdb5;border-radius:12px}.music-page li{margin:8px 0;overflow-wrap:anywhere}.music-page a{color:#416a5b;text-underline-offset:3px}.music-page [hidden]{display:none!important}.music-sessions{display:grid;grid-template-columns:1fr 1fr;gap:15px}.music-status{padding:12px;background:#edf5e8;border-radius:12px;overflow-wrap:anywhere}.music-tools{display:flex;gap:10px;flex-wrap:wrap}.music-import{border:1px solid #b6cdb5;border-radius:10px;padding:10px}.music-caption{font-size:.85rem}.music-links li{margin:12px 0}@media(max-width:500px){.music-intro{padding:16px;gap:10px;align-items:flex-start}.music-mascot{width:85px;flex-basis:85px}.music-sessions{grid-template-columns:1fr}.music-page .panel{padding:16px}.music-tools button{width:100%}.music-intro p{font-size:.92rem}}
.music-calendar-top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.music-calendar-top h2{margin:0}
.music-month-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.music-month-controls button{padding:6px 12px;min-width:44px;min-height:44px;background:#edf2e6;color:#416a5b}
.music-month-controls button:disabled{opacity:.35;cursor:default}
#music-month-label{font-size:15px;font-weight:650;min-width:100px;text-align:center}
.music-weekdays,.music-day-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.music-weekdays{margin:20px 0 8px;color:#798772;text-align:center;font-size:12px}
.music-day{position:relative;min-width:0;min-height:102px;padding:8px 2px;background:#f3f5ec;color:#54654f;border:1px solid transparent;font-weight:400;display:flex;flex-direction:column;align-items:center;gap:2px}
.music-day:hover{background:#e5eddc}
.music-day b{font-size:18px;font-weight:650}
.music-day small{font-size:11px;min-height:18px;line-height:1.4}
.music-day[aria-current=date] b{text-decoration:underline;text-underline-offset:4px}
.music-day.selected{border-color:#416a5b;background:#e3eed9;box-shadow:inset 0 0 0 1px #416a5b}
.music-day.recorded{color:#355448}
.music-day.unsaved small{color:#88602d}
.music-calendar-art{position:relative;display:block;width:min(40px,100%);aspect-ratio:1;margin:auto 0 0}
.music-calendar-art:after{content:'♪';font-size:25px;color:#8870a2}
.music-mascot-ready .music-calendar-art:after{display:none}
@media(max-width:500px){.music-weekdays,.music-day-grid{gap:4px}.music-day{min-height:90px;border-radius:9px}.music-day b{font-size:15px}.music-day small{font-size:9px}.music-month-controls{gap:5px}.music-month-controls button{padding:6px 10px}}
.music-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);align-items:center;gap:24px}
.music-lead{min-width:0}
.music-companion{min-width:0;background:#f1ebf6;border:1px solid #e2d7eb;border-radius:22px;padding:16px;color:#604674}
.music-companion-stage{display:flex;align-items:center;gap:10px;min-width:0}
.music-companion-art{position:relative;width:170px;aspect-ratio:1;flex:0 0 170px;transform-origin:50% 80%}
.music-companion-sprite{position:absolute;inset:0;display:none;background-repeat:no-repeat;background-image:var(--frame-image);background-size:var(--frame-size);background-position:var(--frame-position);clip-path:inset(var(--frame-inset))}
.music-mascot-ready .music-companion-sprite{display:block}
.music-companion-fallback{display:grid;place-items:center;height:100%;font-size:40px;color:#987ba8}
.music-mascot-ready .music-companion-fallback{display:none}
.music-companion-bubble{background:#fffaf0;border-radius:16px;padding:12px;min-width:0;flex:1;overflow-wrap:anywhere}
.music-companion-bubble small{font-size:11px;color:#8f769f}
.music-companion-bubble p{font-size:14px;line-height:1.6;margin:6px 0 0;color:#61476b}
.music-expression-controls{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 0}
.music-expression-controls button{padding:8px 11px;font-size:12px;min-height:44px;background:#e3d6ed;color:#604674}
.music-companion .hint{font-size:11px;color:#917b9d;margin:8px 0}
.music-companion details{margin:8px 0 0}
.music-companion summary{font-size:12px;color:#70547f}
.music-expression-gallery{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}
.music-expression-gallery button{padding:5px 2px;background:#fbf7ff;color:#6c5180;border:1px solid #e2d7eb;display:flex;flex-direction:column;align-items:center;min-width:0;font-size:10px;font-weight:500;line-height:1.4}
.music-expression-gallery button[aria-pressed=true]{border-color:#9472af;background:#ede1f6}
.music-expression-art{position:relative;display:block;width:100%;max-width:72px;aspect-ratio:1}
.music-page .music-motion-control{display:flex;flex-direction:row;align-items:center;gap:8px;margin:12px 0 0;font-size:12px}
.music-page .music-motion-control input{width:20px;height:20px;min-height:20px;margin:0;accent-color:#805b96}
.music-companion[data-moving=true] .music-companion-art{animation:music-sway 3.6s ease-in-out infinite}
.music-companion[data-moving=true] .music-companion-art[data-music-pose=panic]{animation:music-fluster .7s ease-in-out infinite}
.music-companion[data-moving=true] .music-companion-art[data-music-pose=groove]{animation:music-groove 1.5s ease-in-out infinite}
.music-companion[data-moving=true] .music-companion-art[data-music-pose=rest]{animation:music-breathe 4.2s ease-in-out infinite}
@keyframes music-sway{0%,100%{transform:rotate(-1deg)}50%{transform:translateY(-3px) rotate(1deg)}}
@keyframes music-fluster{0%,100%{transform:translateX(0) rotate(-1deg)}35%{transform:translateX(-1.5px) rotate(1deg)}70%{transform:translateX(1.5px) rotate(-1deg)}}
@keyframes music-groove{0%,100%{transform:rotate(-2deg)}50%{transform:translateY(-3px) rotate(2deg)}}
@keyframes music-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.015)}}
@media(max-width:900px){.music-intro{grid-template-columns:1fr}.music-companion{width:100%;max-width:480px}.music-companion-art{width:170px;flex-basis:170px}}
@media(max-width:500px){.music-companion{padding:12px}.music-companion-art{width:132px;flex-basis:132px}.music-companion-bubble{padding:10px}.music-companion-bubble p{font-size:12px}.music-companion-stage{gap:6px}.music-intro p{font-size:.92rem}.music-intro .music-companion .hint{font-size:11px}.music-intro .music-companion-bubble p{font-size:12px}}
@media(prefers-reduced-motion:reduce){.music-companion .music-companion-art{animation:none!important}}
