:root{--bg:#12100f;--bg-raised:#1c1917;--bg-sunk:#0c0a09;--line:#38312c;--line-soft:#292320;--ink:#f5efe6;--ink-dim:#a89f94;--ink-faint:#6f665d;--accent:#ff8a3d;--accent-dim:#8a4a1f;--good:#7bc96f;--early:#56b7d4;--late:#e0663f;--warn:#e8b13a;--bad:#d4483b;--radius:10px;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;--sans:system-ui, -apple-system, "Segoe UI", Inter, sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);font:16px/1.55 var(--sans);-webkit-font-smoothing:antialiased;margin:0}.app{max-width:1080px;margin:0 auto;padding:20px 20px 80px}.masthead{flex-wrap:wrap;align-items:baseline;gap:14px;padding:8px 0 18px;display:flex}.masthead h1{letter-spacing:-.02em;margin:0;font-size:20px}.masthead .sub{color:var(--ink-faint);font-size:13px}.nav{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:6px;margin-bottom:22px;display:flex}.nav button{color:var(--ink-dim);font:600 14px var(--sans);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:10px 14px}.nav button:hover{color:var(--ink)}.nav button[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}.nav button:disabled{color:var(--ink-faint);cursor:not-allowed}.panel{background:var(--bg-raised);border:1px solid var(--line-soft);border-radius:var(--radius);margin-bottom:16px;padding:18px 20px}.panel h2{letter-spacing:-.01em;margin:0 0 6px;font-size:16px}.panel h3{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.07em;margin:18px 0 8px;font-size:13px}.panel p{color:var(--ink-dim);margin:0 0 10px;font-size:14px}.panel p.lead{color:var(--ink)}button.primary{background:var(--accent);color:#1a0d05;font:700 15px var(--sans);cursor:pointer;border:0;border-radius:8px;padding:11px 20px}button.primary:hover{filter:brightness(1.08)}button.primary:disabled{background:var(--line);color:var(--ink-faint);cursor:not-allowed}button.ghost{color:var(--ink-dim);border:1px solid var(--line);font:600 14px var(--sans);cursor:pointer;background:0 0;border-radius:8px;padding:9px 16px}button.ghost:hover{color:var(--ink);border-color:var(--ink-faint)}.row{flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0;display:flex}.row:first-child{margin-top:0}.note-box{border-left:3px solid var(--warn);background:#241d0f;border-radius:0 8px 8px 0;margin:12px 0;padding:12px 14px}.note-box.bad{border-left-color:var(--bad);background:#2a1512}.note-box.good{border-left-color:var(--good);background:#14210f}.note-box p{color:var(--ink);margin:0 0 6px;font-size:14px}.note-box p:last-child{margin:0}.note-box strong{color:var(--ink)}.tuner{text-align:center}.tuner-readout{min-height:78px}.tuner-note{font:700 54px/1 var(--sans);letter-spacing:-.03em}.tuner-cents{font:500 15px var(--mono);color:var(--ink-dim);margin-top:4px}.tuner-cents.is-stale{opacity:.35}.tuner.is-intune .tuner-note{color:var(--good)}.tuner-gauge{width:100%;max-width:400px;height:auto;margin:14px auto 0;display:block}.tg-arc{fill:none;stroke:var(--line);stroke-width:2px}.tg-tick{stroke:var(--line);stroke-width:2px}.tg-tick.tg-centre{stroke:var(--ink-faint);stroke-width:3px}.tg-window{fill:none;stroke:var(--line);stroke-width:2px}.tuner-gauge.is-intune .tg-window{stroke:var(--good);fill:#7bc96f2e}.tuner-needle{stroke:var(--accent);stroke-width:4px;stroke-linecap:round;transition:transform 90ms linear}.tuner-gauge.is-intune .tuner-needle{stroke:var(--good)}.tg-pivot{fill:var(--ink-faint)}.tg-edge{fill:var(--ink-faint);font:11px var(--sans)}.tuner-hint{color:var(--ink-dim);max-width:46ch;min-height:42px;margin:8px auto 0;font-size:14px}.tuner-strings{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px;display:flex}.tuner-string{background:var(--bg-sunk);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;border-radius:8px;flex-direction:column;align-items:center;gap:1px;width:58px;padding:8px 0;display:flex}.tuner-string .ts-name{font:700 18px var(--sans)}.tuner-string .ts-octave{font:500 10px var(--mono);color:var(--ink-faint)}.tuner-string:hover{border-color:var(--ink-faint);color:var(--ink)}.tuner-string.ts-pinned{border-color:var(--accent);color:var(--accent)}.tuner-string.ts-tuned{border-color:var(--good);color:var(--good);background:#16240f}.tuner-note-small{color:var(--ink-faint);max-width:52ch;margin:16px auto 0;font-size:12.5px}.chord-strip{flex-wrap:wrap;align-items:flex-start;gap:26px;display:flex}.chord-card{text-align:center}.chord-card h4{font:700 20px var(--sans);margin:0 0 2px}.chord-card .cc-full{color:var(--ink-faint);margin-bottom:4px;font-size:12px}.chord-card .cc-tip{color:var(--ink-dim);max-width:20ch;margin:6px auto 0;font-size:12.5px;line-height:1.45}.chord-diagram{margin:0 auto;display:block}.cd-nut{fill:var(--ink)}.cd-fret,.cd-string{stroke:var(--line);stroke-width:1.5px}.cd-dot,.cd-barre{fill:var(--accent)}.cd-finger{fill:#1a0d05;font:700 11px var(--sans)}.cd-open{fill:none;stroke:var(--ink-dim);stroke-width:1.8px}.cd-mute{stroke:var(--ink-faint);stroke-width:1.8px;stroke-linecap:round}.cd-stringname{fill:var(--ink-faint);font:10px var(--mono)}.cd-fretnum{fill:var(--ink-dim);font:11px var(--mono)}.rhythm-grid{flex-wrap:wrap;gap:10px;display:flex}.rg-bar{flex:210px;min-width:190px}.rg-barhead{justify-content:space-between;align-items:baseline;margin-bottom:5px;display:flex}.rg-barlabel{color:var(--ink-faint);font:600 11px var(--mono)}.rg-chord{color:var(--accent);font:700 14px var(--sans)}.rg-cells{grid-template-columns:repeat(8,1fr);gap:3px;display:grid}.rg-cell{background:var(--bg-sunk);border:1px solid var(--line-soft);aspect-ratio:1/1.35;border-radius:5px;flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex;position:relative}.rg-cell.rg-onbeat{border-color:var(--line);background:#141110}.rg-arrow{font:600 15px var(--sans);color:var(--ink-dim);line-height:1}.rg-cell.rg-onbeat .rg-arrow{color:var(--ink)}.rg-cell.rg-rest .rg-arrow{color:var(--ink-faint)}.rg-offset{font:600 9px var(--mono);color:#0000;min-height:10px;line-height:1}.rg-cell.rg-change{box-shadow:inset 2px 0 0 var(--accent)}.rg-cell.rg-now{border-color:var(--accent);background:#2a1a10}.rg-cell.rg-ontime{border-color:var(--good)}.rg-cell.rg-ontime .rg-offset{color:var(--good)}.rg-cell.rg-early{border-color:var(--early)}.rg-cell.rg-early .rg-offset{color:var(--early)}.rg-cell.rg-late{border-color:var(--late)}.rg-cell.rg-late .rg-offset{color:var(--late)}.rg-cell.rg-miss{border-color:var(--line);opacity:.45}.rg-cell.rg-miss .rg-offset{color:var(--ink-faint)}.timing-scope{margin-top:6px}.scope-svg{background:var(--bg-sunk);border:1px solid var(--line-soft);border-radius:8px;display:block}.scope-grid{stroke:var(--line-soft);stroke-width:1px}.scope-zero{stroke:var(--ink-faint);stroke-width:1.5px}.scope-barline{stroke:var(--line-soft);stroke-width:1px;stroke-dasharray:2 4}.scope-tolerance{fill:#7bc96f17}.scope-mean{stroke:var(--accent);stroke-width:1.5px;stroke-dasharray:6 4}.scope-label{fill:var(--ink-faint);font:10px var(--mono)}.scope-axis{fill:var(--ink-faint);font:10px var(--sans)}.scope-dot{fill:var(--ink-dim)}.scope-dot.scope-in{fill:var(--good)}.scope-dot.scope-early{fill:var(--early)}.scope-dot.scope-late{fill:var(--late)}.scope-dot.scope-change{stroke:var(--ink);stroke-width:1.5px}.scope-dot.scope-clamped{opacity:.5}.scope-missed{stroke:var(--ink-faint);stroke-width:1.8px}.scope-key{color:var(--ink-faint);margin:8px 0 0;font-size:12px}.scope-key-change{color:var(--ink-dim)}.readout-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0;display:grid}.readout{background:var(--bg-sunk);border:1px solid var(--line-soft);border-radius:8px;padding:12px 14px}.readout .r-label{color:var(--ink-faint);font:600 10.5px var(--sans);text-transform:uppercase;letter-spacing:.07em}.readout .r-value{font:700 26px/1.15 var(--mono);letter-spacing:-.02em;margin-top:4px}.readout .r-note{color:var(--ink-faint);margin-top:4px;font-size:11.5px;line-height:1.4}.readout.is-good .r-value{color:var(--good)}.readout.is-warn .r-value{color:var(--warn)}.headline{font:700 22px var(--sans);letter-spacing:-.02em;margin:4px 0 2px}.headline-sub{color:var(--ink-dim);margin-bottom:12px;font-size:14.5px}.level-meter{font:600 11px var(--mono);color:var(--ink-faint);align-items:center;gap:10px;display:flex}.level-bar{background:var(--bg-sunk);border:1px solid var(--line-soft);border-radius:4px;flex:1;min-width:120px;height:8px;overflow:hidden}.level-fill{background:var(--good);width:0;height:100%;transition:width 60ms linear}.level-fill.is-hot{background:var(--warn)}.level-fill.is-clip{background:var(--bad)}.transport{flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:4px;display:flex}.tempo{align-items:center;gap:8px;display:flex}.tempo input{width:150px}.tempo .t-value{font:700 17px var(--mono);min-width:68px}.coaching{margin:8px 0 0;padding:0;list-style:none}.coaching li{color:var(--ink-dim);padding:5px 0 5px 18px;font-size:13.5px;line-height:1.5;position:relative}.coaching li:before{content:"—";color:var(--ink-faint);position:absolute;left:0}.history{align-items:flex-end;gap:3px;height:54px;margin-top:8px;display:flex}.history-bar{background:var(--accent-dim);border-radius:2px 2px 0 0;flex:1;min-height:2px}.history-bar.is-best{background:var(--good)}.fine{color:var(--ink-faint);font-size:12px;line-height:1.55}code{font:12.5px var(--mono);background:var(--bg-sunk);color:var(--ink-dim);border-radius:4px;padding:1px 5px}.picker-panel{padding:12px 16px 14px}.picker-panel .picker-head{margin:10px 0 6px}.picker-panel .picker-head:first-child{margin-top:0}.picker-row{flex-wrap:wrap;gap:6px;display:flex}.picker-card{text-align:left;cursor:pointer;background:var(--bg-sunk);border:1px solid var(--line-soft);color:var(--ink-dim);font:inherit;border-radius:7px;flex-direction:column;flex:auto;gap:1px;padding:6px 11px;transition:border-color .12s,color .12s,background .12s;display:flex}.picker-card:hover:not(:disabled){border-color:var(--line);color:var(--ink)}.picker-card:disabled{opacity:.45;cursor:not-allowed}.picker-card.is-selected{border-color:var(--accent);color:var(--ink);background:linear-gradient(#ff8a3d1f,#ff8a3d08)}.pc-title{white-space:nowrap;font-size:13px;font-weight:650;line-height:1.3}.pc-meta{color:var(--ink-faint);font-size:10.5px;font-family:var(--mono)}.stage{background:var(--bg-sunk);padding:0;overflow:hidden}.hud{border-bottom:1px solid var(--line-soft);align-items:center;gap:16px;padding:12px 18px 10px;display:flex}.hud-left{align-items:baseline;gap:10px;min-width:0;display:flex}.hud-label{text-transform:uppercase;letter-spacing:.14em;color:var(--ink-faint);font-size:10px}.hud-chord{letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;font-size:28px;font-weight:800;line-height:1.1;overflow:hidden}.hud-mid{flex:1;min-width:0}.hud-next{color:var(--accent);font-size:13px;font-weight:600}.hud-right{margin-left:auto}.hud-bar{font:12px var(--mono);color:var(--ink-faint);white-space:nowrap}.note-highway{background:#0a0807;width:100%;height:clamp(280px,42vh,420px);display:block;position:relative}.note-highway .nh-canvas{width:100%;height:100%;display:block}.transport-wrap{border-top:1px solid var(--line-soft);padding:12px 18px 16px}.transport-wrap .transport{margin-bottom:6px}.transport-wrap #take-status{margin:0}.neckmap-wrap{margin:12px 0 4px;overflow-x:auto}.neckmap{background:var(--bg-sunk);border:1px solid var(--line-soft);border-radius:8px;flex-direction:column;gap:2px;min-width:100%;padding:10px 12px;display:inline-flex}.nm-string,.nm-ruler{align-items:center;gap:2px;display:flex}.nm-label{width:18px;font:600 11px var(--mono);color:var(--ink-faint);text-align:center;flex:none}.nm-open,.nm-fret{min-width:30px;height:26px;font:700 12px var(--sans);color:var(--ink-faint);border:1px solid var(--line-soft);background:#ffffff05;border-radius:5px;flex:34px;justify-content:center;align-items:center;display:flex}.nm-open{border-style:dashed;flex-basis:44px}.nm-open.is-on,.nm-fret.is-on{background:var(--nm-colour);border-color:var(--nm-colour);color:#140f0c;box-shadow:0 0 10px -2px var(--nm-colour)}.nm-ruler .nm-open,.nm-ruler .nm-fret{height:18px;color:var(--ink-faint);font:500 10.5px var(--mono);background:0 0;border:0}@media (max-width:620px){.hud-chord{font-size:24px}.note-highway{height:clamp(220px,34vh,300px)}.picker-card,.rg-bar{flex-basis:100%}.tuner-note{font-size:44px}}.site-footer{text-align:center;opacity:.65;margin:24px 0 16px;font-size:12px}.site-footer a{color:inherit;text-underline-offset:2px;text-decoration:underline}.site-footer a:hover,.site-footer a:focus-visible{opacity:1}
