/* 2NDCHART -- `/`(공개)와 `/dashboard`(관리자)가 함께 쓰는 스타일. 디자인 시안(2NDCHART 목업)의
   CSS를 그대로 옮기고, 이 앱에서 쓰지 않는 부분(부팅 연출·점수 산식·결제·카카오 시트·잠금 행·시연
   토글)은 뺐다. 맨 아래 "celestial 추가분"만 새로 쓴 규칙이다. style.css/fractal.css와 클래스 이름이
   겹치지 않는다(대시보드는 차트 패널 때문에 style.css도 함께 불러온다). */
:root{--bk:#000;--ink:#fff;--g1:#B4B4B4;--g2:#7A7A7A;--g3:#4A4A4A;--g4:#2A2A2A;
  --ln:#1C1C1C;--ln2:#262626;--yl:#FFD400;--rd:#E60012;
  --f:'Pretendard Variable','Pretendard',-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo',sans-serif;
  --m:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:dark}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{background:var(--bk)}
body{margin:0;color:var(--ink);font-family:var(--f);word-break:keep-all;
  -webkit-font-smoothing:antialiased;overflow-x:clip;letter-spacing:-.02em}
p{margin:0}
button{font-family:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--yl);outline-offset:3px}
.w{--gx:clamp(20px,5vw,40px);max-width:760px;margin:0 auto;padding-inline:var(--gx)}
.mono{font-family:var(--m);letter-spacing:0}
.nar{margin-top:clamp(36px,6vh,56px)}
.nh{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.nh b{font-size:clamp(1.7rem,7.4vw,2.3rem);font-weight:900;letter-spacing:-.03em;word-spacing:.06em;line-height:1}
.nh span{font-size:12px;font-weight:700;color:var(--g2)}
.ncv{position:relative;margin-top:14px;border:1px solid var(--ln);background:#050505;cursor:pointer}
.ncv canvas{display:block;width:100%;height:clamp(230px,38vh,340px)}
.nx{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;margin:14px calc(var(--gx)*-1) 0;padding:0 var(--gx) 4px;scroll-padding-left:var(--gx);scrollbar-width:none;-webkit-overflow-scrolling:touch}
.nx::-webkit-scrollbar{display:none}
@media (min-width:700px){.nx{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;overflow:visible;margin:14px 0 0;padding:0}.cd{flex:none}}
.cd{flex:0 0 84%;scroll-snap-align:start;border:1px solid var(--ln2);background:linear-gradient(180deg,#0b0b0b,#060606);padding:16px 16px 15px;position:relative;
  transition:border-color .25s,transform .35s cubic-bezier(.34,1.56,.64,1)}
.cd.on{border-color:var(--yl)}
.cd:before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:#222;transition:background .25s}
.cd.on:before{background:var(--yl)}
.cd header{display:flex;align-items:center;gap:10px}
.cd .hy{display:block;margin-top:14px;font-family:var(--m);font-size:10.5px;letter-spacing:.16em;color:var(--g3)}
.cd h3{margin:5px 0 0;font-size:clamp(1.1rem,4.9vw,1.32rem);font-weight:900;letter-spacing:-.045em;line-height:1.3}
.cd .ck{margin-top:14px;padding-top:12px;border-top:1px dashed #2A2A2A;display:flex;gap:9px;align-items:baseline}
.cd .ck em{font-style:normal;flex:none;font-size:9.5px;font-weight:900;color:var(--yl);border:1px solid #4A3F10;padding:1px 6px;letter-spacing:.02em}
.cd .ck span{font-size:12.5px;font-weight:700;color:var(--g2);line-height:1.5}
.cd>*{animation:cin .5s cubic-bezier(.2,.8,.2,1) both}
.cd>*:nth-child(2){animation-delay:.05s}
.cd>*:nth-child(3){animation-delay:.1s}
.cd>*:nth-child(4){animation-delay:.15s}
@keyframes cin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.cd .sp{display:block;width:100%;height:46px;margin-top:12px}
.cd .tg{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:900;padding:5px 10px 5px 8px;border:1px solid var(--ln2);letter-spacing:-.01em}
.cd .tg i{width:8px;height:8px;border-radius:50%;flex:none}
.cd .bgx{margin-left:auto;text-align:right;font-family:var(--m);font-size:11px;color:var(--g2)}
.cd .bgx b{display:block;font-size:19px;font-weight:600;color:#fff;letter-spacing:-.02em}
.cd .bgx b small{font-size:11px;color:var(--g2);font-weight:500}
.cd .tl{list-style:none;margin:14px 0 0;padding:0;position:relative}
.cd .tl:before{content:'';position:absolute;left:4px;top:8px;bottom:8px;width:1px;background:#262626}
.cd .tl li{position:relative;padding:0 0 11px 20px}
.cd .tl li:before{content:'';position:absolute;left:1px;top:6px;width:7px;height:7px;border-radius:50%;background:#000;border:1.6px solid var(--c,#FFD400)}
.cd .tl small{display:block;font-family:var(--m);font-size:10.5px;color:var(--g3)}
.cd .tl b{font-size:14px;font-weight:900;letter-spacing:-.03em}
.cd .tl span{display:block;margin-top:2px;font-size:12.5px;font-weight:600;color:var(--g2);line-height:1.5}
.cd.on{border-color:var(--c)}
.cd.on:before{background:var(--c)}
.cd{--k:#D89A00;background:#F6F5F1;border:0;color:#0B0B0B;padding:22px 18px 18px;box-shadow:0 1px 0 rgba(0,0,0,.06),0 10px 24px -14px rgba(0,0,0,.5);transition:transform .3s cubic-bezier(.2,.8,.2,1),box-shadow .3s,opacity .3s}
.cd[data-t=up]{--k:#D89A00}
.cd[data-t=down]{--k:#5B6E93}
.cd[data-t=flat]{--k:#111}
.cd:before{content:'';position:absolute;left:0;right:0;top:0;bottom:auto;width:auto;height:4px;background:var(--t)}
.cd[data-t=flat]:before{background:#111}
.cd.on:before{height:4px;background:var(--t)}
.cd[data-t=flat].on:before{background:#111}
.nx:has(.cd.on) .cd:not(.on){opacity:.62;transform:scale(.985)}
.cd.on{border:0;box-shadow:0 0 0 1.5px var(--k),0 16px 32px -14px rgba(0,0,0,.6)}
.cd .tg{background:none!important;border:0!important;box-shadow:none;padding:0;font-size:12.5px;font-weight:900;letter-spacing:.06em;color:#0B0B0B;gap:8px}
.cd .tg i{width:auto;height:auto;border-radius:0;background:none!important;font-style:normal;font-size:11px;line-height:1;color:var(--k)}
.cd[data-t=up] .tg i:before{content:'\25B2'}
.cd[data-t=down] .tg i:before{content:'\25BC'}
.cd[data-t=flat] .tg i:before{content:'\25A0'}
.cd .bgx{margin-left:auto;text-align:right;font-family:var(--m);font-size:10.5px;color:#8A867E;letter-spacing:.02em}
.cd .bgx b{display:inline;font-size:17px;color:#0B0B0B;letter-spacing:-.02em;margin-right:2px}
.cd .bgx b small{font-size:11px;color:#8A867E}
.cd .dots{display:flex;gap:4px;justify-content:flex-end;margin-top:5px}
.cd .dots u{width:6px;height:6px;border-radius:50%;background:#D7D4CC}
.cd .dots u.f{background:var(--k)}
.cd .hy{color:#9A968C;letter-spacing:.2em;font-size:9.5px}
.cd h3{color:#0B0B0B;font-size:clamp(1.15rem,5vw,1.4rem);letter-spacing:-.05em;line-height:1.28}
.cd .sp{height:54px}
.cd .tl:before{background:#DAD7CF;left:3px}
.cd .tl li:before{width:7px;height:7px;left:0;background:var(--k);border:0;border-radius:50%}
.cd[data-t=flat] .tl li:before{background:#fff;border:1.6px solid #111}
.cd .tl small{color:#9A968C;font-size:10px;letter-spacing:.04em}
.cd .tl b{color:#0B0B0B;font-size:14px}
.cd .tl span{color:#5F5C55;font-size:12.5px}
.cd .ck{border-top:1px solid #DDDAD2;margin-top:6px;padding-top:13px}
.cd .ck em{border:0;padding:0;color:#8A867E;font-size:9.5px;letter-spacing:.1em}
.cd .ck span{color:#0B0B0B;font-weight:800;font-size:13px}
.under{position:relative;padding-bottom:14px}
.under:before{content:'';position:absolute;top:-10px;bottom:0;right:0;left:var(--zl,70%);background:rgba(255,212,0,.05);pointer-events:none}
.under>*{position:relative}
.nar{margin-top:0}
.lkw{position:relative;height:92px}
.lkw svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;clip-path:inset(0 0 100% 0);transition:clip-path .9s cubic-bezier(.2,.7,.2,1)}
.lkw.on svg{clip-path:inset(0 0 0 0)}
.lkw .tv{offset-rotate:0deg;offset-distance:0%;opacity:0}
.lkw.on .tv{animation:tv 1.6s .5s cubic-bezier(.45,0,.25,1) both}
@keyframes tv{0%{offset-distance:0%;opacity:0}12%{opacity:1}100%{offset-distance:100%;opacity:1}}
.lkw .nh{position:absolute;inset:0;display:block;pointer-events:none}
.lkw .nh b{position:absolute;left:0;top:10px}
.lkw .nh span{position:absolute;right:8px;bottom:9px;color:#A99A3A}
.ncv{margin-top:0}
.hdr{position:sticky;top:0;z-index:50;background:var(--bk);border-bottom:1px solid transparent;transition:border-color .2s}
.hdr.on{border-bottom-color:var(--ln)}
.bar{display:flex;align-items:center;justify-content:space-between;gap:12px;height:56px}
.mk{display:flex;align-items:center;gap:9px;font-weight:700;font-size:14px;letter-spacing:.24em}
.hbtn{border:1px solid var(--g4);color:#fff;font-weight:900;font-size:12.5px;padding:9px 14px;letter-spacing:-.02em;transition:background .2s,border-color .2s}
.hbtn:hover{background:#111;border-color:#555}
.tag{margin-top:clamp(18px,3vh,26px);font-family:var(--m);font-size:11.5px;color:var(--g2);
  display:flex;gap:10px;flex-wrap:wrap}
.tag b{color:var(--g1);font-weight:500}
.ttl{margin:6px 0 0;font-size:clamp(2.6rem,12vw,4rem);font-weight:900;letter-spacing:-.06em;line-height:1}
.say{margin-top:12px;font-size:clamp(1.05rem,4.5vw,1.32rem);font-weight:700;color:var(--g2);
  line-height:1.5;letter-spacing:-.035em}
.say b{color:var(--ink);font-weight:900}
.leg{margin-top:10px;display:flex;gap:16px;flex-wrap:wrap;font-size:12px;font-weight:700;color:var(--g2)}
.leg span{display:inline-flex;align-items:center;gap:7px}
.leg i{width:16px;height:3px;display:block}
.stage{position:relative;margin-top:8px;border:1px solid var(--ln);background:#050505;cursor:pointer}
.stage canvas{display:block;width:100%;height:clamp(340px,62vh,600px)}
.badge{position:absolute;left:0;top:0;padding:12px 16px 14px;pointer-events:none;
  background:linear-gradient(135deg,rgba(0,0,0,.92),rgba(0,0,0,.6));opacity:0;transition:opacity .35s}
.badge.on{opacity:1}
.badge b{display:block;font-size:clamp(2.2rem,10vw,3rem);font-weight:900;letter-spacing:-.05em;line-height:.95;color:var(--yl)}
.badge b small{font-size:.42em;font-weight:900;margin-left:2px}
.badge span{display:block;margin-top:6px;font-size:12px;font-weight:900;color:#fff}
.under{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-top:10px;
  font-size:11.5px;font-weight:600;color:var(--g3)}
.under .kl{display:block;font-style:normal;margin-bottom:5px;font-size:13px;font-weight:900;color:var(--yl)}
.under .kl i{font-style:normal;font-size:9.5px;border:1px solid #4A3F10;padding:1px 6px;margin-right:8px;vertical-align:1px}
.rep{font-size:11.5px;font-weight:800;color:var(--g2);white-space:nowrap}
.rep:hover{color:var(--ink)}
.stage canvas{transition:filter .7s cubic-bezier(.2,.8,.2,1),opacity .7s ease}
.stage.fog canvas{filter:blur(12px);opacity:.3}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}
.status{border-top:1px solid var(--ln);padding-top:22px}
.live1{display:flex;align-items:center;gap:12px}
.live1 b{font-family:var(--m);font-weight:600;font-size:clamp(1.7rem,7.6vw,2.3rem);letter-spacing:-.04em;line-height:1}
.live1 em{font-style:normal;margin-left:auto;font-size:12.5px;font-weight:800;color:var(--yl);border:1px solid #4A3F10;padding:5px 10px}
.live1 em.off{color:var(--g2);border-color:var(--ln2)}
.evb h4{margin:22px 0 10px;font-family:var(--m);font-size:10.5px;font-weight:500;letter-spacing:.14em;color:var(--g3)}
.evb h4:first-child{margin-top:6px}
.evb{padding-bottom:20px}
.acc{margin-top:22px;border-top:1px solid var(--ln)}
.acc details{margin:0;border:0;border-bottom:1px solid var(--ln)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--yl);flex:none;animation:pl 1.9s ease-in-out infinite}
.dot.off{background:var(--g2);animation:none}
@keyframes pl{0%,100%{opacity:1}50%{opacity:.25}}
.seal{margin:4px 0 16px;font-family:var(--m);font-size:11px;color:var(--g3);line-height:1.8;word-break:break-all}
.seal b{color:var(--g1);font-weight:500}
details{margin-top:16px;border-top:1px solid var(--ln);border-bottom:1px solid var(--ln)}
summary{list-style:none;cursor:pointer;padding:13px 0;font-size:12.5px;font-weight:800;color:var(--g2);
  display:flex;justify-content:space-between}
summary::-webkit-details-marker{display:none}
summary::after{content:'+';color:var(--g3)}
details[open] summary::after{content:'−'}
.tw{max-height:360px;overflow:auto;border-top:1px solid var(--ln)}
table{width:100%;border-collapse:collapse;font-family:var(--m);font-size:12px}
th{position:sticky;top:0;background:#0A0A0A;text-align:right;font-weight:500;color:var(--g3);
  padding:9px 10px;border-bottom:1px solid var(--ln)}
td{padding:8px 10px;text-align:right;border-bottom:1px solid #111;color:var(--g1)}
th:first-child,td:first-child,th:nth-child(2),td:nth-child(2){text-align:left}
td:nth-child(2){font-family:var(--f);color:var(--g2);font-weight:700}
td.p{color:var(--yl)}
tr.aft td{color:var(--g3)}
tr.aft td.p{color:#8A7A1F}
tr.miss td:nth-child(3){color:var(--g3)}
.vow{margin-top:clamp(36px,6vh,52px);font-size:clamp(1.35rem,5.8vw,1.9rem);font-weight:900;
  letter-spacing:-.05em;line-height:1.35}
.acts{display:grid;gap:9px;margin-top:22px}
.b1,.b2{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
  padding:18px;font-weight:900;font-size:clamp(1rem,4.2vw,1.1rem);letter-spacing:-.03em;
  transition:transform .15s}
.b1{background:var(--rd);color:#fff}
.b2{border:1px solid var(--g4);color:#fff}
.b1:active,.b2:active{transform:scale(.99)}
.disc{margin-top:clamp(44px,7vh,64px);padding:18px 0 40px;border-top:1px solid var(--ln);
  font-size:10.5px;line-height:2;color:var(--g3)}
.live{margin-top:clamp(20px,3.4vh,30px);display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-family:var(--m);font-size:11.5px;letter-spacing:.02em;color:var(--g2)}
.live b{color:#fff;font-weight:500}
.live .sp{color:var(--g4)}
.bh{margin-top:12px;font-size:clamp(2.5rem,11.4vw,4rem);font-weight:900;letter-spacing:-.06em;line-height:1.08}
.bh b{color:var(--yl);font-variant-numeric:tabular-nums}
.bsub{margin-top:16px;font-size:clamp(.92rem,3.8vw,1.04rem);font-weight:700;color:var(--g2);line-height:1.6}
.bsub b{color:#fff}
.trk{margin-top:34px}
.trh{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:14px}
.trh span{font-size:12.5px;font-weight:800;color:var(--g2)}
.trh b{font-family:var(--m);font-weight:600;font-size:clamp(1.5rem,6.4vw,1.9rem);letter-spacing:-.05em;line-height:1;font-variant-numeric:tabular-nums}
.bar3{display:flex;gap:2px;height:6px;margin-top:12px}
.bar3 i{display:block;height:100%;min-width:0;transform-origin:left;transform:scaleX(0);transition:transform 1.1s cubic-bezier(.2,.8,.2,1)}
.bar3 i.a{background:#fff}
.bar3 i.b{background:repeating-linear-gradient(135deg,#6A6A6A 0 3px,#222 3px 6px);transition-delay:.08s}
.bar3 i.c{background:var(--yl);transition-delay:.16s}
.bar3.on i{transform:none}
.bl{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px}
.bl span{min-width:0}
.bl i{display:block;font-style:normal;font-size:11.5px;font-weight:800;color:var(--g2);white-space:nowrap}
.bl b{display:block;margin-top:2px;font-family:var(--m);font-weight:600;font-size:clamp(1.3rem,5.6vw,1.6rem);letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.bl span.c b{color:var(--yl)}
.stk{position:sticky;top:56px;z-index:40;background:var(--bk);margin-top:30px}
.seg{display:flex;border-bottom:1px solid var(--ln)}
.seg button{padding:12px 2px;margin-right:22px;font-size:14.5px;font-weight:900;color:var(--g3);border-bottom:2px solid transparent;margin-bottom:-1px}
.seg button.on{color:#fff;border-bottom-color:var(--yl)}
.seg button s{text-decoration:none;font-family:var(--m);font-weight:500;font-size:12px;margin-left:5px}
.row{position:relative;display:grid;grid-template-columns:76px 1fr 48px 60px;gap:12px;align-items:center;width:100%;padding:16px 0;border-bottom:1px solid var(--ln);text-align:left;
  transition:background .15s;animation:rin .45s cubic-bezier(.2,.8,.2,1) both;-webkit-tap-highlight-color:transparent}
.row:hover{background:#080808}
.row:active{background:#0e0e0e}
.row.hot{background:linear-gradient(90deg,rgba(255,212,0,.09),rgba(255,212,0,0) 70%);box-shadow:inset 2px 0 0 var(--yl);padding-left:12px;width:calc(100% + 12px);margin-left:-12px}
@keyframes rin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.row canvas{display:block;width:76px;height:34px}
.rn{min-width:0}
.rn b{display:block;font-size:15px;font-weight:900;letter-spacing:-.035em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rn i{display:block;margin-top:3px;font-style:normal;font-size:11.5px;font-weight:700;color:var(--g2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs{text-align:right;font-family:var(--m);font-size:14px;color:var(--yl);font-variant-numeric:tabular-nums}
.rs u{display:block;height:2px;margin:6px 0 0 auto;width:100%;background:#1E1E1E;text-decoration:none;position:relative}
.rs u:after{content:'';position:absolute;left:0;top:0;bottom:0;width:var(--p);background:currentColor;transform-origin:left;animation:fill .9s .2s cubic-bezier(.2,.8,.2,1) both}
@keyframes fill{from{transform:scaleX(0)}to{transform:none}}
.rd{text-align:right}
.rd b{display:block;font-family:var(--m);font-weight:500;font-size:13px;font-variant-numeric:tabular-nums}
.rd i{display:inline-flex;align-items:center;gap:5px;margin-top:4px;min-height:8px;font-style:normal;font-size:10.5px;font-weight:800;color:var(--g2);white-space:nowrap}
.rd i.on{color:var(--yl)}
.rd i.on:before{content:'';width:5px;height:5px;border-radius:50%;background:var(--yl);animation:pl 1.9s ease-in-out infinite}
.rd i.brk{color:var(--g3)}
.more{padding:14px 0;font-size:12px;font-weight:700;color:var(--g3);border-bottom:1px solid var(--ln)}
.more b{color:var(--g1);font-family:var(--m);font-weight:500}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* ═════════ celestial 추가분 ═════════ */
.state-msg{padding:clamp(40px,10vh,80px) 0;font-size:14px;font-weight:700;color:var(--g2)}
#vDetail .state-msg{padding:24px 0 8px}
.hnav{display:flex;gap:8px}
a.hbtn{display:inline-flex;align-items:center}
.rs{color:var(--g1)}
.rs small{font-family:var(--f);font-size:10.5px;font-weight:800;color:var(--g2);margin-left:1px}
.more{border-bottom:0}
.cd .tl li b{display:block}
.nh b,.ttl{overflow-wrap:anywhere}
.adm{margin-top:clamp(36px,6vh,52px)}
.adm>h2{margin:0 0 14px;font-family:var(--m);font-size:10.5px;font-weight:500;letter-spacing:.14em;color:var(--g3)}
