:root{--bg: #080808;--surface: #121212;--surface-2: #1a1a1a;--line: #242424;--text: #ffffff;--muted: #888888;--faint: #4a4a4a;--accent: #345cff;--ok: #2bd576;--bad: #ff4d4f;--warn: #f5b33d;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--radius: 4px;color-scheme:dark}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Inter,Helvetica Neue,Arial,sans-serif;font-size:15px;-webkit-font-smoothing:antialiased;overflow:hidden;overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}button,select,input{font:inherit;color:inherit}button{background:none;border:0;padding:0;cursor:pointer;touch-action:manipulation}button:disabled{opacity:.35;cursor:default}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.screen{height:100%;max-width:560px;margin:0 auto;display:flex;flex-direction:column;padding:calc(var(--safe-top) + 8px) 16px calc(var(--safe-bottom) + 12px);overflow:hidden}.topbar{display:grid;grid-template-columns:56px 1fr 56px;align-items:center;height:48px;flex:none}.topbar-title{text-align:center;font-weight:600;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-side.right{display:flex;justify-content:flex-end}.icon-btn{width:44px;height:44px;display:grid;place-items:center;color:var(--muted)}.icon-btn:active,.icon-btn.active{color:var(--text)}.text-btn{color:var(--accent);font-weight:500;padding:10px 4px}.text-btn.warn{color:var(--warn)}.home{padding-top:calc(var(--safe-top) + 4px)}.home-top{display:flex;justify-content:flex-end;height:48px;margin-right:-10px}.brand{margin:7vh 0 6vh}.brand h1{font-size:64px;letter-spacing:.18em;font-weight:700;margin:0;line-height:1}.brand p{color:var(--muted);margin:12px 0 0;font-size:15px}.mode-cards{display:grid;gap:12px}.mode-card{text-align:left;background:var(--surface);border-radius:var(--radius);padding:22px 20px 24px;display:grid;gap:6px;transition:background .15s}.mode-card:active{background:var(--surface-2)}.mode-num{color:var(--accent);font-size:12px;font-weight:600;letter-spacing:.12em;font-variant-numeric:tabular-nums}.mode-name{font-size:22px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.mode-desc{color:var(--muted);font-size:14px;line-height:1.4}.home-stats{margin-top:auto;display:grid;grid-template-columns:repeat(3,1fr) 18px;align-items:end;gap:8px;padding:18px 0 4px;border-top:1px solid var(--line);text-align:left;color:var(--muted)}.home-stats.static{grid-template-columns:repeat(3,1fr);margin:4px 0 20px;border-top:0;padding-top:0}.home-stats b{display:block;color:var(--text);font-size:24px;font-weight:600;font-variant-numeric:tabular-nums}.home-stats span{font-size:12px;color:var(--muted)}.setup-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;margin:0 -16px;padding:0 16px 24px}section{margin-bottom:28px}h2{font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:600;margin:8px 0 12px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px;border-bottom:1px solid var(--line)}.row-label{font-size:15px}.row-hint{color:var(--muted);font-size:12px;margin-top:2px}.row-control{flex:none}select{background:var(--surface);border:0;border-radius:var(--radius);padding:9px 30px 9px 12px;min-height:40px;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 15px) 18px,calc(100% - 10px) 18px;background-size:5px 5px;background-repeat:no-repeat}.segmented{display:flex;background:var(--surface);border-radius:var(--radius);padding:3px}.segmented button{padding:8px 11px;border-radius:2px;color:var(--muted);font-size:14px;min-height:36px;white-space:nowrap}.segmented button.on{background:var(--surface-2);color:var(--text);box-shadow:inset 0 -2px 0 var(--accent)}.toggle{width:50px;height:30px;border-radius:15px;background:var(--surface-2);position:relative;transition:background .15s}.toggle span{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}.toggle.on{background:var(--accent)}.toggle.on span{transform:translate(20px);background:#fff}.scale-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.scale-grid button{background:var(--surface);border-radius:var(--radius);height:44px;font-weight:500;font-size:15px}.scale-grid button:nth-child(9){grid-column-start:1}.scale-grid button.on{background:var(--accent)}.hint{color:var(--muted);font-size:13px;line-height:1.45}.hint.center{text-align:center;margin:0 0 10px}.notice{background:var(--surface);padding:12px 14px;border-radius:var(--radius);font-size:13px;line-height:1.45;color:#ccc;border-left:2px solid var(--warn)}.notice.bad{border-left-color:var(--bad)}.start-bar{flex:none;padding-top:12px;display:grid;gap:8px}.primary{background:var(--accent);color:#fff;height:56px;border-radius:var(--radius);font-weight:600;font-size:16px;letter-spacing:.06em;text-transform:uppercase}.primary:active{filter:brightness(1.15)}.secondary{background:var(--surface);height:52px;border-radius:var(--radius);font-weight:500;width:100%}.secondary.danger{color:var(--bad)}.practice{padding-left:0;padding-right:0}.practice-top{display:grid;grid-template-columns:52px 1fr auto;align-items:center;height:48px;padding:0 6px;flex:none}.practice-stats{display:flex;justify-content:center;gap:14px;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}.practice-stats b{color:var(--text);font-weight:600}.practice-tools{display:flex}.practice-meta{display:flex;justify-content:space-between;padding:4px 16px 0;color:var(--muted);font-size:12px;letter-spacing:.06em;text-transform:uppercase;flex:none}.score{position:relative;overflow:hidden;flex:none;margin:10px 0 0;contain:strict;width:100%}.score-track{position:absolute;z-index:1;inset:0 auto 0 0;transition:transform .28s cubic-bezier(.2,.7,.2,1);will-change:transform}.measure{position:absolute;top:0}.measure svg,.score-header svg{display:block;overflow:visible}.score-header{position:absolute;left:0;top:0;bottom:0;background:var(--bg);z-index:2;padding-left:0}.score-header-fade{position:absolute;top:0;bottom:0;width:22px;z-index:2;background:linear-gradient(90deg,var(--bg),transparent);pointer-events:none}.playhead{position:absolute;top:4%;bottom:4%;width:2px;margin-left:-1px;background:var(--accent);z-index:0;opacity:.55;transition:background .12s}.playhead-band{position:absolute;top:4%;bottom:4%;background:#345cff1a;z-index:0;transition:background .12s}.playhead.ok{background:var(--ok)}.playhead.bad{background:var(--bad)}.playhead-band.ok{background:#2bd5761f}.playhead-band.bad{background:#ff4d4f24}.vf-stavenote path:not([fill=none]),.vf-stavenote rect{transition:fill .12s}.vf-stavenote.done path:not([fill=none]),.vf-stavenote.done rect{fill:#3a3a3a}.vf-stavenote.done path:not([stroke=none]){stroke:#3a3a3a}.vf-stavenote.cur path:not([fill=none]),.vf-stavenote.cur rect{fill:var(--accent)}.vf-stavenote.cur path:not([stroke=none]){stroke:var(--accent)}.vf-stavenote.ok path:not([fill=none]),.vf-stavenote.ok rect{fill:var(--ok)}.vf-stavenote.ok path:not([stroke=none]){stroke:var(--ok)}.vf-stavenote.bad path:not([fill=none]),.vf-stavenote.bad rect{fill:var(--bad)}.vf-stavenote.bad path:not([stroke=none]){stroke:var(--bad)}.practice-stage{flex:1;display:flex;flex-direction:column;justify-content:center;min-height:0;padding-bottom:4vh}.feedback{text-align:center;min-height:28px;margin:6px 16px 0;font-size:15px;color:var(--muted);font-weight:500;flex:none}.feedback.ok{color:var(--ok)}.feedback.bad{color:var(--bad)}.practice-detail{display:flex;justify-content:center;gap:12px;color:var(--faint);font-size:11px;font-variant-numeric:tabular-nums;flex:none;margin-top:2px}.answer-area{padding:12px 12px 0;display:grid;gap:8px}.end-btn{justify-self:center;color:var(--muted);font-size:13px}.note-buttons{display:grid;gap:8px}.acc-row{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.acc{height:44px;background:var(--surface);border-radius:var(--radius);font-size:22px;color:var(--muted)}.acc.on{color:var(--text);box-shadow:inset 0 -2px 0 var(--accent);background:var(--surface-2)}.letter-row{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.letter{height:76px;background:var(--surface);border-radius:var(--radius);font-size:24px;font-weight:600;position:relative;transition:background .08s}.letter:active{background:var(--surface-2)}.letter.ok{background:var(--ok);color:#04150c}.letter.bad{background:var(--bad)}.letter-acc{position:absolute;top:8px;right:7px;font-size:13px;color:var(--accent)}.letter.ok .letter-acc,.letter.bad .letter-acc{color:inherit}.fingerboard{width:100%;touch-action:none;position:relative}.fingerboard svg{display:block}.fb-wood{fill:#101010}.fb-nut{stroke:#777;stroke-width:4}.fb-tape{stroke:#232323;stroke-width:1}.fb-tape.oct{stroke:#2d2d2d;stroke-dasharray:3 4}.fb-string{stroke:#b9b9b9}.fb-dot{fill:#8a8a8a}.fb-tick line{stroke:#3a3a3a;stroke-width:1}.fb-label{fill:var(--muted);font-size:12px;text-anchor:middle;font-weight:600}.fb-mark{fill:none;stroke-width:2.5}.fb-mark.pick-ok{fill:var(--ok);stroke:var(--ok);fill-opacity:.85}.fb-mark.pick-bad{fill:var(--bad);stroke:var(--bad);fill-opacity:.85}.fb-mark.answer{stroke:var(--ok)}.fb-pick-label{fill:var(--text);font-size:12px;font-weight:600;text-anchor:middle}.results-hero{text-align:center;margin:9vh 0 5vh}.eyebrow{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.14em}.big-number{font-size:96px;font-weight:700;line-height:1.05;font-variant-numeric:tabular-nums;margin:8px 0}.big-number small{font-size:36px;color:var(--muted);font-weight:500}.results-list{margin:0;flex:1;overflow-y:auto}.results-list>div{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px solid var(--line)}.results-list dt{color:var(--muted)}.results-list dd{margin:0;font-weight:500;font-variant-numeric:tabular-nums}.chart{margin:0 0 20px}.chart svg{width:100%;height:130px;display:block}.chart .grid{stroke:var(--line);stroke-width:1;vector-effect:non-scaling-stroke}.chart .bar{fill:#1d1d1d}.chart .line{fill:none;stroke:var(--accent);stroke-width:2;vector-effect:non-scaling-stroke}.chart .dot{fill:var(--accent)}.chart figcaption{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px;margin-top:6px}.key{display:inline-block;width:12px;height:3px;margin-left:8px}.line-key{background:var(--accent);margin-left:0}.bar-key{background:#333;height:8px}.history-list{list-style:none;padding:0;margin:0}.history-list li{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.h-title{font-weight:500}.h-meta{color:var(--muted);font-size:12px;margin-top:3px}.h-acc{font-weight:600;font-variant-numeric:tabular-nums;font-size:18px}.review-header{flex:none}.review-measure{position:relative;flex:none}.review-measure .m-num{position:absolute;left:4px;top:6px;font-size:10px;color:var(--muted)}.warn{color:var(--warn)}@media (max-height: 700px){.brand{margin:4vh 0}.letter{height:64px}}.library{padding-left:0;padding-right:0}.library .topbar{padding:0 8px}.lib-search{display:flex;align-items:center;gap:8px;margin:0 16px;background:var(--surface);border-radius:var(--radius);padding:0 12px;color:var(--muted);flex:none}.lib-search input{flex:1;background:none;border:0;height:44px;outline:none;-webkit-user-select:text;user-select:text;font-size:16px}.lib-filters{display:flex;gap:6px;padding:10px 16px 4px;overflow-x:auto;flex:none;scrollbar-width:none}.lib-filters::-webkit-scrollbar{display:none}.lib-filters select{flex:none;width:118px;min-height:34px;font-size:13px;padding:6px 28px 6px 12px;background-position:calc(100% - 14px) 15px,calc(100% - 9px) 15px;color:var(--muted)}.lib-filters select.on{color:var(--text);box-shadow:inset 0 0 0 1px var(--accent)}.lib-body{flex:1;overflow-y:auto;padding:8px 0 24px;-webkit-overflow-scrolling:touch}.lib-body>.hint,.lib-list{margin-left:16px;margin-right:16px}.lib-list{display:grid;gap:8px}.shelf{margin-bottom:26px}.shelf h2{padding:0 16px}.shelf-row{display:flex;gap:10px;overflow-x:auto;padding:0 16px;scroll-padding:0 16px;scroll-snap-type:x mandatory;scrollbar-width:none}.shelf-row::-webkit-scrollbar{display:none}.work-card{flex:none;width:214px;min-height:168px;background:var(--surface);border-radius:var(--radius);padding:14px;text-align:left;display:flex;flex-direction:column;gap:4px;scroll-snap-align:start}.work-card:active{background:var(--surface-2)}.work-card.wide{width:100%;min-height:0}.wc-top{display:flex;gap:6px;margin-bottom:6px}.wc-composer{color:var(--muted);font-size:12px;letter-spacing:.04em;text-transform:uppercase}.wc-title{font-weight:600;font-size:16px;line-height:1.25}.wc-meta{color:var(--muted);font-size:12px;margin-top:auto;padding-top:6px}.wc-arr{color:#6a6a6a;font-size:12px}.wc-note{color:var(--accent);font-size:12px}.import-card{align-items:flex-start;justify-content:center;color:var(--text)}.import-card svg{color:var(--accent)}.avail,.diff,.chip-plain{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:3px 6px;border-radius:2px;line-height:1.2}.avail-free{background:var(--accent);color:#fff}.avail-preview{box-shadow:inset 0 0 0 1px var(--warn);color:var(--warn)}.diff{color:var(--muted);padding-left:0}.diff-beginner{color:var(--ok)}.diff-intermediate{color:var(--warn)}.diff-advanced{color:#ff7a7a}.chip-plain{color:var(--muted);padding-left:0}.composer-tile{flex:none;width:150px;height:112px;background:var(--surface);border-radius:var(--radius);padding:12px;text-align:left;display:flex;flex-direction:column;scroll-snap-align:start}.ct-name{font-size:22px;font-weight:700;letter-spacing:.02em}.ct-full{font-size:12px;color:var(--muted);margin-top:2px}.ct-meta{font-size:11px;color:#6a6a6a;margin-top:auto}.category-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 16px}.category-grid button{background:var(--surface);border-radius:var(--radius);height:52px;padding:0 14px;display:flex;align-items:center;justify-content:space-between;font-weight:500}.category-grid small{color:var(--muted)}.lib-legend{padding:0 16px;line-height:2.1}.detail .topbar{margin:0 -8px}.detail-head h1{font-size:26px;line-height:1.2;margin:6px 0 10px;font-weight:700}.detail-chips{display:flex;gap:10px;align-items:center;margin-bottom:12px}.detail-instr{color:var(--muted);margin:0 0 8px;font-size:14px}.detail-desc{margin:0 0 24px;line-height:1.5;color:#d4d4d4;font-size:15px}.choice-list{display:flex;flex-wrap:wrap;gap:6px}.choice-list button{background:var(--surface);border-radius:var(--radius);padding:9px 12px;text-align:left;display:grid}.choice-list button small{color:var(--muted);font-size:11px}.choice-list button.on,.movement-list button.on,.section-chips button.on{box-shadow:inset 0 0 0 1.5px var(--accent)}.movement-list{display:grid;gap:6px}.movement-list button{background:var(--surface);border-radius:var(--radius);padding:12px 14px;text-align:left;display:grid;gap:4px}.mv-title{font-weight:500}.mv-meta{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}.dot{width:6px;height:6px;border-radius:50%;background:currentColor;display:inline-block}.dot.diff-beginner{color:var(--ok)}.dot.diff-intermediate{color:var(--warn)}.dot.diff-advanced{color:#ff7a7a}.section-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.section-chips button{background:var(--surface);border-radius:var(--radius);padding:8px 12px;font-size:14px}.section-chips small{color:var(--muted);margin-left:4px}.preview{display:flex;flex-wrap:nowrap;background:var(--surface);border-radius:var(--radius);padding:8px 0 8px 4px;overflow-x:auto;-webkit-overflow-scrolling:touch}.link-list{display:grid;gap:6px;margin:12px 0}.link-list a{display:flex;justify-content:space-between;align-items:center;background:var(--surface);border-radius:var(--radius);padding:14px;color:var(--text);text-decoration:none}.link-list a svg{color:var(--muted)}.source-block a{color:var(--accent)}.source-block p{margin:4px 0}.pm-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:75%}.desktop-only{display:none}kbd{font:inherit;font-size:11px;padding:1px 5px;border:1px solid #333;border-radius:3px;color:var(--text)}@media (hover: hover){.mode-card:hover,.work-card:hover,.composer-tile:hover,.category-grid button:hover,.movement-list button:hover,.choice-list button:hover,.section-chips button:hover,.scale-grid button:hover,.letter:hover,.acc:hover,.secondary:hover{background:var(--surface-2)}.icon-btn:hover{color:var(--text)}.primary:hover{filter:brightness(1.12)}button,.fingerboard{cursor:pointer}}@media (min-width: 900px){body{user-select:auto;-webkit-user-select:auto}.desktop-only{display:inline}.key-hint{display:block;text-align:center;color:var(--faint);font-size:12px;margin:4px 0 0}.screen{max-width:760px;padding-left:32px;padding-right:32px}.setup-body{margin:0 -32px;padding:0 32px 32px}.home{max-width:1040px}.brand{margin:9vh 0 7vh}.brand h1{font-size:96px}.brand p{font-size:17px}.mode-cards{grid-template-columns:1fr 1fr;gap:16px}.mode-card{padding:32px 28px 36px;min-height:200px;align-content:start}.mode-name{font-size:26px}.home-stats{grid-template-columns:repeat(3,180px) 1fr}.home-stats svg{justify-self:end}.practice{max-width:none;padding-left:0;padding-right:0}.practice-top{padding:0 20px;height:56px}.practice-stats{font-size:15px;gap:22px}.practice-meta{padding:4px 32px 0;font-size:13px}.practice-stage{padding-bottom:2vh}.feedback{font-size:18px;margin-top:10px}.practice-detail{font-size:12px;gap:18px}.answer-area{width:100%;max-width:860px;margin:0 auto;padding:16px 24px 8px}.letter{height:84px;font-size:28px}.acc{height:48px}.fingerboard{max-width:860px}.library{max-width:1200px;padding-left:0;padding-right:0}.library .topbar{padding:0 24px}.lib-search{margin:0 32px;max-width:640px}.lib-filters{padding:12px 32px 6px}.lib-body>.hint,.lib-list{margin-left:32px;margin-right:32px}.lib-list{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.shelf h2{padding:0 32px}.shelf-row{flex-wrap:wrap;overflow:visible;padding:0 32px;gap:12px}.work-card{width:calc((100% - 36px)/4);min-width:220px;flex:1 1 220px;max-width:280px}.work-card.wide{max-width:none}.composer-tile{width:170px}.category-grid{grid-template-columns:repeat(3,1fr);padding:0 32px}.lib-legend{padding:0 32px}.detail{max-width:1200px}.detail .topbar{margin:0}.detail-head{max-width:760px}.detail-head h1{font-size:34px}.detail-cols{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:40px;align-items:start}.detail .start-bar{max-width:420px;margin-left:auto;width:100%}.setup .start-bar,.results .start-bar{max-width:420px;margin:0 auto;width:100%}.history{max-width:900px}.chart svg{height:180px}}@media (min-width: 900px) and (max-height: 760px){.brand{margin:5vh 0 4vh}.letter{height:68px}}
