: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)}.field{display:grid;gap:6px;margin-bottom:16px}.field span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em}.field input{background:var(--surface);border:0;border-radius:var(--radius);padding:12px;min-height:46px;-webkit-user-select:text;user-select:text}.import-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.import-grid button{background:var(--surface);border-radius:var(--radius);height:72px;display:grid;place-items:center;align-content:center;gap:6px;color:var(--text);font-size:12px}.import-grid button svg{color:var(--muted)}.sample-link{font-size:13px}.sheet-list{list-style:none;padding:0;margin:8px 0 16px}.sheet-list li{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--line)}.sheet-list li.on .sheet-name{color:var(--accent)}.sheet-pick{flex:1;text-align:left;padding:12px 0;display:grid;gap:3px;min-width:0}.sheet-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sheet-meta{font-size:12px;color:var(--muted)}.sheet-meta em{color:var(--warn);font-style:normal}.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)}.vf-stavenote.unc path:not([fill=none]),.vf-stavenote.unc rect{fill:var(--warn)}.vf-stavenote.unc path:not([stroke=none]){stroke:var(--warn)}.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}.page-previews{display:grid;gap:8px;margin-bottom:12px}.page-previews.multi{grid-template-columns:repeat(3,1fr)}.page-preview{position:relative;background:#fff;border-radius:var(--radius);overflow:hidden;opacity:.4;outline:2px solid transparent}.page-preview.on{opacity:1}.page-previews.multi .page-preview.on{outline-color:var(--accent)}.page-preview img{display:block;width:100%;max-height:52vh;object-fit:contain}.page-preview span{position:absolute;bottom:4px;right:6px;background:var(--accent);color:#fff;font-size:11px;padding:1px 6px}.progress{position:relative;background:var(--surface);height:40px;border-radius:var(--radius);overflow:hidden;margin-top:12px}.progress div{position:absolute;inset:0 auto 0 0;background:#345cff59;transition:width .2s}.progress span{position:relative;line-height:40px;padding:0 12px;font-size:13px}.review{padding-left:0;padding-right:0}.review .topbar{padding:0 8px}.review-controls{display:grid;grid-template-columns:1fr auto;gap:8px;padding:0 16px;flex:none}.warnings{margin:8px 16px 0;padding:8px 12px 8px 26px;background:var(--surface);font-size:12px;color:#ccc;border-left:2px solid var(--warn);flex:none;max-height:70px;overflow-y:auto}.review-summary{display:flex;justify-content:space-between;align-items:center;padding:2px 16px;font-size:13px;color:var(--muted);flex:none}.ok-text{color:var(--ok)}.source-crop{width:calc(100% - 32px);margin:0 16px;height:120px;flex:none;background:#fff;border-radius:var(--radius);display:block}.source-crop.empty{background:var(--surface);color:var(--muted);display:grid;place-items:center;font-size:13px}.review-list{flex:1;overflow-y:auto;display:flex;flex-wrap:wrap;align-content:flex-start;padding:8px 0 16px 8px;margin-top:8px}.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)}.note-hit{position:absolute;top:0;bottom:0;width:28px}.add-note{position:absolute;right:4px;top:4px;width:22px;height:22px;display:grid;place-items:center;color:var(--faint)}.edit-panel{flex:none;background:var(--surface);padding:8px 12px 4px;display:grid;gap:8px;margin:0 8px;border-radius:var(--radius)}.edit-head{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}.edit-head b{color:var(--text);font-size:20px;min-width:44px}.edit-head .icon-btn{margin-left:auto}.warn{color:var(--warn)}.edit-row{display:flex;gap:6px}.edit-row button{flex:1;height:42px;background:var(--surface-2);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;gap:4px;font-size:15px}.edit-row button.on{box-shadow:inset 0 -2px 0 var(--accent);color:var(--text);background:#222}.edit-row button.dur{font-size:13px;font-variant-numeric:tabular-nums}.edit-row.actions button{font-size:13px}.edit-row .confirm{color:var(--ok)}.review .start-bar{padding:8px 16px 0}@media (max-height: 700px){.brand{margin:4vh 0}.letter{height:64px}}@media (min-width: 600px){.screen{border-left:1px solid var(--line);border-right:1px solid var(--line)}}
