:root{--bg:#f3f0ea;--surface:#fffdf9;--ink:#18211d;--muted:#707770;--line:#d8d6ce;--accent:#e75a35;--accent-ink:#fffaf5;--beat:#dbe6df;--beat-active:#263c32;--poly:#9bbcaf}
@media(prefers-color-scheme:dark){:root{--bg:#101513;--surface:#19201d;--ink:#ecf1ea;--muted:#9ca79f;--line:#33403a;--accent:#ff805c;--accent-ink:#1b1512;--beat:#27342e;--beat-active:#e9f5ec;--poly:#588b78}
}
[data-theme=light]{--bg:#f3f0ea;--surface:#fffdf9;--ink:#18211d;--muted:#707770;--line:#d8d6ce;--accent:#e75a35;--accent-ink:#fffaf5;--beat:#dbe6df;--beat-active:#263c32;--poly:#9bbcaf}
[data-theme=dark]{--bg:#101513;--surface:#19201d;--ink:#ecf1ea;--muted:#9ca79f;--line:#33403a;--accent:#ff805c;--accent-ink:#1b1512;--beat:#27342e;--beat-active:#e9f5ec;--poly:#588b78}
[data-theme=violet]{--bg:#171322;--surface:#221d31;--ink:#f5efff;--muted:#b5abc7;--line:#41385a;--accent:#be83ff;--accent-ink:#21152f;--beat:#332b49;--beat-active:#f0e5ff;--poly:#9271c5}
[data-theme=sunset]{--bg:#251518;--surface:#351e20;--ink:#fff2e9;--muted:#dbb9a8;--line:#644043;--accent:#ffb14b;--accent-ink:#3a1b0b;--beat:#593338;--beat-active:#fff0dc;--poly:#db6d54}
[data-theme=forest]{--bg:#102019;--surface:#193127;--ink:#edfff5;--muted:#a4c6b4;--line:#315746;--accent:#9dd44b;--accent-ink:#172b14;--beat:#264c3a;--beat-active:#efffda;--poly:#55a677}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:ui-rounded,"Avenir Next",Avenir,"Segoe UI",sans-serif}
.app-shell{max-width:1260px;margin:auto;padding:26px clamp(20px,5vw,72px) 54px;min-height:100vh}
.topbar{display:flex;justify-content:flex-end;margin-bottom:clamp(45px,9vh,100px)}
.theme-wrap{position:relative}
.icon-button,.remove-row{border:0;background:transparent;color:var(--ink);cursor:pointer}
.icon-button{font-size:24px;width:42px;height:42px;border-radius:50%}
.theme-menu{position:absolute;right:0;top:48px;z-index:5;width:172px;padding:7px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 15px 35px #0003}
.theme-menu button{width:100%;padding:9px 11px;border:0;border-radius:8px;background:transparent!important;color:var(--ink)!important;text-align:left;font:inherit;cursor:pointer}
.theme-menu button:hover,.theme-menu button.is-selected{background:var(--beat)!important;color:var(--ink)!important;font-weight:700}
.theme-menu hr{border:0;border-top:1px solid var(--line);margin:6px}
.theme-menu label{display:flex;align-items:center;justify-content:space-between;padding:7px 11px;color:var(--ink)!important;font-size:11px;font-weight:700;text-transform:uppercase}
.theme-menu input{width:36px;height:25px;border:0;padding:0;background:none}
.rhythm-rows{display:grid;gap:10px}
.rhythm-row{display:grid;grid-template-columns:25px .65fr 1.05fr .9fr 1fr 30px;gap:16px;align-items:end;padding:17px 16px;background:var(--surface);border:1px solid var(--line);border-radius:15px}
.rhythm-row.dragging{opacity:.45}
.rhythm-row.drop-target{outline:2px solid var(--accent)}
.grip{align-self:center;color:var(--muted);font-size:19px;letter-spacing:-5px;cursor:grab}
.grip:active{cursor:grabbing}
label{display:grid;gap:7px;color:var(--muted);font-size:11px;font-weight:750;letter-spacing:.04em;text-transform:uppercase}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
input{appearance:textfield;width:100%;padding:3px 0 7px;border:0;border-bottom:1px solid var(--line);border-radius:0;outline:none;background:transparent;color:var(--ink);font:600 20px/1.2 inherit}
input:focus{border-color:var(--accent)}
.signature-input,.with-unit,.poly-input{display:flex;align-items:center;gap:5px}
.signature-input input,.poly-input input{width:42px;text-align:center}
.signature-input b,.poly-input b{color:var(--muted);font-size:18px}
.remove-row{align-self:center;padding:4px;font-size:26px}
.composer-actions{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:25px}
.button{padding:14px 17px;border:0;border-radius:9px;font:700 14px inherit;cursor:pointer}
.primary,.transport-button{background:var(--accent);color:var(--accent-ink)}
.primary{padding:15px 23px}
.primary span{margin-left:15px;font-size:18px}
.secondary{border:1px solid var(--line);background:var(--surface);color:var(--ink)}
.stage{display:grid;gap:22px}
.bar-group{display:grid;gap:7px}
.bar-caption{margin-bottom:3px;color:var(--muted);font-size:11px;font-weight:800;letter-spacing:.12em}
.beat-row,.poly-lane{display:flex;width:100%;gap:5px}
.beat{height:clamp(42px,7vw,76px);flex:1;background:var(--beat);border-radius:5px;transition:.05s}
.beat.downbeat{background:color-mix(in srgb,var(--accent) 45%,var(--beat))}
.beat.active{background:var(--poly);transform:scaleY(1.06);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 20%,transparent)}
.poly-lane .beat{height:clamp(42px,7vw,76px);background:color-mix(in srgb,var(--poly) 40%,transparent)}
.poly-lane .beat.active{background:var(--poly)}
.transport{display:flex;justify-content:center;gap:14px;margin-top:clamp(45px,9vh,100px)}
.transport-button{width:62px;height:62px;border:0;border-radius:50%;font-size:18px;cursor:pointer}
@media(max-width:720px){.topbar{margin-bottom:54px}
.rhythm-row{grid-template-columns:25px 1fr 1fr;gap:18px 22px}
.remove-row{position:absolute;right:28px;margin-top:-46px}
.composer-actions{flex-direction:column-reverse}
.button{width:100%}
.stage{gap:17px}
}


.drop-zone{height:16px;border-top:2px solid transparent;transition:.12s}.drop-zone.is-over{border-top-color:var(--accent)}
.poly-lane .beat{background:var(--beat)}
.poly-lane .beat.downbeat{background:color-mix(in srgb,var(--accent) 45%,var(--beat))}
.beat.downbeat.active{background:var(--accent)}
.poly-lane .beat.active{background:var(--poly)}
.poly-lane .beat.downbeat.active{background:var(--accent)}
