@font-face{font-family:SSText;src:url(noto-sc-400.ttf) format("truetype");font-weight:400;font-display:swap}
@font-face{font-family:SSText;src:url(noto-sc-700.ttf) format("truetype");font-weight:700 900;font-display:swap}

:root{
  color-scheme:dark;
  --bg:#080d19;--panel:#0b1627;--panel-2:#101d33;--line:#263b55;--line-2:#34506e;
  --text:#eaf5ff;--muted:#8fa3c1;--dim:#62789a;--cyan:#8ce9f7;--pink:#ff87d6;
  --mono:ui-monospace,"SF Mono",Menlo,monospace;
  /* Board height drives every size in the play area. */
  /* Also bounded by width: play area ≈ 1.02 × board height, plus two side
     panels (~220 px), gaps and padding. */
  --board-h:min(clamp(420px,calc(100vh - 150px),800px),calc((100vw - 620px) * .97));
  --cell:calc(var(--board-h) / 20);
  --side-w:calc(var(--cell) * 3.4);
  font-family:SSText,Inter,"Noto Sans SC","Hiragino Kaku Gothic ProN",system-ui,sans-serif;
  background:var(--bg);color:var(--text);font-synthesis:none
}
*{box-sizing:border-box}
body{margin:0;min-width:320px}
button,input{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:default;opacity:.45}
button:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}
.eyebrow{font:700 11px var(--mono);letter-spacing:.16em;color:var(--muted);text-transform:uppercase}

