/* kzna · 20초 HEART BEAT — 가로 전용 레이아웃 */
:root{
 color-scheme:dark;
 --bg:#101326;--bg-deep:#0a061b;--panel:#1b2037;--line:#363c58;--text:#f4f3fc;--muted:#b4b8ce;
 --pink:#ff36c9;--mint:#35ffe1;--violet:#a06bff;--gold:#ffe679;
 --lane0:#ff4fc8;--lane1:#a875ff;--lane2:#35ffe1;--lane3:#ffe36b;
 --accent:#ff36c9;--secondary:#b16dff;--member:#ff4fc8;
 --safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px);
 --safe-t:env(safe-area-inset-top,0px);--safe-b:env(safe-area-inset-bottom,0px);
 --pad-x:max(16px,var(--safe-l),var(--safe-r));
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg-deep);color:var(--text);
 font-family:"Pretendard","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;line-height:1.5;
 -webkit-text-size-adjust:100%;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
button:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--mint);outline-offset:3px}
button:disabled{opacity:.55;cursor:default}
[hidden]{display:none!important}
h1,h2,p{margin:0}
.app{position:fixed;inset:0;overflow:hidden;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.screen{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--bg)}
.pre{white-space:pre-line}
:lang(ja) body{font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,system-ui,sans-serif}
.topbar-tools{display:flex;align-items:center;gap:10px}
.lang-switch{display:flex;border:1px solid #4b4570;border-radius:999px;background:#140d2bcc;padding:2px}
.lang-switch button{border:0;background:none;color:#a59cc6;font-size:11px;font-weight:800;min-height:34px;min-width:44px;padding:0 10px;border-radius:999px}
.lang-switch button[aria-pressed=true]{background:linear-gradient(110deg,#ff4acc,#b45bff);color:#fff}
.intro-lang{position:absolute;z-index:3;top:calc(10px + var(--safe-t));right:var(--pad-x)}
.logo{line-height:0}
.logo-img{display:block;height:100%;width:auto;user-select:none;-webkit-user-drag:none}
.logo .logo-img{height:clamp(16px,5.4dvh,24px)}
.phone-portrait .logo .logo-img{height:22px}
.eyebrow{font-size:10px;letter-spacing:2px;color:var(--mint);font-weight:800}
.small{font-size:10px;color:var(--muted);letter-spacing:1px}
.primary{border:0;border-radius:12px;font-weight:800;font-size:14px;min-height:48px;padding:10px 20px;color:#fff;
 background:linear-gradient(110deg,#ff4acc,#b45bff);box-shadow:0 5px 24px #ff36c944}
.primary:active{transform:translateY(1px)}
.secondary{min-height:48px;border:1px solid #4b4570;background:#1e1838;border-radius:10px;font-size:12px;padding:6px 12px}

/* 상단 바 */
.topbar{flex:0 0 auto;height:clamp(40px,12dvh,50px);padding:0 var(--pad-x);padding-top:var(--safe-t);display:flex;align-items:center;justify-content:space-between;gap:16px;
 background:#0c0921d9;border-bottom:1px solid #2b2550;position:relative;z-index:6}
.steps{display:flex;gap:18px;list-style:none;margin:0;padding:0;font-size:10px;letter-spacing:1px;color:#8d88a8}
.steps b{color:inherit;margin-right:3px}
.steps [aria-current]{color:var(--pink);font-weight:800}

/* 00 · 세로 차단 */
.rotate-gate{position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;background:var(--bg);text-align:center;padding:24px}
.phone-portrait{width:min(240px,70vw);padding:36px 18px;border:2px solid #7b7e96;border-radius:28px;background:#151a30;display:flex;flex-direction:column;align-items:center;gap:14px}
.rotate-icon{font-size:52px;color:var(--pink);line-height:1;animation:rotate-hint 2.4s ease-in-out infinite}
.phone-portrait h2{font-size:18px;line-height:1.45}
.phone-portrait p{font-size:12px;color:var(--muted)}
@keyframes rotate-hint{0%,30%{transform:rotate(0)}60%,100%{transform:rotate(90deg)}}
@media (orientation:portrait){
 .rotate-gate{display:flex}
 .screen{visibility:hidden}
}

/* 01 · 곡 선택 */
.selector{flex:1;position:relative;overflow:hidden;isolation:isolate;
 background:radial-gradient(ellipse at 50% 35%,color-mix(in srgb,var(--accent) 34%,transparent) 0,transparent 55%),#100b24;transition:background .4s}
.selector:before,.selector:after{content:"";position:absolute;width:120%;height:60px;left:-10%;top:24%;transform:rotate(-18deg);
 background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.14;z-index:-1;transition:background .35s}
.selector:after{top:50%;transform:rotate(23deg);background:linear-gradient(90deg,transparent,var(--secondary),transparent);height:24px}
.selector-grid{position:absolute;inset:0;opacity:.12;pointer-events:none;z-index:-1;
 background-image:linear-gradient(#b072ff 1px,transparent 1px),linear-gradient(90deg,#b072ff 1px,transparent 1px);background-size:40px 40px;
 mask-image:linear-gradient(transparent,black);-webkit-mask-image:linear-gradient(transparent,black);transform:perspective(250px) rotateX(55deg) scale(1.8)}
.selector-glow{position:absolute;left:30%;right:-10%;bottom:-30%;height:90%;z-index:-1;pointer-events:none;
 background:radial-gradient(ellipse at 60% 70%,color-mix(in srgb,var(--member) 40%,transparent),transparent 60%);transition:background .4s}
.selector-heading{position:absolute;top:10px;left:var(--pad-x);z-index:5}
.selector-heading h1{font-size:clamp(11px,3.6dvh,14px);letter-spacing:2px;color:#cfc6ec}
.selector-heading p{font-size:11px;letter-spacing:2px;color:#8f86b0}
.selector-heading p b{font-size:clamp(18px,7dvh,26px);color:#fff;letter-spacing:-1px;margin-right:2px}
.icon-button{width:44px;height:44px;border-radius:50%;border:1px solid #5f427e;background:#211637;font-size:18px;display:grid;place-items:center;position:relative}
.icon-button[aria-pressed=false]:after{content:"";position:absolute;width:26px;height:2px;background:#ff8bc8;transform:rotate(-45deg);border-radius:2px}
.icon-button[aria-pressed=true]{border-color:var(--mint);color:var(--mint);box-shadow:0 0 12px #35ffe155}

/* 앨범 캐러셀 — 화면 끝에서 끝까지 */
.select-screen{--size:clamp(120px,50dvh,240px);--play-w:min(200px,26vw)}
.carousel{position:absolute;left:0;right:0;top:4%;height:calc(var(--size) + 30px);touch-action:pan-y;cursor:grab;outline-offset:-4px;z-index:2}
.carousel.dragging{cursor:grabbing}
.album{position:absolute;width:var(--size);height:var(--size);left:calc(50% - var(--size)/2);top:4px;border:0;background:transparent;padding:0;
 transition:transform .45s cubic-bezier(.2,.8,.2,1),opacity .3s,filter .3s;will-change:transform;opacity:0;transform:scale(.4);pointer-events:none}
.album[data-position="0"]{transform:translateX(var(--drag,0px));opacity:1;z-index:4;pointer-events:auto;filter:drop-shadow(0 0 28px color-mix(in srgb,var(--accent) 55%,transparent))}
.album[data-position="-1"]{transform:translateX(calc(max(var(--size)*1.4,26vw)*-1 + var(--drag,0px))) translateY(-4%) scale(.6);opacity:.55;z-index:3;pointer-events:auto}
.album[data-position="1"]{transform:translateX(calc(max(var(--size)*1.4,26vw) + var(--drag,0px))) translateY(-4%) scale(.6);opacity:.55;z-index:3;pointer-events:auto}
.album[data-position="-2"]{transform:translateX(calc(max(var(--size)*2.35,44vw)*-1 + var(--drag,0px))) translateY(12%) scale(.48);opacity:.25;z-index:2}
.album[data-position="2"]{transform:translateX(calc(max(var(--size)*2.35,44vw) + var(--drag,0px))) translateY(12%) scale(.48);opacity:.25;z-index:2}
.dragging .album{transition:none}
.record{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:4%;width:100%;height:100%;border-radius:50%;
 border:8px solid #080815;box-shadow:0 0 0 1px #ffffff3d,inset 0 0 0 2px #ffffff52;color:#fff;overflow:hidden;
 background:radial-gradient(circle at 30% 30%,var(--cover-a),transparent 62%),linear-gradient(140deg,#161136,var(--cover-b))}
/* 홈만 회전하고 곡명은 똑바로 유지 */
.record:before{content:"";position:absolute;inset:0;border-radius:50%;background:repeating-conic-gradient(from 25deg,#ffffff16 0deg 3deg,transparent 3deg 28deg);
 box-shadow:inset 0 0 0 calc(var(--size)*.09) #ffffff06}
.album[data-position="0"] .record:before{animation:spin 6s linear infinite}
.album[data-position="0"] .record{box-shadow:0 0 0 3px var(--accent),0 0 0 9px #ffffff0a,inset 0 0 0 2px #ffffff70}
.record .cover-mark{font-size:calc(var(--size)*.26);line-height:1;font-weight:900;letter-spacing:-.06em;text-shadow:3px 3px #100d3199;z-index:1;margin-bottom:6%}
.record .cover-title{max-width:76%;text-align:center;overflow-wrap:anywhere;font-size:calc(var(--size)*.07);line-height:1.2;font-weight:900;text-transform:uppercase;z-index:1;text-shadow:0 1px 6px #0008}
.record .peak-mark{z-index:1;margin-top:3%;font-size:calc(var(--size)*.045);font-weight:800;letter-spacing:.2em;color:#ffffffc7;white-space:nowrap}
/* 중앙 CD의 'OO'S PICK' — 이 곡을 고른 멤버를 알리는 배지 */
.album[data-position="0"] .peak-mark{display:inline-flex;align-items:center;gap:.35em;padding:.35em .9em;border-radius:999px;font-size:calc(var(--size)*.06);font-weight:900;letter-spacing:.14em;color:#fff;
 background:linear-gradient(110deg,var(--peak),color-mix(in srgb,var(--peak) 45%,#6b2cff));border:1.5px solid #ffffffb0;
 box-shadow:0 0 14px var(--peak),0 3px 10px #0007;text-shadow:0 1px 3px #0006;animation:peak-glow 1.6s ease-in-out infinite}
.album[data-position="0"] .peak-mark:before{content:"♥";display:inline-block;animation:beat 1s ease-in-out infinite}
@keyframes peak-glow{0%,100%{box-shadow:0 0 10px var(--peak),0 3px 10px #0007}50%{box-shadow:0 0 22px var(--peak),0 3px 10px #0007}}
.record small{font-size:calc(var(--size)*.042);letter-spacing:.25em;color:#ffffffd0;z-index:1}
@keyframes spin{to{transform:rotate(360deg)}}
.carousel-arrow{position:absolute;top:calc(4% + 4px + var(--size)/2 - 24px);width:44px;height:48px;background:#140c2bcc;border:1px solid #ffffff35;border-radius:12px;color:#fff;font-size:26px;z-index:6}
.carousel-arrow.prev{left:var(--pad-x)}
.carousel-arrow.next{right:var(--pad-x)}

/* Pick 멤버 — 가운데 아래에서 앨범과 겹쳐 곡을 가리킨다 */
.picker{position:absolute;inset:0;margin:0;z-index:4;pointer-events:none}
/* 앨범 오른쪽 아래 모서리만 손끝이 닿도록: 곡명·옆 앨범을 가리지 않는 높이와 위치 */
/* 오른쪽 열(다음 화살표 · 말풍선 · 플레이 버튼) 바로 왼쪽에 선다 — 버튼·말풍선과 겹치지 않음 */
.picker-figure{position:absolute;right:calc(var(--pad-x) + var(--play-w) + 12px);bottom:0;height:56%}
.picker-image{display:block;height:100%;width:auto;filter:drop-shadow(0 0 16px color-mix(in srgb,var(--member) 60%,transparent))}
.picker.enter .picker-figure{animation:member-in .45s cubic-bezier(.2,.9,.25,1.1)}
.bubble{position:absolute;right:var(--pad-x);top:40%;width:var(--play-w);background:#fff;color:#1a1230;border-radius:16px;padding:8px 12px 10px;
 box-shadow:0 8px 28px #0008,0 0 0 3px var(--member);z-index:5;transform-origin:0 50%;line-break:strict;overflow-wrap:anywhere}
.bubble:after{content:"";position:absolute;left:-13px;top:18px;border:9px solid transparent;border-right:15px solid #fff;filter:drop-shadow(-3px 0 0 var(--member))}
.picker.enter .bubble{animation:bubble-in .5s .15s cubic-bezier(.2,.9,.25,1.2) both}
.bubble q{display:block;font-size:clamp(11px,3.4dvh,13px);line-height:1.45;font-weight:700;quotes:none}
@keyframes member-in{from{transform:translateY(18%);opacity:0}}
@keyframes bubble-in{from{transform:scale(.5);opacity:0}to{transform:none;opacity:1}}
@keyframes beat{0%,100%{transform:scale(1)}15%{transform:scale(1.35)}30%{transform:scale(1)}45%{transform:scale(1.2)}}

.selection-caption{position:absolute;left:var(--pad-x);bottom:calc(4px + var(--safe-b));width:min(40%,340px);z-index:5;pointer-events:none}
.selection-caption .pagination{pointer-events:auto}
/* 난이도(곡별 레벨) · 길이 선택 */
.mode-row{display:flex;align-items:center;gap:4px;margin-top:4px;pointer-events:auto}
.mode-row button{min-height:32px;border-radius:9px;border:1px solid #4b4570;background:#140d2bcc;color:#a59cc6;font-size:10px;font-weight:900;letter-spacing:1px;padding:2px 8px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.mode-row button i{font-style:normal;font-weight:700;letter-spacing:0;opacity:.85}
.mode-row button[aria-pressed=true]{color:#fff;border-color:var(--mint);box-shadow:0 0 10px #35ffe144}
.diff-note{font-size:9px;color:#cfc6ec;margin-left:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.result-mode{font-size:10px;font-weight:800;letter-spacing:1px;color:#cfc6ec;border:1px solid #4b4570;border-radius:6px;padding:1px 6px;white-space:nowrap}
.song-best{font-size:10px;font-weight:800;letter-spacing:1.5px;color:#ffe679;min-height:0;text-shadow:0 1px 6px #000c}
.song-title{font-size:clamp(20px,8dvh,32px);line-height:1.15;font-weight:900;letter-spacing:-.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 2px 14px #000c}
.preview-state{display:flex;align-items:center;gap:7px;color:#c6c0d9;font-size:10px;margin-top:2px;pointer-events:none}
.equalizer{height:12px;display:inline-flex;gap:2px;align-items:center}
.equalizer i{background:var(--mint);width:2px;height:4px}
.preview-state.is-playing i{animation:equalize .6s ease-in-out infinite alternate}
.preview-state.is-playing i:nth-child(2){animation-delay:-.3s}.preview-state.is-playing i:nth-child(3){animation-delay:-.1s}
@keyframes equalize{to{height:12px}}
.pagination{display:flex;align-items:center;margin-left:-6px}
.pagination button{background:transparent;border:0;min-width:22px;min-height:40px;padding:0;display:grid;place-items:center}
.pagination button:after{content:"";width:6px;height:6px;border-radius:50%;background:#77718f;transition:width .2s}
.pagination button[aria-current=true]:after{width:18px;border-radius:5px;background:var(--mint);box-shadow:0 0 9px #35ffe177}
.play-button{position:absolute;right:var(--pad-x);bottom:calc(10px + var(--safe-b));z-index:6;width:var(--play-w);min-height:52px;padding:10px 8px;font-size:15px;white-space:nowrap}
.bubble.compact{padding:6px 10px 8px}
.bubble.compact q{font-size:11px;line-height:1.4}
.bubble.tiny{padding:5px 9px 6px}
.bubble.tiny q{font-size:10px;line-height:1.35}

/* 00 · 인트로 */
.intro-screen{align-items:center;justify-content:center;overflow:hidden;cursor:pointer;
 background:radial-gradient(ellipse at 50% 45%,#4c176b 0,transparent 55%),radial-gradient(ellipse at 50% 120%,#ff36c944,transparent 60%),#0d0920}
.intro-members{position:absolute;inset:0;pointer-events:none}
.intro-members img{position:absolute;bottom:0;height:80%;filter:drop-shadow(0 0 16px color-mix(in srgb,var(--c) 55%,transparent));
 mask-image:linear-gradient(#000 70%,transparent);-webkit-mask-image:linear-gradient(#000 70%,transparent);animation:member-in .7s cubic-bezier(.2,.9,.25,1.1) both}
.intro-members img:nth-child(1){left:-3%;animation-delay:.05s}
.intro-members img:nth-child(2){left:14%;height:72%;opacity:.85;animation-delay:.15s}
.intro-members img:nth-child(3){right:14%;height:72%;opacity:.85;animation-delay:.25s}
.intro-members img:nth-child(4){right:-3%;animation-delay:.35s}
.intro-center{position:relative;z-index:2;text-align:center;display:flex;flex-direction:column;align-items:center;gap:clamp(4px,2dvh,12px);padding:0 16px}
.intro-logo{margin:0;line-height:0}
.intro-logo .logo-img{height:clamp(40px,17dvh,76px);filter:drop-shadow(0 0 18px #ff36c999) drop-shadow(0 2px 8px #0008)}
.intro-tagline{font-size:clamp(12px,4.2dvh,16px);font-weight:800;color:#f2e9ff;text-shadow:0 2px 10px #000}
.intro-start{width:clamp(110px,40dvh,150px);aspect-ratio:1;border-radius:50%;border:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
 background:radial-gradient(circle at 35% 30%,#ff7ad9,#ff36c9 45%,#8a2cff);box-shadow:0 0 0 6px #ff36c933,0 0 0 14px #ff36c914,0 0 40px #ff36c9aa;animation:start-beat 1.1s ease-in-out infinite}
.intro-start i{font-style:normal;font-size:clamp(28px,11dvh,44px);line-height:1}
.intro-start b{font-size:clamp(9px,3dvh,12px);letter-spacing:1.5px}
.intro-start small{font-size:clamp(7px,2.2dvh,9px);letter-spacing:1.5px;opacity:.85}
@keyframes start-beat{0%,100%{transform:scale(1)}14%{transform:scale(1.08)}28%{transform:scale(1)}42%{transform:scale(1.05)}}
.intro-note{font-size:11px;color:#cfc6ec;text-shadow:0 2px 8px #000}

/* 02 · 플레이 */
.play-screen{background:var(--bg-deep)}
.stage,.touch-surface{position:absolute;inset:0;width:100%;height:100%}
.touch-surface{z-index:3;touch-action:none}
.stage-member{position:absolute;right:-2%;bottom:0;height:88%;opacity:.16;transition:opacity .5s,filter .5s;filter:saturate(.6) blur(.5px);pointer-events:none;mask-image:linear-gradient(90deg,transparent,#000 50%);-webkit-mask-image:linear-gradient(90deg,transparent,#000 50%)}
.hud{position:absolute;top:calc(8px + var(--safe-t));left:var(--pad-x);right:var(--pad-x);display:flex;align-items:flex-start;gap:14px;z-index:5;pointer-events:none}
.hud-button{pointer-events:auto;min-height:44px;min-width:44px;font-size:16px;background:#1b103ae6;border:1px solid #4b3a74;border-radius:10px}
.scorebox{width:clamp(120px,22vw,170px)}
.scorebox small{color:#e0b9ff;font-size:9px;letter-spacing:2px}
.scorebox strong{display:block;font-size:clamp(20px,7dvh,28px);line-height:1.1;font-variant-numeric:tabular-nums;letter-spacing:-1px}
.sync-meter{height:5px;margin-top:5px;background:#362449;border-radius:3px;overflow:hidden}
.sync-meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,#ff36c9,#ad54ff,#35ffe1);box-shadow:0 0 10px #ff36c999;transition:width .15s}
.sync-caption{font-size:9px;color:var(--mint);letter-spacing:1px;margin-top:2px}
.phase{margin:0 auto;text-align:center;font-size:10px;letter-spacing:2px;color:#d9cdf0}
.phase-dots{display:flex;gap:6px;justify-content:center;list-style:none;margin:2px 0;padding:0}
.phase-dots li{width:22px;height:4px;border-radius:2px;background:#3a2d5a}
.phase-dots li.done{background:#ff9be3}
.phase-dots li.now{background:var(--gold);box-shadow:0 0 8px var(--gold)}
.track-label{text-align:right;font-size:12px}
.track-label b{display:block;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.track-label small{font-size:10px;color:#c3bad9;font-variant-numeric:tabular-nums}
.judgment{position:absolute;left:25%;right:25%;top:24%;text-align:center;pointer-events:none;z-index:4;text-shadow:0 0 18px #ff36c9aa}
.judgment b{display:block;font-size:clamp(18px,7dvh,30px);font-style:italic;font-weight:900;letter-spacing:1px;line-height:1.15}
.judgment strong{display:block;font-size:clamp(28px,12dvh,52px);line-height:1;letter-spacing:-2px;font-variant-numeric:tabular-nums}
.judgment small{display:block;color:#bafef4;font-size:9px;letter-spacing:3px}
/* 판정은 튀어나왔다가 금방 사라져 내려오는 하트를 가리지 않는다 */
.judgment.bump b{animation:judge-life .75s ease-out forwards}
.judgment strong,.judgment small{opacity:.78}
.timing{display:block;height:13px;font-style:normal;font-size:10px;font-weight:900;letter-spacing:3px;margin-top:1px}
.timing[data-dir=FAST]{color:#7fd9ff}
.timing[data-dir=SLOW]{color:#ffb36b}
.judgment.bump .timing{animation:judge-life .75s ease-out forwards}
@keyframes judge-life{0%{transform:scale(1.35);opacity:1}18%{transform:scale(1)}55%{opacity:1}100%{opacity:0;transform:translateY(-6px)}}
.judgment[data-grade=PERFECT] b{color:#fff1a2}
.judgment[data-grade=GREAT] b{color:#9cfff0}
.judgment[data-grade=GOOD] b{color:#d6b8ff}
.judgment[data-grade=MISS] b{color:#8a86a3;text-shadow:none}
@keyframes judge-pop{from{transform:scale(1.25)}to{transform:scale(1)}}
/* FEVER: 멤버 실루엣이 밝아진다 */
.play-screen.fever .stage-member{opacity:.38;filter:saturate(1.1) drop-shadow(0 0 18px var(--member))}
/* 페이즈 · 콤보 · FEVER · 마무리 배너 */
.banner{position:absolute;left:var(--pad-x);top:36%;width:min(30%,260px);z-index:5;pointer-events:none;text-align:left;opacity:0;
 padding:6px 12px;border-left:3px solid var(--member,#ff36c9);background:linear-gradient(90deg,#0b0820d9,transparent)}
.banner b{display:block;font-size:clamp(15px,5.6dvh,24px);font-weight:900;font-style:italic;letter-spacing:1px;color:#fff;text-shadow:0 0 14px var(--member,#ff36c9);white-space:nowrap}
.banner small{display:block;font-size:clamp(9px,2.8dvh,12px);font-weight:700;color:#e9dcff;margin-top:1px}
.banner.show{animation:banner-sweep 1.2s cubic-bezier(.2,.8,.2,1) forwards}
.banner[data-tone=combo] b{color:#fff1a2}
.banner[data-tone=fever]{border-left-color:#ffe679}
.banner[data-tone=fever] b{background:linear-gradient(90deg,#ff7ad9,#ffe679,#35ffe1,#a875ff,#ff7ad9);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:rainbow 1s linear infinite}
/* 곡이 끝났을 때의 칭호는 화면 가운데 크게 */
.banner[data-tone=gold],.banner[data-tone=clear]{left:0;right:0;width:auto;top:40%;text-align:center;border:0;padding:10px 0;background:linear-gradient(90deg,transparent,#0b0820d9 20%,#0b0820d9 80%,transparent)}
.banner[data-tone=gold] b,.banner[data-tone=clear] b{font-size:clamp(26px,11dvh,46px)}
.banner[data-tone=gold] b{color:#ffe679}
.banner[data-tone=gold].show,.banner[data-tone=clear].show{animation:banner-hold 1.5s cubic-bezier(.2,.8,.2,1) forwards}
@keyframes banner-sweep{0%{opacity:0;transform:translateX(-40px)}12%{opacity:1;transform:none}75%{opacity:1;transform:none}100%{opacity:0;transform:translateX(-20px)}}
@keyframes banner-hold{0%{opacity:0;transform:scale(1.6)}20%{opacity:1;transform:scale(1)}100%{opacity:1;transform:scale(1)}}
@keyframes rainbow{to{background-position:-200% 0}}
.countdown{position:absolute;inset:0;display:grid;place-items:center;padding-bottom:8dvh;z-index:6;pointer-events:none;font-size:clamp(60px,30dvh,120px);font-weight:900;color:#fff;text-shadow:0 0 30px var(--pink)}
.countdown span{display:flex;flex-direction:column;align-items:center;text-align:center;line-height:1;animation:count-pop .9s ease-out both}
.countdown small{display:block;font-size:12px;letter-spacing:3px;text-align:center;color:var(--mint);text-shadow:none}
.countdown .loading{font-size:clamp(14px,5dvh,18px);letter-spacing:4px;color:var(--mint);text-shadow:0 0 12px var(--mint);animation:glow-beat 1s ease-in-out infinite}
.countdown .hint{display:block;margin-top:6px;font-size:11px;letter-spacing:1px;color:#e6dcff;text-shadow:none;font-weight:600}
.countdown .hint.keys{display:flex;align-items:center;gap:5px;margin-top:10px;font-size:12px}
.countdown kbd{display:inline-grid;place-items:center;min-width:26px;height:26px;padding:0 6px;border-radius:7px;font:800 13px/1 system-ui,sans-serif;color:#fff;
 background:#140c2be6;border:1.5px solid var(--c);box-shadow:0 2px 0 var(--c),0 0 10px color-mix(in srgb,var(--c) 50%,transparent)}
.countdown .hint.keys i{width:10px}
@keyframes count-pop{from{transform:scale(1.6);opacity:0}25%{transform:scale(1);opacity:1}to{opacity:.4}}

.overlay{position:absolute;inset:0;z-index:8;background:#0a061bdd;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;gap:4vw;padding:16px var(--pad-x)}
.ready-actions{display:flex;gap:10px;justify-content:center}
.ready-actions .primary{min-width:170px}
.interrupt-panel{flex-direction:column;text-align:center;gap:10px}
.interrupt-panel h2{font-size:22px}
.interrupt-panel p{font-size:12px;color:var(--muted);max-width:360px}

/* 03 · 결과 — 주소창이 있는 낮은 가로 화면에서도 한 화면에 들어오도록 */
.result-screen{flex-direction:row;background:radial-gradient(ellipse at 22% 70%,color-mix(in srgb,var(--member) 30%,transparent),transparent 60%),linear-gradient(120deg,#1a1036,#0e1024 60%,#0a061b)}
.result-stage{position:relative;flex:0 0 42%;overflow:hidden}
.member-glow{position:absolute;inset:0;pointer-events:none;
 background:repeating-radial-gradient(circle at 50% 70%,transparent 0 26px,color-mix(in srgb,var(--member) 16%,transparent) 27px 28px);
 mask-image:radial-gradient(circle at 50% 70%,#000 30%,transparent 72%);-webkit-mask-image:radial-gradient(circle at 50% 70%,#000 30%,transparent 72%);animation:glow-beat 1s ease-in-out infinite}
@keyframes glow-beat{0%,100%{opacity:.55}18%{opacity:1}}
.result-logo{position:absolute;z-index:3;top:calc(8px + var(--safe-t));left:var(--pad-x);background:none;border:0;padding:10px 4px;min-height:44px;display:flex;align-items:center}
.result-logo .logo-img{height:clamp(16px,5.4dvh,22px);filter:drop-shadow(0 1px 6px #0009)}
.result-figure{position:absolute;left:50%;bottom:0;height:96%;transform:translateX(-50%)}
.result-figure.enter{animation:member-up .55s cubic-bezier(.2,.9,.25,1.1)}
@keyframes member-up{from{transform:translate(-50%,10%);opacity:0}}
.result-image{display:block;height:100%;width:auto;filter:drop-shadow(0 0 24px color-mix(in srgb,var(--member) 65%,transparent))}
/* 손 하트 위에 겹치는 HEARTWARE 빌드율 하트 */
.heart-meter{position:absolute;left:calc(var(--hx,.5)*100%);top:calc(var(--hy,.56)*100%);width:26%;aspect-ratio:100/92;transform:translate(-50%,-46%);
 filter:drop-shadow(0 0 10px var(--member)) drop-shadow(0 0 22px color-mix(in srgb,var(--member) 60%,transparent));animation:beat 1.2s ease-in-out infinite}
.heart-meter svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.heart-bg{fill:#120a2acc}
.heart-line{fill:none;stroke:#fff;stroke-width:3.5;stroke-linejoin:round}
.heart-value{position:absolute;inset:0 0 14% 0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;text-shadow:0 1px 6px #0009}
.heart-value b{font-size:clamp(14px,6dvh,24px);font-weight:900;letter-spacing:-.5px}
.heart-value small{font-size:clamp(5px,1.8dvh,7px);font-weight:800;letter-spacing:1px;margin-top:2px;opacity:.9}
.result-name{position:absolute;left:50%;bottom:calc(8px + var(--safe-b));transform:translateX(-50%);z-index:2;white-space:nowrap;font-size:11px;font-weight:900;letter-spacing:3px;
 background:#0b0820d9;border:1px solid var(--member);border-radius:999px;padding:3px 12px;box-shadow:0 0 12px color-mix(in srgb,var(--member) 40%,transparent)}

.result-info{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:clamp(4px,2dvh,12px);
 padding:calc(8px + var(--safe-t)) var(--pad-x) calc(8px + var(--safe-b)) clamp(4px,2vw,16px)}
.result-eyebrow{display:flex;align-items:baseline;gap:10px;min-width:0;font-size:10px;letter-spacing:2px;color:var(--mint);font-weight:800}
.result-eyebrow b{font-size:clamp(13px,4.5dvh,17px);letter-spacing:0;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.best-line{display:inline-block;margin-left:auto;font-style:normal;font-size:10px;font-weight:800;letter-spacing:1px;color:#cfc6ec;white-space:nowrap}
.best-line.new{color:#ffe679;text-shadow:0 0 10px #ffe67999;animation:beat 1s ease-in-out infinite}
.result-score{display:flex;align-items:center;gap:clamp(8px,2vw,16px);min-width:0;padding-right:4px}
.grade{flex:0 0 auto;font-size:clamp(40px,17dvh,72px);line-height:.9;font-weight:900;font-style:italic;padding-right:4px;
 background:linear-gradient(135deg,var(--pink),var(--violet) 50%,var(--mint));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 14px #ff36c966)}
.score-big{font-size:clamp(34px,15dvh,64px);line-height:1;font-weight:900;letter-spacing:-2px;font-variant-numeric:tabular-nums}
.heartware{border:1px solid #3d3363;border-radius:14px;padding:clamp(6px,2dvh,10px) 12px;background:#0b081d99}
.heartware-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.beat-count{display:flex;align-items:baseline;gap:5px}
.beat-count i{font-style:normal;color:var(--member);font-size:16px;animation:beat 1s ease-in-out infinite;display:inline-block}
.beat-count b{font-size:clamp(18px,7dvh,26px)}
.beat-count small,.build-percent small{font-size:10px;color:var(--muted);letter-spacing:1px}
.build-percent{display:flex;align-items:baseline;gap:6px}
.build-percent b{font-size:clamp(16px,6dvh,22px);color:var(--gold)}
.build-bar{height:6px;border-radius:3px;background:#2d2450;overflow:hidden;margin:4px 0 2px}
.build-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--pink),var(--violet),var(--mint));transition:width 1.2s cubic-bezier(.2,.8,.2,1)}
.ecg-wrap{position:relative}
.ecg{width:100%;height:clamp(16px,6dvh,28px);display:block}
.ecg path{fill:none;stroke:var(--member);stroke-width:2;stroke-linejoin:round;filter:drop-shadow(0 0 4px var(--member));vector-effect:non-scaling-stroke}
.ecg-labels{display:flex;justify-content:space-around;font-size:8px;letter-spacing:2px;color:#8f86b0}
/* 멤버 대사: 투표 버튼보다 한 단계 낮은 톤(어두운 반투명 말풍선) */
.member-line{position:relative;align-self:flex-start;width:fit-content;max-width:100%;display:flex;align-items:flex-end;gap:12px;
 background:#ffffff12;color:#e9e3fb;border:1px solid color-mix(in srgb,var(--member) 45%,transparent);border-radius:14px;
 padding:clamp(5px,1.8dvh,9px) 14px;font-size:clamp(12px,3.8dvh,14px);font-weight:600;line-height:1.45;line-break:strict;text-wrap:pretty}
.member-line:before{content:"";position:absolute;left:-7px;top:50%;width:12px;height:12px;background:#1c1636;border-left:1px solid color-mix(in srgb,var(--member) 45%,transparent);
 border-bottom:1px solid color-mix(in srgb,var(--member) 45%,transparent);transform:translateY(-50%) rotate(45deg)}
.member-line q{quotes:none;white-space:pre-line}
:lang(ko) .member-line,:lang(ko) .bubble{word-break:keep-all}
.member-line-name{flex:0 0 auto;font-size:10px;font-weight:800;letter-spacing:2px;color:color-mix(in srgb,var(--member) 80%,#fff)}
/* 학습한 감정 스탬프 — 점수 옆에 따로 찍힌다 */
.learned-stamp{margin-left:auto;flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;padding:clamp(4px,1.6dvh,8px) clamp(10px,2vw,16px);
 border-radius:14px;border:2px solid var(--member);background:linear-gradient(150deg,color-mix(in srgb,var(--member) 22%,#120a2a),#120a2a);
 box-shadow:0 0 18px color-mix(in srgb,var(--member) 45%,transparent),inset 0 0 0 1px #ffffff1a;transform:rotate(-4deg);animation:learned-pop .6s .6s cubic-bezier(.2,.9,.25,1.4) both}
.learned-stamp.long b{font-size:clamp(13px,4.8dvh,19px)}
.learned-stamp small{font-size:clamp(8px,2.6dvh,10px);font-weight:800;letter-spacing:1px;color:#e9dcff;white-space:nowrap}
.learned-stamp small i{font-style:normal;color:var(--member)}
.learned-stamp b{font-size:clamp(16px,6.5dvh,26px);font-weight:900;line-height:1.1;white-space:nowrap;
 background:linear-gradient(110deg,#fff,color-mix(in srgb,var(--member) 60%,#fff));-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 8px color-mix(in srgb,var(--member) 70%,transparent))}
@keyframes learned-pop{from{transform:rotate(-4deg) scale(1.8);opacity:0}}
.result-actions{display:flex;gap:8px}
.result-actions{align-items:stretch}
/* 가장 중요한 행동: 투표 이동 — 크게, 빛나고, 심장 박동처럼 */
.result-actions .vote{flex:1;min-width:0;min-height:clamp(48px,15dvh,60px);font-size:clamp(15px,5.2dvh,19px);font-weight:900;letter-spacing:.3px;white-space:nowrap;border-radius:14px;
 background:linear-gradient(110deg,#ff4acc,#c04dff 55%,#ff4acc);background-size:200% 100%;
 box-shadow:0 0 0 2px #ffffff40 inset,0 6px 26px #ff36c988,0 0 40px color-mix(in srgb,var(--member) 45%,transparent);
 animation:vote-beat 1.6s ease-in-out infinite,vote-shine 3s linear infinite}
@keyframes vote-beat{0%,100%{transform:scale(1)}10%{transform:scale(1.03)}20%{transform:scale(1)}30%{transform:scale(1.02)}}
@keyframes vote-shine{to{background-position:-200% 0}}
.result-actions .restart{flex:0 0 auto;min-height:48px;padding:0 14px;border-radius:12px;border:1px solid #ffffff30;background:transparent;color:#cfc6ec;font-weight:700;font-size:12px}

/* 주소창이 보이는 낮은 화면: 심박 그래프를 접고 간격을 줄인다 */
@media (max-height:360px){
 .ecg-wrap{display:none}
 .result-info{gap:6px}
 .heartware{padding:6px 12px}
 .member-line{font-size:12px;padding:5px 12px}
 .grade{font-size:46px}
 .score-big{font-size:42px}
}
.toast{position:fixed;left:50%;bottom:calc(14px + var(--safe-b));transform:translate(-50%,20px);opacity:0;z-index:50;background:#1d1538f2;border:1px solid #6a4ca0;
 border-radius:10px;padding:8px 14px;font-size:12px;max-width:80vw;text-align:center;transition:opacity .25s,transform .25s;pointer-events:none}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* 낮은 가로 화면 (667×300 등) */
@media (max-height:380px){
 .selection-caption .pagination,.diff-note{display:none}
}
@media (max-height:340px){
 .bubble{padding:7px 11px 9px}
 .selection-caption .pagination,.diff-note,.song-best{display:none}
 .mode-row button{min-height:28px;padding:2px 7px}
}
@media (prefers-reduced-motion:reduce){
 *,*:before,*:after{animation:none!important;transition:none!important}
}

/* ───── 난이도 우선 · 전곡 · 설정 · 결과 판정 내역 ───── */
/* 앨범마다 지금 난이도의 레벨 스티커 (옆 곡과 비교해 쉬운 곡부터 고르기) */
.cd-level{position:absolute;right:-7%;top:-5%;z-index:5;width:calc(var(--size)*.25);aspect-ratio:1;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;
 background:#140c2bf0;border:2px solid var(--dc,#35ffe1);box-shadow:0 0 12px color-mix(in srgb,var(--dc,#35ffe1) 60%,transparent),0 3px 8px #0008;color:#fff;pointer-events:none}
.cd-level[data-tier=easy]{--dc:#35ffe1}.cd-level[data-tier=normal]{--dc:#ff5bd3}.cd-level[data-tier=hard]{--dc:#ff7a45}
.cd-level small{font-size:calc(var(--size)*.032);font-weight:900;letter-spacing:.06em;color:var(--dc)}
.cd-level b{font-size:calc(var(--size)*.1);font-weight:900;letter-spacing:-.04em}
.cd-level b:before{content:"Lv";font-size:.42em;letter-spacing:0;margin-right:1px;opacity:.85}
.cd-level em{position:absolute;bottom:-22%;font-style:normal;font-size:max(9px,calc(var(--size)*.05));font-weight:900;padding:.15em .5em;border-radius:999px;background:#ffe679;color:#2a0f3d;letter-spacing:.04em}
.cd-level em:empty{display:none}
.cd-level em[data-lamp=AP]{background:linear-gradient(110deg,#ff7ad9,#ffe679,#35ffe1)}
.album:not([data-position="0"]) .cd-level{opacity:.95}
/* 난이도 버튼의 클리어 표시 */
.icon-button.gear{font-size:19px}
/* 카운트다운: 이 채보에 나오는 조작 칩 */
.countdown .legend{display:flex;flex-wrap:wrap;justify-content:center;gap:5px;list-style:none;margin:10px 0 0;padding:0;max-width:min(90vw,620px)}
.countdown .legend li{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:800;letter-spacing:.5px;color:#fff;text-shadow:none;
 padding:4px 10px;border-radius:999px;background:#140c2be6;border:1px solid #ffffff40}
.countdown .legend li i{font-style:normal;color:#ff7ad9;letter-spacing:-1px}
.countdown .legend li[data-kind=hold] i{color:#ffe679}
.countdown .legend li[data-kind=chord] i{color:#ffe679}
.countdown .legend li[data-kind=flick] i{color:#fff}
.countdown .legend li[data-kind=slide]{border-color:#9cfff0}
.countdown .legend li[data-kind=slide] i{color:#9cfff0}
.countdown .resume small{color:#ffe679}
/* 페이즈 막대가 곡 진행만큼 차오른다 */
.phase-dots li{position:relative;overflow:hidden}
.phase-dots li.now{background:#3a2d5a;box-shadow:0 0 8px #ffe67966}
.phase-dots li.now:after{content:"";position:absolute;inset:0;width:var(--fill,0%);background:var(--gold)}
/* 일시정지: 이어하기가 가장 크게 */
.interrupt-panel .ready-actions{flex-wrap:wrap}
.interrupt-panel .ready-actions .secondary{min-width:110px}
/* 결과: 클리어 칭호 · 판정 내역 */
.result-clear{font-size:10px;font-weight:900;letter-spacing:1px;padding:1px 7px;border-radius:6px;white-space:nowrap;color:#2a0f3d;background:linear-gradient(110deg,#ffe679,#fff1a2)}
.judge-stats{display:grid;grid-template-columns:repeat(4,auto) auto auto;gap:2px 12px;margin:6px 0 2px;justify-content:space-between}
.judge-stats div{display:flex;flex-direction:column;line-height:1.1;min-width:0}
.judge-stats dt{font-size:8px;font-weight:900;letter-spacing:1px;color:#8f86b0;white-space:nowrap}
.judge-stats dd{margin:0;font-size:clamp(13px,4.6dvh,17px);font-weight:900;font-variant-numeric:tabular-nums}
.judge-stats [data-g=PERFECT] dt{color:#fff1a2}.judge-stats [data-g=GREAT] dt{color:#9cfff0}.judge-stats [data-g=GOOD] dt{color:#d6b8ff}.judge-stats [data-g=MISS] dt{color:#8a86a3}
.judge-stats [data-g=COMBO] dt{color:#ff9be3}
.judge-stats .fast{color:#7fd9ff}.judge-stats .slow{color:#ffb36b}
.judge-stats [data-g=FS] dd{font-size:clamp(11px,3.8dvh,14px)}
/* 설정 */
.settings{position:fixed;z-index:60}
.settings-card{width:min(560px,92vw);max-height:calc(100% - 16px);overflow:auto;background:#160f2ef5;border:1px solid #5a4690;border-radius:18px;padding:12px 16px 14px;box-shadow:0 20px 60px #000a;display:flex;flex-direction:column;gap:8px}
.settings-head{display:flex;align-items:center;justify-content:space-between}
.settings-head h2{font-size:16px;letter-spacing:1px}
.settings-head .secondary{min-height:40px}
.set-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;border-top:1px solid #ffffff14}
.set-label{display:flex;flex-direction:column;min-width:0}
.set-label b{font-size:13px}
.set-label small{font-size:10px;color:var(--muted);line-height:1.35}
:lang(ko) .set-label small{word-break:keep-all}
.stepper{display:flex;align-items:center;gap:4px;flex:0 0 auto}
.stepper button{width:40px;height:40px;border-radius:10px;border:1px solid #5a4690;background:#21173d;font-size:18px;font-weight:900}
.stepper button.reset{width:auto;padding:0 10px;font-size:11px;color:#cfc6ec}
.stepper output{min-width:68px;text-align:center;font-size:16px;font-weight:900;font-variant-numeric:tabular-nums;color:var(--mint)}
.set-auto{display:flex;align-items:center;gap:8px;min-height:40px;border-radius:10px;border:1px dashed #ff9be3;background:#ff36c914;color:#ffd8f3;font-size:12px;font-weight:700;padding:6px 12px;text-align:left}
.set-auto i{font-style:normal;color:var(--pink)}
.toggle{display:flex;border:1px solid #4b4570;border-radius:999px;padding:2px;background:#140d2bcc}
.toggle button{border:0;background:none;min-height:36px;min-width:52px;border-radius:999px;font-size:11px;font-weight:900;color:#a59cc6}
.toggle button[aria-pressed=true]{background:linear-gradient(110deg,#ff4acc,#b45bff);color:#fff}
@media (max-height:360px){
 .judge-stats{margin-top:4px}
 .judge-stats dd{font-size:13px}
 .settings-card{gap:4px;padding:8px 14px 10px}
 .set-row{padding:3px 0}
}
.result-eyebrow>span:first-child{white-space:nowrap}
.result-eyebrow b{min-width:4em}
@media (max-width:760px){
 .result-eyebrow{gap:6px}
 .result-eyebrow>span:first-child{display:none}
}

/* ───── 앨범 커버: 정사각 재킷 + 뒤에서 빠져나오는 CD ───── */
.record.has-cover{border-radius:clamp(6px,calc(var(--size)*.04),12px);border:0;
 background:var(--cover) center/cover no-repeat,#120a2a;box-shadow:0 0 0 1px #ffffff40,0 10px 28px #000a}
.record.has-cover:before{animation:none!important;inset:0;border-radius:inherit;box-shadow:none;
 background:linear-gradient(125deg,#ffffff2e 0%,transparent 28%,transparent 70%,#ffffff12 100%)}
/* 재킷 위 글자는 커버 아트에 이미 있으니 숨기고, 추천 멤버 배지만 아래쪽에 */
.record.has-cover small,.record.has-cover .cover-mark,.record.has-cover .cover-title{display:none}
.record.has-cover .peak-mark{position:absolute;left:50%;bottom:6%;transform:translateX(-50%);margin:0}
.album:not([data-position="0"]) .record.has-cover .peak-mark{display:none}
.album[data-position="0"] .record.has-cover{box-shadow:0 0 0 3px var(--accent),0 0 0 9px #ffffff0a,0 14px 36px #000c}
/* CD: 고른 앨범에서만 오른쪽으로 빠져나와 회전 */
.disc{position:absolute;inset:4%;border-radius:50%;z-index:0;opacity:0;translate:0 0;pointer-events:none;
 transition:translate .55s cubic-bezier(.2,.8,.2,1) .1s,opacity .3s;
 background:radial-gradient(circle,#0b0820 0 4.5%,#d9d6e6 4.6% 6%,transparent 6.1%),
  radial-gradient(circle,transparent 0 30%,#ffffff22 30.5% 31%,transparent 31.5%),
  var(--cover) center/38% no-repeat,
  conic-gradient(from 30deg,#c9c3dc,#f4e9ff,#a7b8e8,#ffd6ee,#c3f2ff,#e9e3fb,#c9c3dc);
 box-shadow:0 0 0 1px #ffffff55,0 6px 20px #0009}

.album[data-position="0"] .record{z-index:1}


/* ───── 난이도 드럼: 고른 앨범 바로 왼쪽, 위아래로 밀거나 ▲▼로 돌린다 (단순하게) ───── */
.select-screen{--drum-w:clamp(64px,9.5vw,84px);--row:clamp(28px,calc(var(--size)*.17),38px)}
.diff-drum{position:absolute;z-index:6;left:calc(50% + var(--size)/2 + 8px);top:calc(4% + 4px + var(--size)/2);transform:translateY(-50%);
 width:var(--drum-w);display:flex;flex-direction:column;align-items:stretch;touch-action:none;cursor:ns-resize;outline-offset:3px;--dc:#35ffe1}
.diff-drum[data-tier=normal]{--dc:#ff5bd3}.diff-drum[data-tier=hard]{--dc:#ff7a45}
.drum-arrow{height:24px;border:0;background:none;color:#cfc6ec;font-size:11px;line-height:1;padding:0;opacity:.8}
.drum-arrow:active{color:var(--dc)}
.drum-window{position:relative;height:calc(var(--row)*2.6);perspective:300px;overflow:hidden;
 mask-image:linear-gradient(transparent,#000 30%,#000 70%,transparent);-webkit-mask-image:linear-gradient(transparent,#000 30%,#000 70%,transparent)}
.drum-reel{position:absolute;inset:0;transform-style:preserve-3d;
 transform:translateZ(calc(var(--row)*-1.37)) rotateX(var(--rot,0deg));transition:transform .3s cubic-bezier(.2,.9,.25,1.1)}
.drum-reel.live{transition:none}
.drum-item{position:absolute;left:0;right:0;top:50%;height:var(--row);margin-top:calc(var(--row)/-2);
 display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.05;backface-visibility:hidden;
 transform:rotateX(calc(var(--i)*-40deg)) translateZ(calc(var(--row)*1.37));transition:opacity .25s;color:#8f86b0}
.drum-item small{font-size:9px;font-weight:900;letter-spacing:1px}
.drum-item b{font-size:12px;font-weight:800}
.drum-item b:before{content:"Lv";font-size:.7em;margin-right:1px}
.drum-item em{font-style:normal;font-size:8px;font-weight:900;color:#ffe679;position:absolute;right:2px;top:1px}
.drum-item.on{color:#fff}
.drum-item.on small{color:var(--dc);font-size:10px}
.drum-item.on b{font-size:18px}
/* 고른 앨범의 레벨은 드럼이 보여주므로 스티커는 옆 앨범에만 */
/* 난이도는 고른 앨범 옆 드럼에만 — 다른 앨범에는 표시하지 않는다 */
.cd-level{display:none!important}

/* 전곡 길이 표시 (선택 버튼 아님) */
.full-len{font-size:10px;font-weight:900;letter-spacing:1px;color:#cfc6ec;white-space:nowrap}
.full-len i{font-style:normal;font-weight:700;letter-spacing:0;color:var(--mint);margin-left:2px}

/* 곡 선택 왼쪽: 노래 제목만 큼직하게 (다른 글자는 숨김) */
.selector-heading,.selection-caption .mode-row,.selection-caption .song-best,.selection-caption .preview-state,.selection-caption .pagination{display:none!important}
.selection-caption{bottom:calc(14px + var(--safe-b));width:min(42%,380px)}
.selection-caption .song-title{font-size:clamp(30px,13dvh,54px);line-height:1.02;letter-spacing:-1px;white-space:normal;
 display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-wrap:balance}

/* 난이도 드럼: EASY / NORMAL / HARD 글자만 (레벨 숫자 · 클리어 표시 없음) */
.drum-item b,.drum-item em{display:none!important}
.drum-item small{font-size:11px;letter-spacing:1.5px}
.drum-item.on small{font-size:15px;color:var(--dc);text-shadow:0 0 10px color-mix(in srgb,var(--dc) 60%,transparent)}

/* 난이도 글자 큼직하게 */
.select-screen{--drum-w:clamp(104px,15vw,136px);--row:clamp(36px,calc(var(--size)*.24),50px)}
.drum-item small{font-size:clamp(12px,2vw,15px);letter-spacing:1px}
.drum-item.on small{font-size:clamp(20px,3.4vw,28px);letter-spacing:.5px}
.drum-arrow{height:28px;font-size:14px}
/* 옆 앨범을 조금 더 바깥으로 (드럼 자리) */
.album[data-position="-1"]{transform:translateX(calc(max(var(--size)*1.62,28vw)*-1 + var(--drag,0px))) translateY(-4%) scale(.6)}
.album[data-position="1"]{transform:translateX(calc(max(var(--size)*1.62,28vw) + var(--drag,0px))) translateY(-4%) scale(.6)}

/* 제목 위에 미리듣기 이퀄라이저 막대만 (글자 없이) */
.selection-caption{display:flex;flex-direction:column;align-items:flex-start}
.selection-caption .preview-state{display:flex!important;order:-1;margin:0 0 4px 2px}
.selection-caption #preview-label{display:none}
.selection-caption .equalizer{height:clamp(14px,5dvh,22px);gap:3px;align-items:flex-end}
.selection-caption .equalizer i{width:clamp(3px,.6vw,5px);height:30%;border-radius:2px;background:var(--accent);box-shadow:0 0 8px color-mix(in srgb,var(--accent) 70%,transparent)}
.selection-caption .preview-state.is-playing .equalizer i{animation:equalize-big .55s ease-in-out infinite alternate}
.selection-caption .preview-state.is-playing .equalizer i:nth-child(2){animation-delay:-.3s}
.selection-caption .preview-state.is-playing .equalizer i:nth-child(3){animation-delay:-.12s}
@keyframes equalize-big{to{height:100%}}
.selection-caption .preview-state.is-playing .equalizer i:nth-child(4){animation-delay:-.42s;animation-duration:.48s}
.selection-caption .preview-state.is-playing .equalizer i:nth-child(5){animation-delay:-.2s;animation-duration:.62s}

/* ───── 타격감 · 무대 · FEVER · 결과 · 기록 · 공유 ───── */
/* 플레이 HUD */
.scorebox strong{display:inline-block}
.fc-chip{display:inline-block;vertical-align:top;margin:6px 0 0 6px;font-size:9px;font-weight:900;letter-spacing:1px;padding:1px 5px;border-radius:5px;color:#2a0f3d;background:#ffe679;opacity:.85}
.judgment strong{transform:scale(var(--combo-scale,1));transform-origin:50% 0;transition:transform .2s}
.judgment small[data-tone=break]{color:#b9b4cc;letter-spacing:4px;font-weight:900;opacity:1}
.judgment small[data-tone=recover]{color:#ffe679;font-weight:900;opacity:1}
.play-screen.fever .judgment b{text-shadow:0 0 22px var(--accent),0 0 6px #fff}
.play-screen.fever .judgment strong{opacity:.95;text-shadow:0 0 18px var(--accent)}
.play-screen.armed .sync-meter i{animation:armed .5s ease-in-out infinite alternate}
@keyframes armed{to{filter:brightness(1.6)}}
.sync-meter i{transition:width .2s}
/* 멤버 반응: 오른쪽 위 작은 얼굴 + 한 줄 */
.reaction{position:absolute;right:var(--pad-x);top:calc(48px + var(--safe-t));z-index:5;display:flex;align-items:center;gap:6px;max-width:min(38vw,300px);pointer-events:none;
 padding:3px 10px 3px 3px;border-radius:999px;background:#0b0820cc;border:1px solid color-mix(in srgb,var(--member) 60%,transparent);font-size:11px;font-weight:700;color:#f4eefc}
.reaction img{width:28px;height:28px;border-radius:50%;object-fit:cover;object-position:50% 12%;border:1.5px solid var(--member);background:#1b1236}
.reaction span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reaction.show{animation:react-in 2.6s ease forwards}
@keyframes react-in{0%{opacity:0;transform:translateX(12px)}10%{opacity:1;transform:none}85%{opacity:1}100%{opacity:0}}
.countdown .goal{display:block;font-size:12px;letter-spacing:1.5px;color:#ffe679;text-shadow:0 1px 6px #000;margin-bottom:6px;font-weight:900}
.countdown .goal.practice{color:#9cfff0}
/* 결과: 순서대로 드러남 (점수 → 등급 · 판정 → 멤버 · 한 줄) */
.result-screen .r-step1,.result-screen .r-step2,.result-screen .r-step3{opacity:0;transform:translateY(6px);transition:opacity .35s,transform .35s}
.result-screen.step1 .r-step1,.result-screen.step2 .r-step2,.result-screen.step3 .r-step3{opacity:1;transform:none}
.result-screen.skip .r-step1,.result-screen.skip .r-step2,.result-screen.skip .r-step3{transition:none}
.result-badges{display:inline-flex;gap:4px}
.result-badges i{font-style:normal;font-size:9px;font-weight:900;letter-spacing:.5px;padding:2px 6px;border-radius:6px;color:#2a0f3d;background:#ffe679;white-space:nowrap}
.result-badges i[data-k=new]{background:linear-gradient(110deg,#ff7ad9,#ffe679)}
.result-badges i[data-k=ap]{background:linear-gradient(110deg,#ff7ad9,#ffe679,#35ffe1)}
.score-delta{font-size:clamp(11px,3.6dvh,14px);font-weight:900;font-variant-numeric:tabular-nums;align-self:flex-end;margin-bottom:4px}
.score-delta[data-dir=up]{color:#7dffb0}.score-delta[data-dir=down]{color:#b9b4cc}.score-delta[data-dir=same]{color:#b9b4cc}.score-delta[data-dir=first]{color:#ffe679;font-size:10px;letter-spacing:1px}
.result-panel{border:1px solid #3d3363;border-radius:14px;padding:clamp(5px,1.6dvh,8px) 12px;background:#0b081d99}
.judge-stats{grid-template-columns:repeat(6,auto);margin:0}
.judge-stats [data-g=ACC] dt{color:#9cfff0}
.result-graphs{display:flex;gap:10px;align-items:center;margin-top:clamp(3px,1.2dvh,6px)}
.timing-graph{flex:0 0 auto;display:flex;align-items:flex-end;gap:5px;font-size:8px;font-weight:900;letter-spacing:.5px}
.timing-graph .fast{color:#7fd9ff}.timing-graph .slow{color:#ffb36b}
.timing-graph b{font-size:11px}
.timing-bars{display:flex;align-items:flex-end;gap:2px;height:clamp(14px,5dvh,22px)}
.timing-bars i{width:5px;height:max(2px,var(--h));border-radius:1px;background:#6f62a3}
.timing-bars i[data-c=center]{background:#fff1a2}.timing-bars i[data-c=near]{background:#9cfff0}
.section-graph{flex:1;min-width:0}
.section-bars{display:flex;gap:1px;height:clamp(10px,3.6dvh,16px);border-radius:4px;overflow:hidden}
.section-bars i{width:var(--w);background:color-mix(in srgb,var(--member) calc(var(--a) * 100%),#2a2346);opacity:calc(.35 + var(--a) * .65)}
.section-bars i[data-label=strong]{box-shadow:inset 0 2px 0 #ffffff88}
.section-bars i[data-label=quiet]{box-shadow:inset 0 2px 0 #ffffff22}
.result-insight{font-size:clamp(11px,3.6dvh,13px);font-weight:700;color:#f2ecff;line-height:1.35;margin:0;padding-left:16px;position:relative}
.result-insight:before{content:"♥";position:absolute;left:0;color:var(--member)}
:lang(ko) .result-insight{word-break:keep-all}
.result-actions{display:flex;gap:6px;align-items:stretch}
.result-actions .retry{flex:1.1;min-width:0;min-height:clamp(44px,13dvh,54px);font-size:clamp(13px,4.4dvh,16px);background:linear-gradient(110deg,#35ffe1,#2fb8ff);color:#06232a;box-shadow:0 5px 20px #35ffe144;white-space:nowrap}
.result-actions .vote{flex:1.4;min-height:clamp(44px,13dvh,54px);font-size:clamp(13px,4.4dvh,17px)}
.result-actions .mini{flex:0 0 auto;width:clamp(40px,7vw,52px);min-height:clamp(44px,13dvh,54px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;border-radius:12px;border:1px solid #ffffff30;background:#140c2bcc;color:#cfc6ec;font-size:9px;font-weight:800;padding:0}
.result-actions .mini i{font-style:normal;font-size:16px;line-height:1}
.result-actions .mini:disabled{opacity:.35}
/* 멤버 대사는 왼쪽 멤버 쪽 아래 (오른쪽은 점수 · 기록 · 버튼) */
.result-stage .member-line{position:absolute;left:var(--pad-x);right:10px;bottom:calc(36px + var(--safe-b));z-index:3;margin:0;width:auto;max-width:none;background:#0b0820d9;font-size:clamp(11px,3.4dvh,13px)}
.result-stage .member-line:before{display:none}
.learned-stamp{margin-left:auto}
/* 기록 패널 */
.records-card{width:min(720px,94vw)}
.ach-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:4px}
.ach-list li{display:flex;align-items:center;gap:6px;font-size:11px;padding:5px 8px;border-radius:9px;background:#ffffff0d;color:#8f86b0}
.ach-list li.got{color:#fff;background:#ffe67922}
.ach-list li i{font-style:normal;color:#ffe679}
.ach-list small{color:#cfc6ec;margin-left:4px}
.best-table{width:100%;border-collapse:collapse;font-size:11px}
.best-table th,.best-table td{padding:3px 6px;text-align:left;border-top:1px solid #ffffff12;white-space:nowrap}
.best-table th:first-child{max-width:150px;overflow:hidden;text-overflow:ellipsis}
.best-table td b{display:block;font-variant-numeric:tabular-nums}
.best-table td small{color:#a59cc6}
.best-table td.none{color:#5d5874}
/* 결과 카드 */
.share-card{width:min(640px,94vw)}
.share-body{display:flex;gap:14px;align-items:center}
.share-preview{height:min(56dvh,330px);aspect-ratio:1080/1350;border-radius:10px;background:#1b1236;object-fit:contain}
.share-actions{display:flex;flex-direction:column;gap:8px;flex:1}
.share-actions small{font-size:10px;color:var(--muted)}
/* 설정 */
.set-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.set-grid .set-row{gap:8px}
.set-grid input[type=range]{flex:1;min-width:70px;accent-color:#ff4acc}
.set-grid output{min-width:38px;text-align:right;font-size:12px;font-weight:800;color:var(--mint);font-variant-numeric:tabular-nums}
.set-grid .toggle button{min-width:44px;padding:0 8px}
.set-grid .reset{min-height:36px;border-radius:9px;border:1px solid #5a4690;background:#21173d;font-size:11px;padding:0 10px;color:#cfc6ec}
/* 효과 낮음 · 배경 움직임 끔: CSS 애니메이션도 줄인다 (성공 · 실패 · 홀드 구분은 캔버스에서 모양 · 밝기로 유지) */
:root[data-fx="0"] .banner.show{animation-duration:.9s}
:root[data-motion=off] .play-screen .stage-member,:root[data-motion=off] .reaction.show{animation:none}
:root[data-motion=off] .reaction.show{opacity:1}
@media (max-height:360px){
 .result-stage .member-line{bottom:calc(30px + var(--safe-b));padding:4px 10px}
 .result-panel{padding:4px 10px}
 .ach-list{grid-template-columns:repeat(2,1fr)}
 .share-preview{height:52dvh}
}
@media (max-width:760px){
 .set-grid{grid-template-columns:1fr}
 .judge-stats{gap:1px 8px}
}
.scorebox small{display:block}
.set-grid .wide{grid-column:1/-1}
.set-grid .stepper button{width:36px;height:36px}
.set-grid .stepper output{min-width:56px;font-size:14px}
.settings-card{gap:4px}
.share-actions .solo{background:linear-gradient(110deg,#ff4acc,#b45bff);border:0;color:#fff;font-weight:800}
/* 결과 버튼: 자주 쓰는 두 개는 크게, 나머지 셋은 작은 보조 칩 */
.result-actions .retry{flex:1}
.result-actions .vote{flex:1.35;animation:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.result-more{display:flex;gap:6px;flex-wrap:wrap}
.result-more .mini{flex:0 1 auto;width:auto;min-height:32px;flex-direction:row;gap:5px;padding:0 10px;font-size:11px;border-radius:999px}
.result-more .mini i{font-size:13px}
[data-state=result] .toast{top:calc(10px + var(--safe-t));bottom:auto;transform:translate(-50%,-10px)}
[data-state=result] .toast.show{transform:translate(-50%,0)}
@media (max-height:360px){
 .result-info{gap:4px}
 .result-actions .retry,.result-actions .vote{min-height:40px}
 .result-more .mini{min-height:28px}
 .grade{font-size:42px}.score-big{font-size:38px}
}
/* 결과 화면 다듬기 */
.score-delta{white-space:nowrap}
.judge-stats{grid-template-columns:repeat(5,auto)}
.section-graph{display:flex;flex-direction:column;gap:2px}
.section-graph small{font-size:8px;font-weight:900;letter-spacing:1px;color:#8f86b0;white-space:nowrap}
.section-bars{overflow:visible}
.section-bars i{position:relative}
.section-bars i.weak{outline:1.5px solid #ffb36b;outline-offset:-1.5px}
.section-bars i.weak:after{content:"▼";position:absolute;left:50%;top:-11px;transform:translateX(-50%);font-size:8px;font-style:normal;color:#ffb36b}
.heart-value small{font-size:clamp(6px,2dvh,8px)}
/* 결과: 버튼은 두 개만, 크게 */
.result-stage .member-line{bottom:calc(12px + var(--safe-b))}
.result-stage .member-line .member-line-name{align-self:flex-end}
.result-actions{gap:8px}
.result-actions .retry,.result-actions .vote{flex:1;min-height:clamp(48px,15dvh,60px);font-size:clamp(14px,4.8dvh,18px);border-radius:14px}
.result-actions .vote{flex:1.25}
@media (max-height:360px){
 .result-stage .member-line{bottom:calc(8px + var(--safe-b))}
 .result-actions .retry,.result-actions .vote{min-height:44px}
}
/* 약한 구간 표시는 막대 아래 ▲ (설명 글자와 겹치지 않게) */
.section-graph{padding-bottom:9px}
.section-bars i.weak:after{content:"▲";top:auto;bottom:-10px}
.result-actions .vote{overflow:visible;text-overflow:clip}
/* ───── 결과 화면: 화면 높이를 고르게 쓰는 배치 ───── */
.result-info{justify-content:space-between;gap:clamp(6px,2.4dvh,14px);padding:calc(clamp(14px,6dvh,28px) + var(--safe-t)) var(--pad-x) calc(clamp(12px,5dvh,24px) + var(--safe-b)) clamp(8px,2.5vw,24px)}
.result-eyebrow b{font-size:clamp(16px,5.6dvh,22px)}
.result-eyebrow .result-mode{font-size:11px}
.result-score{gap:clamp(10px,2.4vw,20px);align-items:flex-end}
.grade{font-size:clamp(48px,20dvh,86px)}
.score-wrap{position:relative;display:flex;flex-direction:column;align-items:flex-start}
.score-big{font-size:clamp(40px,17dvh,74px)}
/* 첫 기록 · 점수 차: 점수 왼쪽 위에 비스듬히 찍힌 도장 */
.score-delta{position:absolute;left:-6px;top:clamp(-22px,-5dvh,-12px);margin:0;transform:rotate(-8deg);
 padding:2px 10px;border:2.5px solid currentColor;border-radius:8px;font-size:clamp(12px,4dvh,16px);font-weight:900;letter-spacing:1px;
 background:#0b0820b3;box-shadow:0 0 12px color-mix(in srgb,currentColor 45%,transparent);line-height:1.2;white-space:nowrap}
.result-screen.step2 .score-delta{animation:stamp .45s .2s cubic-bezier(.2,.9,.25,1.4) both}
.result-screen.skip .score-delta{animation:none}
@keyframes stamp{from{transform:rotate(-8deg) scale(2.2);opacity:0}to{transform:rotate(-8deg) scale(1);opacity:1}}
.score-delta[data-dir=first]{color:#ffe679;font-size:clamp(13px,4.4dvh,17px)}
.score-delta[data-dir=up]{color:#7dffb0}
.score-delta[data-dir=down],.score-delta[data-dir=same]{color:#c9c3dc}
.learned-stamp{align-self:center}
/* 판정 패널: 여유 있게 */
.result-panel{padding:clamp(8px,2.6dvh,14px) clamp(12px,2vw,18px);border-radius:16px}
.judge-stats dt{font-size:clamp(8px,2.6dvh,10px)}
.judge-stats dd{font-size:clamp(15px,5.6dvh,22px)}
.result-graphs{gap:clamp(10px,2vw,18px);margin-top:clamp(6px,2.4dvh,12px)}
.timing-bars{height:clamp(16px,6.5dvh,30px);gap:3px}
.timing-bars i{width:clamp(5px,.8vw,7px)}
.timing-graph{font-size:clamp(8px,2.6dvh,10px)}
.timing-graph b{font-size:clamp(11px,3.8dvh,14px)}
.section-graph small{font-size:clamp(8px,2.4dvh,10px)}
.section-bars{height:clamp(12px,4.6dvh,20px)}
.result-insight{font-size:clamp(12px,4dvh,15px)}
/* 결과 화면 안내(성취)는 멤버 쪽 위에 — 점수 · 버튼을 가리지 않게 */
[data-state=result] .toast{left:21%;max-width:38vw}
@media (max-height:360px){
 .result-info{gap:5px;padding-top:calc(16px + var(--safe-t));padding-bottom:calc(10px + var(--safe-b))}
 .grade{font-size:50px}.score-big{font-size:44px}
}
/* 도장 공통: 비스듬히, 테두리, 찍히는 애니메이션 — 성취 도장(1st) → 첫 기록 도장(2nd) */
.ach-stamps{display:inline-flex;gap:8px;margin-left:4px}
.ach-stamps i{font-style:normal;display:inline-block;transform:rotate(-6deg);padding:2px 9px;border:2.5px solid #ff9be3;border-radius:8px;color:#ff9be3;
 font-size:clamp(11px,3.6dvh,14px);font-weight:900;letter-spacing:.5px;white-space:nowrap;background:#0b0820b3;box-shadow:0 0 12px #ff9be355;line-height:1.2}
.result-screen.step1 .ach-stamps i{animation:stamp-a .45s calc(.35s + var(--k) * .25s) cubic-bezier(.2,.9,.25,1.4) both}
.result-screen.skip .ach-stamps i{animation:none}
@keyframes stamp-a{from{transform:rotate(-6deg) scale(2.2);opacity:0}to{transform:rotate(-6deg) scale(1);opacity:1}}
/* 첫 기록 도장은 성취 도장 다음 */
.result-screen.step2 .score-delta{animation-delay:.45s}
/* 감정 학습 도장: 위쪽 오른편 빈 공간으로 크게 */
.result-info{position:relative}
.result-score .learned-stamp{position:absolute;right:var(--pad-x);top:calc(clamp(14px,6dvh,28px) + var(--safe-t));margin:0;transform:rotate(-4deg)}
.learned-stamp b{font-size:clamp(18px,7.5dvh,30px)}
.result-eyebrow{padding-right:clamp(110px,20vw,170px);flex-wrap:wrap;row-gap:6px}
/* 제목 줄: 곡명 · 레벨 · 성취 도장을 한 줄로 (넘치면 곡명이 줄어든다) */
.result-eyebrow{padding-right:0;flex-wrap:nowrap}
.result-eyebrow b{flex:0 1 auto;min-width:3em}
.result-eyebrow .result-mode,.ach-stamps{flex:0 0 auto}
/* 감정 학습 도장: 점수 줄 오른쪽 끝 */
.result-score{position:relative;width:100%}
.result-score .learned-stamp{position:absolute;right:0;top:50%;transform:translateY(-50%) rotate(-4deg)}
.result-screen.step3 .result-score .learned-stamp{animation:learned-pop2 .6s .1s cubic-bezier(.2,.9,.25,1.4) both}
@keyframes learned-pop2{from{transform:translateY(-50%) rotate(-4deg) scale(1.8);opacity:0}to{transform:translateY(-50%) rotate(-4deg) scale(1);opacity:1}}
@media (max-width:760px){
 .ach-stamps i{font-size:10px;padding:1px 6px;border-width:2px}
 .learned-stamp{padding:4px 8px}
 .learned-stamp b{font-size:clamp(15px,6dvh,22px)}
}
/* 점수 줄: 등급 · 점수 · 감정 도장이 겹치지 않게 흐름 배치 (점수 크기는 화면 폭에도 맞춘다) */
.result-score .learned-stamp{position:static;transform:rotate(-4deg);margin-left:auto;flex:0 0 auto}
.result-screen.step3 .result-score .learned-stamp{animation:learned-pop .6s .1s cubic-bezier(.2,.9,.25,1.4) both}
.grade{font-size:clamp(46px,min(20dvh,8.5vw),86px)}
.score-big{font-size:clamp(38px,min(17dvh,6.6vw),74px)}
.result-eyebrow b{min-width:4.5em}
.result-eyebrow{gap:8px}
.score-delta:empty{display:none}
/* 플레이 화면 오른쪽 위: 곡 제목만 크게 + 재생 중 이퀄라이저 */
.track-label{display:flex;align-items:center;gap:8px;max-width:40vw;min-width:0}
.track-label b{max-width:none;font-size:clamp(18px,7dvh,30px);font-weight:900;letter-spacing:-.3px;line-height:1.1;
 white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 2px 12px #000c}
.play-eq{flex:0 0 auto;display:inline-flex;align-items:flex-end;gap:2px;height:clamp(14px,5dvh,20px)}
.play-eq i{width:3px;height:25%;border-radius:2px;background:var(--accent);box-shadow:0 0 6px var(--accent)}
[data-state=playing] .play-eq i{animation:equalize-big .5s ease-in-out infinite alternate}
[data-state=playing] .play-eq i:nth-child(2){animation-delay:-.25s}
[data-state=playing] .play-eq i:nth-child(3){animation-delay:-.4s;animation-duration:.42s}
[data-state=playing] .play-eq i:nth-child(4){animation-delay:-.1s;animation-duration:.6s}
:root[data-motion=off] .play-eq i{animation:none!important;height:60%}
/* 멤버 반응은 제목 아래로 */
.reaction{top:calc(clamp(40px,13dvh,56px) + var(--safe-t))}
/* 곡 고르기: 주요 버튼 왼쪽, 한 단계 낮은 톤 (아이콘 + 짧은 글자, 세로 배치) */
.result-actions .select-songs{flex:0 0 auto;width:clamp(58px,10vw,84px);min-height:clamp(48px,15dvh,60px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
 border-radius:14px;border:1.5px solid #ffffff40;background:#140c2bd9;color:#e9e3fb;font-size:clamp(10px,3dvh,12px);font-weight:800;padding:0 4px;white-space:nowrap}
.result-actions .select-songs i{font-style:normal;font-size:clamp(15px,5dvh,20px);line-height:1;color:var(--member)}
.result-actions .select-songs:active{transform:translateY(1px)}
@media (max-height:360px){.result-actions .select-songs{min-height:44px}}
