:root{--bg:#f6f5f2;--surface:#fff;--text:#1c1c1e;--muted:#6b6b70;--border:#e2e0db;--accent:#2f5bd3;--ok:#15803d;--ko:#dc2626;--warn:#c58a00;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.45}*{box-sizing:border-box}body{margin:0}html{overflow-anchor:none}button,select{font:inherit;color:inherit}button{border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:8px;padding:.45rem .9rem}button:hover{border-color:#c9c6bf}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;padding:.6rem 1.4rem;font-weight:600}select{border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:.3rem .5rem}kbd{border:1px solid var(--border);color:var(--muted);border-radius:4px;margin-left:.3rem;padding:.05rem .35rem;font:.75em ui-monospace,monospace}button.primary kbd{color:#fff;background:#ffffff26;border-color:#fff9}.app{max-width:1280px;margin:0 auto;padding:1rem 1.25rem 3rem}.app-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1.5rem;padding-bottom:1rem;display:flex}.app-header h1{margin:0;font-size:1.25rem;font-weight:650}.brand{color:inherit;align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.brand:hover{color:var(--accent)}.brand img{border-radius:6px;flex:none}.midi-status{flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.9rem;display:flex}.status-dot{background:var(--warn);border-radius:50%;width:.6rem;height:.6rem}.status-dot.ok{background:var(--ok)}.status-dot.error{background:var(--ko)}.status-dot.off{background:#b9b6ae}.midi-hint{color:var(--muted);font-size:.85rem}.midi-hint summary{cursor:pointer}.midi-hint p{margin:.4rem 0 0}.status-error{color:var(--ko)}.trainer{grid-template-areas:"main""side";gap:1.25rem 1.75rem;display:grid}@media (width>=960px){.trainer{grid-template-columns:minmax(0,1fr) 320px;grid-template-areas:"main side";align-items:start}}.trainer-main{flex-direction:column;grid-area:main;gap:1rem;min-width:0;display:flex}.trainer-side{flex-direction:column;grid-area:side;gap:1rem;min-width:0;display:flex}.advice{background:#ecf8f0;border:1px solid #b7dfc4;border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem 1rem;padding:.75rem 1rem;display:flex}.advice p{margin:0}.advice-actions{flex-wrap:wrap;gap:.5rem;display:flex}button.subtle{color:var(--muted);background:0 0;border-color:#0000}button.subtle:hover{color:var(--text);border-color:var(--border)}button.danger{background:var(--ko);border-color:var(--ko);color:#fff}button:disabled{opacity:.5;cursor:default}input{font:inherit;border:1px solid var(--border);background:var(--surface);color:inherit;border-radius:8px;padding:.45rem .6rem}.student-button{font-size:.9rem}.student-label{color:var(--muted)}.loading{color:var(--muted);text-align:center;padding:3rem 0}.profile-picker{flex-direction:column;gap:1rem;max-width:520px;margin:2rem auto;display:flex}.profile-picker h2{text-align:center;margin:0;font-size:1.4rem}.profile-picker ul{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.profile-row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.profile-row input{flex:1;min-width:10rem}.profile-row.confirm{background:#fdf1f1;border:1px solid #f1c4c4;border-radius:10px;padding:.6rem .75rem}.profile-row.confirm span{flex:1;min-width:12rem}.profile-choice{text-align:left;flex:1;min-width:10rem;padding:.75rem 1rem;font-size:1.05rem;font-weight:600}.profile-choice.current{border-color:var(--accent)}.new-profile{border-top:1px solid var(--border);padding-top:.75rem}.back{align-self:center}.backup{border-top:1px solid var(--border);flex-direction:column;gap:.5rem;padding-top:.75rem;display:flex}.backup h3{margin:0;font-size:1rem}.backup .hint,.backup-message{margin:0}.backup-message.ok{color:var(--ok)}.backup-message.error{color:var(--ko)}.welcome{flex-direction:column;gap:.6rem;display:flex}.welcome label{font-weight:600}.welcome .hint{margin:0}.trainer-meta{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem;font-size:.9rem;display:flex}.main-nav{gap:.25rem;margin-right:auto;display:flex}.main-nav a{color:var(--muted);border:1px solid #0000;border-radius:8px;padding:.45rem .9rem;text-decoration:none}.main-nav a:hover{color:var(--text)}.main-nav a.current{background:var(--surface);border-color:var(--border);color:var(--text);font-weight:600}.stats{flex-direction:column;gap:1.5rem;display:flex}.stats h3{margin:0 0 .6rem;font-size:1rem}.stats-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.stats-header h2{margin:0;font-size:1.2rem}.stats-empty{color:var(--muted);text-align:center;padding:2rem 0}.kpis{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.75rem;display:grid}.kpi{border:1px solid var(--border);background:var(--surface);border-radius:12px;flex-direction:column;gap:.15rem;padding:.9rem 1rem;display:flex}.kpi-label{color:var(--muted);font-size:.85rem}.kpi-value{font-size:1.6rem;font-weight:600}.kpi-detail{color:var(--muted);font-size:.8rem}.charts{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:.75rem;display:grid}.chart{border:1px solid var(--border);background:var(--surface);border-radius:12px;margin:0;padding:.75rem .9rem .5rem}.chart figcaption{color:var(--muted);margin-bottom:.25rem;font-size:.85rem}.chart-plot{position:relative}.chart-plot svg{width:100%;height:auto;display:block;overflow:visible}.chart-grid{stroke:var(--border);stroke-width:1px}.chart-tick{fill:var(--muted);font-variant-numeric:tabular-nums;font-size:10px}.chart-line{fill:none;stroke:var(--accent);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.chart-dot{fill:var(--accent);stroke:var(--surface);stroke-width:2px}.chart-crosshair{stroke:var(--muted);stroke-width:1px}.chart-hit{fill:#0000}.chart-tooltip{border:1px solid var(--border);background:var(--surface);pointer-events:none;white-space:nowrap;border-radius:8px;flex-direction:column;padding:.3rem .55rem;font-size:.8rem;display:flex;position:absolute;top:0;transform:translate(-50%);box-shadow:0 2px 8px #00000014}.chart-tooltip span{color:var(--muted)}.data-table{margin-top:.5rem;font-size:.85rem}.data-table summary{cursor:pointer;color:var(--muted)}.table-scroll{overflow-x:auto}.stats table{border-collapse:collapse;width:100%;font-size:.9rem}.stats th,.stats td{text-align:left;border-bottom:1px solid var(--border);padding:.35rem .6rem}.stats th{color:var(--muted);font-weight:500}.stats .num{text-align:right;font-variant-numeric:tabular-nums}.stats tr.mastered td:nth-child(2){color:var(--ok)}.bar-cell{align-items:center;gap:.5rem;display:flex}.bar-track{background:#e8edf9;border-radius:4px;flex:1;min-width:60px;max-width:160px;height:8px;overflow:hidden}.bar-fill{background:var(--accent);border-radius:4px;height:100%;display:block}.hardest{flex-direction:column;gap:.3rem;margin:0;padding-left:1.4rem;display:flex}.hardest li span{color:var(--muted);margin-left:.6rem}.danger-zone{border-top:1px solid var(--border);padding-top:1rem}.danger-zone .hint{margin:0 0 .6rem}.student-tools{align-items:center;gap:.25rem;display:flex}.icon-button{color:var(--muted);justify-content:center;align-items:center;padding:.45rem;display:inline-flex}.icon-button:hover,.icon-button.current{color:var(--text)}.icon-button.current{border-color:var(--accent)}.settings{flex-direction:column;gap:1rem;max-width:640px;display:flex}.settings h2{margin:0;font-size:1.2rem}.settings>.hint{margin:-.5rem 0 0}.settings-group{border:1px solid var(--border);background:var(--surface);border-radius:12px;flex-direction:column;gap:.7rem;padding:1rem 1.1rem;display:flex}.settings-group h3{margin:0;font-size:.95rem}.settings-group label{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.settings-group .hint{margin:0}.settings-inline{flex-wrap:wrap;align-items:center;gap:.5rem 1rem;display:flex}.keyboard-hint{margin:0}.staff.line{max-width:100%}.session-summary h3.passed{color:var(--ok)}.session-summary h3.failed{color:#c2410c}.options h3{margin:0;font-size:.95rem}.option-row{flex-wrap:wrap;align-items:center;gap:.25rem .75rem;display:flex}.staff-exercise{flex-direction:column;align-items:center;width:100%;display:flex}.assisted-name{color:var(--muted);margin:0;font-size:1.4rem;font-weight:600}.live-timer{color:var(--muted);font-variant-numeric:tabular-nums}.session-summary{text-align:center;flex-direction:column;align-items:center;gap:.5rem;padding:1rem;display:flex}.session-summary h3{margin:0;font-size:1.3rem}.session-summary p{margin:0}.badge{border:1px solid var(--border);background:var(--surface);vertical-align:.1em;border-radius:999px;margin-left:.5rem;padding:.05rem .5rem;font-size:.75rem;display:inline-block}.header-tools{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.level-picker{flex-direction:column;gap:.35rem;display:flex}.level-select{flex-direction:column;gap:.3rem;font-weight:600;display:flex}.level-select select{width:100%;min-width:0;padding-block:.45rem;font-weight:400}.level-description{color:var(--muted);margin:0;font-size:.9rem}.level-progress{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:.75rem .9rem;font-size:.85rem}.level-progress h3{margin:0;font-size:.85rem;font-weight:600}.level-progress ul{margin:.4rem 0 0;padding-left:1.2rem;list-style:"○  "}.level-progress .hint{margin:.5rem 0 0}.level-progress li.met{color:var(--ok);list-style:"✓  "}.history-summary{color:var(--muted);font-size:.8rem}.history-error{color:var(--ko)}.staff-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;justify-content:center;align-items:center;min-height:260px;padding:.75rem;display:flex;position:relative}.staff{justify-content:center;width:100%;max-width:580px;display:flex}.staff svg{max-width:100%;height:auto;display:block}.staff-placeholder{text-align:center}.hint{color:var(--muted);font-size:.85rem}.pause-overlay{text-align:center;background:#ffffffe6;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:.35rem;padding:1rem;display:flex;position:absolute;inset:0}.pause-overlay strong{font-size:1.1rem}.feedback{text-align:center;min-height:1.6rem;font-size:1.05rem}.feedback .ok{color:var(--ok);font-weight:600}.feedback .ko{color:var(--ko)}.controls{justify-content:center;gap:.75rem;display:flex}.piano{position:relative}.piano svg{width:100%;height:auto;max-height:70px;display:block}.piano svg.playable{cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}.key.white{fill:#fff;stroke:#b9b6ae;stroke-width:.6px}.key.white.middle-c{fill:#f0eee9}.key.black{fill:#2b2b2e}.key.pressed{fill:var(--accent)}.piano-note{color:var(--muted);font-size:.8rem;position:absolute;top:-1.3rem;right:0}.options{flex-direction:column;align-items:flex-start;gap:.5rem;font-size:.9rem;display:flex}.options .hint{margin:0}.journal{font-size:.85rem}.journal summary{cursor:pointer;color:var(--muted)}.journal table{border-collapse:collapse;width:100%;margin-top:.5rem}.journal th,.journal td{text-align:left;border-bottom:1px solid var(--border);padding:.25rem .5rem}.journal tr.missed td:first-child{color:var(--ko)}.app-footer{border-top:1px solid var(--border);color:var(--muted);flex-wrap:wrap;justify-content:center;gap:.25rem 1rem;margin-top:2.5rem;padding-top:1rem;font-size:.85rem;display:flex}.app-footer a,.about a{color:var(--accent)}.about{max-width:44rem}.about h3{margin:1.5rem 0 .5rem}.about-version{font-weight:600}.home{flex-direction:column;gap:2rem;display:flex}.home-hero{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:center;gap:2rem;display:grid}.home-hero h2{margin:.5rem 0 .75rem;font-size:clamp(1.6rem,1rem + 1.6vw,2.4rem);line-height:1.15}.home-hero p{color:var(--muted);margin:0;font-size:clamp(1.05rem,.9rem + .35vw,1.25rem)}.home-tags{flex-wrap:wrap;gap:.5rem;margin:1rem 0 0;padding:0;list-style:none;display:flex}.home-tags li{border:1px solid var(--border);background:var(--surface);color:var(--accent);border-radius:999px;padding:.25rem .75rem;font-size:.9rem;font-weight:600}.hero-art{width:100%;height:auto;display:block}@media (width<=720px){.home-hero{grid-template-columns:minmax(0,1fr);gap:1.25rem}.hero-art{max-width:26rem}}.home-student{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:1.25rem 1.5rem}.home-student h3{margin:0 0 .5rem;font-size:1.4rem}.home-eyebrow{color:var(--muted);margin:0;font-size:.85rem}.home-how h3,.home-path h3{margin:0 0 .5rem}.home-how ol,.home-path ol{margin:0;padding-left:1.4rem;line-height:1.6}.home-path li.unavailable{color:var(--muted)}.rotate-hint{text-align:center;margin:-.5rem 0 0}@media (width<=700px),(height<=500px){.app{padding:.75rem .75rem 2rem}.app-header{gap:.5rem 1rem;padding-bottom:.75rem}.student-label{display:none}.status-label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.header-tools{gap:.4rem}.main-nav a{padding:.4rem .6rem}.trainer-main{gap:.75rem}.trainer-meta{align-content:flex-start;min-height:calc(2.9em + .5rem)}.staff-card{min-height:0;padding:.5rem}.piano svg{max-height:32vh}.controls{flex-wrap:wrap}.trainer-main>.controls,.trainer-main>.midi-hint,.trainer-main>.journal{order:1}}@media (orientation:landscape){.rotate-hint{display:none}}@media (hover:none) and (pointer:coarse){.keyboard-hint,.enter-hint,button kbd{display:none}}@media (height<=500px){.piano svg{max-height:26vh}}.backup-reminder{background:#fdf6e3;border:1px solid #f0d58a;border-radius:12px;flex-direction:column;gap:.6rem;padding:1rem 1.25rem;display:flex}.backup-reminder p{margin:0}
