@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2)format("woff2-variations");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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2)format("woff2-variations");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:Figtree Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./figtree-latin-ext-wght-normal-DCwSJGxG.woff2)format("woff2-variations");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:Figtree Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./figtree-latin-wght-normal-D_ZTVpCC.woff2)format("woff2-variations");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:Noto Music;font-style:normal;font-display:swap;font-weight:400;src:url(./noto-music-music-400-normal-CksxHXl6.woff2)format("woff2"),url(./noto-music-music-400-normal-BOLtuVsm.woff)format("woff")}:root{--bg:#f1f3f9;--surface:#fff;--sunken:#e7eaf3;--ink:#16203a;--muted:#56607c;--line:#d9deeb;--primary:#2c44c4;--primary-ink:#fff;--primary-soft:#e3e8fb;--felt:#c2334d;--brass:#b07d1f;--brass-soft:#f6ecd2;--good:#108672;--good-soft:#d9f2ec;--bad:#cf3a4f;--bad-soft:#fbe1e5;--tonic:#2c44c4;--subdominant:#108672;--dominant:#b5591a;--ivory:#fbfaf4;--ebony:#181b29;--shadow:0 1px 2px #16203a0f, 0 8px 24px -12px #16203a2e;--display:"Bricolage Grotesque Variable", "Figtree Variable", system-ui, sans-serif;--body:"Figtree Variable", system-ui, -apple-system, "Segoe UI", sans-serif;--music:"Noto Music", "Apple Symbols", "Segoe UI Symbol", serif;--radius:14px;--kh:188px;--kw-min:38px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0e1426;--surface:#171f38;--sunken:#111830;--ink:#eceffa;--muted:#a0a9c6;--line:#2a3556;--primary:#8497ff;--primary-ink:#0e1426;--primary-soft:#222c55;--felt:#d6455f;--brass:#e0b453;--brass-soft:#3a3118;--good:#3fc6ad;--good-soft:#143a36;--bad:#f0697c;--bad-soft:#43202a;--tonic:#8497ff;--subdominant:#3fc6ad;--dominant:#f09a55;--shadow:0 1px 2px #0000004d, 0 10px 28px -14px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#0e1426;--surface:#171f38;--sunken:#111830;--ink:#eceffa;--muted:#a0a9c6;--line:#2a3556;--primary:#8497ff;--primary-ink:#0e1426;--primary-soft:#222c55;--felt:#d6455f;--brass:#e0b453;--brass-soft:#3a3118;--good:#3fc6ad;--good-soft:#143a36;--bad:#f0697c;--bad-soft:#43202a;--tonic:#8497ff;--subdominant:#3fc6ad;--dominant:#f09a55;--shadow:0 1px 2px #0000004d, 0 10px 28px -14px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0;font-size:17px;line-height:1.55}h1,h2,h3{font-family:var(--display);letter-spacing:-.015em;margin:0;line-height:1.12}p{margin:0}button,select,input{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:3px solid var(--primary);outline-offset:2px;border-radius:6px}kbd{font-family:var(--body);background:var(--sunken);border:1px solid var(--line);white-space:nowrap;border-bottom-width:2px;border-radius:6px;padding:1px 6px;font-size:.8em;font-weight:600}.icon{flex:none}.btn{white-space:nowrap;border:1.5px solid #0000;border-radius:12px;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 18px;font-weight:650;transition:transform 80ms,background .15s;display:inline-flex}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--primary-ink)}.btn-primary:hover:not(:disabled){filter:brightness(1.08)}.btn-quiet{border-color:var(--line);background:0 0}.btn-quiet:hover:not(:disabled){background:var(--sunken)}.btn-danger{background:var(--bad);color:#fff}.btn-big{min-height:52px;padding:0 24px;font-size:1.05rem}.btn-listen{background:var(--brass-soft);color:var(--ink);border-color:#0000}.btn-listen:hover{filter:brightness(.97)}.listen-icon{background:linear-gradient(var(--brass), var(--brass)) 0 50% / 3px 6px no-repeat, linear-gradient(var(--brass), var(--brass)) 5px 50% / 3px 14px no-repeat, linear-gradient(var(--brass), var(--brass)) 10px 50% / 3px 9px no-repeat, linear-gradient(var(--brass), var(--brass)) 15px 50% / 3px 12px no-repeat;flex:none;width:18px;height:14px}.btn-listen.is-playing .listen-icon{animation:.5s ease-in-out infinite alternate bars}@keyframes bars{to{transform:scaleY(.45)}}.icon-btn{width:44px;height:44px;color:var(--muted);background:0 0;border:0;border-radius:12px;flex:none;place-items:center;display:grid}.icon-btn:hover{background:var(--sunken);color:var(--ink)}.link{color:var(--primary);text-underline-offset:3px;background:0 0;border:0;padding:0;font-weight:650;text-decoration:underline}.shell{grid-template-columns:236px minmax(0,1fr);min-height:100dvh;display:grid}.nav{border-right:1px solid var(--line);background:var(--surface);flex-direction:column;gap:26px;height:100dvh;padding:22px 14px;display:flex;position:sticky;top:0}.brand{color:inherit;align-items:center;gap:10px;padding:0 8px;text-decoration:none;display:flex}.brand-mark{background:var(--ebony);border-top:5px solid var(--felt);box-sizing:border-box;border-radius:9px;gap:2px;width:34px;height:34px;padding:9px 5px 5px;display:flex}.brand-mark i{background:var(--ivory);border-radius:1.5px;flex:1}.brand-name{font-family:var(--display);letter-spacing:-.03em;font-size:1.4rem;font-weight:750}.nav-links{flex-direction:column;gap:4px;display:flex}.nav-link{min-height:46px;color:var(--muted);text-align:left;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:0 12px;font-weight:600;display:flex}.nav-link:hover{background:var(--sunken);color:var(--ink)}.nav-link.is-active{background:var(--primary-soft);color:var(--primary)}.midi-chip{background:var(--sunken);color:var(--muted);text-align:left;border:0;border-radius:12px;align-items:center;gap:8px;margin-top:auto;padding:10px 12px;font-size:.82rem;line-height:1.3;display:flex}.midi-dot{background:var(--line);border-radius:50%;flex:none;width:9px;height:9px}.midi-chip.is-on{color:var(--ink)}.midi-chip.is-on .midi-dot{background:var(--good);box-shadow:0 0 0 3px var(--good-soft)}.page{width:100%;max-width:1120px;padding:40px clamp(18px,4vw,56px) 80px}.page-head{margin-bottom:28px}.page-head h1{letter-spacing:-.035em;max-width:16ch;font-size:clamp(2rem,4.4vw,3.1rem);font-weight:760}.practice .page-head h1,.explore .page-head h1,.settings .page-head h1{max-width:none}.lede{color:var(--muted);max-width:62ch;margin-top:12px;font-size:1.06rem}.today{background:var(--surface);box-shadow:var(--shadow);border-top:7px solid var(--felt);border-radius:22px;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:0;margin-bottom:44px;display:grid;overflow:hidden}.today-next{flex-direction:column;align-items:flex-start;gap:8px;padding:28px 30px 30px;display:flex}.today-kicker{color:var(--muted);font-size:.92rem;font-weight:600}.today-next h2{font-size:1.9rem;font-weight:720}.today-next p:not(.today-kicker){color:var(--muted);max-width:46ch}.today-next .btn{margin-top:14px}.today-stats{background:var(--sunken);grid-template-columns:1fr 1fr;align-content:center;gap:20px 16px;margin:0;padding:28px 30px;display:grid}.today-stats div{min-width:0}.today-stats .goal{grid-column:1/-1}.today-stats dt{color:var(--muted);font-size:.86rem;font-weight:600}.today-stats dd{font-family:var(--display);align-items:baseline;gap:6px;margin:0;font-size:1.9rem;font-weight:720;display:flex}.today-stats dd .icon{color:var(--brass);align-self:center}.today-stats small{font-family:var(--body);color:var(--muted);font-size:.9rem;font-weight:500}.meter{background:var(--line);border-radius:99px;height:10px;margin-top:8px;overflow:hidden}.meter span{background:var(--brass);border-radius:99px;height:100%;transition:width .4s;display:block}.unit{margin-bottom:40px}.unit-head{justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:14px;display:flex}.unit-head h2{align-items:baseline;gap:12px;font-size:1.55rem;font-weight:720;display:flex}.unit-no{color:var(--felt);font-variant-numeric:tabular-nums}.unit-head p{color:var(--muted);margin-top:4px}.unit-staff{color:var(--muted);flex:none;max-width:40%}.unit-staff line{stroke:var(--line);stroke-width:1px}.unit-staff ellipse{fill:var(--bg);stroke:var(--muted);stroke-width:1.4px}.unit-staff ellipse.is-done{fill:var(--good);stroke:var(--good)}.lessons{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);margin:0;padding:0;list-style:none;overflow:hidden}.lessons li+li{border-top:1px solid var(--line)}.lesson-row{text-align:left;background:0 0;border:0;align-items:center;gap:16px;width:100%;min-height:68px;padding:14px 18px;display:flex}.lesson-row:hover{background:var(--sunken)}.lesson-dot{border:2px solid var(--line);color:#fff;border-radius:50%;flex:none;place-items:center;width:26px;height:26px;display:grid}.lesson-row.is-done .lesson-dot{background:var(--good);border-color:var(--good)}.lesson-row.is-next .lesson-dot{border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-soft)}.lesson-text{flex-direction:column;flex:1;min-width:0;display:flex}.lesson-text strong{font-weight:650}.lesson-text span{color:var(--muted);font-size:.93rem}.lesson-len{color:var(--muted);white-space:nowrap;font-size:.86rem}.stars{flex:none;gap:4px;display:inline-flex}.stars i,.finish-stars i{background:var(--line);border-radius:50%;width:12px;height:12px;display:block}.stars i.on{background:var(--brass)}.focus{background:var(--bg);flex-direction:column;height:100dvh;display:flex;overflow:hidden}.focus-head{padding:10px clamp(10px,3vw,28px) 12px;padding-top:max(10px, env(safe-area-inset-top));grid-template-columns:auto minmax(0,1fr);grid-template-areas:"close title""bar bar";align-items:center;gap:6px 8px;display:grid}.focus-head .icon-btn{grid-area:close}.focus-title{flex-direction:column;grid-area:title;min-width:0;line-height:1.25;display:flex}.focus-title span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:.82rem;overflow:hidden}.focus-title strong{font-family:var(--display);white-space:nowrap;text-overflow:ellipsis;font-weight:680;overflow:hidden}.segments{grid-area:bar;gap:4px;display:flex}.segments span{background:var(--line);border-radius:99px;flex:1;height:6px;transition:background .3s}.segments .is-done{background:var(--good)}.segments .is-now{background:var(--primary)}.step-main{flex:1;min-height:0;padding:8px clamp(16px,4vw,40px) 16px;display:flex;overflow-y:auto}.step-card{flex-direction:column;align-items:flex-start;gap:16px;width:100%;max-width:680px;margin:auto;display:flex}.step-title{letter-spacing:-.03em;text-wrap:balance;font-size:clamp(1.55rem,3.6vw,2.3rem);font-weight:730}.kind-play .step-title,.kind-quiz .step-title{color:var(--ink)}.step-body{color:var(--muted);flex-direction:column;gap:12px;max-width:60ch;font-size:1.08rem;display:flex}.step-body strong{color:var(--ink);font-weight:680}.step-staff{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);max-width:100%;padding:4px 14px;overflow-x:auto}.options{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:100%;display:grid}.option{text-align:left;background:var(--surface);border:2px solid var(--line);border-radius:var(--radius);align-items:center;gap:12px;min-height:56px;padding:10px 16px;font-weight:600;display:flex}.option:hover:not(:disabled){border-color:var(--primary)}.option kbd{flex:none}.option.is-right{border-color:var(--good);background:var(--good-soft)}.option.is-wrong{border-color:var(--bad);background:var(--bad-soft);opacity:.75;animation:.3s shake}.option:disabled:not(.is-right):not(.is-wrong){opacity:.45}@keyframes shake{25%{transform:translate(-5px)}75%{transform:translate(5px)}}.step-dock{background:var(--ebony);flex:none;padding:0 clamp(0px,2vw,24px)}.dock-compact{--kh:112px}.step-foot{background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);flex:none;transition:background .2s}.step-foot.is-done{background:var(--good-soft)}.step-foot-inner{justify-content:space-between;align-items:center;gap:14px;max-width:900px;min-height:72px;margin:0 auto;padding:12px clamp(14px,3vw,28px);display:flex}.status{color:var(--muted);min-width:0;font-size:.98rem}.status-good{color:var(--ink)}.status-good strong{color:var(--good)}.status-bad-text{color:var(--bad);font-weight:600}.step-actions{flex:none;gap:10px;display:flex}.finish{flex:1;place-items:center;padding:24px;display:grid;overflow-y:auto}.finish-card{text-align:center;flex-direction:column;align-items:center;gap:14px;max-width:520px;display:flex}.finish-card h1{letter-spacing:-.035em;font-size:clamp(2rem,5vw,2.8rem);font-weight:760}.finish-card p{color:var(--muted);font-size:1.08rem}.finish-card p strong{color:var(--ink)}.finish-stars{gap:14px;margin-bottom:6px;display:flex}.finish-stars i{width:34px;height:34px}.finish-stars i.on{background:var(--brass);animation:.45s cubic-bezier(.3,1.6,.5,1) backwards pop}@keyframes pop{0%{transform:scale(0)}}.finish-score{font-family:var(--display);font-size:5rem;font-weight:780;line-height:1;color:var(--ink)!important}.finish-score small{color:var(--muted);font-size:1.6rem;font-weight:600}.finish-actions{flex-direction:column;gap:10px;width:100%;max-width:360px;margin-top:12px;display:flex}.piano{background:var(--ebony);border-radius:12px;padding:0 6px 6px}.step-dock .piano{border-radius:0;max-width:1100px;margin:0 auto;padding:0}.piano-scroll{overscroll-behavior-x:contain;scrollbar-width:thin;-webkit-overflow-scrolling:touch;overflow-x:auto}.piano-inner{min-width:calc(var(--whites) * var(--kw-min));--bw:calc(100% / var(--whites) * .6)}.piano-felt{background:var(--felt);height:9px;box-shadow:inset 0 -2px 3px #00000040}.piano-keys{-webkit-touch-callout:none;height:var(--kh);touch-action:none;-webkit-user-select:none;user-select:none;display:flex;position:relative}.piano-tall{--kh:230px}.key{flex-direction:column;justify-content:flex-end;align-items:center;display:flex;position:relative}.key.white{background:linear-gradient(#fff, var(--ivory) 70%, #e9e6da);color:#6b7087;border-radius:0 0 7px 7px;flex:1;margin:0 1px;padding-bottom:12px;box-shadow:inset 0 -7px #00000012,inset 0 0 0 1px #0000000f}.key.black{width:var(--bw);z-index:2;background:linear-gradient(#2c3044, var(--ebony));color:#c9cde0;border-radius:0 0 5px 5px;height:62%;padding-bottom:9px;position:absolute;top:0;box-shadow:inset 0 -6px #ffffff17,0 3px 4px #00000059}.key.is-down.white{background:linear-gradient(#e6e9f5,#d3d8ec);box-shadow:inset 0 -2px #0000001a,inset 0 0 0 1px #00000014}.key.is-down.black{background:#3d4670;box-shadow:inset 0 -2px #ffffff1a}.key-label{pointer-events:none;white-space:nowrap;font-size:.74rem;font-weight:700;line-height:1}.key-hint{opacity:.55;pointer-events:none;font-size:.66rem;font-weight:700;position:absolute;top:8px}.key.black .key-hint{top:6px}.key[class*=tone-] .key-label{background:var(--kc);color:#fff;border-radius:99px;place-items:center;min-width:26px;height:26px;padding:0 5px;font-size:.78rem;display:grid}.key.black[class*=tone-] .key-label{min-width:22px;height:22px;padding:0 3px;font-size:.68rem}.key[class*=tone-] .key-label:empty{width:14px;min-width:14px;height:14px;padding:0}.key.white[class*=tone-]{background:linear-gradient(#fff, color-mix(in srgb, var(--kc) 22%, #fff))}.key.black[class*=tone-]{background:linear-gradient(color-mix(in srgb, var(--kc) 55%, #1c1f30), color-mix(in srgb, var(--kc) 35%, #12141f))}.tone-scale{--kc:#4f6fdc}.tone-root{--kc:#7a3fd0}.tone-target,.tone-hint{--kc:#c98a12}.tone-good{--kc:#108672}.tone-bad{--kc:#cf3a4f}.key.tone-hint .key-label{animation:1s ease-in-out infinite pulse}.key.tone-bad{animation:.3s shake}@keyframes pulse{50%{box-shadow:0 0 0 5px color-mix(in srgb, var(--kc) 30%, transparent);transform:scale(1.18)}}.staff{color:var(--ink);height:auto;display:block}.staff-line{stroke:currentColor;stroke-width:1px;opacity:.55}.staff-clef{font-family:var(--music);fill:currentColor;font-size:39px}.staff-acc{font-family:var(--music);fill:currentColor;font-size:21px}.staff-head{fill:currentColor}.staff-stem{stroke:currentColor;stroke-width:1.5px}.staff-note.is-good{color:var(--good)}.staff-note.is-bad{color:var(--bad)}.staff-note.is-active{color:var(--primary)}.drill-group{margin-bottom:36px}.drill-group>h2{flex-wrap:wrap;align-items:baseline;gap:12px;margin-bottom:14px;font-size:1.45rem;font-weight:720;display:flex}.drill-group>h2 small{font-family:var(--body);color:var(--muted);letter-spacing:0;font-size:.95rem;font-weight:500}.drills{grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:16px;display:grid}.drill{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);border-left:5px solid var(--kc);flex-direction:column;gap:10px;padding:20px;display:flex}.drill.kind-keyboard{--kc:var(--tonic)}.drill.kind-ear{--kc:var(--brass)}.drill.kind-reading{--kc:var(--good)}.drill h3{font-size:1.2rem;font-weight:700}.drill p{color:var(--muted);flex:1;font-size:.96rem}.drill-foot{justify-content:space-between;align-items:center;gap:10px;display:flex}.drill-stat{color:var(--muted);font-size:.86rem}.field{color:var(--muted);flex-direction:column;gap:4px;min-width:0;font-size:.86rem;font-weight:600;display:flex}select{border:1.5px solid var(--line);background-color:var(--surface);min-height:44px;color:var(--ink);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);background-position:calc(100% - 18px) 55%,calc(100% - 13px) 55%;background-repeat:no-repeat;background-size:5px 5px;border-radius:10px;max-width:100%;padding:0 34px 0 12px;font-size:1rem;font-weight:600}input[type=range]{accent-color:var(--primary);width:100%;min-height:44px}input[type=checkbox]{width:22px;height:22px;accent-color:var(--primary);flex:none}.tabs{scrollbar-width:none;margin-top:18px;gap:6px;margin-inline:-4px;padding:4px;display:flex;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tab{border:1.5px solid var(--line);white-space:nowrap;min-height:44px;color:var(--muted);background:0 0;border-radius:99px;padding:0 16px;font-weight:620}.tab.is-active{background:var(--ink);color:var(--bg);border-color:var(--ink)}.toolbar{flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:18px;display:flex}.switch{align-items:center;gap:10px;min-height:44px;font-weight:600;display:inline-flex}.field-range{min-width:160px}.toolbar-below{margin:18px 0 0}.hint{color:var(--muted);max-width:75ch;margin-top:14px;font-size:.93rem;line-height:1.9}.seg{background:var(--sunken);border-radius:12px;flex-wrap:wrap;gap:2px;padding:4px;display:inline-flex}.seg button{min-height:38px;color:var(--muted);background:0 0;border:0;border-radius:9px;padding:0 14px;font-weight:620}.seg button.is-active{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px #00000024}.chip{border:1.5px solid var(--line);background:var(--surface);white-space:pre;border-radius:99px;min-height:40px;padding:0 14px;font-weight:600}.chip:hover{border-color:var(--primary)}.chip.is-active{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}.readout{background:var(--surface);box-shadow:var(--shadow);border-radius:20px;justify-content:space-between;align-items:center;gap:20px;min-height:150px;margin-bottom:18px;padding:18px 26px;display:flex}.readout-main strong{font-family:var(--display);letter-spacing:-.03em;font-size:clamp(2rem,6vw,3.4rem);font-weight:760;line-height:1.05;display:block}.readout-main p{color:var(--muted);max-width:46ch;margin-top:6px}.readout-staff{flex:none}.circle-wrap{grid-template-columns:minmax(280px,420px) minmax(0,1fr);align-items:start;gap:28px 36px;display:grid}.circle{-webkit-user-select:none;user-select:none;width:100%;height:auto}.wedge{fill:var(--surface);stroke:var(--bg);stroke-width:2.5px;cursor:pointer;outline:none;transition:fill .15s}.wedge-minor{fill:var(--sunken)}.wedge:hover,.wedge:focus-visible{fill:var(--primary-soft)}.wedge.is-near{fill:var(--brass-soft)}.wedge.is-active{fill:var(--primary)}.circle text{text-anchor:middle;dominant-baseline:central;pointer-events:none;fill:var(--ink);font-family:var(--display)}.circle-major{font-size:19px;font-weight:720}.circle-minor{font-size:13px;font-weight:600}.wedge.is-active~.circle-major,.wedge-minor.is-active~.circle-minor{fill:var(--primary-ink)}.wedge:not(.wedge-minor):not(.is-active)+.wedge-minor.is-active~.circle-major{fill:var(--ink)}.circle-sig{font-size:11px;font-weight:600;fill:var(--muted)!important;font-family:var(--body)!important}.circle-centre{font-size:34px;font-weight:780}.circle-centre-sub{font-size:14px;font-weight:600;fill:var(--muted)!important;font-family:var(--body)!important}.circle-info h2{font-size:2rem;font-weight:740}.circle-info>p{color:var(--muted);max-width:56ch;margin-top:8px}.circle-info h3{margin:20px 0 10px;font-size:1.05rem;font-weight:680}.circle-staff,.library-staff{flex-wrap:wrap;align-items:center;gap:16px;margin-top:12px;display:flex}.circle-piano,.library-piano{grid-column:1/-1}.pads{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.pad,.slot{background:var(--surface);border:0;border-bottom:4px solid var(--fc);min-height:66px;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:2px;min-width:0;padding:8px 4px;display:flex}.pad strong,.slot strong{font-family:var(--display);white-space:nowrap;font-size:1.08rem;font-weight:700}.pad-roman{color:var(--fc);font-size:.8rem;font-weight:700}.pad:active{transform:translateY(2px)}.pad.is-active{background:color-mix(in srgb, var(--fc) 14%, var(--surface))}.fn-tonic{--fc:var(--tonic)}.fn-subdominant{--fc:var(--subdominant)}.fn-dominant{--fc:var(--dominant)}.legend{color:var(--muted);flex-wrap:wrap;gap:6px 18px;margin-top:10px;font-size:.88rem;display:flex}.legend span:before{content:"";background:var(--fc);border-radius:3px;width:10px;height:10px;margin-right:7px;display:inline-block}.prog h2{margin:26px 0 10px;font-size:1.15rem;font-weight:690}.strip{background:var(--sunken);border-radius:16px;flex-wrap:wrap;align-items:center;gap:8px;min-height:74px;padding:10px;display:flex}.slot{width:76px;position:relative}.slot-x{color:var(--muted);opacity:0;font-size:.66rem}.slot:hover .slot-x,.slot:focus-visible .slot-x{opacity:1}.slot.is-now{outline:3px solid var(--fc);transform:translateY(-3px)}.empty{color:var(--muted);padding:0 8px}.prog-actions{flex-wrap:wrap;gap:10px;margin-top:14px;display:flex}.presets{flex-wrap:wrap;gap:8px;margin-bottom:26px;display:flex}.library{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:28px 36px;display:grid}.library-pick{flex-direction:column;align-items:flex-start;gap:16px;display:flex}.root-picker{grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;width:100%;max-width:420px;display:grid}.root-picker button{border:1.5px solid var(--line);background:var(--surface);min-height:44px;font-weight:680;font-family:var(--display);border-radius:10px}.root-picker button.is-active{background:var(--ink);color:var(--bg);border-color:var(--ink)}.type-group h3{color:var(--muted);font-size:.9rem;font-weight:650;font-family:var(--body);letter-spacing:0;margin-bottom:8px}.type-list{flex-wrap:wrap;gap:6px;display:flex}.library-show{background:var(--surface);box-shadow:var(--shadow);border-radius:20px;padding:24px 26px;position:sticky;top:20px}.library-show h2{font-size:2.2rem;font-weight:750}.library-sub{font-weight:600;color:var(--ink)!important}.library-show>p{color:var(--muted);margin-top:6px}.facts{gap:8px;margin:16px 0;display:grid}.facts div{align-items:baseline;gap:14px;display:flex}.facts dt{color:var(--muted);flex:none;width:66px;font-size:.88rem}.facts dd{font-family:var(--display);word-spacing:.1em;margin:0;font-size:1.15rem;font-weight:650}.settings{max-width:720px}.panel{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:18px;padding:22px 24px;display:flex}.panel h2{font-size:1.25rem;font-weight:710}.panel p{color:var(--muted);max-width:62ch}.row{justify-content:space-between;align-items:center;gap:18px;width:100%;min-height:48px;display:flex}.row label{font-weight:600}.row select,.row input[type=range]{flex:none;width:min(260px,50%)}.panel-actions{flex-wrap:wrap;gap:10px;display:flex}.note{font-weight:600;color:var(--good)!important}.panel .hint{margin-top:0}@media (width<=860px){body{font-size:16px}.shell{display:block}.nav{z-index:20;height:auto;padding:6px 8px;padding-bottom:max(6px, env(safe-area-inset-bottom));border-right:0;border-top:1px solid var(--line);flex-direction:row;gap:0;position:fixed;inset:auto 0 0}.brand,.midi-chip{display:none}.nav-links{flex-direction:row;flex:1;justify-content:space-around}.nav-link{flex-direction:column;align-items:center;gap:2px;min-width:68px;min-height:50px;padding:6px 4px;font-size:.72rem}.page{padding:max(22px, env(safe-area-inset-top)) 16px calc(96px + env(safe-area-inset-bottom))}.today{grid-template-columns:1fr;margin-bottom:34px}.today-next{padding:22px 20px}.today-next h2{font-size:1.6rem}.today-next .btn{width:100%}.today-stats{padding:18px 20px}.today-stats dd{font-size:1.6rem}.unit-head{flex-direction:column;align-items:flex-start;gap:10px}.unit-staff{max-width:100%}.lesson-row{gap:12px;padding:12px 14px}.lesson-len{display:none}.circle-wrap,.library{grid-template-columns:1fr}.circle{max-width:400px;margin:0 auto}.library-show{padding:20px;position:static}.readout-staff{display:none}.piano-fit .piano-felt{background:var(--felt);height:9px}.readout{flex-direction:column;align-items:flex-start;gap:4px;min-height:0;padding:16px 18px}.pads{grid-template-columns:repeat(4,minmax(0,1fr))}.row{flex-wrap:wrap;gap:6px}.row select,.row input[type=range]{width:100%}:root{--kw-min:44px;--kh:168px}.piano-tall{--kh:200px}.piano-felt{background:var(--felt) radial-gradient(circle, #ffffff80 1.5px, transparent 2px) center / 10px 10px repeat-x;height:26px}.options{grid-template-columns:1fr}.dock-compact,.option kbd{display:none}.step-foot-inner{flex-direction:column;align-items:stretch;gap:8px;min-height:0;padding-top:10px;padding-bottom:10px}.step-actions .btn{flex:1}.status:empty{display:none}.step-card{gap:12px}.step-body{font-size:1rem}}@media (width<=860px) and (height<=720px){:root{--kh:140px}}@media (height<=520px) and (orientation:landscape){:root{--kh:118px}.focus-head{padding-top:4px;padding-bottom:6px}.step-foot-inner{flex-direction:row;min-height:0;padding-top:6px;padding-bottom:6px}.step-title{font-size:1.3rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}
