.splash-screen{isolation:isolate;min-height:100svh;padding:max(30px, env(safe-area-inset-top,0px)) max(28px, env(safe-area-inset-right,0px)) max(30px, env(safe-area-inset-bottom,0px)) max(28px, env(safe-area-inset-left,0px));color:#f1eee5;background:#0b0c0c;grid-template-columns:minmax(0,1fr) minmax(300px,560px);align-items:end;gap:clamp(24px,5vw,88px);display:grid;position:relative;overflow:hidden}.splash-storefront,.splash-vignette{position:absolute;inset:0}.splash-storefront{z-index:-3;object-fit:cover;object-position:50% 50%;width:100%;height:100%}.splash-vignette{z-index:-2;pointer-events:none;background:linear-gradient(90deg,#050708db 0%,#0507086e 49%,#0507082e 100%),linear-gradient(#0000 48%,#040506c7 100%)}.splash-welcome{text-shadow:0 2px 16px #000;align-self:center;width:min(100%,570px);padding:0 clamp(8px,3vw,42px)}.splash-kicker,.splash-music-note{font-family:var(--mono);letter-spacing:.13em;text-transform:uppercase;margin:0;font-size:11px;font-weight:650}.splash-kicker{color:#f1bb57}.splash-welcome h1{letter-spacing:-.065em;max-width:9ch;margin:12px 0 10px;font-size:clamp(36px,4.8vw,62px);font-weight:500;line-height:.98}.splash-intro{color:#d0cec7;max-width:28rem;margin:0;font-size:clamp(16px,1.7vw,20px);line-height:1.42}.splash-enter{color:#17130c;min-height:48px;font:700 13px/1 var(--mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer;background:#ffb000;border:1px solid #ffbe3d;border-radius:3px;margin-top:20px;padding:0 19px;box-shadow:0 4px 16px #0006}.splash-setup{-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px);width:min(100%,480px);text-shadow:none;background:#0a0b0bab;border:1px solid #e8dbbb40;border-radius:5px;margin-top:16px;padding:14px;box-shadow:0 10px 30px #0000003b}.splash-enter:hover{background:#ffc348}.splash-enter:focus-visible,.splash-deck-key:focus-visible,.splash-tape-actions button:focus-visible{outline-offset:4px;outline:3px solid #fff}.splash-deck{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0b0c0cbf;border:1px solid #ffe09d3d;border-radius:7px;place-self:end;width:min(100%,560px);padding:12px;box-shadow:0 18px 55px #00000080}.splash-deck-image{aspect-ratio:1672/941;background:#0a0a09;border-radius:3px;position:relative;overflow:hidden}.splash-deck-art{object-fit:contain;width:100%;height:100%;display:block}.splash-spindle{aspect-ratio:1;pointer-events:none;border-radius:50%;width:6.579%;position:absolute;top:40.6%;overflow:hidden;transform:translate(-50%,-50%)}.splash-spindle-left{left:37.44%}.splash-spindle-right{left:62.5%}.splash-spindle img{width:1520%;max-width:none;height:auto;display:block;position:absolute}.splash-spindle-left img{transform-origin:37.44% 40.6%;top:-297.3%;left:-519.1%}.splash-spindle-right img{transform-origin:62.5% 40.6%;top:-297.3%;left:-900%}.splash-spindle-playing img,.splash-spindle-paused img{animation:2.3s linear infinite splash-spool}.splash-spindle-right.splash-spindle-playing img,.splash-spindle-right.splash-spindle-paused img{animation-duration:1.85s}.splash-spindle-paused img{animation-play-state:paused}@keyframes splash-spool{to{transform:rotate(360deg)}}.splash-power-light{pointer-events:none;background:#ffad27d1;border-radius:999px;width:3.1%;height:1.35%;position:absolute;top:23.3%;left:3.7%;box-shadow:0 0 10px 3px #ff880f70}.splash-vu-meter{pointer-events:none;background:#151310;grid-template-rows:repeat(8,1fr);gap:2%;width:1.74%;height:24.75%;padding:0;display:grid;position:absolute;top:24.65%;left:97.08%}.splash-vu-segment{background:#3b2a19;border:1px solid #241b12;min-height:0}.splash-vu-segment[data-lit=true]{background:#ffc469;border-color:#ffe0a4;box-shadow:0 0 5px 1px #ffa023a6}.splash-vu-segment:first-child[data-lit=true]{background:#ff996a;border-color:#ffd0bd}.splash-screen-playing .splash-status-light{background:#ffb544;box-shadow:0 0 5px #ffa0238c}.splash-audio-error{color:#ffb2a6;margin:10px 2px 0;font-size:13px}.splash-deck-key{cursor:pointer;background:0 0;border:0;border-radius:2px;height:17.5%;position:absolute;bottom:0}.splash-deck-key:hover{background:#ffbc371f}.splash-deck-key-play{width:13.5%;left:27%}.splash-deck-key-stop{width:13%;left:39%}.splash-deck-key-pause{width:13%;left:73.5%}.splash-tape-actions{display:none}.splash-music-note{color:#b5b1a6;letter-spacing:.08em;align-items:center;gap:7px;margin:10px 2px 0;display:flex}.splash-status-light{background:#74726d;border-radius:50%;width:7px;height:7px}@media (prefers-reduced-motion:reduce){.splash-spindle-playing img,.splash-spindle-paused img{animation:none}}@media (width<=1050px){.splash-screen{min-height:100svh;padding-top:max(22px, env(safe-area-inset-top,0px));flex-direction:column;align-items:stretch;gap:20px;display:flex;overflow:auto}.splash-vignette{background:linear-gradient(#05070880 0%,#050708c2 54%,#050708ed 100%),linear-gradient(90deg,#0507085c,#0507080f)}.splash-welcome{align-self:center;padding:0}.splash-welcome h1{max-width:10ch;font-size:clamp(37px,12vw,58px)}.splash-setup{margin-top:18px}.splash-deck{order:-1;place-self:center;width:min(100%,500px);padding:8px}.splash-deck-key{display:none}.splash-tape-actions{grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px;display:grid}.splash-tape-actions button{color:#ddd9cd;min-height:44px;font:700 11px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;background:#20211f;border:1px solid #4c4c48;border-radius:3px}.splash-tape-actions button[aria-pressed=true]{color:#17130c;background:#f5b436;border-color:#d39424}}@media (height<=620px) and (width>=1051px){.splash-screen{min-height:620px}.splash-welcome h1{font-size:clamp(36px,5vw,56px)}.splash-deck{width:min(42vw,470px)}}.splash-screen-setup .splash-welcome h1{max-width:none;font-size:clamp(30px,3vw,42px)}.splash-welcome h1:focus{outline:none}.splash-entry-actions{flex-wrap:wrap;align-items:center;gap:12px;margin-top:16px;display:flex}.splash-entry-actions .splash-enter{margin-top:0}.splash-skip{color:#f1eee5;min-height:48px;font:600 13px/1 var(--mono);cursor:pointer;background:#0a0b0bab;border:1px solid #e8dbbb73;border-radius:3px;padding:0 12px}.splash-skip:focus-visible,.splash-skip-preference input:focus-visible{outline-offset:4px;outline:3px solid #fff}.splash-skip-preference{cursor:pointer;align-items:center;gap:9px;min-height:44px;margin-top:8px;font-size:13px;display:flex}.splash-skip-preference input{accent-color:#ffb000}@media (width<=1050px){.splash-screen-setup .splash-deck{order:0}}@media (width<=600px){.splash-storefront{object-position:52% 50%;height:min(60svh,520px);bottom:auto;-webkit-mask-image:linear-gradient(#000 72%,#0000);mask-image:linear-gradient(#000 72%,#0000)}.splash-screen-splash{justify-content:flex-end;min-height:max(100svh,700px)}.splash-deck{order:0;align-self:flex-end;width:min(100%,260px);padding:6px}.splash-music-note{letter-spacing:.04em;font-size:10px}.splash-status-light{flex-shrink:0}.splash-screen-splash .splash-vignette{background:linear-gradient(#05070826 0%,#050708a6 38%,#050708ed 100%)}}.welcome-setup{color:#e9e5dc;font-size:13px;line-height:1.4}.welcome-devices{gap:12px;margin-bottom:18px;display:grid}.welcome-device{align-items:baseline;gap:9px;display:flex}.welcome-device strong{font-size:13px;font-weight:600}.welcome-device p{color:#b1b0a9;overflow-wrap:anywhere;margin:3px 0 0;font-size:11px}.welcome-device-led{background:#ae9e70;border-radius:50%;flex:0 0 6px;width:6px;height:6px}.welcome-device[data-status=ready] .welcome-device-led{background:#60d09a;box-shadow:0 0 8px #60d09a55}.welcome-device[data-status=error] .welcome-device-led,.welcome-device[data-status=unsupported] .welcome-device-led{background:#ff846c}.welcome-fields{grid-template-columns:1fr 1fr;gap:10px;display:grid}.welcome-fields label{gap:5px;min-width:0;display:grid}.welcome-fields label>span{color:#c4bcaa;font-family:var(--mono);font-size:10px}.welcome-fields select{color:#eee9df;width:100%;min-width:0;min-height:44px;font:inherit;background:#1c1d1c;border:1px solid #575145;border-radius:3px}.welcome-transposition,.welcome-session{color:#bfb6a2;margin:8px 0 0;font-size:11px}.welcome-routing{border-bottom:1px solid #514a3d;margin-top:12px;padding-bottom:12px}.welcome-routing summary{cursor:pointer;color:#d2c4a7;padding:8px 0;font-size:11px}.welcome-routing .welcome-fields{margin:8px 0}.welcome-mic-check{margin-top:10px}.welcome-mic-check p{color:#bbb4a5;margin:5px 0;font-size:11px}.welcome-mic-check button{color:#e5d5b9;background:#26241f;border:1px solid #696052;border-radius:3px;min-height:44px;padding:8px 12px}.welcome-workflows{margin-top:12px}.welcome-workflow-actions,.welcome-classics{grid-template-columns:1fr 1fr;gap:8px;display:grid}.welcome-workflows button{color:#f0e4cc;cursor:pointer;text-align:left;min-width:0;min-height:54px;font:inherit;background:#24211ce6;border:1px solid #615444;border-radius:3px;align-content:center;gap:4px;padding:10px;display:grid}.welcome-workflows button:hover{background:#33291fe6;border-color:#e0af59}.welcome-workflows button strong{font-size:12px;font-weight:600}.welcome-workflows button span{color:#bcae96;font:9px/1.4 var(--mono)}.welcome-classics-label{color:#c5b899;font:10px/1.3 var(--mono);margin:14px 0 7px}.welcome-setup button:focus-visible,.welcome-setup select:focus-visible,.welcome-setup summary:focus-visible{outline-offset:3px;outline:2px solid #ffb000}.welcome-setup .error-banner,.welcome-setup .persist-error{margin-bottom:12px}@media (width<=400px){.welcome-fields{grid-template-columns:1fr}}@font-face{font-family:Bravura;src:url(/fonts/Bravura.woff2)format("woff2");font-display:block}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/fonts/jetbrains-mono-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/fonts/jetbrains-mono-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/space-grotesk-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/space-grotesk-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--bg:#111214;--panel:#1c1e22;--panel-deep:#16181b;--screen:#0c0d0f;--ink:#e4e4df;--muted:#8a8c86;--dim:#5a5e66;--line:#2b2e33;--line-strong:#3a3e45;--dock:#21242a;--dock-bar:#181a1e;--dock-edge:#4d525b;--amber:#ffb000;--amber-ink:#111214;--green:#3ddc84;--red:#ff453a;--note-chord:#5aa9ff;--note-tension:#3ddc84;--note-avoid:#ffb000;--note-outside:#ff453a;--note-reference:#767770;--tension-harmonic:#d08cff;--tension-rhythmic:#7cc4d6;--tension-calm:#3b5a8f;--tension-easy:#1f9e89;--tension-mid:#e8b23a;--tension-tense:#ff3b2f;--motif-0:#9fb0ff;--motif-1:#ff9ad8;--motif-2:#8fe3c0;--motif-3:#e8d29a;--key-0:oklch(66% .1 250);--key-1:oklch(66% .1 220);--key-2:oklch(66% .1 190);--key-3:oklch(66% .1 160);--key-4:oklch(66% .1 130);--key-5:oklch(66% .1 100);--key-6:oklch(66% .1 70);--key-7:oklch(66% .1 40);--key-8:oklch(66% .1 10);--key-9:oklch(66% .1 340);--key-10:oklch(66% .1 310);--key-11:oklch(66% .1 280);--note-off-scale:#6e7179;--measure-highlight:#ffb00014;--playhead:#ffb000;--wheel-arc:#5aa9ff2e;--wheel-home:#e4e4df0d;--key-white:#e8e7e1;--key-black:#2a2d33;--key-face:linear-gradient(#2a2d33, #202328);--key-shadow:0 2px 0 #0c0d0f;--white-key-width:34px;--black-key-width:22px;--mono:"JetBrains Mono", Menlo, Consolas, monospace;color:var(--ink);background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:Space Grotesk,system-ui,-apple-system,Segoe UI,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{background:var(--bg);-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;min-height:100vh;margin:0}input,textarea,.share-url,.crash pre,code{-webkit-user-select:text;user-select:text}button,select,[role=tab],[role=button],.wheel svg,.keyguide svg{touch-action:manipulation;-webkit-tap-highlight-color:transparent}.app{max-width:1280px;padding:calc(24px + env(safe-area-inset-top,0px)) max(40px, env(safe-area-inset-right,0px)) calc(var(--dock-height,72px) + 24px) max(40px, env(safe-area-inset-left,0px));flex-direction:column;gap:22px;margin:0 auto;display:flex}:root[data-board] .app{max-width:none;padding:calc(12px + env(safe-area-inset-top,0px)) max(12px, env(safe-area-inset-right,0px)) var(--dock-height,72px) max(12px, env(safe-area-inset-left,0px));gap:12px}.app-header{grid-template-columns:auto 1fr;grid-template-areas:"brand status""brand sounding";align-items:center;gap:6px 28px;padding:12px 20px;display:grid}.app-header:has(.mic-status){grid-template-areas:"brand status""brand mic""brand sounding"}.app-header .mic-status{background:var(--panel);border:1px solid var(--line);border-bottom-color:var(--line-strong);border-radius:6px;grid-area:mic}.brand{grid-area:brand;margin:0;line-height:0}.brand img{width:auto;height:48px;display:block}.midi-status{color:#b8b9b3;grid-area:status;align-items:center;gap:10px;font-size:13px;display:flex}.midi-status strong{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:600}.midi-dot{background:var(--dim);border-radius:50%;flex:none;width:9px;height:9px}.midi-status-ok .midi-dot{background:var(--green);box-shadow:0 0 8px var(--green)}.midi-status-warn .midi-dot{background:var(--amber);box-shadow:0 0 8px var(--amber)}.midi-status-bad .midi-dot{background:var(--red);box-shadow:0 0 8px var(--red)}.midi-status-bad{color:#ffb3ae}.midi-devices{color:var(--ink)}.sounding{grid-area:sounding;align-items:center;gap:10px;min-height:24px;display:flex}.header-bar-stepper{grid-area:chord;align-items:center;gap:3px;display:none}.header-step-btn{width:22px;height:22px;color:var(--amber);font-family:var(--mono);cursor:pointer;touch-action:manipulation;background:#ffb00014;border:1px solid #ffb00059;border-radius:999px;justify-content:center;align-items:center;padding:0;font-size:14px;font-weight:700;line-height:1;display:inline-flex}.header-step-btn:disabled{opacity:.35;cursor:default}.header-chord{font-family:var(--mono);color:var(--amber);white-space:nowrap;cursor:pointer;touch-action:manipulation;background:#ffb0001f;border:1px solid #ffb00059;border-radius:999px;align-items:center;padding:1px 7px;font-size:12px;font-weight:700;display:inline-flex}.heard-mobile-toggle{display:none}.sounding-label,.vocab>span,.change-row label>span,.tempo>span,.heard-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:11px}.vocab{align-items:center;gap:10px;display:flex}select{font:inherit;border:1px solid var(--line-strong);background-color:var(--screen);color:var(--ink);box-shadow:inset 0 1px 0 var(--line);appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23e4e4df' stroke-width='1.5'/></svg>");background-position:right 10px center;background-repeat:no-repeat;border-radius:4px;padding:6px 30px 6px 10px;font-size:14px}select:focus-visible,input:focus-visible,button:focus-visible,.bar-card:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.mic-status{color:#b8b9b3;align-items:center;gap:10px;font-size:13px;display:flex}.mic-status-clickable{cursor:pointer;border:1px solid #0000;border-radius:6px;margin:-4px -8px;padding:4px 8px;transition:background .12s,border-color .12s}.mic-status-clickable:hover,.mic-status-clickable:focus-visible{background:var(--panel-deep);border-color:var(--line-strong)}.mic-status strong{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:600}.mic-status-bad{color:var(--red)}.mic-dot{background:var(--dim);border-radius:50%;width:9px;height:9px}.mic-dot-listening{background:var(--green);box-shadow:0 0 8px var(--green)}.mic-dot-starting{background:var(--amber);box-shadow:0 0 8px var(--amber)}.mic-dot-error{background:var(--red);box-shadow:0 0 8px var(--red)}.mic-note{font-family:var(--mono);color:var(--amber);min-width:3ch;font-size:15px;font-weight:600}.mic-cents{font-family:var(--mono);color:var(--muted);min-width:4ch;font-size:12px}.mic-level{background:var(--screen);border:1px solid var(--line);border-radius:3px;width:90px;height:6px;display:inline-block;overflow:hidden}.mic-level i{background:linear-gradient(90deg, var(--green), var(--amber));height:100%;display:block}.settings-error{color:var(--red);font-size:13px}.app-main{flex-direction:column;gap:14px;display:flex}.screen{flex-direction:column;gap:22px;display:flex}.btn{font:inherit;border:1px solid var(--line-strong);border-bottom-color:var(--screen);background:var(--key-face);color:var(--ink);box-shadow:var(--key-shadow);cursor:pointer;border-radius:6px;padding:10px 18px;font-size:15px;font-weight:700}.btn:hover{border-color:var(--dim);border-bottom-color:var(--screen)}.btn:active{box-shadow:0 1px 0 var(--screen);transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:default}.btn-play{color:#062a17;background:linear-gradient(#3fe08a,#1fae62);border-color:#6cf0a8 #6cf0a8 #0d5a31;box-shadow:0 2px #0d5a31,0 0 16px #3ddc8459}.btn-play:hover{border-color:#8cf5bb #8cf5bb #0d5a31}.btn-stop{color:#fff;background:linear-gradient(#ff5a4c,#d1261a);border-color:#ff7a6e #ff7a6e #7a1109;box-shadow:0 2px #7a1109,0 0 16px #ff453a66}.btn-stop:hover{border-color:#ff9a90 #ff9a90 #7a1109}.btn-hold-on{color:#2a1c00;background:linear-gradient(#ffc640,#e09a00);border-color:#ffd36e #ffd36e #7a5300;box-shadow:0 2px #7a5300,0 0 16px #ffb00066}.btn-link{box-shadow:none;color:var(--amber);font-family:var(--mono);letter-spacing:.04em;background:0 0;border:none;padding:4px 0;font-size:12px;font-weight:400}.btn-link:hover{color:var(--ink);border:none}.btn-link:active{box-shadow:none;transform:none}.hint{color:var(--muted);text-align:center;margin:0;font-size:14px}.chips{vertical-align:middle;flex-wrap:wrap;gap:6px;display:inline-flex}.chip{border:1px solid var(--line);background:var(--screen);color:var(--amber);font-family:var(--mono);border-radius:3px;padding:2px 8px;font-size:13px;font-weight:600;display:inline-block}.chips-empty{color:var(--muted)}.heard{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex-direction:column;gap:12px;padding:14px 18px;display:flex}.heard-empty .hint{text-align:left}.heard-header{flex-wrap:wrap;align-items:center;gap:12px;font-size:14px;display:flex}.heard-action{color:var(--muted);font-family:var(--mono);margin-left:auto;font-size:12px}.heard-replace{color:var(--muted);align-items:center;gap:6px;font-size:13px;display:inline-flex}.readings{flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:0;list-style:none;display:flex}.reading{font:inherit;border:1px solid var(--line-strong);border-bottom-color:var(--screen);background:var(--key-face);color:var(--ink);box-shadow:var(--key-shadow);cursor:pointer;border-radius:6px;align-items:center;gap:9px;padding:7px 12px 7px 14px;display:inline-flex}.reading:hover{border-color:var(--dim);border-bottom-color:var(--screen)}.reading:active{box-shadow:0 1px 0 var(--screen);transform:translateY(1px)}.reading-likely{border-color:var(--amber);color:var(--amber);box-shadow:var(--key-shadow), 0 0 16px #ffb00059;background:linear-gradient(#3a2e12,#2b2310);border-bottom-color:#5a3d00}.reading-symbol{font-size:17px;font-weight:700}.likelihood{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;border-radius:3px;padding:3px 8px;font-size:10px}.likelihood-likely{background:var(--amber);color:var(--amber-ink)}.likelihood-possible{background:var(--line-strong);color:var(--ink)}.likelihood-less-common{background:var(--panel-deep);color:var(--muted)}.chart-section{flex-direction:column;gap:10px;display:flex}.chart-head{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.chart-title{font:inherit;background:var(--screen);min-width:220px;color:var(--ink);border:1px solid var(--line-strong);border-radius:6px;flex:0 360px;padding:6px 10px;font-size:18px;font-weight:700}.chart-meta{font-family:var(--mono);color:var(--muted);font-size:12px}.chart-key-group{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:inline-flex}.chart-key{min-width:0;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;display:flex}.chart-key select{font-family:var(--mono);letter-spacing:0;text-transform:none;max-width:100%;padding:4px 26px 4px 8px;font-size:13px}.chart-transpose,.chart-loop-presets{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:inline-flex}.chart-loop-presets .btn,.chart-groove-pill{text-transform:none;letter-spacing:0}.chart-feel input{font:inherit;letter-spacing:0;text-transform:none;background:var(--screen);width:150px;color:var(--ink);border:1px solid var(--line-strong);border-radius:4px;padding:4px 8px;font-size:13px}.chart-panel{flex-direction:column;gap:10px;display:flex}.chart-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.btn-small{padding:6px 12px;font-size:13px}.btn-small[aria-expanded=true]{border-color:var(--amber);color:var(--amber)}.chart-tabs{gap:10px}.chart-tab{min-width:104px;color:var(--muted);flex-direction:column;align-items:center;gap:6px;padding:12px 16px 10px;font-size:13px;font-weight:600;display:flex}.chart-tab:hover{color:var(--ink)}.chart-tab[aria-expanded=true]{border-color:var(--amber);color:var(--amber)}.chart-tab:disabled{opacity:.45;cursor:default}.chart-tab-icon{display:block}.btn-danger{color:var(--red);border-color:var(--red)}.chart-notice{font-family:var(--mono);color:var(--amber);font-size:12px}.chart-error,.persist-error{color:var(--red);font-size:13px}.persist-error{border:1px solid var(--red);border-radius:6px;margin:0 0 12px;padding:8px 12px}.chart-drawer{border:1px solid var(--line);background:var(--panel-deep);border-radius:6px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.chart-drawer.library{gap:14px}.chart-drawer.saved{min-height:180px}.chart-drawer.saved-empty{text-align:center;justify-content:center;align-items:center;gap:6px}.saved-none{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:13px}.saved-empty .hint{max-width:44ch;margin:0}.chart-drawer.library>.hint{margin:0}.library-group h3{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 0 6px;font-size:11px}.library-group ul{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:2px 12px;margin:0;padding:0;list-style:none;display:grid}.saved-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.library-item-row{align-items:flex-start;gap:2px;display:flex}.library-item-row .library-entry{flex:1;min-width:0}.library-star{font:inherit;color:var(--dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex:none;padding:6px 5px;font-size:15px;line-height:1}.library-star:hover,.library-star:focus-visible{color:var(--amber);border-color:var(--line-strong);background:var(--panel)}.library-star-on{color:var(--amber)}.library-entry{font:inherit;text-align:left;width:100%;color:var(--ink);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex-direction:column;gap:1px;padding:5px 8px;display:flex}.library-entry:hover{border-color:var(--line-strong);background:var(--panel)}.library-title{font-size:14px;font-weight:700}.library-meta{font-family:var(--mono);color:var(--muted);font-size:11px}.library-measure{font-family:var(--mono);color:var(--amber);font-size:11px}.library-controls{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.library-filter,.library-sort{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);align-items:center;gap:8px;font-size:11px;display:flex}.library-filter input{font-family:var(--sans);letter-spacing:normal;text-transform:none;color:var(--ink);background:var(--panel);border:1px solid var(--line-strong);border-radius:5px;min-width:220px;padding:4px 8px;font-size:13px}.chart-drawer.melody{flex-direction:column;gap:8px;display:flex}.melody-actions,.melody-file{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.melody-pick input[type=file]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.melody-pick{cursor:pointer;position:relative}.melody-pick:focus-within{outline:2px solid var(--amber);outline-offset:2px}.melody-file-name{font-family:var(--mono);color:var(--muted);font-size:11px}.melody-skip{font-family:var(--mono);color:var(--muted);align-items:center;gap:6px;font-size:11px;display:flex}.melody-skip input{width:64px}.melody-fit{font-family:var(--mono);color:var(--amber);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin-bottom:6px;font-size:12px;display:flex}.melody-sources{color:var(--muted);text-align:center;margin:0 0 6px;padding:0;font-size:12px;line-height:16px;list-style:none}.melody-sources li{margin-top:2px}.melody-sources a{color:var(--ink);border-bottom:1px solid var(--line-strong);text-decoration:none}.melody-sources a:hover,.melody-sources a:focus-visible{color:var(--amber);border-bottom-color:var(--amber)}.melody-warn{color:var(--note-avoid)}.library-classics{flex-wrap:wrap;gap:4px 12px;padding:0 9px 4px 31px;display:flex}.listen{font-family:var(--mono);color:var(--muted);border-bottom:1px solid #0000;align-items:center;gap:5px;font-size:11px;line-height:15px;text-decoration:none;display:inline-flex}.listen:hover,.listen:focus-visible{color:var(--ink);border-bottom-color:var(--line-strong)}.listen-icon{opacity:.8;flex:none}.listen:hover .listen-icon,.listen:focus-visible .listen-icon{opacity:1}.chart-listen{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px;display:flex}.chart-listen-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-size:11px}.chart-listen .listen{color:var(--ink);border-bottom-color:var(--line-strong);font-size:12px}.chart-listen .listen:hover,.chart-listen .listen:focus-visible{border-bottom-color:var(--amber);color:var(--amber)}.chart-listen .listen-icon{opacity:1}.saved-row{align-items:center;gap:8px;display:flex}.saved-row .library-entry{flex:1}.saved-rename{flex:1;align-items:center;gap:8px;display:flex}.saved-rename input{font:inherit;background:var(--screen);color:var(--ink);border:1px solid var(--line-strong);border-radius:6px;flex:1;padding:5px 8px}.chart-text{font-family:var(--mono);background:var(--screen);color:var(--ink);border:1px solid var(--line-strong);resize:vertical;box-sizing:border-box;border-radius:6px;width:100%;padding:8px 10px;font-size:14px;line-height:1.5}.chart-text-actions{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.chart-text-actions .hint{margin:0;font-size:12px}.chart-text-actions code{font-family:var(--mono);color:var(--amber)}.chart-drawer.share{flex-flow:wrap;align-items:center}.share-url{font-family:var(--mono);background:var(--screen);color:var(--ink);border:1px solid var(--line-strong);border-radius:6px;flex:320px;padding:6px 8px;font-size:12px}.chart-drawer.share .hint{flex-basis:100%;margin:0;font-size:12px}.progression{flex-direction:column;gap:12px;padding:2px;display:flex}.bars{grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch;gap:8px;margin:0;padding:0;list-style:none;display:grid}@media (width<=1100px){.band{grid-template-columns:repeat(2,minmax(0,1fr))}}.bars>li{display:flex}.bar-card{border:1px solid var(--line);border-top:5px solid var(--line-strong);background:var(--panel);cursor:pointer;border-radius:6px;flex:1;min-width:0;padding:8px 10px}.bar-section-start{border-left:3px solid #ffb0008c}.bar-inspector-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.bar-selected{border-top-color:var(--amber)}.bar-in-loop:not(.bar-selected){border-top-color:var(--role-chord)}.bar-outside-loop{opacity:.55}.bar-playing{box-shadow:0 0 0 1px var(--amber), 0 0 18px #ffb00040}.bar-head{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.bar-lyric{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;flex-basis:100%;font-size:12px;font-style:italic;overflow:hidden}.bar-lyric-field{color:var(--muted);flex-basis:100%;align-items:center;gap:8px;font-size:13px;display:flex}.bar-lyric-field input{font:inherit;background:var(--screen);min-width:160px;color:var(--ink);border:1px solid var(--line-strong);border-radius:4px;flex:1;padding:5px 8px;font-size:14px}.bar-number{font-family:var(--mono);color:var(--muted);min-width:14px;font-size:12px}.bar-symbol{flex-wrap:wrap;flex:1;gap:0 10px;font-size:22px;font-weight:700;line-height:1.2;display:flex}.bar-chord{border-bottom:2px solid #0000;flex-direction:column;align-items:flex-start;display:inline-flex}.bar-chord-name{line-height:1.1}.bar-chord-numeral{font-family:var(--mono);color:var(--amber);opacity:.85;margin-top:2px;font-size:13px;font-weight:600;line-height:1.1}.bar-symbol:has(.bar-chord+.bar-chord) .bar-chord-numeral{font-size:11px}.bar-symbol:has(.bar-chord+.bar-chord){gap:0 8px;font-size:17px}.bar-symbol:has(.bar-chord+.bar-chord) .bar-chord{cursor:pointer}.bar-selected .bar-chord-selected{border-bottom-color:var(--amber)}.bar-remove{font:inherit;color:var(--dim);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:16px;line-height:1}.bar-remove:hover:not(:disabled){color:var(--red)}.bar-remove:disabled{opacity:.3;cursor:default}.bar-add{min-height:56px;font-family:var(--mono);border:1px dashed var(--line-strong);color:var(--amber);cursor:pointer;background:0 0;border-radius:6px;flex:1;font-size:13px}.bar-add:hover{border-color:var(--amber)}.bar-inspector{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:8px 12px;display:flex}.bar-inspector-toggle{display:none}.bar-inspector-body{display:contents}.change-row{border:1px solid #0000;border-radius:6px;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:4px 8px;display:flex}.change-selected{border-color:var(--line-strong);background:var(--panel-deep)}.change-symbol{min-width:64px;font-size:20px;font-weight:700}.change-numeral{font-family:var(--mono);color:var(--amber);opacity:.85;margin-left:-4px;margin-right:8px;font-size:14px;font-weight:600}.change-row label{align-items:center;gap:6px;display:flex}.change-row select{min-width:0;padding:4px 26px 4px 8px;font-size:13px}.change-split{margin-left:auto;padding:6px 12px;font-size:13px}.dock{z-index:20;background:var(--dock);border-top:2px solid var(--dock-edge);position:fixed;bottom:0;left:0;right:0;box-shadow:0 -1px #08090a,inset 0 1px #e4e4df17,0 -24px 60px #000000b3}.dock-base{background:var(--dock-bar);border-top:1px solid var(--line)}.dock-bar{max-width:1280px;padding:10px max(36px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(36px, env(safe-area-inset-left,0px));flex-wrap:wrap;align-items:center;gap:8px;margin:0 auto;display:flex}.dock-panel{max-width:1280px;max-height:min(60vh,560px);margin:0 auto;padding:14px 40px 16px;position:relative;overflow:auto}.dock-panel-chart{max-height:min(80vh,900px)}.dock-close{border:1px solid var(--line);width:32px;height:32px;color:var(--muted);font:600 15px/1 var(--mono);cursor:pointer;background:0 0;border-radius:6px;padding:0;position:absolute;top:6px;right:8px}.dock-close:hover,.dock-close:focus-visible{color:var(--ink);border-color:var(--line-strong);background:var(--panel-deep)}.position{align-items:center;gap:12px;display:flex}.switches{gap:6px;display:flex}.switch{align-items:center;gap:7px;padding:6px 10px 6px 9px;font-weight:600;display:inline-flex}.switch-led{background:var(--line-strong);width:8px;height:8px;box-shadow:inset 0 0 2px var(--screen);border-radius:50%}.switch-on{color:var(--amber)}.switch-on .switch-led{background:var(--amber);box-shadow:0 0 6px var(--amber)}.dock-tabs{flex:1 0 auto;justify-content:flex-end;gap:4px;display:flex}.dock-tab{align-items:center;gap:6px;padding:6px 8px;display:inline-flex}.dock-icon{opacity:.85;flex:none}.dock-tab-on{border-color:var(--amber);color:var(--amber)}.tempo-group{align-items:center;gap:8px;display:inline-flex}.tempo-steppers{align-items:center;gap:4px;display:inline-flex}.tempo-steppers .btn{text-transform:none;letter-spacing:0}.tempo{align-items:center;gap:10px;display:flex}.tempo input[type=number]{font-family:var(--mono);text-align:center;border:1px solid var(--line);width:66px;color:var(--amber);background:var(--screen);text-shadow:0 0 10px #ffb00099;appearance:textfield;border-radius:4px;padding:4px 6px;font-size:20px;font-weight:600}.tempo input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.tempo input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.tempo input[aria-invalid=true]{border-color:var(--red)}.tempo input[type=range]{width:110px;accent-color:var(--amber)}.tempo-unit{font-family:var(--mono);letter-spacing:.08em;color:var(--muted);font-size:11px}.click{color:var(--ink);align-items:center;gap:6px;font-size:14px;display:flex}input[type=checkbox]{accent-color:var(--amber);width:15px;height:15px;margin:0}.beats{gap:8px;display:flex}.beat{background:var(--screen);border:1px solid #2f3238;border-radius:50%;width:14px;height:14px;box-shadow:inset 0 1px 2px #000}.beat-one{border-color:#6b4a00}.beat-on{background:var(--red);box-shadow:0 0 10px var(--red);border-color:#ff8a80}.transport-bar-label{font-family:var(--mono);color:var(--amber);min-width:90px;font-size:13px}.transport-chorus-label{font-family:var(--mono);color:var(--muted);font-size:12px}.transport-error{color:var(--red);flex-basis:100%;font-size:13px}.band{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.band-feel{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:8px 16px;padding:8px 12px;display:flex}.band-feel-help{color:var(--muted);font-size:12px}.strip{border:1px solid var(--line);border-top:4px solid var(--line-strong);background:var(--panel);border-radius:6px;flex-direction:column;gap:8px;min-width:0;padding:8px 12px 10px;display:flex}.strip-on{border-top-color:var(--amber)}.strip-name{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;font-size:11px}.strip-controls{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.strip-controls select{padding:4px 26px 4px 8px;font-size:13px}.strip-feel{color:var(--muted);flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:12px;display:flex}.strip-volume{color:var(--muted);align-items:center;gap:8px;font-size:12px;display:flex}.strip-volume input{width:90px;accent-color:var(--amber)}.strip-midi{color:var(--muted);margin-left:auto;font-size:12px}.strip-midi-none{color:var(--dim);font-size:11px;font-style:italic}.piano-hint{color:var(--muted);flex-basis:100%;font-size:12px}.piano-error{color:var(--red);flex-basis:100%;font-size:13px}.view-panel{display:block}.notation-controls select{min-width:0;max-width:100%}.target-tone-controls{border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;flex-basis:100%;gap:8px 14px;margin:0;padding:10px 12px;display:flex}.target-tone-controls legend{color:var(--muted);font-size:12px}.target-tone-controls small{color:var(--amber);font-family:var(--mono)}.staff-target-tone{pointer-events:auto}.keys-panel{flex-direction:column;align-items:center;gap:8px;display:flex}.keys-panel .hint{margin:0;font-size:12px}.settings{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px 24px;display:grid}.settings-group{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.settings-group h3,.panel-section h3{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin:0 0 2px;font-size:10px}.settings-group label{color:var(--ink);flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.settings-group label:has(>input[type=checkbox]){flex-wrap:nowrap;align-items:flex-start}.settings-group label:has(>input[type=checkbox])>span{padding-top:1px}.settings-group label>span{color:var(--ink)}.settings-group label:has(>select){grid-template-columns:1fr;gap:4px;width:100%;display:grid}.settings-group label:has(>select)>span{color:var(--muted);font-size:12px}.settings-group select{width:100%;max-width:320px}.midi-output-controls select{min-width:220px}.piano-credit{color:var(--muted);font-size:12px}.settings-group .hint{margin:0;font-size:12px}.btn-select-output{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--fg);font-family:var(--mono);letter-spacing:.04em;cursor:pointer;padding:4px 10px;font-size:11px}.btn-select-output:hover{background:var(--surface-3);border-color:var(--amber)}.mic-calibration{flex-direction:column;gap:8px;margin:4px 0;display:flex}.mic-calibration input[type=range]{width:140px;accent-color:var(--amber)}.mic-calibration-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.calibration-active{color:var(--amber);align-items:center;gap:8px;font-size:12px;display:flex}.calibration-beat{font-family:var(--mono);background:var(--surface);border:1px solid var(--amber);border-radius:4px;padding:2px 6px;font-size:11px;font-weight:600}.mic-monitor-group{background:var(--surface);border:1px solid var(--rim);border-radius:6px;flex-direction:column;gap:8px;margin:6px 0;padding:8px 10px;display:flex}.mic-monitor-controls{flex-direction:column;gap:8px;margin-top:4px;display:flex}.mic-monitor-controls input[type=range]{width:140px;accent-color:var(--amber)}.mic-signal-meters{border:1px solid var(--rim);background:#00000040;border-radius:6px;flex-direction:column;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.mic-meters-title{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:2px;font-size:11px;font-weight:600}.meter-row{grid-template-columns:96px 1fr 44px;align-items:center;gap:8px;display:grid}.meter-label{color:var(--fg);white-space:nowrap;font-size:11px}.meter-track{background:#ffffff0f;border-radius:4px;height:8px;position:relative;overflow:hidden;box-shadow:inset 0 1px 2px #0006}.meter-fill{border-radius:4px;width:0%;height:100%;transition:width 50ms linear}.meter-fill-input{background:linear-gradient(90deg,#10b981 0% 70%,#f59e0b 88%,#ef4444 100%)}.meter-fill-dsp{background:linear-gradient(90deg,#10b981 0% 65%,#f59e0b 82%,#ec4899 100%)}.meter-fill-output{background:linear-gradient(90deg,#3b82f6 0%,#06b6d4 100%)}.meter-badge{letter-spacing:.04em;text-align:center;color:var(--muted);-webkit-user-select:none;user-select:none;background:#ffffff0d;border-radius:3px;padding:1px 4px;font-size:9px;font-weight:700;transition:background .1s,color .1s}.meter-badge.clip.active{color:#fff;background:#ef4444;box-shadow:0 0 8px #ef4444cc}.meter-badge.limit.active{color:#000;background:#f59e0b;box-shadow:0 0 8px #f59e0bcc}.meter-badge.idle{opacity:.4}.staff-section{flex-direction:column;gap:10px;display:flex}.staff-section-guides{grid-template-columns:minmax(0,1fr);grid-template-areas:"head""prompt""staff""wheel";align-items:start;row-gap:10px;display:grid}.staff-section-guides>.play-header{grid-area:head}.staff-section-guides>.play-prompt{grid-area:prompt}.staff-section-guides>.staff-container{grid-area:staff}.staff-section-guides>.guides{flex-flow:wrap;grid-area:wheel;justify-content:center;justify-self:stretch;align-items:flex-start;gap:18px;display:flex}.staff-section-guides>.guides>.pairs{flex-basis:100%;max-width:100%}.keyguide{flex-direction:column;align-items:center;gap:6px;margin:0;display:flex}.keyguide svg{max-width:100%;height:auto}.keyguide-label{font-family:var(--mono);fill:#111214}.keyguide-label-white{fill:#6b6f78}.keyguide-label-black{fill:#b8b9b3}.keyguide-voice-number{font-family:var(--mono);fill:var(--screen)}.keyguide-caption,.staffguide-caption{font-family:var(--mono);height:16px;color:var(--muted);text-align:center;white-space:nowrap;text-overflow:ellipsis;width:100%;max-width:320px;font-size:11px;line-height:16px;overflow:hidden}.fretboard-guide{flex-direction:column;align-items:center;gap:6px;margin:0;display:flex}.fretboard-header,.fretboard-title-row{justify-content:space-between;align-items:center;width:100%;display:flex}.fretboard-title{font-family:var(--mono);letter-spacing:.12em;color:var(--muted);font-size:10px;font-weight:600}.fretboard-selector{border:1px solid var(--control-border);background:var(--control-bg);border-radius:4px;display:inline-flex;overflow:hidden}.fretboard-tab{color:var(--muted);font-family:var(--mono);cursor:pointer;background:0 0;border:none;padding:2px 8px;font-size:10px;transition:background .15s,color .15s}.fretboard-tab:hover{color:var(--screen)}.fretboard-tab.active{background:var(--line-strong);color:var(--screen);font-weight:600}.fretboard-svg{max-width:100%;height:auto;display:block}.fretboard-neck{fill:#141518;stroke:var(--control-border);stroke-width:1px}.fretboard-nut{stroke:#d0d2cc;stroke-width:3.5px;stroke-linecap:round}.fretboard-fret-wire{stroke:var(--line-strong);stroke-width:1.2px}.fretboard-string{stroke:#8e929a;opacity:.6}.fretboard-marker{fill:#555861;opacity:.55}.fretboard-fret-number{font-family:var(--mono);fill:var(--text-dim);font-size:9px}.fretboard-note-circle{transition:transform .15s,filter .15s}.fretboard-note-label{font-family:var(--mono);fill:#111214;pointer-events:none;-webkit-user-select:none;user-select:none}.fretboard-role-chord-tone .fretboard-note-circle{fill:var(--note-chord)}.fretboard-role-tension .fretboard-note-circle{fill:var(--note-tension)}.fretboard-role-avoid .fretboard-note-circle{fill:var(--note-avoid)}.fretboard-role-outside .fretboard-note-circle{fill:var(--note-outside)}.fretboard-root .fretboard-note-circle{stroke:var(--amber)}.fretboard-sounding .fretboard-note-circle{filter:brightness(1.3)drop-shadow(0 0 5px #e4e4dfcc)}.fretboard-sounding.fretboard-role-outside .fretboard-note-circle{filter:brightness(1.2)drop-shadow(0 0 5px #ef4444cc)}.fretboard-sounding-glow{animation:.6s ease-out fretboard-pulse}@keyframes fretboard-pulse{0%{opacity:.65}to{opacity:.3}}@media (prefers-reduced-motion:reduce){.fretboard-sounding-glow{animation:none}}.wheel{flex-direction:column;align-items:center;gap:6px;margin:0;display:flex}.wheel svg{max-width:100%;height:auto}.wheel-label{font-family:var(--mono);fill:var(--ink)}.wheel-label-out{fill:var(--dim)}.wheel-label-root{fill:var(--amber)}.wheel-caption{font-family:var(--mono);height:34px;color:var(--muted);text-align:center;flex-direction:column;gap:2px;width:100%;max-width:320px;font-size:11px;line-height:16px;display:flex}.wheel-role,.wheel-moves{white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:block;overflow:hidden}.wheel-role{color:var(--ink)}.wheel-key-away{color:var(--amber)}.wheel-hearing{color:var(--ink)}.wheel-point-live{cursor:pointer}@media (hover:hover){.wheel-point-live:hover text{fill:var(--amber)}}.wheel-pressed text{fill:var(--amber)}.wheel-lit .wheel-glow{animation:.6s ease-out wheel-pulse}@keyframes wheel-pulse{0%{opacity:.6}to{opacity:.3}}@media (prefers-reduced-motion:reduce){.wheel-lit .wheel-glow{animation:none}}.wheel-polygon{pointer-events:all;cursor:default;transition:opacity .14s}.wheel-polygon:hover{filter:brightness(1.2)}.wheel-polygon-tritone line{transition:stroke-width .12s}.wheel-polygon-augmented .wheel-polygon-shape{fill:#3b82f61f;stroke:var(--note-chord);stroke-width:1.5px;stroke-linejoin:round;filter:drop-shadow(0 0 6px #3b82f673)}.wheel-polygon-diminished .wheel-polygon-shape{fill:#f59e0b1a;stroke:var(--amber);stroke-width:1.5px;stroke-linejoin:round;filter:drop-shadow(0 0 6px #f59e0b66)}.wheel-polygon-whole-tone .wheel-polygon-shape{fill:#10b98114;stroke:var(--note-tension);stroke-width:1.5px;stroke-dasharray:4 3;stroke-linejoin:round;filter:drop-shadow(0 0 6px #10b98159)}.key-cue{white-space:nowrap;text-overflow:ellipsis;min-width:0;height:20px;line-height:20px;font-family:var(--mono);color:var(--muted);flex-basis:100%;margin:0;font-size:13px;overflow:hidden}.key-cue-now{color:var(--amber);font-weight:700}@media (width<=720px){.key-cue{white-space:normal;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;height:40px;display:-webkit-box}}.play-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.play-now{flex-wrap:wrap;align-items:baseline;gap:14px;display:flex}.play-symbol{margin:0;font-size:40px;font-weight:700;line-height:1}.play-name{font-family:var(--mono);color:var(--muted);font-size:13px}.play-prompt{color:var(--muted);margin:0;font-size:14px}.staff-container{background:var(--panel-deep);border:1px solid var(--line);border-radius:6px;width:100%;padding:12px 10px;overflow:auto;box-shadow:inset 0 0 40px #00000080}.staff{display:block}.staff-label{font-family:var(--mono);font-size:15px;font-weight:600}.staff-marking{font-family:var(--mono);letter-spacing:.02em;font-size:12px;font-weight:600}.staff-title{letter-spacing:-.01em;font-family:inherit;font-weight:700}.staff-lyric{font-style:italic}.staff-held-scales-box{fill:#111214d1;stroke:var(--amber);stroke-width:1px;stroke-opacity:.45}.staff-held-scales-divider{stroke:var(--line-strong);stroke-width:1px;stroke-dasharray:2 2}.staff-held-scales-heading{font-family:var(--mono);fill:var(--amber);letter-spacing:.02em;font-weight:600}.staff-held-scales-degree{font-family:var(--mono);font-weight:600}.staff-error{color:var(--red);border:1px solid var(--red);border-radius:6px;padding:16px}.playhead{pointer-events:none}.legend{color:var(--muted);flex-wrap:wrap;gap:16px;font-size:12px;display:flex}.legend-item{align-items:center;gap:7px;display:inline-flex}.swatch{border-radius:50%;width:12px;height:12px;display:inline-block}.vkeyboard{align-items:center;gap:10px;display:flex}.vkeys{-webkit-user-select:none;user-select:none;touch-action:none;height:120px;position:relative}.vkeyboard-narrow{--white-key-width:min(52px, calc((100vw - 120px) / 8));--black-key-width:calc(var(--white-key-width) * .62)}.vkeyboard-narrow .vkeys,.vkeyboard-narrow .vkey-white{height:150px}.vkeyboard-narrow .vkey-black{height:92px}.vkey-octave{padding:10px 12px;font-size:20px;line-height:1}.vkey{cursor:pointer;font:inherit;border:1px solid #0c0d0f;flex-direction:column;justify-content:flex-end;align-items:center;gap:2px;padding:0 0 6px;display:flex;position:absolute;top:0}.vkey-white{width:var(--white-key-width);color:#6b6f78;background:linear-gradient(#f2f1ec,#dcdbd4);border-radius:0 0 4px 4px;height:120px}.vkey-black{width:var(--black-key-width);color:#b8b9b3;z-index:1;background:linear-gradient(#34373d,#1c1e22);border-radius:0 0 3px 3px;height:74px}.vkey-down.vkey-white{color:#3a2e12;background:linear-gradient(#ffd47a,#ffb000)}.vkey-down.vkey-black{color:#ffe1a3;background:linear-gradient(#a56f00,#7a5200)}.vkey-label{font-family:var(--mono);font-size:10px}.vkey-hint{font-family:var(--mono);text-transform:uppercase;font-size:11px;font-weight:600}@media (pointer:coarse){.fine-pointer-only{display:none}}@media (width<=720px){.app{padding:calc(10px + env(safe-area-inset-top,0px)) max(12px, env(safe-area-inset-right,0px)) calc(var(--dock-height,120px) + 16px) max(12px, env(safe-area-inset-left,0px));gap:14px}.app-header{z-index:15;margin:calc(-10px - env(safe-area-inset-top,0px)) calc(-1 * max(12px, env(safe-area-inset-right,0px))) 0 calc(-1 * max(12px, env(safe-area-inset-left,0px)));padding:calc(8px + env(safe-area-inset-top,0px)) max(14px, env(safe-area-inset-right,0px)) 8px max(14px, env(safe-area-inset-left,0px));-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line-strong);background:#111214eb;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"brand status status""brand sounding chord";gap:2px 10px;position:sticky;top:0;box-shadow:0 4px 16px #00000059}.app-header:has(.mic-status){grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"brand status status""brand mic mic""brand sounding chord"}.header-bar-stepper{display:inline-flex}.brand img{height:30px;max-height:30px}.midi-status{white-space:nowrap;text-overflow:ellipsis;gap:6px;min-width:0;font-size:11px;overflow:hidden}.sounding{gap:6px;min-width:0;min-height:20px;overflow:hidden}.mobile-widget-bar{top:calc(52px + env(safe-area-inset-top,0px));z-index:14;margin:-14px calc(-1 * max(12px, env(safe-area-inset-right,0px))) 0 calc(-1 * max(12px, env(safe-area-inset-left,0px)));padding:6px max(12px, env(safe-area-inset-right,0px));-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line);background:#141518eb;flex-direction:column;gap:6px;display:flex;position:sticky}.mobile-widget-pills{scrollbar-width:none;align-items:center;gap:6px;display:flex;overflow-x:auto}.mobile-widget-pills::-webkit-scrollbar{display:none}.mobile-widget-pill{font-family:var(--mono);letter-spacing:.04em;color:var(--muted);background:var(--panel);border:1px solid var(--line-strong);cursor:pointer;touch-action:manipulation;white-space:nowrap;border-radius:999px;flex:none;padding:3px 10px;font-size:11px;font-weight:600}.mobile-widget-pill-active,.mobile-widget-pill-all{color:var(--ink);border-color:var(--amber);background:#ffb0001f}.mobile-widget-pill-focused{color:var(--amber-ink);background:var(--amber);border-color:var(--amber)}.mobile-widget-add{margin-left:auto;padding:2px 9px;font-size:13px}.mobile-widget-picker{border-top:1px solid var(--line);flex-wrap:wrap;gap:6px;padding:6px 0 2px;display:flex}.mobile-widget-chip{font-family:var(--mono);color:var(--muted);background:var(--screen);border:1px solid var(--line);cursor:pointer;touch-action:manipulation;border-radius:999px;padding:3px 9px;font-size:11px}.mobile-widget-chip-on{color:var(--amber);border-color:var(--amber);background:#ffb0001f}.heard,.chart-section,.tension-contour,.roadmap,.scalemap,.guides,.staff-container,.phrase-explorer{scroll-margin-top:96px}.heard{padding:10px 12px}.heard.heard-empty[data-mobile-compact=true]{padding:6px 12px}.heard.heard-empty[data-mobile-compact=true] .hint{white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.heard-mobile-toggle{width:100%;color:var(--ink);font:inherit;text-align:left;cursor:pointer;touch-action:manipulation;background:0 0;border:none;justify-content:space-between;align-items:center;gap:8px;padding:2px 0;display:flex}.heard-mobile-summary{min-width:0;font-family:var(--mono);color:var(--amber);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12px;overflow:hidden}.heard-mobile-chevron{color:var(--muted);font-size:12px}.heard[data-mobile-compact=true] .heard-body{display:none}.heard[data-mobile-compact=false] .heard-mobile-toggle{border-bottom:1px solid var(--line);margin-bottom:6px;padding-bottom:4px}.chart-head{gap:8px}.chart-title{flex-basis:100%;min-width:0;max-width:none}.chart-drawer.library{padding:8px}.bars{scrollbar-gutter:stable;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;max-height:11.5rem;overflow-y:auto}.roadmap-rows{scrollbar-gutter:stable;max-height:14rem;overflow-y:auto}.screen-play[data-mobile-focus-count="1"] .bars,.screen-play[data-mobile-focus-count="1"] .roadmap-rows,.screen-play[data-mobile-focus-count="1"] .staff-container{max-height:calc(100svh - var(--dock-height,120px) - 210px)}.tension-strip{scrollbar-width:none;overflow-x:auto}.tension-strip::-webkit-scrollbar{display:none}.tension-svg{min-width:max(100%, calc(var(--tension-bars,1) * 24px))}.scalemap{--map-label:130px}.scalemap-scroll{scrollbar-width:none;overflow-x:auto}.scalemap-scroll::-webkit-scrollbar{display:none}.scalemap-row,.scalemap-ruler{min-width:max(100%,420px)}.scalemap-label{z-index:1;background:var(--panel-deep);position:sticky;left:0}.bar-card{border-top-width:4px;padding:14px 4px 5px 6px;position:relative}.bar-head{gap:0}.bar-number{min-width:0;font-size:9px;position:absolute;top:1px;left:5px}.bar-symbol{gap:0 5px;font-size:16px;line-height:1.15}.bar-symbol:has(.bar-chord+.bar-chord){font-size:13px}.bar-chord-numeral{font-size:11px}.bar-symbol:has(.bar-chord+.bar-chord) .bar-chord-numeral{font-size:9px}.bar-card .bar-remove{padding:2px 5px;display:none;position:absolute;top:-2px;right:0}.bar-selected .bar-remove{display:block}.bar-add{min-height:44px;font-size:12px}.bar-inspector{flex-direction:column;gap:0;padding:2px 6px;display:flex}.bar-inspector-toggle{width:100%;min-height:38px;color:var(--ink);cursor:pointer;font:inherit;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;padding:6px;display:flex}.bar-inspector-toggle-label{align-items:center;gap:8px;font-size:13px;display:flex}.bar-inspector-summary{color:var(--amber);font-family:var(--mono);font-size:13px;font-weight:600}.bar-inspector-toggle-action{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;align-items:center;gap:4px;font-size:12px;font-weight:600;display:flex}.bar-inspector-chevron{font-size:12px;line-height:1}.bar-inspector:not(.is-open) .bar-inspector-body{display:none}.bar-inspector.is-open .bar-inspector-body{border-top:1px solid var(--line);flex-direction:column;gap:6px;width:100%;margin-top:2px;padding:8px 2px 4px;display:flex}.change-row{gap:6px 8px;padding:4px 2px}.change-row label>span{display:none}.change-row select{flex:auto;min-width:0;max-width:100%}.change-symbol{flex-basis:100%;min-width:0}.change-split{margin-left:0}.dock-bar{padding:8px max(12px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(12px, env(safe-area-inset-left,0px));gap:8px 12px}.dock-panel{max-height:55vh;padding:10px 44px 10px 12px}.dock-panel-chart{max-height:72vh}.dock-close{background:var(--panel-deep);border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:18px;display:flex;top:8px;right:10px}.chart-tab{flex:auto;min-width:0;padding:10px 8px 8px;font-size:12px}.dock-bar>.tempo-group,.dock-bar>.tempo{flex-wrap:wrap;flex:auto;order:1;gap:6px;min-width:0}.dock-bar>.click{order:1}.tempo{flex:auto;gap:6px;min-width:0}.tempo input[type=number]{width:56px;padding:3px 4px;font-size:17px}.tempo input[type=range]{flex:56px;width:56px;min-width:52px}.tempo-steppers{gap:3px}.tempo-steppers .btn{padding:4px 7px;font-size:11px}.switch{padding:6px 8px 6px 7px}.position{gap:8px}.beats{gap:6px}.transport-bar-label{min-width:0}.dock-tabs{border-top:1px solid #ffffff14;flex-basis:100%;order:2;justify-content:space-around;gap:2px;padding-top:4px}.dock-tabs .btn{min-height:48px;box-shadow:none;color:var(--muted);background:0 0;border:none;border-radius:8px;flex-direction:column;flex:1;gap:3px;padding:6px 2px 4px;font-size:11px}.dock-tabs .btn:hover{color:var(--ink);background:#ffffff0a}.dock-tabs .dock-tab-on{color:var(--amber);background:#ffb3001f}.dock-icon{width:19px;height:19px}.band{grid-template-columns:1fr}.staff-section-guides{grid-template-columns:minmax(0,1fr);grid-template-areas:"head""prompt""wheel""staff"}.staff-section-guides>.guides{flex-flow:column;justify-self:center;align-items:center;gap:10px;width:100%;min-width:0}.guides-tabs{justify-content:center;align-items:center;gap:6px;width:100%;display:flex}.guides-tab{font-family:var(--mono);color:var(--muted);background:var(--panel);border:1px solid var(--line-strong);cursor:pointer;touch-action:manipulation;border-radius:999px;padding:3px 10px;font-size:11px;font-weight:600}.guides-tab-on{color:var(--amber);border-color:var(--amber);background:#ffb0001f}.guides-carousel{scroll-snap-type:x mandatory;scrollbar-width:none;flex-flow:row;width:100%;display:flex;overflow:auto hidden}.guides-carousel::-webkit-scrollbar{display:none}.guides-slide{scroll-snap-align:center;flex:0 0 100%;justify-content:center;align-items:flex-start;width:100%;min-width:0;display:flex}.staff-section-guides>.guides>.pairs{flex-basis:auto;max-width:320px}.wheel svg{width:200px}.wheel,.keyguide,.fretboard-guide,.pairs{width:100%}.play-header{flex-wrap:wrap}.play-now{flex-direction:column;align-items:flex-start;gap:4px;width:100%}.play-name,.play-prompt{white-space:nowrap;text-overflow:ellipsis;max-width:100%;overflow:hidden}.play-symbol{font-size:34px}.staff-container{padding:8px 4px}.legend{flex-wrap:wrap;gap:8px 16px}.tension-legend,.tension-role-desc{display:none}}@media (width<=340px){.tempo>span:first-child{display:none}}.crash{border:1px solid var(--red);background:var(--panel);border-radius:8px;flex-direction:column;gap:12px;max-width:720px;margin:48px auto;padding:24px 28px;display:flex}.crash-title{color:var(--red);margin:0;font-size:22px}.crash-message{font-family:var(--mono);word-break:break-word;margin:0;font-size:14px}.crash-report{color:var(--muted);margin:0;font-size:13px}.crash-actions{flex-wrap:wrap;gap:8px;display:flex}.crash-details summary{cursor:pointer;color:var(--muted);font-size:13px}.crash-details pre{font-family:var(--mono);white-space:pre-wrap;word-break:break-word;background:var(--screen);border-radius:6px;max-height:320px;padding:10px 12px;font-size:11px;line-height:1.4;overflow:auto}.crash .hint{margin:0}.error-banner{border:1px solid var(--red);background:var(--panel);border-radius:6px;flex-direction:column;gap:6px;padding:8px 12px;display:flex}.error-banner-item{flex-wrap:wrap;align-items:baseline;gap:6px 12px;margin:0;font-size:13px;display:flex}.error-banner-message{font-family:var(--mono);color:var(--red);word-break:break-word}.error-banner-status{color:var(--muted)}.pairs{flex-direction:column;align-items:center;gap:6px;width:100%;max-width:320px;display:flex}.pairs-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-size:10px;line-height:14px}.pairs-chips{scrollbar-width:none;box-sizing:border-box;flex-wrap:nowrap;gap:6px;width:100%;height:26px;padding:0 2px;display:flex;overflow:auto hidden}.pairs-chips::-webkit-scrollbar{display:none}.pairs-chips>:first-child{margin-left:auto}.pairs-chips>:last-child{margin-right:auto}.pairs-none{font-family:var(--mono);color:var(--dim);white-space:nowrap;font-size:12px;line-height:24px}.pair-chip{font-family:var(--mono);box-sizing:border-box;height:24px;color:var(--muted);background:var(--panel);border:1px solid var(--line-strong);cursor:pointer;touch-action:manipulation;white-space:nowrap;border-radius:999px;flex:none;padding:3px 10px;font-size:12px;line-height:16px}.pair-chip:hover{color:var(--ink);border-color:var(--muted)}.pair-chip-on{color:var(--amber-ink);background:var(--amber);border-color:var(--amber)}.pair-chip:focus-visible{outline:2px solid var(--amber);outline-offset:2px}.keyguide-dim,.wheel-dim{opacity:.28}.roadmap{border:1px solid var(--line);background:var(--panel-deep);border-radius:8px;margin-top:12px;padding:10px 12px 8px}.roadmap-title{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 0 8px;font-size:11px;font-weight:400}.roadmap-home{letter-spacing:0;text-transform:none;color:var(--ink);margin-left:12px;font-size:12px}.roadmap-rows{width:100%}.roadmap-rows svg{display:block}.roadmap-bar rect{fill:#0000;stroke:var(--line);stroke-width:1px;cursor:pointer}.roadmap-bar:hover rect{fill:#ffffff08}.roadmap-bar-active rect{fill:var(--measure-highlight);stroke:var(--amber)}.roadmap-bar-number{font-family:var(--mono);fill:var(--muted);pointer-events:none;font-size:9px}.roadmap-key{pointer-events:visiblePainted}.roadmap-band{fill:color-mix(in oklab, var(--band) 30%, var(--panel-deep));stroke:var(--band);stroke-width:1.5px}.roadmap-band-minor{pointer-events:none}.roadmap-stripe{fill:#0000004d}.roadmap-key-home .roadmap-band{stroke-width:2.5px}.roadmap-key-passing .roadmap-band{fill:color-mix(in oklab, var(--band) 12%, var(--panel-deep));stroke-dasharray:4 3}.roadmap-key-name{font-family:var(--mono);fill:var(--ink);pointer-events:none;font-size:12px;font-weight:700}.roadmap-key-how{fill:var(--muted);font-weight:400}.roadmap-visit rect:first-of-type{fill:color-mix(in oklab, var(--band) 28%, var(--panel-deep));stroke:var(--band);stroke-width:1px;stroke-dasharray:3 2}.roadmap-visit text{font-family:var(--mono);fill:var(--ink);pointer-events:none;font-size:9.5px}.roadmap-label{font-family:var(--mono);fill:var(--muted);pointer-events:none;font-size:10px}.roadmap-label-dominant{fill:var(--ink)}.roadmap-chord{font-family:var(--mono);fill:var(--ink);pointer-events:none;font-size:13px;font-weight:700}.roadmap-chord-active{fill:var(--amber)}.roadmap-bracket{fill:none;stroke:var(--muted);stroke-width:1.5px}.roadmap-arrow{fill:none;stroke:var(--ink);stroke-width:1.5px}.roadmap-arrow-tritone{stroke-dasharray:5 3}.roadmap-arrow-backdoor{stroke-dasharray:1.5 3;stroke-linecap:round}.roadmap-head{fill:var(--ink)}.roadmap-wrap{font-family:var(--mono);fill:var(--muted);font-size:10px}.roadmap-table{border-collapse:collapse;width:100%;margin-top:8px;font-size:13px}.roadmap-table th{text-align:left;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line);padding:4px 8px;font-size:10px;font-weight:400}.roadmap-table td{border-bottom:1px solid var(--line);vertical-align:top;padding:5px 8px}.roadmap-table td:first-child,.roadmap-table td:last-child{font-family:var(--mono);white-space:nowrap}.roadmap-table tbody tr{cursor:pointer}.roadmap-table tbody tr:hover{background:#ffffff08}.roadmap-row-passing td{color:var(--muted)}.roadmap-row-visit td{color:var(--muted);font-size:12px}.roadmap-row-visit td:nth-child(2){padding-left:22px}.roadmap-swatch-visit{opacity:.8;width:8px;height:8px}.roadmap-row-active td{background:var(--measure-highlight)}.roadmap-swatch{vertical-align:baseline;border-radius:2px;width:10px;height:10px;margin-right:6px;display:inline-block}.roadmap-tag{border:1px solid var(--line-strong);font-family:var(--mono);color:var(--muted);border-radius:3px;margin-left:6px;padding:0 5px;font-size:10px}@media (width<=720px){.roadmap-table td:last-child{white-space:normal}.roadmap-table th:nth-child(3),.roadmap-table td:nth-child(3){display:none}}.scalemap{border:1px solid var(--line);background:var(--panel-deep);--map-label:250px;border-radius:8px;margin-top:12px;padding:10px 12px 8px}.scalemap-head{flex-wrap:wrap;align-items:baseline;gap:14px;margin-bottom:8px;display:flex}.scalemap-name{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:11px}.scalemap-key{font-family:var(--mono);color:var(--ink);font-size:12px}.scalemap-away{color:var(--amber)}.scalemap-legend{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;gap:14px;margin-left:auto;font-size:11px;display:flex}.scalemap-legend span{align-items:center;gap:6px;display:inline-flex}.scalemap-swatch{border-radius:2px;width:14px;height:10px;display:inline-block}.scalemap-fits{background:var(--note-tension)}.scalemap-rub-avoid{background-color:var(--screen);background-image:repeating-linear-gradient(135deg, var(--note-avoid) 0 3px, transparent 3px 6px)}.scalemap-clash{background:var(--screen);box-shadow:inset 0 0 0 1px var(--line-strong)}.scalemap-rows{flex-direction:column;gap:4px;display:flex}.scalemap-row{height:22px;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:0;display:flex}.scalemap-label{flex:0 0 var(--map-label);font-family:var(--mono);color:var(--muted);white-space:nowrap;justify-content:space-between;gap:8px;padding-left:10px;font-size:12px;display:flex;position:relative;overflow:hidden}.scalemap-scale{text-overflow:ellipsis;overflow:hidden}.scalemap-label:before{content:"";background:0 0;border-radius:2px;width:3px;position:absolute;top:4px;bottom:4px;left:0}.scalemap-row-on .scalemap-label{color:var(--ink)}.scalemap-row-on .scalemap-label:before{background:var(--amber)}.scalemap-reach{color:var(--dim)}.scalemap-row-on .scalemap-reach{color:var(--amber)}.scalemap-row-out{opacity:.45}.scalemap-cells{flex:1;gap:2px;min-width:0;height:100%;display:flex}.scalemap-cell{background:var(--screen);min-width:0;box-shadow:inset 0 0 0 1px var(--line);border-radius:2px;flex-grow:1;flex-basis:0}.scalemap-cell-fits{box-shadow:none;opacity:.85}.scalemap-cell-fits[data-role=chord-tone]{background:var(--note-chord)}.scalemap-cell-fits[data-role=tension]{background:var(--note-tension)}.scalemap-cell-rub{box-shadow:none;opacity:.6;background-color:var(--screen);background-image:repeating-linear-gradient(135deg, var(--note-avoid) 0 2px, transparent 2px 6px)}.scalemap-cell-rub[data-role=outside]{background-image:repeating-linear-gradient(135deg, var(--note-outside) 0 2px, transparent 2px 6px)}.scalemap-row-on .scalemap-cell-fits{opacity:1}.scalemap-row-on .scalemap-cell-rub{opacity:.8}.scalemap-cell-active{outline:2px solid var(--amber);outline-offset:1px}.scalemap-ruler{align-items:center;gap:10px;height:14px;margin-top:4px;display:flex}.scalemap-ruler .scalemap-cells{gap:2px}.scalemap-tick{min-width:0;font-family:var(--mono);color:var(--dim);flex-grow:1;flex-basis:0;font-size:10px}.keyguide-scale{font-family:var(--mono);fill:var(--muted);text-anchor:end;font-size:10px}.keyguide-row-best .keyguide-scale{fill:var(--ink)}.keyguide-scale-bars{fill:var(--dim);font-size:9px}.keyguide-mark-unused{fill:var(--screen);stroke:var(--line);stroke-width:.8px;opacity:.7}.keyguide-bar{fill:var(--panel-deep);stroke:var(--line);stroke-width:.8px}.keyguide-bar-fits{stroke:none;opacity:.9}.keyguide-bar-fits[data-role=chord-tone]{fill:var(--note-chord)}.keyguide-bar-fits[data-role=tension]{fill:var(--note-tension)}.keyguide-bar-rub{stroke:none;opacity:.55;fill:var(--note-avoid)}.keyguide-bar-rub[data-role=outside]{fill:var(--note-outside)}.keyguide-bar-now{fill:var(--amber);fill-opacity:.16;stroke:var(--amber);stroke-width:1.2px}.staff-thread{opacity:.55;animation:.16s ease-out thread-in}@keyframes thread-in{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.staff-thread{animation:none}}.staff-guide-tone{opacity:1}.staff-guide-tone text{-webkit-user-select:none;user-select:none}.staff-guide-tone-bridge{opacity:.75}.staff-guide-tone-bridge:hover{opacity:1}.swatch-ribbon{background:var(--note-chord);border-radius:2px;box-shadow:0 0 6px #3b82f699}.staff-approach-bracket{cursor:default;opacity:.95;transition:opacity .12s}.staff-approach-bracket:hover{opacity:1}.staff-approach-bracket .approach-bracket-line{stroke:var(--note-chord);stroke-width:1.5px;fill:none;stroke-linecap:round;stroke-linejoin:round}.staff-approach-bracket .approach-bracket-arrow{fill:var(--note-chord)}.staff-approach-bracket .approach-bracket-badge{fill:var(--panel-deep);stroke:var(--note-chord);stroke-width:1px;filter:drop-shadow(0 1px 3px #0006)}.staff-approach-bracket .approach-bracket-text{fill:var(--ink);font-family:var(--font-mono);letter-spacing:.03em;-webkit-user-select:none;user-select:none;pointer-events:none;font-size:8.5px;font-weight:600}.tension-contour{border:1px solid var(--line);background:var(--panel-deep);border-radius:8px;flex-direction:column;gap:8px;margin-top:12px;padding:10px 12px;display:flex}.tension-head{white-space:nowrap;align-items:center;gap:12px;min-height:22px;line-height:22px;display:flex;overflow:hidden}.tension-name{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);flex-shrink:0;font-size:11px}.tension-active{font-family:var(--mono);white-space:nowrap;align-items:center;gap:8px;min-width:0;font-size:12px;display:inline-flex;overflow:hidden}.tension-summary{font-family:var(--mono);color:var(--muted);font-size:12px}.tension-chord-name{font-family:var(--mono);color:var(--ink);font-size:13px;font-weight:600}.tension-badge{font-size:11px;font-weight:500;font-family:var(--mono);border-radius:3px;padding:1px 6px;line-height:1.3}.tension-bar-badge{background:var(--line);color:var(--muted)}.tension-badge-tonic{color:var(--note-chord);background:#3b82f629;border:1px solid #3b82f666}.tension-badge-subdominant{color:var(--note-tension);background:#10b98129;border:1px solid #10b98166}.tension-badge-dominant{color:var(--note-avoid);background:#f59e0b29;border:1px solid #f59e0b66}.tension-badge-secondary{color:#c084fc;background:#a855f72e;border:1px solid #a855f766}.tension-badge-altered{color:var(--note-outside);background:#ef44442e;border:1px solid #ef444473}.tension-role-desc{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.tension-percent{color:var(--amber);flex-shrink:0;font-size:12px;font-weight:600}.tension-legend{font-family:var(--mono);color:var(--muted);white-space:nowrap;flex-shrink:0;gap:14px;margin-left:auto;font-size:11px;display:flex}.tension-legend span{align-items:center;gap:6px;display:inline-flex}.tension-swatch{border-radius:2px;width:14px;height:10px;display:inline-block}.tension-swatch-tonic{background:var(--note-chord)}.tension-swatch-subdominant{background:var(--note-tension)}.tension-swatch-dominant{background:var(--note-avoid)}.tension-swatch-altered{background:var(--note-outside)}.tension-strip{background:#00000038;border:1px solid #ffffff0a;border-radius:4px;width:100%;position:relative;overflow:hidden}.tension-svg{width:100%;height:72px;display:block}.tension-grid-baseline{stroke:var(--line);stroke-width:1px}.tension-grid-bar{stroke:var(--line);stroke-width:1px;stroke-dasharray:2 3;opacity:.5}.tension-ruler-tick{stroke:var(--line-strong);stroke-width:1px}.tension-bar-text{font-family:var(--mono);fill:var(--muted);-webkit-user-select:none;user-select:none;font-size:9px}.tension-active-col{fill:var(--amber);fill-opacity:.08}.tension-fill-path{transition:opacity .12s}.tension-line-glow{stroke-width:4px;stroke-linecap:round;stroke-linejoin:round;opacity:.35;filter:drop-shadow(0 0 4px var(--amber))}.tension-line-core{stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;opacity:.95}.tension-cursor-line{stroke:var(--amber);stroke-width:1.5px;opacity:.85}.tension-cursor-dot{fill:var(--amber);stroke:#fff;stroke-width:1.5px;filter:drop-shadow(0 0 6px var(--amber))}.tension-bar-hit{cursor:pointer}.tension-bar-hit:hover{fill:#ffffff08}.tension-bar-hit:focus-visible{outline:1px solid var(--focus)}.metric-matrix{border:1px solid var(--line);background:var(--panel-deep);border-radius:8px;flex-direction:column;gap:10px;margin-top:14px;padding:10px 14px;display:flex}.metric-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.metric-head-left{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.metric-title{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);flex-shrink:0;font-size:11px}.metric-badge{font-size:11px;font-weight:500;font-family:var(--mono);border-radius:4px;padding:2px 7px;line-height:1.3}.metric-bar-badge{background:var(--line);color:var(--muted)}.metric-chord-badge{color:var(--note-chord);background:#3b82f629;border:1px solid #3b82f659;font-weight:600}.metric-meter-badge{background:var(--line);color:var(--ink)}.metric-head-right{align-items:center;gap:8px;display:flex}.metric-score-pill{font-size:11px;font-family:var(--mono);border-radius:12px;padding:2px 8px;font-weight:600}.metric-score-high{color:var(--note-tension);background:#10b98129;border:1px solid #10b98166}.metric-score-med{color:var(--note-avoid);background:#f59e0b29;border:1px solid #f59e0b66}.metric-score-low{color:var(--note-outside);background:#ef444429;border:1px solid #ef444466}.metric-score-empty{background:var(--line);color:var(--muted);border:1px solid #0000}.metric-lanes{flex-direction:column;gap:8px;display:flex}.metric-lane{background:#0000001f;border:1px solid #ffffff0a;border-radius:6px;grid-template-columns:110px minmax(0,1fr);align-items:stretch;gap:10px;min-width:0;padding:6px 8px;display:grid}@media (width<=600px){.metric-lane{grid-template-columns:80px minmax(0,1fr)}}.metric-lane-header{flex-direction:column;justify-content:center;gap:2px;display:flex}.metric-lane-title{font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink);font-size:11px;font-weight:700}.metric-lane-caption{color:var(--muted);font-size:10px;font-family:var(--mono)}.metric-lane-slots{grid-auto-columns:minmax(min-content,1fr);grid-auto-flow:column;gap:6px;min-width:0;display:grid;overflow-x:auto}.metric-slot{background:var(--surface);border:1px solid var(--line);border-radius:5px;flex-direction:column;gap:4px;min-height:48px;padding:6px 8px;transition:border-color .15s,background .15s;display:flex}.metric-slot-current{border-color:var(--accent);background:#3b82f614;box-shadow:0 0 8px #3b82f640}.metric-slot-head{justify-content:space-between;align-items:center;gap:4px;display:flex}.metric-slot-num{font-family:var(--mono);color:var(--ink);font-size:11px;font-weight:700}.metric-slot-tag{font-family:var(--mono);text-transform:uppercase;letter-spacing:.05em;border-radius:3px;padding:1px 4px;font-size:9px;font-weight:600}.metric-tag-strong{color:var(--note-chord);background:#3b82f62e}.metric-tag-medium{color:var(--muted);background:#94a3b826}.metric-tag-weak{color:var(--muted);opacity:.8;background:#94a3b814}.metric-slot-notes{flex-wrap:wrap;align-items:center;gap:4px;min-height:22px;display:flex}.metric-empty-dash{color:var(--muted);font-family:var(--mono);opacity:.4;font-size:11px}.metric-pill{border:1px solid var(--line);background:var(--panel-deep);font-family:var(--mono);border-radius:4px;align-items:center;gap:5px;padding:2px 6px;font-size:11px;line-height:1.2;display:inline-flex}.metric-pill-rub,.metric-pill-clash{background:#ef44441f}.metric-note-pitch{color:var(--ink);font-weight:700}.metric-note-swatch{border-radius:50%;flex-shrink:0;width:7px;height:7px;display:inline-block}.metric-verdict-badge{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:9px}.metric-foot{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding-top:4px;display:flex}.metric-advice{font-family:var(--mono);color:var(--muted);flex:240px;font-size:11px;line-height:1.4}.metric-stats{font-family:var(--mono);color:var(--muted);align-items:center;gap:12px;font-size:11px;display:flex}.metric-stat strong{color:var(--ink)}.metric-stat-warn strong{color:var(--note-avoid)}.dock-panel-tuner{max-height:min(75vh,680px)}.tuner-panel{flex-direction:column;align-items:center;gap:14px;max-width:680px;margin:0 auto;padding:4px 0 16px;display:flex}.tuner-top-bar{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;width:100%;padding-bottom:12px;display:flex}.tuner-modes{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tuner-mode-tab{color:var(--muted);background:var(--panel-deep);border:1px solid var(--line);border-radius:5px;padding:4px 10px;font-size:12px;font-weight:600}.tuner-mode-tab:hover{color:var(--ink);border-color:var(--line-strong)}.tuner-mode-tab-on{color:var(--amber);border-color:var(--amber);background:#ffb00014}.tuner-calib{font-family:var(--mono);align-items:center;gap:6px;font-size:12px;display:flex}.tuner-calib-label{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:11px;font-weight:600}.tuner-calib-btn{padding:2px 8px;font-size:14px;font-weight:700;line-height:1}.tuner-calib-hz{color:var(--ink);text-align:center;min-width:90px;padding:0 4px;font-weight:600}.tuner-calib-reset{color:var(--muted);padding:2px 6px;font-size:10px}.tuner-strings-strip{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;width:100%;display:flex}.tuner-string-btn{font-family:var(--mono);background:var(--panel-deep);border:1px solid var(--line);color:var(--muted);border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;display:inline-flex}.tuner-string-btn .tuner-string-num{opacity:.7;font-size:10px}.tuner-string-btn .tuner-string-name,.tuner-string-btn .tuner-string-written{font-weight:700}.tuner-string-btn .tuner-string-concert{opacity:.7;font-size:10px}.tuner-string-btn:hover{color:var(--ink);border-color:var(--line-strong)}.tuner-string-btn.active{color:var(--ink);border-color:var(--line-strong);background:var(--panel)}.tuner-string-btn.target{color:var(--amber);border-color:var(--amber);background:#ffb0001a}.tuner-string-btn.locked{box-shadow:0 0 6px #ffb0004d}.tuner-string-btn.in-tune{color:var(--green);border-color:var(--green);background:#3ddc841f;box-shadow:0 0 10px #3ddc8466}.tuner-mic-notice{width:100%;color:var(--ink);background:#ffb00014;border:1px solid #ffb0004d;border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;font-size:13px;display:flex}.tuner-mic-notice.tuner-mic-error{border-color:var(--red);color:var(--red);background:#ff453a1a}.tuner-meter-stage{background:var(--panel-deep);border:1px solid var(--line);border-radius:12px;flex-direction:column;align-items:center;width:100%;padding:20px 24px 24px;display:flex;position:relative;box-shadow:inset 0 2px 8px #0006}.tuner-gauge{width:100%;max-width:380px;height:auto;overflow:visible}.tuner-scale-label{font-family:var(--mono);fill:var(--muted);font-size:10px}.tuner-scale-zero{fill:var(--green);font-size:11px;font-weight:700}.tuner-jewel{fill:var(--panel);stroke:var(--line-strong);stroke-width:1px;transition:fill .12s,filter .12s}.tuner-jewel-on{fill:var(--green);stroke:var(--green);filter:drop-shadow(0 0 6px #3ddc84)}.tuner-jewel-caption{font-family:var(--mono);letter-spacing:.12em;fill:var(--dim);font-size:7px;font-weight:700}.tuner-arrow{font-family:var(--mono);letter-spacing:.08em;fill:var(--dim);opacity:.35;font-size:11px;font-weight:700;transition:fill .1s,opacity .1s}.tuner-arrow-on{opacity:1}.tuner-arrow-flat.tuner-arrow-on{fill:var(--amber);filter:drop-shadow(0 0 4px #ffb00080)}.tuner-arrow-sharp.tuner-arrow-on{fill:var(--note-avoid);filter:drop-shadow(0 0 4px #ffb00080)}.tuner-needle-assembly{transform-origin:180px 160px}.tuner-needle-stem{stroke:var(--ink);stroke-linecap:round;transition:stroke .12s}.tuner-needle-tail{stroke:var(--line-strong);stroke-linecap:round}.tuner-needle-assembly.in-tune .tuner-needle-stem{stroke:var(--green);filter:drop-shadow(0 0 4px #3ddc84)}.tuner-needle-assembly.near .tuner-needle-stem{stroke:var(--amber)}.tuner-needle-assembly.flat .tuner-needle-stem{stroke:var(--note-chord)}.tuner-needle-assembly.sharp .tuner-needle-stem{stroke:var(--amber)}.tuner-needle-assembly.resting{opacity:.3}.tuner-readout{flex-direction:column;align-items:center;gap:6px;width:100%;margin-top:10px;display:flex}.tuner-note-display{justify-content:center;align-items:baseline;line-height:1;display:flex}.tuner-note-name{font-family:var(--mono);letter-spacing:-.04em;color:var(--ink);font-size:56px;font-weight:800}.tuner-note-octave{font-family:var(--mono);color:var(--muted);margin-left:3px;font-size:24px;font-weight:600}.tuner-status-row{justify-content:center;align-items:center;display:flex}.tuner-cents-badge{font-family:var(--mono);background:var(--panel);border:1px solid var(--line);color:var(--muted);letter-spacing:.02em;border-radius:12px;align-items:center;padding:3px 12px;font-size:15px;font-weight:700;transition:all .12s;display:inline-flex}.tuner-cents-badge.in-tune{background:var(--green);border-color:var(--green);color:#111214;box-shadow:0 0 14px #3ddc8473}.tuner-cents-badge.near{border-color:var(--amber);color:var(--amber);background:#ffb00026}.tuner-cents-badge.dimmed{opacity:.4}.tuner-freq-row{font-family:var(--mono);color:var(--muted);align-items:center;gap:14px;margin-top:2px;font-size:13px;display:flex}.tuner-freq-live{color:var(--ink);font-weight:700}.tuner-freq-target{color:var(--muted)}.tuner-transposed-info{font-family:var(--mono);color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:6px;margin-top:4px;padding:3px 10px;font-size:12px}.tuner-transposed-info strong{color:var(--amber)}.tuner-signal-bar{align-items:center;gap:10px;width:100%;max-width:320px;margin-top:6px;display:flex}.tuner-signal-label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:10px}.tuner-signal-track{background:var(--screen);border:1px solid var(--line);border-radius:3px;flex:1;height:6px;overflow:hidden}.tuner-signal-fill{background:var(--green);height:100%;transition:width 80ms ease-out}.staffguide{flex-direction:column;align-items:center;gap:6px;margin:0;display:flex}.staffguide svg{max-width:100%;height:auto}.staffguide-degree{font-family:var(--mono)}.staffguide-dim{opacity:.25}.staffguide-leaving{pointer-events:none;animation-name:staffguide-fade;animation-timing-function:ease-in;animation-fill-mode:forwards}.staffguide-arriving{pointer-events:none;animation-name:staffguide-fade-in;animation-timing-function:ease-out;animation-fill-mode:both}.staffguide-steady{opacity:.5}@keyframes staffguide-fade-in{0%{opacity:0}to{opacity:.5}}@keyframes staffguide-fade{0%{opacity:.5}to{opacity:0}}.hold-control{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.hold-learning{color:var(--amber);font-family:var(--mono);font-size:12px}.phrase-open{flex-wrap:wrap;gap:8px;margin:12px 0 0;display:flex}.phrase-explorer{background:var(--panel-deep);border:1px solid var(--line);border-radius:6px;margin:16px 0 0;padding:12px 14px 14px;position:relative;box-shadow:inset 0 0 40px #00000080}.phrase-head{align-items:baseline;gap:12px;padding-right:36px;display:flex}.phrase-head h2{margin:0;font-size:16px}.phrase-source{font-family:var(--mono);color:var(--muted);font-size:11px}.phrase-close{position:absolute;top:8px;right:8px}.phrase-controls{flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0;display:flex}.phrase-sep{background:var(--line-strong);width:1px;height:20px;margin:0 4px}.phrase-hint{margin-left:6px}.phrase-error{color:var(--note-outside);font-family:var(--mono);font-size:12px}.phrase-scroll{overflow-x:auto}.phrase-timeline{outline:none;display:block}.phrase-timeline:focus-visible{outline:1px solid var(--amber);outline-offset:2px}.phrase-grid{stroke:var(--line);stroke-width:1px;opacity:.45}.phrase-grid-beat{opacity:.9}.phrase-grid-bar{stroke:var(--line-strong);opacity:1}.phrase-chord{fill:var(--ink)}.phrase-chord-root{letter-spacing:-.01em;font-family:inherit;font-size:19px;font-weight:700}.phrase-chord-quality{fill:var(--amber);font-family:inherit;font-size:12px;font-weight:600}.phrase-note{cursor:pointer}.phrase-note-selected rect:not(.phrase-hit){stroke:var(--amber);stroke-width:2px}.phrase-degree{font-family:var(--mono);fill:var(--ink);pointer-events:none;font-size:18px;font-weight:700}.phrase-shade-key{align-items:center;gap:6px;margin:4px 0 0;display:flex}.phrase-ramp{background:linear-gradient(to right, var(--tension-calm), var(--tension-easy), var(--tension-mid), var(--tension-tense));border-radius:2px;width:72px;height:8px;display:inline-block}.phrase-ghost{fill:none;stroke:var(--muted);stroke-width:1px;stroke-dasharray:3 2}.phrase-playhead{stroke:var(--amber);stroke-width:1.5px}.phrase-strip-label{font-family:var(--mono);fill:var(--muted);font-size:11px}.phrase-strip-grid{stroke:var(--line);stroke-width:1px;stroke-dasharray:2 4}.phrase-strip-scale{font-family:var(--mono);fill:var(--muted);font-size:9px}.phrase-line-harmonic,.phrase-line-rhythmic{fill:none;stroke-width:2px}.phrase-line-harmonic{stroke:var(--tension-harmonic)}.phrase-line-rhythmic{stroke:var(--tension-rhythmic)}.phrase-key-harmonic{fill:var(--tension-harmonic)}.phrase-key-rhythmic{fill:var(--tension-rhythmic)}.phrase-line-original{stroke-width:1px;stroke-dasharray:3 3;opacity:.6}.phrase-lower{flex-wrap:wrap;align-items:flex-start;gap:20px;margin-top:12px;display:flex}.phrase-trajectory{max-width:260px;margin:0}.phrase-plot{fill:none;stroke:var(--line-strong)}.phrase-axis{font-family:var(--mono);fill:var(--muted);font-size:9px}.phrase-path{fill:none;stroke:var(--ink);stroke-width:1.25px;opacity:.8}.phrase-path-original{stroke-dasharray:3 3;opacity:.35}.phrase-arrowhead{fill:var(--ink)}.phrase-point-number{font-family:var(--mono);fill:var(--muted);font-size:9px}.phrase-point-selected circle{stroke:var(--amber)}.phrase-point-latest circle{stroke:var(--amber);stroke-width:3px}.phrase-point-latest .phrase-point-number{fill:var(--amber)}.phrase-waiting{justify-content:space-between;align-items:center;gap:12px;display:flex}.phrase-live-hint{margin:4px 0 8px}.phrase-reading{flex:320px;min-width:0;font-size:13px}.phrase-reading ul{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.phrase-reading li{flex-direction:column;gap:2px;display:flex}.phrase-reading li span{font-family:var(--mono);color:var(--muted);font-size:11px}.phrase-rules{margin-top:12px}.phrase-rules summary{cursor:pointer;font-family:var(--mono);color:var(--amber);font-size:11px}.phrase-rule-tables{flex-wrap:wrap;gap:16px;display:flex}.phrase-rule-tables table{font-family:var(--mono);border-collapse:collapse;font-size:11px}.phrase-rule-tables caption{text-align:left;color:var(--ink);padding-bottom:4px}.phrase-rule-tables td{color:var(--muted);padding:1px 10px 1px 0}.phrase-motif{cursor:pointer}.phrase-motif-label{font-family:var(--mono);fill:var(--bg);font-size:15px;font-weight:700}.phrase-motif-0{--motif:var(--motif-0)}.phrase-motif-1{--motif:var(--motif-1)}.phrase-motif-2{--motif:var(--motif-2)}.phrase-motif-3{--motif:var(--motif-3)}.phrase-motif .phrase-motif-box{fill:color-mix(in oklab, var(--motif) 10%, transparent);stroke:var(--motif);stroke-width:1.5px}.phrase-motif .phrase-motif-stem{stroke:var(--motif);stroke-width:1px;stroke-dasharray:2 2;opacity:.7}.phrase-motif .phrase-motif-chip{fill:var(--motif)}.phrase-motifs{margin:4px 0 0;font-size:13px}.phrase-motifs p{margin:2px 0}.phrase-motif-summary strong{color:var(--motif);font-family:var(--mono)}.phrase-device{fill:var(--muted);font-size:12px;font-weight:600}.phrase-device-words{color:var(--amber)}.phrase-motif-play{margin-right:6px;padding:0 6px}.phrase-motif-map{font-family:var(--mono);gap:2px;margin:6px 0 2px;font-size:11px;display:grid;overflow-x:auto}.phrase-motif-cell{border-top:1px solid var(--line);flex-direction:column;align-items:center;gap:1px;min-height:34px;padding:2px 0;display:flex}.phrase-motif-bar{color:var(--muted);font-size:9px}.phrase-motif-none{color:var(--muted)}.phrase-motif-tag{color:var(--motif);font-size:13px;font-weight:700}.phrase-story{margin:8px 0 4px;padding-left:18px;font-size:13px}.phrase-story li{margin:1px 0}.phrase-map-keys{border-top:1px solid var(--line);color:var(--muted);text-align:right;flex-direction:column;gap:1px;padding:2px 6px 2px 0;font-size:9px;display:flex}.phrase-map-keys span,.phrase-motif-cell>span{height:15px;line-height:15px}.phrase-map-ideas{gap:3px;display:flex}.phrase-map-density{align-items:center;width:80%;display:flex}.phrase-map-density span{background:var(--tension-rhythmic);border-radius:2px;height:5px;display:block}.phrase-map-top,.phrase-map-rest{font-size:10px}.phrase-material-rest{opacity:.6}.phrase-view{gap:4px;margin-left:auto;display:inline-flex}.phrase-meter{gap:6px;margin:8px 0 2px;display:grid}.phrase-meter-row{font-family:var(--mono);grid-template-columns:90px 1fr 48px;align-items:center;gap:10px;font-size:14px;display:grid}.phrase-meter-track{background:var(--line);border-radius:8px;height:16px;overflow:hidden}.phrase-meter-fill{border-radius:8px;height:100%;transition:width .25s ease-out;display:block}.phrase-meter-harmonic .phrase-meter-fill{background:var(--tension-harmonic)}.phrase-meter-rhythmic .phrase-meter-fill{background:var(--tension-rhythmic)}.phrase-meter-value{text-align:right;color:var(--muted)}.phrase-story-link,.phrase-map-play{all:unset;cursor:pointer}.phrase-story-link:hover,.phrase-story-link:focus-visible{color:var(--amber);text-decoration:underline}.phrase-map-play{flex-direction:column;align-items:center;gap:1px;width:100%;display:flex}.phrase-map-play>span{height:15px;line-height:15px}.phrase-map-play:hover .phrase-motif-bar,.phrase-map-play:focus-visible .phrase-motif-bar{color:var(--amber)}@media (prefers-reduced-motion:reduce){.phrase-meter-fill{transition:none}}.phrase-degree-on{paint-order:stroke;stroke:var(--bg);stroke-width:3px;stroke-linejoin:round;font-size:14px}@media (width>=900px){.phrase-story{columns:2;column-gap:32px}.phrase-story li{break-inside:avoid}}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.phrase-now{align-items:center;height:64px;margin:4px 0 8px;display:flex}.phrase-now-note{align-items:baseline;gap:14px;display:inline-flex}.phrase-now-degrees{gap:24px;display:inline-flex}.phrase-now-degree{font-family:var(--mono);font-size:56px;font-weight:700;line-height:1}.phrase-now-name{font-family:var(--mono);color:var(--muted);font-size:14px}.phrase-now-gone{animation:1.2s ease-in forwards phrase-now-fade}@keyframes phrase-now-fade{to{opacity:0}}@media (width<=720px){.phrase-now{height:52px}.phrase-now-degree{font-size:44px}.phrase-now-degrees{gap:16px}}.phrase-body{align-items:flex-start;gap:12px;display:flex}.phrase-body .phrase-scroll{flex:1;min-width:0}.phrase-pops{height:var(--pops-height);pointer-events:none;border-right:1px solid var(--line);flex-direction:column;flex:0 0 210px;justify-content:flex-end;align-items:flex-start;gap:6px;padding-bottom:4px;padding-right:10px;display:flex;overflow:hidden;-webkit-mask-image:linear-gradient(#0000 0,#000 32px);mask-image:linear-gradient(#0000 0,#000 32px)}@media (width<=720px){.phrase-body{flex-direction:column;align-items:stretch;gap:6px}.phrase-head{flex-wrap:wrap;row-gap:6px}.phrase-view{flex-basis:100%;order:2;margin-left:0}.phrase-source{flex-basis:100%;order:3}.phrase-pops{border-right:none;border-bottom:1px solid var(--line);flex-basis:auto;height:92px;padding-right:0}}.phrase-pop{border:1.5px solid var(--pop-edge);background:color-mix(in oklab, var(--bg) 82%, var(--pop-edge));max-width:100%;color:var(--ink);line-height:1.3;font-family:var(--mono);border-radius:10px;padding:4px 10px;font-size:13px;font-weight:700;transition:translate .55s cubic-bezier(.33,0,.2,1);animation:2.6s linear forwards phrase-pop-life;position:relative;box-shadow:0 4px 14px #00000073}.phrase-pop-motif-0{--pop-edge:var(--motif-0)}.phrase-pop-motif-1{--pop-edge:var(--motif-1)}.phrase-pop-motif-2{--pop-edge:var(--motif-2)}.phrase-pop-motif-3{--pop-edge:var(--motif-3)}.phrase-pop-device{--pop-edge:var(--amber)}.phrase-pop-story{--pop-edge:var(--tension-harmonic)}.phrase-pop-key{--pop-edge:var(--muted)}.phrase-pop-landed{--pop-edge:var(--note-chord)}.phrase-arrival line{stroke:var(--amber);stroke-width:1.5px;stroke-dasharray:3 3;opacity:.7}.phrase-arrival text{font-family:var(--mono);fill:var(--amber);font-size:11px}.phrase-landing{fill:none;stroke:var(--muted);stroke-width:1.5px;stroke-dasharray:2 2;pointer-events:none}.phrase-landing-guide{stroke:var(--amber);stroke-dasharray:none;stroke-width:2px}.phrase-landings{margin:10px 0 0}.phrase-landings h4{margin:0 0 4px;font-size:13px}.phrase-landings-sum{font-family:var(--mono);color:var(--muted);margin-left:8px;font-size:12px;font-weight:400}.phrase-landings ul{margin:0;padding:0;list-style:none}.phrase-landings li[data-kind=guide] .phrase-story-link{color:var(--note-chord)}@keyframes phrase-pop-life{0%{opacity:0;transform:translateY(0)}15%{opacity:1;transform:translateY(-9.6px)}35%{opacity:.9;transform:translateY(-22.4px)}to{opacity:0;transform:translateY(-64px)}}@keyframes phrase-pop-life-still{0%{opacity:0}15%{opacity:1}35%{opacity:.9}to{opacity:0}}@media (prefers-reduced-motion:reduce){.phrase-pop{transition:none;animation-name:phrase-pop-life-still}}.panel-sections{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));align-items:start;gap:16px 28px;display:grid}.panel-section{flex-direction:column;align-items:stretch;gap:7px;min-width:0;display:flex}.toggle{color:var(--ink);cursor:pointer;align-items:center;gap:8px;font-size:13px;display:flex}.toggle input{accent-color:var(--amber);flex:none;margin:0}.toggle-sub{color:var(--muted);margin-left:22px;font-size:12px}.toggle:has(input:disabled){opacity:.45;cursor:default}.field{grid-template-columns:58px minmax(0,1fr);align-items:center;gap:8px;display:grid}.field-label{color:var(--muted);font-size:12px}.panel-section-action{align-self:flex-start;margin-top:4px}.settings-status{color:var(--muted);font-size:12px}.mic-sensitivity{grid-template-columns:auto 1fr;align-items:center;gap:6px 10px;width:100%;display:grid}.mic-sensitivity-ranges{gap:4px;display:flex}.mic-sensitivity input[type=range]{width:100%;accent-color:var(--amber);grid-column:1/-1}.mic-sensitivity-value{font-family:var(--mono);color:var(--amber);grid-column:1/-1;font-size:12px}.settings-group .vocab{gap:4px;width:100%;display:grid}.settings-group .vocab>span{letter-spacing:normal;text-transform:none;font-family:inherit;font-size:12px}.settings-legal{gap:14px;font-size:12px;display:flex}.settings-legal a{color:var(--muted)}.screen-board{gap:0}.board{height:calc(100svh - var(--board-top) - var(--dock-height,72px) - 8px);min-height:420px;display:grid}.board-column{scrollbar-gutter:stable;border-radius:8px;min-width:0;min-height:0;overflow:auto}.board-column-over{outline:1px dashed var(--line-strong);outline-offset:-1px}.board-stack{flex-direction:column;gap:12px;min-height:100%;display:flex}.board-stack>.widget:only-child{flex:1}.board-drop{border:1px dashed var(--line-strong);color:var(--muted);text-align:center;border-radius:8px;margin:0;padding:28px 16px}.board-tiles>.board-drop{grid-column:1/-1}.widget-ghost{border:1px solid var(--amber);background:var(--panel);color:var(--ink);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;cursor:grabbing;border-radius:8px;padding:8px 14px;font-size:12px;display:inline-block;box-shadow:0 10px 30px #0000008c}.board-divider{cursor:col-resize;touch-action:none;position:relative}.board-divider:before{content:"";background:var(--line);border-radius:1px;width:2px;position:absolute;top:8px;bottom:8px;left:5px}.board-divider:hover:before,.board-divider:focus-visible:before{background:var(--amber)}.board-divider:focus-visible{outline:none}.board-tiles{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px;padding-bottom:12px;display:grid}.widget{border:1px solid var(--line);background:var(--panel-deep);border-radius:8px;min-width:0}.widget-full{grid-column:1/-1}.widget-dragging{opacity:.35}.widget-head{border-bottom:1px solid var(--line);align-items:center;gap:4px;height:30px;padding:0 4px 0 6px;display:flex}.widget-title{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);flex:1;margin:0;font-size:11px;font-weight:400;overflow:hidden}.widget-grip,.widget-action{width:24px;height:24px;color:var(--muted);font:600 13px/1 var(--mono);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;padding:0;display:inline-flex}.widget-grip{cursor:grab;touch-action:none;letter-spacing:-2px}.widget-grip:active{cursor:grabbing}.widget-grip:hover,.widget-action:hover,.widget-grip:focus-visible,.widget-action:focus-visible{border-color:var(--line-strong);color:var(--ink);outline:none}.widget-body{padding:10px;container-type:inline-size}.widget-body>.roadmap,.widget-body>.scalemap,.widget-body>.phrase-explorer,.widget-body>.chart-section{box-shadow:none;background:0 0;border:none;margin:0;padding:0}.widget-body .phrase-head h2,.widget-body .scalemap-name{display:none}.widget-body .staff-widget{margin:0}@container (width<=900px){.bars{grid-template-columns:repeat(4,minmax(0,1fr))}}@container (width<=420px){.bars{grid-template-columns:repeat(2,minmax(0,1fr))}}.staff-container{max-height:min(calc(100svh - var(--dock-height,72px) - 32px), var(--staff-two-systems))}.board-stack>.widget:only-child .staff-container{max-height:calc(100svh - var(--board-top) - var(--dock-height,72px) - 200px)}.widget-body .bars{scrollbar-gutter:stable;max-height:17rem;overflow-y:auto}.widget-body .roadmap-rows{scrollbar-gutter:stable;max-height:22rem;overflow-y:auto}
