:root { --paper: #f6f3ec; --card: #ffffff; --ink: #1e2228; --muted: #6b727c; --hair: #ddd6ca; --accent: #2b5ca8; --wood: #e4d5bc; }
* { box-sizing: border-box; }
body { margin: 0; background: var(--paper); color: var(--ink); font: 15px/1.45 'Source Sans 3', system-ui, sans-serif; }
header { display: flex; flex-wrap: wrap; gap: 16px 32px; align-items: end; justify-content: space-between; padding: 20px 28px 12px; }
.label { font: 600 13px 'Source Sans 3', sans-serif; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
h1 { font: 400 38px/1.1 'Source Serif 4', Georgia, serif; margin: 2px 0 2px; text-wrap: balance; }
.sub { margin: 0; font: italic 17px 'Source Serif 4', Georgia, serif; color: var(--muted); }
.transport { display: flex; gap: 12px; align-items: center; flex: 1 1 360px; max-width: 640px; }
.transport button { font: 600 15px 'Source Sans 3', sans-serif; padding: 7px 18px; border-radius: 6px; border: 1px solid var(--accent); background: var(--accent); color: #fff; cursor: pointer; min-width: 84px; }
.transport button:disabled { opacity: .45; cursor: default; }
#seek { flex: 1; accent-color: var(--accent); }
.time { font-variant-numeric: tabular-nums; color: var(--muted); min-width: 92px; text-align: right; }
.cpu { font-variant-numeric: tabular-nums; color: var(--muted); font-size: 12.5px; min-width: 104px; }
main { display: grid; grid-template-columns: 320px minmax(0, 1fr); gap: 20px; padding: 0 28px 20px; }
aside { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
aside section { background: var(--card); border-radius: 10px; padding: 14px 16px; box-shadow: 0 1px 3px rgba(0,0,0,.06); }
h2 { font: 600 12px 'Source Sans 3', sans-serif; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); margin: 0 0 8px; }
.hint { font-size: 13px; color: var(--muted); margin: 6px 0 0; }
.pieces { display: flex; flex-direction: column; gap: 2px; max-height: 360px; overflow: auto; }
.pieces button { text-align: left; background: none; border: 0; border-radius: 6px; padding: 6px 8px; cursor: pointer; color: var(--ink); font: inherit; }
.pieces button:hover { background: #f1ede4; }
.pieces button.active { background: #e8eef8; }
.pieces small { display: block; color: var(--muted); font-size: 12.5px; }
label { display: grid; grid-template-columns: 70px 1fr; align-items: center; gap: 8px; margin: 6px 0; font-size: 14px; }
label.file { display: block; padding: 10px; border: 1px dashed var(--hair); border-radius: 8px; cursor: pointer; text-align: center; color: var(--accent); }
label.file input { display: none; }
select, input[type=range] { width: 100%; min-width: 0; }
details summary { cursor: pointer; color: var(--accent); margin-top: 8px; font-size: 14px; }
#params h3 { font: 600 12px 'Source Sans 3', sans-serif; color: var(--muted); margin: 12px 0 4px; letter-spacing: .08em; text-transform: uppercase; }
#params label { grid-template-columns: 1fr 90px; font-size: 13px; }
#params label span { font-variant-numeric: tabular-nums; color: var(--muted); font-size: 12px; }
.credits { font-size: 13px; color: var(--muted); }
.credits strong { color: var(--ink); font-weight: 600; }
.stage { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.legend { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--muted); }
.legend i { width: 160px; height: 7px; border-radius: 4px; background: linear-gradient(90deg, #3b8be0, #12a9a0, #79a92f, #d18a1d, #d9543a); }
.legend em { font-style: normal; margin-left: 8px; }
.score { background: var(--card); border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,.08); min-height: 220px; overflow: hidden; padding: 8px 12px; }
.score g.tabDurSym, .score g.tabRhythm { display: none; }   /* tab shows fret numbers only; rhythm is in the notation */
.score svg { display: block; width: 100%; height: auto; }
.placeholder { color: var(--muted); font: italic 18px 'Source Serif 4', Georgia, serif; padding: 40px; text-align: center; }
.score g.note.on > use, .score g.note.on .notehead use { fill: var(--vc, #d9543a); }
.score g.note.on text, .score g.note.on .tabNum, .score g.note.on tspan { fill: var(--vc, #d9543a); font-weight: 700; }
.score g.note { cursor: pointer; }
.score text.pluck { font-family: 'Source Serif 4', Georgia, serif; font-style: italic; fill: var(--ink); }
.fretboard { width: 100%; height: auto; background: transparent; }
footer { padding: 4px 28px 24px; font-size: 12.5px; color: var(--muted); }
footer a { color: var(--accent); }
@media (max-width: 900px) { main { grid-template-columns: 1fr; padding: 0 16px 16px; } header { padding: 16px; } }