/* Shell */
.shell{max-width:1600px;margin:auto;min-height:100vh;display:flex;flex-direction:column;background:radial-gradient(ellipse at 50% 45%,#13254a 0%,#0c152b 45%,#080d19 80%)}
.topbar{height:64px;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:0 clamp(16px,3vw,40px);border-bottom:1px solid var(--line);background:#0a1020e0}
.brand{font-size:19px;letter-spacing:.14em;font-weight:800;white-space:nowrap;line-height:1.1}
.slash{color:var(--pink)}
.top-actions{display:flex;align-items:center;gap:10px}
.quiet{border:1px solid var(--line-2);background:#121e33;color:#d7eaff;padding:8px 14px;border-radius:6px;font-weight:600;font-size:14px;transition:border-color .15s,background .15s}
.quiet:not(:disabled):hover{border-color:#74d9ef;background:#192941}
.primary{border:0;border-radius:6px;background:var(--cyan);color:#0b2136;padding:13px 26px;font-weight:900;letter-spacing:.06em;font-size:16px}
.primary:not(:disabled):hover{background:#b2f5ff}
.icon-button{font-size:17px;line-height:1;padding:7px 10px}
.stat-judge .judge{font-size:22px;min-height:28px}
.lines-number{font:800 26px var(--mono);font-variant-numeric:tabular-nums}
.res-details{text-align:left;margin-top:10px}
.res-details summary,.editor-advanced summary{cursor:pointer;font:700 12px var(--mono);letter-spacing:.12em;color:var(--muted);padding:6px 0}
.res-details summary:hover,.editor-advanced summary:hover{color:var(--text)}
.editor-advanced{margin:10px 0 0}
.editor-advanced .editor-fields{margin-top:8px}
.footer-left{display:flex;gap:16px;align-items:center}

/* Stage: info | play area | stats */
.stage{position:relative;flex:1;display:grid;grid-template-columns:minmax(180px,1fr) auto minmax(180px,1fr);align-items:center;gap:clamp(24px,3.5vw,56px);padding:20px clamp(16px,3vw,40px)}
.song-panel{justify-self:end;width:min(100%,240px)}
.score-panel{justify-self:start;width:min(100%,220px);display:flex;flex-direction:column;gap:22px}

/* Left panel */
.album{--a1:#476db5;--a2:#f178cd;width:min(100%,176px);aspect-ratio:1;background:radial-gradient(circle at 70% 35%,var(--a1) 0,color-mix(in srgb,var(--a1) 45%,#0b1020) 28%,color-mix(in srgb,var(--a2) 30%,#141433) 64%,#121230);position:relative;overflow:hidden;margin:0 0 14px;border:1px solid #6078a5;border-radius:4px;box-shadow:0 15px 50px #070b19a8}
.album::before{content:"";position:absolute;inset:18% -25%;border:2px solid #8eeaff;transform:rotate(-31deg);box-shadow:0 0 30px #9df5ff99}
.album::after{content:"";position:absolute;inset:37% -28%;border:16px solid var(--a2);transform:rotate(28deg);opacity:.65}
.album-lines{position:absolute;inset:12% 10%;border:2px solid #71cfe1;transform:rotate(42deg)}
.album-title{position:absolute;bottom:10px;left:12px;right:10px;font-size:calc(24px * var(--ts,1));font-weight:900;letter-spacing:.12em;line-height:1.01;text-shadow:0 2px 12px #07132e;z-index:1}
.song-title h1{font-size:20px;margin:0 0 3px;font-weight:800}
.song-title p,.mode-sub{font-size:13px;color:#a5b5cf;margin:0}
.difficulty{display:flex;justify-content:space-between;align-items:end;color:var(--pink);border-bottom:2px solid #f077c6;margin:18px 0 12px;padding-bottom:5px;font:700 12px var(--mono);letter-spacing:.14em}
.difficulty strong{font-size:24px;line-height:1}
.tempo,.progress-label{color:var(--muted);font:12px var(--mono)}
.tempo span{color:#ee77c7;margin:0 4px}
.progress-track{height:4px;background:#2a3850;margin-top:16px;border-radius:2px;overflow:hidden}
.progress-track div{height:100%;width:0;background:var(--cyan)}
.progress-label{display:flex;justify-content:space-between;margin-top:6px}
.mode-title{font-size:44px;line-height:1;letter-spacing:.04em;margin:10px 0 8px;font-weight:900}
.best{margin-top:28px;padding-top:14px;border-top:1px solid var(--line)}
.best strong{display:block;margin-top:6px;font:800 30px var(--mono);font-variant-numeric:tabular-nums;color:var(--cyan)}
.undo{margin-top:24px;width:100%;padding:11px 14px}
.hint{font-size:13px;line-height:1.7;color:#9fb6cc;margin:20px 0 0}
.hint:empty{display:none}
.restart{margin-top:18px}

/* Play area: HOLD | board + lane | NEXT, sized from --board-h */
.playfield{display:grid;grid-template-columns:var(--side-w) auto var(--side-w);align-items:start;gap:10px}
.side-box{background:var(--panel);border:1px solid var(--line-2);border-radius:4px;padding:10px 0 14px;display:flex;flex-direction:column;align-items:center}
.box-label{font:700 11px var(--mono);letter-spacing:.18em;color:var(--muted);margin-bottom:12px}
.mini-holder{min-height:calc(var(--cell) * .8 * 2);display:flex;align-items:center;justify-content:center;transition:opacity .15s}
.mini-holder.used{opacity:.3}
.mini{--mc:calc(var(--cell) * .8);display:grid;grid-template-columns:repeat(var(--w,4),var(--mc));grid-auto-rows:var(--mc);gap:1px;flex:none}
.mini-cell.filled{background:var(--piece);border:1px solid #ffffff55;box-shadow:0 0 8px color-mix(in srgb,var(--piece) 60%,transparent)}
.next-list{display:flex;flex-direction:column;align-items:center;gap:calc(var(--cell) * .7)}
.next-list .mini:not(:first-child){--mc:calc(var(--cell) * .66);opacity:.78}
.field-main{--pulse:0;--hit-color:#8ce9f7;position:relative;display:flex;border-radius:2px;box-shadow:0 0 0 1px color-mix(in srgb,#40546d,#8ce9f7 calc(var(--pulse) * 100%)),0 0 calc(var(--pulse) * 34px) rgba(140,233,247,calc(var(--pulse) * .45)),0 24px 70px #03081190}
.field-main.hit-flash{animation:hit-flash .28s ease-out}
.field-main.miss-shake{animation:miss-shake .26s ease-out}
@keyframes hit-flash{0%{box-shadow:0 0 0 2px var(--hit-color),0 0 46px var(--hit-color),0 24px 70px #03081190}100%{}}
@keyframes miss-shake{0%,100%{transform:none}20%{transform:translateX(-5px)}45%{transform:translateX(4px)}70%{transform:translateX(-2px)}}
.judge-pop{position:absolute;left:0;width:calc(var(--board-h) / 2);text-align:center;pointer-events:none;opacity:0;z-index:1}
.judge-pop.play{animation:judge-pop .62s cubic-bezier(.2,.9,.3,1) forwards}
#judge-pop-main{font:900 italic calc(var(--cell) * 1.15) SSText,system-ui,sans-serif;letter-spacing:.1em;color:var(--jc,#fff);text-shadow:0 0 18px var(--jc,#fff),0 2px 0 #06101f}
#judge-pop-sub{font:700 calc(var(--cell) * .48) var(--mono);letter-spacing:.2em;color:#e9f6ff;margin-top:2px;text-shadow:0 1px 0 #06101f}
.judge-pop.j1 #judge-pop-main{background:linear-gradient(90deg,#8ce9f7,#fff,#ff9ad7);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:none;filter:drop-shadow(0 0 12px #8ce9f7)}
#judge-pop-bonus{font:800 calc(var(--cell) * .5) var(--mono);color:#ffe9a8;margin-top:3px;letter-spacing:.06em;text-shadow:0 0 10px #ffb86b,0 1px 0 #06101f}
#judge-pop-bonus.big{font-size:calc(var(--cell) * .62);color:#fff;text-shadow:0 0 14px #ff9ad7,0 1px 0 #06101f}
.stat.beat-only{display:none}.mode-beat .stat.beat-only{display:flex}
.last-gain strong{font:800 22px var(--mono);color:#ffe9a8;font-variant-numeric:tabular-nums}
.last-gain span{display:block;margin-top:3px;font:700 11px var(--mono);letter-spacing:.1em;color:var(--muted)}
.judge-pop.j2{--jc:#ffe27a}.judge-pop.j3{--jc:#7cf0ff}.judge-pop.j4{--jc:#86f5a4}.judge-pop.j5{--jc:#ff6b9a}.judge-pop.j6{--jc:#9aa7bd}
@keyframes judge-pop{0%{opacity:0;transform:translateY(10px) scale(.55)}14%{opacity:1;transform:translateY(0) scale(1.18)}28%{transform:scale(1)}72%{opacity:1}100%{opacity:0;transform:translateY(-22px) scale(.98)}}
.combo-number.bump{animation:bump .2s ease-out}
@keyframes bump{0%{transform:scale(1.28);color:#fff}100%{transform:none}}
.combo-number{display:inline-block;transform-origin:left center}
#board{display:block;height:var(--board-h);width:calc(var(--board-h) / 2);background:#0b1627}
#lane{display:block;height:var(--board-h);width:calc(var(--board-h) * 110 / 600);background:#0b1627;border-left:1px solid #2f5f74}
.board-banner{position:absolute;left:0;top:38%;width:calc(var(--board-h) / 2);text-align:center;font:900 calc(var(--cell) * 2.2) var(--mono);letter-spacing:.04em;color:#fff;text-shadow:0 0 24px #76e5ff,0 2px 0 #0a1729;pointer-events:none;opacity:0;transform:scale(.9);transition:opacity .12s,transform .12s}
.board-banner.show{opacity:1;transform:none}
.field-bottom{display:flex;justify-content:space-between;margin-top:10px;color:#89e6f4;font:11px var(--mono);letter-spacing:.12em}

/* Right panel stats: label on top, value below */
.stat{display:flex;flex-direction:column;gap:6px}
.score-number{font:800 34px var(--mono);letter-spacing:-.04em;font-variant-numeric:tabular-nums;line-height:1}
.stat-main .score-number{font-size:38px}
.judge{font-size:28px;font-weight:900;font-style:italic;letter-spacing:.12em;color:var(--cyan);min-height:36px;line-height:1.25}
.judge.miss{color:#fc90cb}
.timing-error{font:12px var(--mono);color:#a2b6d1;min-height:16px}
.combo-number{font:800 44px var(--mono);line-height:1;font-variant-numeric:tabular-nums}
.groove-label{display:flex;justify-content:space-between;align-items:end}
.groove-label strong{color:var(--pink);font:700 14px var(--mono)}
.meter{height:6px;background:#26354d;border-radius:3px;overflow:hidden;margin-top:4px}
.meter>div{height:100%;width:0;background:linear-gradient(90deg,#b55bf0,#ff88d8);transition:width .18s}
#sprint-progress{background:var(--cyan)}
.tech{border-top:1px solid #29415a;padding-top:16px;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;color:var(--muted);font:10px var(--mono);letter-spacing:.14em}
.tech strong{display:block;margin-top:4px;color:#f4b7df;font-size:18px;letter-spacing:0}

/* Mode visibility */
.sprint-only,.zen-only{display:none}
.mode-sprint .sprint-only,.mode-zen .zen-only{display:block}
.mode-sprint .meter.sprint-only{display:block}
.mode-free .live-only{display:none!important}
.mode-free .groove-only,.mode-beat .groove-only{display:none}
.mode-zen .tech-lines{display:none}


/* Overlay */
.overlay{position:absolute;inset:0;display:grid;place-items:center;background:#071026c4;z-index:2;padding:20px;backdrop-filter:blur(8px)}
.overlay[hidden]{display:none}
.overlay-card{text-align:center;width:min(100%,440px);padding:22px 22px 20px;background:linear-gradient(155deg,#1a2c50,#11192e 67%);border:1px solid #5b91aa;border-radius:6px;box-shadow:0 25px 75px #030716c9}
.overlay-card h2{font-size:clamp(28px,4vw,40px);line-height:1;letter-spacing:.04em;margin:4px 0 14px;text-shadow:0 0 30px #5dcbd966}
.overlay-card h2::first-line{color:var(--cyan)}
.overlay-card p{line-height:1.6;color:#b9cde4;max-width:380px;margin:0 auto 16px;font-size:14px}
.overlay-card p:empty{display:none}
.mode-switch{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:0 0 14px;border:1px solid #3a5878;border-radius:8px;overflow:hidden}
.mode-switch[hidden]{display:none}
.mode-switch button{text-align:center;border:0;background:#101b30;padding:10px 4px;font:700 13px var(--mono);letter-spacing:.06em;color:#a9bfd8;transition:background .15s,color .15s}
.mode-switch button+button{border-left:1px solid #3a5878}
.mode-switch button:hover{color:var(--text)}
.mode-switch button[aria-pressed="true"]{background:#16334a;color:var(--cyan)}
.beta{font-style:normal;color:#ffb86b;margin-left:3px}
.tempo span.plain{color:inherit;margin:0}
.diff-switch{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:0 0 14px;border:1px solid #3a5878;border-radius:6px;overflow:hidden}
.diff-switch[hidden]{display:none}
.diff-switch button{border:0;background:#101b30;padding:9px 6px;font:700 12px var(--mono);letter-spacing:.12em;color:#a9bfd8}
.diff-switch button+button{border-left:1px solid #3a5878}
.diff-switch button em{font-style:normal;color:var(--pink);margin-left:4px}
.diff-switch button[data-diff="easy"][aria-pressed="true"]{background:#1d4a3a;color:#9ff5c4}
.diff-switch button[data-diff="normal"][aria-pressed="true"]{background:#16334a;color:var(--cyan)}
.diff-switch button[data-diff="hard"][aria-pressed="true"]{background:#4a1d3a;color:#ffb0dc}
.overlay{overflow:auto}
.overlay-card.has-result{width:min(100%,600px)}
.overlay-card.has-result h2{font-size:clamp(30px,4vw,42px);margin:8px 0 16px}
.result{text-align:left;margin-bottom:20px}
.result[hidden]{display:none}
.result-top{display:flex;align-items:center;gap:20px}
.rank{font:900 italic 76px/1 SSText,system-ui,sans-serif;width:110px;text-align:center;color:#8ce9f7;text-shadow:0 0 28px currentColor}
.rank[data-rank="SS"]{background:linear-gradient(135deg,#8ce9f7,#fff,#ff9ad7);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 16px #8ce9f7);font-size:64px}
.rank[data-rank="S"]{color:#ffe27a}.rank[data-rank="A"]{color:#7cf0ff}.rank[data-rank="B"]{color:#86f5a4}.rank[data-rank="C"],.rank[data-rank="D"]{color:#9aa7bd}
.result-score{display:flex;flex-direction:column;gap:4px}
.result-score strong{font:800 40px var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.03em}
.res-best{font:12px var(--mono);color:var(--muted)}.res-best.up{color:#86f5a4}
.result-badges{display:flex;gap:8px;margin:12px 0 0;min-height:4px}
.result-badges span{font:800 11px var(--mono);letter-spacing:.14em;padding:4px 8px;border-radius:3px;background:linear-gradient(90deg,#ffe27a,#ff9ad7);color:#20122a}
.result-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:16px 0}
.result-grid div{background:#0d1a2e;border:1px solid #2c425d;border-radius:4px;padding:8px 10px}
.result-grid .eyebrow{letter-spacing:.06em;white-space:nowrap}
.result-grid strong{display:block;margin-top:4px;font:800 18px var(--mono);font-variant-numeric:tabular-nums}
.result-judges{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.rj{text-align:center;padding:6px 2px;border-radius:4px;background:#0d1a2e;border-top:2px solid var(--rc)}
.rj span{display:block;font:700 9px var(--mono);letter-spacing:.1em;color:var(--rc)}
.rj strong{font:800 18px var(--mono)}
.result-judges:has(.rj7){grid-template-columns:repeat(7,1fr)}
.rj7{--rc:#ffb86b}
.rj1{--rc:#e8f6ff}.rj2{--rc:#ffe27a}.rj3{--rc:#7cf0ff}.rj4{--rc:#86f5a4}.rj5{--rc:#ff6b9a}.rj6{--rc:#9aa7bd}
.histogram{margin-top:16px}
.hist-bars{height:64px;display:flex;align-items:flex-end;gap:3px;padding:0 2px;border-bottom:1px solid #3a5878}
.hist-bar{flex:1;background:#7cf0ff;border-radius:2px 2px 0 0;opacity:.85}
.hist-bar.fast{background:#79a5fb}.hist-bar.late{background:#ff9ad7}.hist-bar.center{background:#ffe27a}
.hist-axis{display:flex;justify-content:space-between;margin-top:5px;font:10px var(--mono);color:var(--muted)}
.res-offset{margin:10px 0 0!important;max-width:none!important;font:12px var(--mono);color:#b9cde4!important;line-height:1.6!important}
@media(max-width:520px){.result-grid{grid-template-columns:repeat(2,1fr)}.result-judges{grid-template-columns:repeat(3,1fr)}.rank{font-size:56px;width:80px}.result-score strong{font-size:28px}}
.song-list{display:flex;flex-direction:column;gap:4px;margin:0 0 12px;max-height:260px;overflow:auto}
.song-list[hidden]{display:none}
.song-card{--a1:#476db5;--a2:#f178cd;display:grid;grid-template-columns:32px 1fr auto;gap:10px;align-items:center;text-align:left;border:1px solid transparent;background:#101b30;border-radius:6px;padding:5px 10px 5px 5px;transition:border-color .15s,background .15s}
.song-card:not(:disabled):hover{border-color:#74d9ef}
.song-card[aria-pressed="true"]{border-color:var(--cyan);background:#16334a;box-shadow:inset 0 0 0 1px var(--cyan)}
.song-art{width:32px;height:32px;border-radius:4px;background:linear-gradient(135deg,var(--a1),var(--a2));box-shadow:inset 0 0 0 1px #ffffff33}
.song-text strong{display:block;font-size:14px}
.song-text span{display:block;margin-top:2px;font-size:11px;color:var(--muted)}
.song-levels{font:700 11px var(--mono);color:var(--pink);letter-spacing:.06em}
.submit-block{text-align:left;margin:0 0 18px;padding:12px;border:1px solid #2c425d;border-radius:6px;background:#0d1a2e;display:grid;grid-template-columns:1fr auto;gap:8px 10px;align-items:end}
.submit-block[hidden]{display:none}
.name-field{display:flex;flex-direction:column;gap:5px}
.name-field input{background:#101b30;border:1px solid #3a5878;border-radius:5px;padding:8px 10px;font-size:14px;color:var(--text)}
.name-field input:focus{outline:2px solid var(--cyan);outline-offset:1px}
.submit-status{grid-column:1/-1;margin:0!important;max-width:none!important;font-size:12px!important;min-height:0;color:#b9cde4!important}
.submit-status:empty{display:none}
.submit-status.ok{color:#86f5a4!important}.submit-status.err{color:#fc90cb!important}
.board-list{grid-column:1/-1;list-style:none;margin:0;padding:0;counter-reset:rank;font:12px var(--mono)}
.board-list:empty{display:none}
.board-list li{counter-increment:rank;display:grid;grid-template-columns:26px 1fr auto;gap:8px;padding:4px 2px;border-bottom:1px solid #1d2d45}
.board-list li::before{content:counter(rank);color:var(--muted);text-align:right}
.board-list li.me{color:var(--cyan)}
.board-list li span:last-child{font-variant-numeric:tabular-nums;color:#f4b7df}
.board-list li.empty{grid-template-columns:1fr;color:var(--muted)}
.board-list li.empty::before{content:none}
.side-board{margin-top:22px;padding-top:14px;border-top:1px solid var(--line)}
.side-board[hidden]{display:none}
.side-board-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px}
.side-board-name{font:11px var(--mono);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#start-button{width:100%}
.menu-button{width:100%;margin-top:8px}
.menu-button[hidden]{display:none}
.overlay-foot{color:#8199b5;font-size:12px;margin-top:16px}

/* Settings dialog */
dialog{width:min(calc(100% - 20px),690px);max-height:min(88vh,720px);overflow:auto;background:#111c30;border:1px solid #558197;border-radius:6px;color:#e8f5ff;padding:25px;box-shadow:0 40px 100px #000b}
dialog::backdrop{background:#010716bf;backdrop-filter:blur(5px)}
.dialog-header,.dialog-footer{display:flex;justify-content:space-between;align-items:center;gap:20px}
.dialog-header h2{font-size:27px;margin:4px 0 20px}
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:35px}
.settings-grid h3{font:700 12px var(--mono);letter-spacing:.14em;color:#8be4f2;margin:0 0 16px}
.bind-row{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #2a3b55;min-height:40px;gap:12px}
.bind-row button{background:#23354d;border:1px solid #49637e;color:#e9f7ff;border-radius:4px;padding:4px 8px;min-width:79px}
.bind-row button.recording{border-color:#f38bcf;color:#ff9ad7}
.setting-message,.setting-note{color:#a6bad2;font-size:13px;line-height:1.5}
.setting-message{min-height:36px}
.slider{display:block;margin-bottom:21px}
.slider span{display:flex;justify-content:space-between;margin-bottom:7px}
.slider output{color:#92e9f7;font:13px var(--mono)}
.slider input{width:100%;accent-color:var(--cyan)}
.effects-heading{margin-top:24px!important}
.about-body{font-size:14px;line-height:1.7;color:#c9d9ec;max-width:640px}
.about-body h3{font:700 12px var(--mono);letter-spacing:.14em;color:#8be4f2;margin:18px 0 6px}
.about-body p{margin:0 0 8px}
.about-body a{color:var(--cyan)}
.linklike{background:none;border:0;padding:0;color:var(--cyan);text-decoration:underline;font:inherit;cursor:pointer}
.lang-select{width:100%;background:#101b30;border:1px solid #3a5878;border-radius:5px;padding:8px 10px;color:var(--text);font-size:14px;margin-bottom:6px}
.toggle[hidden]{display:none}
.toggle{display:flex;gap:10px;align-items:flex-start;margin-bottom:14px;cursor:pointer}
.toggle input{margin-top:3px;accent-color:var(--cyan);width:16px;height:16px;flex:none}
.toggle small{display:block;margin-top:3px;color:#a6bad2;font-size:12px;line-height:1.5}
.dialog-footer{border-top:1px solid #2d4259;margin-top:17px;padding-top:18px}

/* Chart tool and workshop */
.wide-dialog{width:min(calc(100% - 20px),1100px);max-height:92vh}
.editor-status{min-height:20px;margin:0 0 12px;font-size:13px;color:#b9cde4}
.editor-status.err{color:#fc90cb}
.editor-drop{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 20px;border:2px dashed #3a5878;border-radius:8px;cursor:pointer;color:#b9cde4;text-align:center}
.editor-drop[hidden]{display:none}
.editor-drop.over,.editor-drop:hover{border-color:var(--cyan);background:#0f2238}
.editor-drop strong{font-size:18px;color:var(--text)}
.editor-drop span{font-size:13px;color:var(--muted)}
.editor-fields{display:grid;grid-template-columns:2fr 2fr 2fr 1fr 1.3fr;gap:10px;align-items:end}
.editor-fields label,.zoom{display:flex;flex-direction:column;gap:5px}
.editor-fields input,.workshop-search{background:#101b30;border:1px solid #3a5878;border-radius:5px;padding:8px 10px;font-size:14px;color:var(--text);min-width:0}
.editor-grid-buttons{grid-column:1/-1;display:flex;gap:8px;flex-wrap:wrap}
.editor-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:14px 0 10px}
.editor-toolbar .diff-switch{margin:0;width:280px}
.editor-toolbar .diff-switch button[aria-pressed="true"]{background:#16334a;color:var(--cyan)}
.toggle.inline{margin:0;align-items:center}
.zoom input{width:140px;accent-color:var(--cyan)}
.tool-toggle[aria-pressed="true"]{border-color:#ffb86b;background:#3a2410;color:#ffd6a8}
.editor-meta{font:12px var(--mono);color:var(--muted);margin:0}
.editor-canvas{display:block;width:100%;height:230px;border:1px solid #2c425d;border-radius:4px;cursor:crosshair}
.editor-workshop{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.editor-workshop p{margin:0;font-size:13px;color:#b9cde4}
.editor-workshop button{text-align:left;font-size:13px}
.editor-footer{align-items:flex-end;flex-wrap:wrap}
.editor-share{display:flex;gap:18px;align-items:flex-end;flex-wrap:wrap}
.editor-actions{display:flex;gap:10px;flex-wrap:wrap}
.workshop-search{width:100%;margin-bottom:10px}
.workshop-list{display:flex;flex-direction:column;gap:8px;max-height:60vh;overflow:auto}
.workshop-row{display:grid;grid-template-columns:40px 1fr auto;gap:12px;align-items:center;padding:8px;border:1px solid #2c425d;border-radius:6px;background:#0d1a2e}
.workshop-row .row-note{grid-column:1/-1;margin:0;font-size:12px;color:#b9cde4}
.row-note.err{color:#fc90cb}.row-note.ok{color:#86f5a4}
.row-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.file-button{cursor:pointer;font-size:13px}
.song-actions{display:flex;gap:6px;justify-content:flex-end}
.song-actions button{font-size:12px;padding:5px 10px}
.song-text .tag{display:inline-block;margin:0 0 0 6px}
.song-card .tag{font:700 9px var(--mono);letter-spacing:.1em;color:#0b2136;background:var(--cyan);border-radius:3px;padding:1px 5px;margin-left:6px;vertical-align:2px}
.song-card .tag.ws{background:#ffb86b}
.song-card .tag.online{background:#86f5a4}
.top-upload{padding:8px 14px;min-height:0;font-size:14px}
.song-actions{order:-1}
.song-row{display:grid;grid-template-columns:1fr auto;gap:6px}
.song-delete{padding:0 10px;font-size:13px}

/* Narrow: info on top, stats below, board fits the width */
@media(max-width:1000px){
  :root{--side-w:clamp(58px,11vw,92px);--board-h:min(clamp(320px,calc(100vh - 300px),720px),calc((100vw - 2 * var(--side-w) - 56px) * 1.46))}
  .stage{grid-template-columns:1fr;justify-items:center;align-items:start;gap:18px}
  .song-panel{justify-self:stretch;width:100%;display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px}
  .song-info{display:grid;grid-template-columns:56px 1fr auto;gap:2px 14px;align-items:center;flex:1}
  .song-info>.eyebrow,.song-info .tempo,.song-info .progress-track,.song-info .progress-label{display:none}
  .album{grid-row:1/3;width:56px;margin:0}
  .album-title{font-size:calc(9px * var(--ts,1));left:5px;bottom:5px}
  .difficulty{margin:0;grid-column:3;grid-row:1/3;min-width:72px}
  .mode-info{flex:1}.mode-title{font-size:28px;margin:4px 0}
  .best{margin:0;padding:0;border:0}.best strong{font-size:20px}
  .undo{width:auto;margin:0}
  .hint,.side-board{display:none!important}
  .restart{margin:0}
  .score-panel{justify-self:stretch;width:100%;flex-direction:row;flex-wrap:wrap;gap:14px 26px}
  .tech{border:0;padding:0;flex:1;min-width:200px}
}
@media(max-width:520px){
  .topbar{padding:0 12px}.brand{font-size:15px;letter-spacing:.07em}
  .top-actions{gap:5px}.top-actions .quiet{padding:7px 9px;font-size:12px}
  .stage{padding:12px}
  .next-list .mini:nth-child(n+4){display:none}
  .score-number,.stat-main .score-number{font-size:24px}.combo-number{font-size:28px}.judge{font-size:20px}
  .settings-grid{grid-template-columns:1fr;gap:16px}dialog{padding:16px}
  .editor-fields{grid-template-columns:1fr 1fr}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
