@import"https://fonts.googleapis.com/css2?family=Fredoka:wght@500;600&family=Nunito:wght@400;600;700&display=swap";:root{--font-sans: "Nunito", "Segoe UI", sans-serif;--font-display: "Fredoka", "Trebuchet MS", sans-serif;--radius-sm: 10px;--radius-md: 16px;--radius-lg: 22px;--radius-pill: 999px;--shadow: 0 18px 40px rgba(20, 55, 34, .12);--shadow-soft: 0 10px 24px rgba(20, 55, 34, .1);--page-max: 960px;--transition-fast: .16s ease;--transition-low: 512ms ease}*{box-sizing:border-box;margin:0;padding:0}*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}button{background:transparent;border:none}ul,ol{list-style:none}body{font-family:var(--font-sans);background:radial-gradient(1200px 800px at 20% -10%,var(--bg-glow) 0%,transparent 60%),radial-gradient(900px 700px at 80% 0%,var(--bg-glow-2) 0%,transparent 55%),linear-gradient(180deg,var(--bg) 0%,var(--bg-accent) 100%);color:var(--ink);line-height:1.5}a{color:inherit;text-decoration:none}button{cursor:pointer}:root{color-scheme:light;--bg: #f3f9f2;--bg-accent: #eaf5ee;--bg-glow: #ffffff;--bg-glow-2: #e2f4e8;--surface: #ffffff;--surface-glass: rgba(255, 255, 255, .5);--card: #ffffff;--ink: #1d2b22;--muted: #5f6b62;--primary: #58cc02;--primary-ink: #ffffff;--accent: #ffd24a;--accent-ink: #7b5200;--border: #d8e7d8;--tag-bg: #e9f6e4;--tag-ink: #1f6b3b;--toast-success-bg: #e9f6e4;--toast-error-bg: #ffe8e8;--progress-track: #e2efe4;--keyboard-surface: #f6faf4;--keyboard-border: #d8e7d8;--key-white: #ffffff;--key-white-border: #cfded0;--key-black: #1d1f1c;--key-black-border: #111211;--key-glow: rgba(88, 204, 2, .35);--key-glow-soft: rgba(88, 204, 2, .2);--tone-success-bg: #e9f6e4;--tone-success-ink: #1f6b3b;--tone-success-border: #bfe9ad;--tone-error-bg: #ffe2e2;--tone-error-ink: #9b2c2c;--tone-warning-bg: #fff7d6;--tone-warning-ink: #7b5200;--tone-warning-border: #f1d889;--note-burst-ink: #1b4f1b;--note-burst-bg: linear-gradient(135deg, #ffffff 0%, #e9fbe5 100%);--note-burst-border: rgba(88, 204, 2, .35);--note-burst-shadow: 0 8px 18px rgba(88, 204, 2, .2), 0 0 12px rgba(88, 204, 2, .2);--staff-surface: #f6faf4;--staff-line: #cfded0}:root[data-theme=dark]{color-scheme:dark;--bg: #0d1411;--bg-accent: #121c17;--bg-glow: #1a2a21;--bg-glow-2: #16241c;--surface: #141d18;--surface-glass: rgba(18, 26, 21, .75);--card: #17231d;--ink: #eef6ee;--muted: #a5b7ab;--primary: #6fe218;--primary-ink: #0f1b13;--accent: #f2c14a;--accent-ink: #3b2a00;--border: #26342b;--tag-bg: rgba(111, 226, 24, .16);--tag-ink: #c4f59c;--toast-success-bg: rgba(111, 226, 24, .16);--toast-error-bg: rgba(255, 130, 130, .18);--progress-track: #1e2a22;--keyboard-surface: #141d18;--keyboard-border: #233129;--key-white: #f5f7f4;--key-white-border: #d9e1dc;--key-black: #0b0e0c;--key-black-border: #060807;--key-glow: rgba(111, 226, 24, .45);--key-glow-soft: rgba(111, 226, 24, .25);--tone-success-bg: rgba(111, 226, 24, .16);--tone-success-ink: #c4f59c;--tone-success-border: rgba(111, 226, 24, .38);--tone-error-bg: rgba(255, 130, 130, .18);--tone-error-ink: #ffd2d2;--tone-warning-bg: rgba(242, 193, 74, .18);--tone-warning-ink: #ffe4a6;--tone-warning-border: rgba(242, 193, 74, .4);--note-burst-ink: #e6ffcf;--note-burst-bg: linear-gradient(135deg, #223529 0%, #1a2b21 100%);--note-burst-border: rgba(111, 226, 24, .35);--note-burst-shadow: 0 8px 18px rgba(12, 18, 15, .7), 0 0 12px rgba(111, 226, 24, .22);--staff-surface: #141d18;--staff-line: #334438}.app-shell{min-height:100%;display:grid;grid-template-rows:auto 1fr auto;padding-bottom:96px}.app-shell.no-top-bar{grid-template-rows:1fr auto}.app-shell.no-nav{grid-template-rows:auto 1fr;padding-bottom:0}.app-shell.no-top-bar.no-nav{grid-template-rows:1fr}.top-bar{display:flex;align-items:center;justify-content:space-between;padding:20px 28px;border-bottom:1px solid var(--border);background:var(--surface-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:sticky;top:0;z-index:10}.brand{font-family:var(--font-display);font-size:22px;letter-spacing:.4px}.app-content{padding:28px}.page{max-width:var(--page-max);margin:0 auto;display:grid;gap:20px}@media (max-width: 720px){.top-bar{padding:16px 20px}.app-content{padding:20px}.app-shell{padding-bottom:84px}.app-shell.no-nav{padding-bottom:0}}.bottom-nav{display:flex;justify-content:space-between;gap:8px;padding:12px 16px;background:var(--surface-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:fixed;bottom:16px;left:50%;transform:translate(-50%);width:min(560px,calc(100% - 32px));border-radius:var(--radius-pill);border:1px solid var(--border);box-shadow:var(--shadow-soft)}.nav-link{font-size:14px;font-weight:600;letter-spacing:.4px;padding:8px 14px;border-radius:var(--radius-pill);border:1px solid transparent;color:var(--muted);transition:all var(--transition-fast)}.nav-link.is-active{border-color:var(--border);background:#e9f6e40d;color:var(--ink)}@media (max-width: 720px){.bottom-nav{bottom:12px;width:calc(100% - 24px)}.nav-link{font-size:12px;padding:6px 10px}}.tl-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:var(--radius-pill);border:2px solid transparent;font-weight:700;cursor:pointer;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.tl-button.primary{background:var(--primary);color:var(--primary-ink);box-shadow:0 10px 24px #58cc0240}.tl-button:hover{transform:translateY(-1px)}.tl-button.primary:active{transform:translateY(1px)}.tl-button.ghost{background:transparent;color:var(--ink);border-color:var(--border)}.tl-button:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}.btn-sm{padding:8px 12px;font-size:13px}.btn-md{padding:10px 18px;font-size:14px}.btn-lg{padding:12px 22px;font-size:16px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.card.soft{box-shadow:var(--shadow-soft)}.tag{display:inline-flex;align-items:center;padding:4px 10px;border-radius:var(--radius-pill);background:var(--tag-bg);color:var(--tag-ink);font-size:12px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}.tag.accent{background:var(--accent);color:var(--accent-ink)}.progress{width:100%;height:10px;border-radius:var(--radius-pill);background:var(--progress-track);border:1px solid var(--border);overflow:hidden}.progress-fill{height:100%;background:var(--primary);transition:width var(--transition-fast)}.range-input{width:100%;height:24px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;cursor:pointer}.range-input:focus{outline:none}.range-input::-webkit-slider-runnable-track{height:8px;background:var(--progress-track);border:1px solid var(--border);border-radius:var(--radius-pill)}.range-input::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:var(--primary);border:2px solid var(--primary-ink);margin-top:-6px;box-shadow:var(--shadow-soft)}.range-input::-moz-range-track{height:8px;background:var(--progress-track);border:1px solid var(--border);border-radius:var(--radius-pill)}.range-input::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--primary);border:2px solid var(--primary-ink);box-shadow:var(--shadow-soft)}.range-input:disabled{cursor:not-allowed;opacity:.6}.tl-input{width:100%;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface);color:var(--ink);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.tl-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px #6fe2182e}.tl-input:disabled{opacity:.6;cursor:not-allowed}.tl-select{width:100%;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface);color:var(--ink);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.tl-select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px #6fe2182e}.tl-select:disabled{opacity:.6;cursor:not-allowed}.toast-host{position:fixed;right:20px;top:20px;display:grid;gap:10px;z-index:20}.toast{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-soft);font-size:14px}.toast-success{background:var(--toast-success-bg)}.toast-error{background:var(--toast-error-bg)}.toast-close{border:none;background:transparent;font-size:12px;font-weight:700;cursor:pointer}.keyboard{--white-key-count: 21;--keyboard-padding: 10px;--keyboard-inner-width: calc(100% - (var(--keyboard-padding) * 2));--white-key-width: calc(var(--keyboard-inner-width) / var(--white-key-count));--white-key-height: 128px;--black-key-width: clamp(14px, calc(var(--white-key-width) * .62), 34px);--black-key-height: clamp(54px, calc(var(--white-key-height) * .62), 94px);display:block;position:relative;gap:0;padding:var(--keyboard-padding);background:var(--keyboard-surface);box-shadow:var(--shadow);overflow:hidden;width:100%;max-width:100%}.octave{position:relative;display:flex}.keyboard-white{display:flex;width:var(--keyboard-inner-width)}.keyboard-black{position:absolute;top:var(--keyboard-padding);left:var(--keyboard-padding);height:var(--black-key-height);width:var(--keyboard-inner-width);pointer-events:none}.key{font-family:var(--font-sans);display:flex;align-items:flex-end;justify-content:center;border-radius:0 0 6px 6px;border:1px solid rgba(0,0,0,.06);cursor:pointer}.key:disabled{cursor:default}.key-white{background:var(--key-white);width:var(--white-key-width);height:var(--white-key-height);box-shadow:inset 0 -6px 10px #0000000f;flex:0 0 var(--white-key-width)}.key-black-slot{position:absolute;top:0;pointer-events:auto}.key-black{background:var(--key-black);width:var(--black-key-width);height:var(--black-key-height);border-radius:0 0 4px 4px;box-shadow:inset 0 -4px 8px #ffffff14}.key.is-selected,.key-white.is-selected,.key-black.is-selected{background:var(--primary)}.key-label{font-size:10px;padding-bottom:6px;color:var(--muted);opacity:.65;letter-spacing:.3px}@media (max-width: 720px){.keyboard{--keyboard-padding: 8px;--white-key-height: 96px}}.staff-display{display:grid;gap:12px}.staff-board{--staff-line-gap: 12px;--staff-step: 6px;--staff-bottom: 40px;--note-size: 16px;position:relative;height:140px;border-radius:var(--radius-md);background:var(--staff-surface);border:1px solid var(--border)}.staff-clef{position:absolute;left:12px;bottom:18px;width:36px;height:auto;opacity:.7}.staff-line{position:absolute;left:16px;right:16px;height:1px;background:var(--staff-line);bottom:calc(var(--staff-bottom) + (var(--line-index) * var(--staff-line-gap)))}.staff-ledger{position:absolute;left:34%;width:32px;height:1px;background:var(--staff-line);bottom:calc(var(--staff-bottom) + (var(--ledger-offset) * var(--staff-step)))}.staff-note{position:absolute;left:45%;bottom:calc(var(--staff-bottom) + (var(--note-offset) * var(--staff-step)) - (var(--note-size) / 2));width:var(--note-size);height:var(--note-size)}.staff-note-head{display:block;width:var(--note-size);height:var(--note-size);border-radius:50%;background:var(--primary);box-shadow:0 2px 6px #58cc0259}.staff-sharp{position:absolute;left:-12px;top:-2px;font-weight:700;color:var(--ink)}.staff-meta{display:flex;align-items:center;gap:12px}.staff-meta strong{font-size:18px}.training-hub{gap:20px}.hero{display:grid;gap:10px}.hero h1{font-family:var(--font-display);font-size:clamp(24px,3.2vw,40px);letter-spacing:.4px}.hero p{max-width:520px;color:var(--muted);font-size:14px}.training-layout{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:20px;align-items:start}.training-main,.training-side,.training-panel{display:grid;gap:16px}.training-field{display:grid;gap:8px}.training-field label{font-size:12px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--muted)}.training-select{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 14px;font-family:var(--font-sans);font-size:14px;color:var(--ink)}.training-select:focus{outline:2px solid rgba(88,204,2,.3);border-color:var(--primary)}.training-hint{font-size:12px;color:var(--muted)}.training-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.training-note{display:grid;gap:8px;padding:14px 16px;border-radius:var(--radius-md);background:var(--tone-warning-bg);border:1px solid var(--tone-warning-border)}.training-note strong{font-size:14px}@media (max-width: 980px){.training-layout{grid-template-columns:1fr}}@media (max-width: 720px){.training-actions{flex-direction:column;align-items:stretch}.training-actions .tl-button{width:100%}}.lesson-page{gap:20px}.lesson-header{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px}.lesson-context{display:grid;gap:6px;justify-items:start}.lesson-mode{font-weight:700;color:var(--ink)}.lesson-progress{display:grid;gap:6px;justify-self:end}.lesson-count{font-size:12px;color:var(--muted);justify-self:end}.lesson-prompt{display:grid;gap:10px}.lesson-prompt h2{font-family:var(--font-display);font-size:clamp(22px,3.4vw,34px)}.lesson-prompt p{color:var(--muted)}.lesson-keyboard.is-locked{opacity:.85}.lesson-keyboard{display:grid;justify-items:center}.lesson-keyboard .keyboard{--keyboard-padding: 0px;--training-keyboard-width: 760px;--white-key-height: 112px;--black-key-width: clamp(24px, calc(var(--white-key-width) * .78), 50px);--black-key-height: clamp(64px, calc(var(--white-key-height) * .68), 96px);background:transparent;border:none;box-shadow:none;border-radius:0;width:min(var(--training-keyboard-width),100%);max-width:100%}.lesson-keyboard .key-black-slot{transform:translate(calc(var(--black-key-width) / 2))}.lesson-selection{display:flex;align-items:center;justify-content:space-between;gap:16px}.lesson-label{text-transform:uppercase;font-size:12px;color:var(--muted);letter-spacing:.5px}.lesson-notes{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.lesson-input{display:grid;gap:10px}.lesson-input-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.lesson-field{display:grid;gap:12px}.field-grid{display:grid;gap:10px}.field-row{display:grid;grid-template-columns:48px minmax(0,1fr) 72px;gap:10px;align-items:center}.field-row.is-correct .tl-input{border-color:var(--tone-success-border)}.field-row.is-wrong .tl-input{border-color:var(--tone-warning-border)}.field-degree{font-weight:700;color:var(--ink)}.field-answer{font-size:12px;color:var(--muted);text-align:right}.field-feedback{display:grid;gap:8px}.field-feedback.is-correct{border-color:var(--tone-success-border);background:var(--tone-success-bg)}.field-feedback.is-wrong{border-color:var(--tone-warning-border);background:var(--tone-warning-bg)}.note-pill{padding:4px 10px;border-radius:var(--radius-pill);background:var(--tone-success-bg);color:var(--tone-success-ink);font-size:12px;font-weight:700}.note-pill.is-missing{background:var(--tone-error-bg);color:var(--tone-error-ink)}.note-pill.is-extra{background:var(--tone-warning-bg);color:var(--tone-warning-ink)}.lesson-feedback{display:grid;gap:10px}.lesson-feedback.is-correct{border-color:var(--tone-success-border);background:var(--tone-success-bg)}.lesson-feedback.is-wrong{border-color:var(--tone-warning-border);background:var(--tone-warning-bg)}.lesson-feedback-list{display:grid;gap:8px}.lesson-feedback-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:var(--muted);font-size:14px}.lesson-feedback-row strong{color:var(--ink)}.lesson-answer{font-weight:700;color:var(--ink)}.lesson-actions{display:flex;justify-content:flex-end}.lesson-complete{display:grid;gap:14px;text-align:center}.lesson-complete h2{font-family:var(--font-display)}.lesson-complete-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}@media (max-width: 720px){.lesson-header{grid-template-columns:1fr}.lesson-progress,.lesson-count{justify-self:start}.lesson-selection{flex-direction:column;align-items:flex-start}.lesson-actions{justify-content:stretch}.lesson-actions .tl-button{width:100%}.lesson-complete-actions{flex-direction:column;align-items:stretch}.lesson-input-header{flex-direction:column;align-items:flex-start}.field-row{grid-template-columns:1fr;gap:6px}.field-answer{text-align:left}}.lessons-page{gap:14px;--keyboard-dock-height: 150px;--keyboard-dock-bottom: 92px;--keyboard-fixed-width: 1200px;padding-bottom:calc(var(--keyboard-dock-height) + 24px)}.lessons-page .hero{gap:8px}.lessons-page .hero h1{font-size:clamp(22px,3.2vw,34px)}.lessons-page .hero p{font-size:13px;max-width:520px}.lessons-page .card{padding:12px}.lessons-page .midi-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start}.lessons-page .midi-panel-column,.lessons-page .midi-card{display:grid;gap:8px}.lessons-page .midi-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.lessons-page .midi-control-group,.lessons-page .midi-rate-group{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.lessons-page .midi-rate-label{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin-right:4px}.lessons-page .midi-progress-card{padding:10px 12px}.lessons-page .midi-progress-row{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center}.lessons-page .midi-progress{display:flex;align-items:center}.lessons-page .midi-progress .range-input{height:16px}.lessons-page .midi-progress .range-input::-webkit-slider-runnable-track{height:4px;border-width:1px}.lessons-page .midi-progress .range-input::-webkit-slider-thumb{width:12px;height:12px;margin-top:-4px}.lessons-page .midi-progress .range-input::-moz-range-track{height:4px}.lessons-page .midi-progress .range-input::-moz-range-thumb{width:12px;height:12px}.lessons-page .setting-label,.lessons-page .setting-note{font-size:12px}.lessons-page .keyboard{--keyboard-padding: 0px;background:transparent;border:none;box-shadow:none;border-radius:0;width:100%;max-width:100%}@media (max-width: 980px){.lessons-page .midi-panel{grid-template-columns:1fr}}@media (max-width: 720px){.lessons-page{--keyboard-dock-height: 130px;--keyboard-dock-bottom: 84px;--keyboard-fixed-width: 960px;padding-bottom:calc(var(--keyboard-dock-height) + 16px)}.lessons-page .midi-progress-row{grid-template-columns:1fr}}.keyboard-page{gap:18px;--keyboard-dock-height: 150px;--keyboard-dock-bottom: 92px;--keyboard-fixed-width: 1200px;padding-bottom:calc(var(--keyboard-dock-height) + 24px)}.keyboard-area{position:fixed;left:50%;transform:translate(-50%);bottom:var(--keyboard-dock-bottom);width:min(var(--keyboard-fixed-width),calc(100% - 32px));padding:0;display:grid;justify-items:center;z-index:6;touch-action:none}.keyboard-page .keyboard{--keyboard-padding: 0px;background:transparent;border:none;box-shadow:none;border-radius:0;width:100%;max-width:100%}@media (max-width: 720px){.keyboard-page{--keyboard-dock-height: 130px;--keyboard-dock-bottom: 84px;--keyboard-fixed-width: 960px;padding-bottom:calc(var(--keyboard-dock-height) + 16px)}}.settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.settings-page .hero{gap:8px}.settings-page .hero h1{font-size:clamp(22px,3.2vw,34px)}.settings-page .hero p{font-size:13px;max-width:520px}.setting-card{display:flex;align-items:center;justify-content:space-between;gap:16px}.setting-info{display:grid;gap:4px}.setting-label{font-weight:700}.setting-note{color:var(--muted);font-size:13px}.setting-actions{display:flex;align-items:center;gap:8px}.midi-card{grid-column:1 / -1;display:grid;gap:16px;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:start}.setting-status{font-size:12px;font-weight:600;color:var(--muted)}.midi-controls{display:grid;gap:10px}.midi-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.midi-row .tl-select{flex:1;min-width:200px}.midi-debug{grid-column:1 / -1;display:grid;gap:8px;border-top:1px solid var(--border);padding-top:12px}.midi-debug-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.midi-debug-list{display:grid;gap:6px;font-size:12px;color:var(--muted)}.midi-debug-list li{display:flex;gap:8px;align-items:center}.debug-tag{padding:2px 8px;border-radius:var(--radius-pill);background:var(--surface-glass);border:1px solid var(--border);font-size:10px;text-transform:uppercase;letter-spacing:.3px;color:var(--ink)}.debug-detail{color:var(--ink)}@media (max-width: 900px){.settings-grid,.midi-card{grid-template-columns:1fr}}.muted{color:var(--muted)}.stack{display:grid;gap:12px}.hero-actions{display:flex;flex-wrap:wrap;gap:12px}.center{display:grid;place-items:center}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
