
/* 세로 9:16 무대 하나. 디스크톡 앱 토큰 그대로(잉크 외곽선 2px, 어긋난 그림자, 카드 24 / 버튼 14). 단일 라이트 테마 */
:root{
  --ink:#2B2640; --ink2:#4A4468; --paper:#FFFFFF; --floor:#EEEBF7; --acc:#6B51F0; --mut:#6B6680; --sub:#A19DB5;
  --D:#FF4A3D; --I:#FFC21A; --S:#2ED573; --C:#3D7BFF;
  --Ds:#FFE1DE; --Is:#FFF3C4; --Ss:#D9F7E4; --Cs:#DCE7FF;
  --fd:'Jua','IBM Plex Sans KR','Apple SD Gothic Neo',sans-serif;
  --fb:'IBM Plex Sans KR','Apple SD Gothic Neo',sans-serif;
  color-scheme:light;
}
/* 언어별 글꼴 (디스크톡 앱과 같은 조합). 글꼴 파일은 고른 언어만 받아요 */
html[data-lang=en]{--fd:'Fredoka','Jua',sans-serif;--fb:'Nunito','IBM Plex Sans KR',sans-serif}
html[data-lang=ja]{--fd:'Mochiy Pop One','M PLUS Rounded 1c','Hiragino Sans',sans-serif;--fb:'M PLUS Rounded 1c','Hiragino Sans','Yu Gothic',sans-serif}
html[data-lang=zh]{--fd:'ZCOOL KuaiLe','Noto Sans SC','PingFang SC',sans-serif;--fb:'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif}
html[data-lang=tw]{--fd:'Chiron GoRound TC','Noto Sans TC','PingFang TC',sans-serif;--fb:'Noto Sans TC','PingFang TC','Microsoft JhengHei',sans-serif}
html[data-lang=ja] #stage *,html[data-lang=zh] #stage *,html[data-lang=tw] #stage *{word-break:normal!important;line-break:strict}
html[data-lang=en] .title-heading .ah1,html[data-lang=ja] .title-heading .ah1{letter-spacing:0}
.langpick{position:absolute;top:.85em;right:.85em;z-index:3;display:flex;align-items:center;gap:.25em;border:1.5px solid var(--ink);border-radius:99px;background:#ffffffd9;padding:.18em .45em .18em .4em;font:700 .64em var(--fb);color:var(--ink)}
.langpick svg{width:1.15em;height:1.15em;flex:none}
.langpick select{appearance:none;-webkit-appearance:none;border:0;background:transparent;font:inherit;color:inherit;padding:0 .1em;margin:0;cursor:pointer;outline:none}
.langpick:focus-within{outline:3px solid var(--acc);outline-offset:2px}
html,body{height:100%}
*,*::before,*::after{box-sizing:border-box}
body{background:var(--floor);color:var(--ink);font-family:var(--fb);overflow:hidden;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
#app{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px)}
#stage{position:relative;touch-action:none;overflow:hidden;background:#fff;box-shadow:0 0 0 2px var(--ink),6px 6px 0 2px var(--ink);border-radius:4px}
#cv{position:absolute;inset:0;width:100%;height:100%;display:block}
button{font-family:var(--fb);color:var(--ink);cursor:pointer}
button:focus-visible{outline:3px solid var(--acc);outline-offset:2px}
#pauseBtn{position:absolute;top:.7em;left:.7em;width:2.4em;height:2.4em;border-radius:.8em;border:2px solid var(--ink);background:#fff;box-shadow:2px 2px 0 var(--ink);display:flex;align-items:center;justify-content:center;gap:.22em;padding:0}
#pauseBtn i{display:block;width:.28em;height:.95em;background:var(--ink);border-radius:2px}
#spBtn{position:absolute;left:1em;bottom:1.2em;width:6.6em;height:6.6em;border-radius:50%;border:3px solid var(--ink);box-shadow:3px 3px 0 var(--ink);
  background:conic-gradient(var(--D) calc(var(--g,0)*1%),#fff 0);display:flex;align-items:center;justify-content:center;padding:0}
#spBtn span{width:77%;height:77%;flex:none;border-radius:50%;background:#fff;border:2px solid var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;font:1.43em var(--fd);line-height:1}   /* v55: 버튼 10% 크게(6→6.6em, 글자·키 안내·개수 ×1.1) · v56: 안쪽 원을 버튼 안쪽의 77% 정원으로 — 전엔 안쪽 원 크기가 글자 크기 기준 em이라 버튼보다 커져 타원이 되고 충전 링을 덮었음 */
#spBtn span b{font-weight:inherit}
#spPct{font:700 .5em var(--fb);line-height:1;margin-top:.25em;color:var(--ink2);letter-spacing:.02em}#spBtn.full #spPct{color:#fff;opacity:.9}#spPct[hidden]{display:none}
#spBtn.full{animation:spGlow 1s ease-in-out infinite}   /* v55: 쓸 수 있는 동안 1초에 한 번 노란 빛이 켜졌다 꺼짐 */
#spBtn.full #spLbl{animation:spLblBlink 1s ease-in-out infinite}
@keyframes spGlow{0%,100%{transform:none;box-shadow:3px 3px 0 var(--ink),0 0 0 0 rgba(255,194,26,0)}50%{transform:scale(1.05);box-shadow:3px 3px 0 var(--ink),0 0 0 .45em rgba(255,194,26,.55),0 0 1.2em .3em rgba(255,194,26,.45)}}
@keyframes spLblBlink{0%,100%{color:#fff}50%{color:#FFE27A}}
#spBtn.pop::after{content:'';position:absolute;inset:-.25em;border-radius:50%;border:.3em solid #FFC21A;pointer-events:none;animation:spPop .6s ease-out forwards}   /* v55: 충전 순간 고리 */
@keyframes spPop{0%{transform:scale(1);opacity:1}100%{transform:scale(1.75);opacity:0}}
#spBtn .key{position:absolute;top:-1.55em;left:50%;transform:translateX(-50%);font:700 .682em var(--fb);background:#fff;border:1.5px solid var(--ink);border-radius:.45em;padding:.08em .45em;white-space:nowrap;box-shadow:1px 1px 0 var(--ink)}
#spBtn.full span{background:var(--D);color:#fff}
#spBtn.full{background:conic-gradient(#FFC21A calc(var(--g,0)*1%),#fff 0)}
#spBtn .cnt{position:absolute;right:-.35em;top:-.25em;min-width:1.9em;height:1.9em;border-radius:1em;background:#FFC21A;border:2.5px solid var(--ink);box-shadow:2px 2px 0 var(--ink);font:1.155em var(--fd);line-height:1.6em;color:var(--ink);text-align:center}
#spBtn .cnt[hidden]{display:none}
#stage.sp-right #spBtn{left:auto;right:1em}
#stage.sp-right #pauseBtn{left:auto;right:.7em}   /* v57: 일시정지는 필살기 버튼과 같은 쪽 위 */   /* v46: 필살기 버튼 오른쪽 배치(일시정지 메뉴에서 바꿈) */
#stage.sp-right #spBtn .cnt{right:auto;left:-.35em}
@keyframes glow{50%{transform:scale(1.07);box-shadow:3px 3px 0 var(--ink),0 0 0 .5em rgba(255,74,61,.25)}}
.ov{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.8em;padding:1.2em;background:rgba(247,245,252,.92);text-align:center}
.ov[hidden],#pauseBtn[hidden],#spBtn[hidden],.detail[hidden]{display:none!important}
.panel{width:100%;background:#fff;border:2px solid var(--ink);box-shadow:5px 5px 0 var(--ink);border-radius:1.5em;padding:1.2em 1em 1em;display:flex;flex-direction:column;gap:.62em;align-items:center;max-height:100%;overflow:auto}
.eyebrow{font:700 .7em var(--fb);letter-spacing:.14em;color:var(--acc)}
.big{font:2em/1.08 var(--fd);text-wrap:balance}
.mid{font:1.3em/1.18 var(--fd);text-wrap:balance}
.lead{font-size:.84em;line-height:1.55;color:var(--mut)}
.chip{display:inline-flex;gap:.35em;align-items:center;border:2px solid var(--ink);border-radius:99px;padding:.18em .7em;font:700 .76em var(--fb);background:var(--Ds)}
.btn{width:100%;min-height:3em;border-radius:1.1em;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink),inset 0 -.22em 0 rgba(43,38,64,.2),inset 0 .14em 0 rgba(255,255,255,.35);background:var(--acc);color:#fff;font:1.04em var(--fd);padding:.3em .6em;transition:transform .08s}
.btn.ghost{background:#fff;color:var(--ink)}
.btn.sm{min-height:2.5em;font-size:.9em}
.btn:active{transform:translate(2px,2px) scale(.98);box-shadow:1px 1px 0 var(--ink),inset 0 -.1em 0 rgba(43,38,64,.2)}
.row2{display:flex;gap:.5em;width:100%}
.hero{width:8em;height:8em;border-radius:50%;background:var(--Ds);border:2px solid var(--ink);box-shadow:4px 4px 0 var(--D);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.hero img{width:6.8em;height:6.8em;animation:bob 2.2s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-6%) rotate(-3deg)}}
.how{display:grid;grid-template-columns:1fr 1fr;gap:.45em;width:100%}
.how div{border:2px dashed #CFC9E3;border-radius:.8em;padding:.5em .45em;font-size:.72em;line-height:1.42;color:var(--mut);text-align:left}
.how b{display:block;color:var(--ink);font:1.08em var(--fd);margin-bottom:.12em}
.how div,.lead,.note{word-break:keep-all;overflow-wrap:break-word}
.compact #ovTitle .hero{width:5.2em;height:5.2em}
.compact #ovTitle .hero img{width:4.6em;height:4.6em}
.compact #ovTitle .panel{gap:.45em;padding:.8em .8em .7em}
.compact #ovTitle .big{font-size:1.7em}
.compact #ovTitle .lead{font-size:.76em}
.compact #ovTitle .how div{font-size:.64em}
.diffs{display:flex;gap:.4em;width:100%}
.diffs button{flex:1;border:2px solid var(--ink);border-radius:.8em;background:#fff;padding:.4em .2em;font:.9em var(--fd);display:flex;flex-direction:column;align-items:center;gap:.1em}
.diffs button small{font:600 .68em var(--fb);color:var(--mut)}
.diffs button.on{background:var(--ink);color:#fff;box-shadow:2px 2px 0 var(--acc)}
.diffs button.on small{color:#D9D4EE}
.diffs button:disabled{opacity:.45;cursor:default;border-style:dashed}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:.42em;width:100%}
#ovResult .stats{grid-template-columns:repeat(6,1fr)}#ovResult .stats div{grid-column:span 2}#ovResult .stats div:nth-child(n+4){grid-column:span 3}
#ovResult .stats div:nth-child(5){--sh:var(--acc);animation-delay:.6s}
#rRevBox.zero b{color:var(--S)}
.norev{position:absolute;top:-.75em;right:-.4em;font:700 .78em var(--fb);white-space:nowrap;background:var(--S);color:#fff;border:1.5px solid var(--ink);border-radius:99px;padding:.1em .55em;box-shadow:1.5px 1.5px 0 var(--ink);transform:rotate(6deg);animation:stamp .5s cubic-bezier(.3,1.6,.5,1) both 1.1s}
.stats div{position:relative;background:#fff;border:2px solid var(--ink);border-radius:.9em;padding:.45em .4em .4em;font-size:.7em;color:var(--mut);box-shadow:2px 3px 0 var(--sh,var(--acc));animation:popIn .45s cubic-bezier(.3,1.6,.5,1) both}
.stats div:nth-child(1){--sh:var(--D);animation-delay:.2s}.stats div:nth-child(2){--sh:var(--I);animation-delay:.3s}.stats div:nth-child(3){--sh:var(--S);animation-delay:.4s}.stats div:nth-child(4){--sh:var(--C);animation-delay:.5s}
.stats b{display:block;font:1.7em var(--fd);color:var(--ink);font-variant-numeric:tabular-nums;text-shadow:0 .06em 0 var(--Is)}
.score{font:2.7em var(--fd);font-variant-numeric:tabular-nums;line-height:1.05}
#resTitle{white-space:pre-line;text-shadow:0 .07em 0 #fff}
/* 입체 스티커 글자: 잉크 외곽선 + 아래로 두께(계열 색) */
.t3d{--o:.055em;--sc:var(--acc);color:#fff;text-shadow:calc(var(--o)*-1) calc(var(--o)*-1) 0 var(--ink),var(--o) calc(var(--o)*-1) 0 var(--ink),calc(var(--o)*-1) var(--o) 0 var(--ink),var(--o) var(--o) 0 var(--ink),0 calc(var(--o)*-1.25) 0 var(--ink),0 calc(var(--o)*1.25) 0 var(--ink),calc(var(--o)*-1.25) 0 0 var(--ink),calc(var(--o)*1.25) 0 0 var(--ink),.03em .13em 0 var(--sc),.05em .17em 0 var(--ink)}
.t3d.red{color:var(--D);--sc:var(--ink)}
#ovResult .panel,#ovOver .panel,#ovPause .panel{border-width:2.5px;border-radius:1.8em;box-shadow:6px 7px 0 var(--pc,var(--acc)),7px 8px 0 2px var(--ink);background:radial-gradient(ellipse 70% 6.5em at 50% 0,var(--ps,#F0ECFF) 0 99%,#fff 100%);animation:panelIn .5s cubic-bezier(.3,1.5,.5,1) both}
#ovResult .eyebrow,#ovOver .eyebrow{align-self:center;background:var(--acc);color:#fff;padding:.4em 1em;border-radius:99px;border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);transform:rotate(-3deg);letter-spacing:.12em}
#ovOver .eyebrow{background:var(--ink2)}
#ovResult .score,#ovOver .score{--sc:var(--pc,var(--acc));animation:popIn .5s cubic-bezier(.3,1.6,.5,1) both .1s}
#ovResult .mini-hero{width:4.8em;height:4.8em}#ovResult .mini-hero img{width:4.2em;height:4.2em}
#ovResult .panel{gap:.4em;padding-top:1em;padding-bottom:.9em}#ovResult .mid{font-size:1.16em}#ovResult .stats{gap:.36em}#ovResult .stats div{padding:.34em .4em .3em}#ovResult .btn{min-height:2.8em}#ovResult .stats b{font-size:1.5em}#ovResult .note{font-size:.64em}#ovResult .met img{width:1.7em;height:1.7em}
.compact #ovResult .mini-hero{width:3.4em;height:3.4em}.compact #ovResult .mini-hero img{width:2.95em;height:2.95em}
.compact #ovResult [data-t=invite_note]{display:none}.compact #ovResult .met img{width:1.4em;height:1.4em}.compact #ovResult .btn{min-height:2.6em}.compact #ovResult .stats b{font-size:1.3em}
#overHero img{animation:sad 1.8s ease-in-out infinite}
.mini-hero{position:relative}
.mini-hero::before,.mini-hero::after{content:'';position:absolute;width:.72em;height:.72em;background:var(--I);border:1.5px solid var(--ink);border-radius:.15em;transform:rotate(45deg);animation:twinkle 1.6s ease-in-out infinite}
.mini-hero::before{top:0;right:-.55em}.mini-hero::after{bottom:.3em;left:-.7em;width:.5em;height:.5em;background:var(--pc,var(--D));animation-delay:-.8s}
#ovOver .mini-hero::before,#ovOver .mini-hero::after{display:none}
.party{pointer-events:none;position:absolute;top:16%;left:50%;width:.55em;height:.9em;border:1.5px solid var(--ink);border-radius:2px;animation:conf 1.7s cubic-bezier(.2,.7,.4,1) forwards}
@keyframes popIn{0%{transform:scale(.4);opacity:0}100%{transform:none;opacity:1}}
@keyframes panelIn{0%{transform:translateY(1.2em) scale(.92);opacity:0}100%{transform:none;opacity:1}}
@keyframes stamp{0%{transform:scale(2.2) rotate(-14deg);opacity:0}100%{transform:scale(1) rotate(-4deg);opacity:1}}
@keyframes twinkle{50%{transform:rotate(45deg) scale(.45);opacity:.55}}
@keyframes sad{0%,100%{transform:rotate(-9deg) translateY(3%)}50%{transform:rotate(-3deg) translateY(0)}}
@media (prefers-reduced-motion:reduce){.stats div,#ovResult .panel,#ovOver .panel,#ovPause .panel,.newbest.hit,.score,.mini-hero::before,.mini-hero::after,#overHero img{animation:none!important}}
.compact #ovResult .panel,.compact #ovOver .panel{gap:.42em;padding:.85em .8em .75em}
.compact #resTitle{font-size:1.12em}
.compact .stats b{font-size:1.35em}
.compact .stats div{padding:.32em .4em}
.compact #ovResult .note,.compact #ovOver .note{font-size:.62em}
.compact .score{font-size:2.1em}
.compact #ovOver .big{font-size:1.7em}
.newbest{font:700 .76em var(--fb);color:var(--D)}
.newbest.hit{display:inline-block;background:var(--D);color:#fff;border:2px solid var(--ink);border-radius:.7em;padding:.22em .8em;box-shadow:2px 2px 0 var(--ink);animation:stamp .5s cubic-bezier(.3,1.6,.5,1) both .95s}
.note{font-size:.68em;color:var(--mut);line-height:1.45}
.met{display:flex;flex-wrap:wrap;gap:.25em;justify-content:center}
.met img{width:1.9em;height:1.9em}
/* 도감 */
.colhead{display:flex;align-items:baseline;justify-content:space-between;width:100%}
.coltabs{display:flex;gap:.4em;width:100%}
.coltabs button{flex:1;position:relative;font:1em var(--fd);padding:.45em 0;border:2px solid var(--ink);border-radius:.8em;background:#fff;color:var(--ink);box-shadow:2px 2px 0 var(--ink);cursor:pointer}
.coltabs button.on{background:var(--ink);color:#fff}
.coltabs .newdot{position:absolute;top:-.55em;right:-.3em;font:700 .6em var(--fb);background:var(--D);color:#fff;border:1.5px solid var(--ink);border-radius:99px;padding:.1em .45em}
.mcell img{width:86%;height:86%}
.mcell.lock img{filter:brightness(0);opacity:.55}
.mcell .seg{font:700 .56em var(--fb);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:96%}
.grid5{display:grid;grid-template-columns:repeat(5,1fr);gap:.35em;width:100%}
.mflav{font-size:.84em;line-height:1.5;text-align:center;background:#FFF7E0;border:2px dashed #FFC21A;border-radius:.9em;padding:.5em .8em;margin-top:-.15em;width:100%;box-sizing:border-box}
.colhead .count{font:1.6em var(--fd)}
.grid16{display:grid;grid-template-columns:repeat(4,1fr);gap:.4em;width:100%}
.cell{position:relative;aspect-ratio:1;border:2px solid var(--ink);border-radius:.9em;background:#fff;padding:.15em;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0}
.cell img{width:78%;height:78%}
.cell .seg{font:700 .62em var(--fb);line-height:1}
.cell.lock{background:#F2F0F8;border-style:dashed}
.cell.lock img{filter:brightness(0);opacity:.78}
.cell.met img{filter:grayscale(1);opacity:.5}
.cell .tag{position:absolute;top:-.45em;right:.15em;font:700 .55em var(--fb);border:1.5px solid var(--ink);border-radius:99px;padding:.05em .4em;background:#fff}
.cell.own{box-shadow:3px 3px 0 var(--D)}
.fam{font:700 .62em var(--fb);color:var(--mut);text-align:left;width:100%;letter-spacing:.08em}
.legend[hidden]{display:none}
.legend{display:flex;gap:.7em;justify-content:center;font-size:.66em;color:var(--mut);flex-wrap:wrap}
.legend span{display:inline-flex;align-items:center;gap:.3em}
.legend i{width:.8em;height:.8em;border-radius:.2em;border:1.5px solid var(--ink);display:inline-block}
.detail{display:flex;flex-direction:column;align-items:center;gap:.5em;width:100%}
.detail .dimg{width:7em;height:7em;border-radius:50%;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;background:#F2F0F8}
.detail .dimg img{width:6em;height:6em}
.detail .dimg.lock img{filter:brightness(0);opacity:.8}
.detail .dimg.met img{filter:grayscale(1);opacity:.55}
.toast{min-height:1.2em;font:600 .72em var(--fb);color:var(--acc)}
/* 해금 연출 */
#ovReveal{background:rgba(43,38,64,.88);color:#fff;gap:.5em;overflow:hidden}
#ovReveal .rays{pointer-events:none;position:absolute;left:50%;top:44%;width:34em;height:34em;margin:-17em 0 0 -17em;border-radius:50%;opacity:0;
  background:repeating-conic-gradient(var(--rc,#FFC21A) 0 8deg,transparent 8deg 22deg);animation:spin 6s linear infinite;transition:opacity .4s}
#ovReveal.s2 .rays{opacity:.35}
@keyframes spin{to{transform:rotate(360deg)}}
#ovReveal .found{font:1.1em var(--fd);letter-spacing:.12em;color:var(--I);opacity:0;transform:translateY(.6em);transition:all .35s}
#ovReveal.s1 .found{opacity:1;transform:none}
#ovReveal .rimg{position:relative;width:10em;height:10em;border-radius:50%;background:#fff;border:3px solid var(--ink);box-shadow:5px 5px 0 var(--rc,#FFC21A);display:flex;align-items:center;justify-content:center;transform:scale(0);transition:transform .45s cubic-bezier(.3,1.6,.5,1)}
#ovReveal.s1 .rimg{transform:scale(1)}
#ovReveal .rimg img{width:8.4em;height:8.4em;filter:brightness(0);opacity:.85;transition:filter .2s,opacity .2s}
#ovReveal.s1:not(.s3) .rimg{animation:shake .12s linear infinite}
@keyframes shake{25%{transform:translate(-2px,1px) rotate(-2deg)}75%{transform:translate(2px,-1px) rotate(2deg)}}
#ovReveal.s3 .rimg img{filter:none;opacity:1;animation:pop .5s cubic-bezier(.3,1.6,.5,1)}
@keyframes pop{0%{transform:scale(.6)}100%{transform:scale(1)}}
#ovReveal .rname{font:1.9em/1.1 var(--fd);opacity:0;transform:translateY(.5em);transition:all .35s;text-wrap:balance}
#ovReveal .rseg{font:700 .8em var(--fb);opacity:0;transition:opacity .35s;color:#D9D4EE}
#ovReveal.s4 .rname,#ovReveal.s4 .rseg{opacity:1;transform:none}
#ovReveal .unl{font:1.05em var(--fd);background:var(--I);color:var(--ink);border:2px solid var(--ink);border-radius:99px;padding:.3em .9em;box-shadow:3px 3px 0 #000;opacity:0;transform:scale(.7);transition:all .3s cubic-bezier(.3,1.6,.5,1)}
#ovReveal.s5 .unl{opacity:1;transform:none}
#ovReveal .rbtn{position:relative;z-index:1;width:70%;opacity:0;transition:opacity .3s;pointer-events:none}
#ovReveal.s5 .rbtn{pointer-events:auto}
#ovReveal.s5 .rbtn{opacity:1}
.conf{pointer-events:none;position:absolute;width:.55em;height:.9em;top:44%;left:50%;border:1.5px solid var(--ink);border-radius:2px;opacity:0}
#ovReveal.s3 .conf{animation:conf 1.4s cubic-bezier(.2,.7,.4,1) forwards}
@keyframes conf{0%{opacity:1;transform:translate(0,0) rotate(0)}100%{opacity:0;transform:translate(var(--x),var(--y)) rotate(var(--r))}}
@media (prefers-reduced-motion:reduce){.hero img,#spBtn.full,#spBtn.full #spLbl,#spBtn.pop::after,#ovReveal .rays{animation:none}#spBtn.full{box-shadow:3px 3px 0 var(--ink),0 0 0 .35em rgba(255,194,26,.7)}#spBtn.pop::after{display:none}}   /* v55: 동작 줄이기면 깜빡임 없이 노란 테두리만 */
/* The title is a living route map, not a tutorial card. */
#ovTitle{padding:1.5em 1.25em 1.35em;gap:0;background:linear-gradient(180deg,#F0F3FF 0%,#FFFCF3 53%,#FFF1E9 100%);justify-content:space-between}
.title-heading{flex:none;position:relative;z-index:1}
.title-heading .eyebrow{font-size:.56em;letter-spacing:.18em;color:#77708B}
/* v47: 타이틀 화면 제목 h1→h2.ah1 (사이트 게임 페이지 h1은 소개 페이지 제목 하나만) */
.title-heading .ah1{margin:.24em 0 .14em;font:2.65em/1.08 var(--fd);letter-spacing:-.02em;color:var(--ink)}
.title-heading .ah1 span{display:block;color:var(--D);letter-spacing:inherit}
.title-heading .ah1 span.h1a{color:var(--ink);letter-spacing:inherit}
.title-heading .ah1 span.t3d{--o:.045em;color:#fff;--sc:var(--acc)}
.title-heading .ah1 span.t3d.red{color:var(--D);--sc:var(--ink)}
.title-heading p{margin:.55em 0 0;font:600 .71em var(--fb);color:var(--ink2);word-break:keep-all}
.journey{width:100%;flex:1;min-height:0;max-height:27em;display:flex;align-items:center;justify-content:center}
.journey-art{width:100%;height:100%;overflow:visible}
.island text{text-anchor:middle;fill:#746C83;font:600 8px var(--fb)}
.island{animation:island-float 4s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.island-msg{animation-delay:-1s}.island-net{animation-delay:-2s}.island-core{animation-delay:-3s}
.journey-route{animation:route-travel 2.4s linear infinite}
.traveler{animation:depart-bob 2.8s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.title-shot{animation:depart-shot 1.8s linear infinite}.shot-two{animation-delay:-.9s}
.portal-ring{transform-box:fill-box;transform-origin:center;animation:spin 24s linear infinite}
.journey-sparkles{animation:journey-twinkle 3s ease-in-out infinite}
.charpick{display:flex;align-items:center;gap:.7em;width:100%;min-height:4.4em;border:2px solid var(--ink);border-radius:1em;background:#fff;box-shadow:3px 3px 0 var(--pc,var(--D));padding:.45em .7em .45em .5em;text-align:left}
.charpick img{width:3.6em;height:3.6em;flex:none;border-radius:50%;background:var(--ps,#FFE1DE)}
.charpick span{display:flex;flex-direction:column;min-width:0;flex:1;gap:.1em}
.charpick b{font:1.02em var(--fd);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.charpick small{font:600 .66em var(--fb);color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.charpick em{font:700 .66em var(--fb);font-style:normal;color:var(--acc);letter-spacing:.02em;white-space:nowrap}
.charpick::after{content:'›';flex:none;font:600 1.9em/1 var(--fb);color:var(--ink2)}
.backarr{flex:none;width:2.4em;height:2.4em;border-radius:.8em;border:2px solid var(--ink);background:#fff;box-shadow:2px 2px 0 var(--ink);display:flex;align-items:center;justify-content:center;padding:0;color:var(--ink)}
.backarr::before{content:'‹';font:1.9em/1 var(--fd);margin-top:-.14em}
.backarr:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.hasback .colhead{align-items:center;gap:.5em}
.hasback .colhead .eyebrow{flex:1;text-align:center}
.hasback .colhead .count{min-width:2.4em;text-align:right}
#charBody{gap:.55em}
#charBody .dimg{width:8em;height:8em}#charBody .dimg img{width:6.9em;height:6.9em}
#charBody .mid{font-size:1.4em}
#charBody .kit div{font-size:.76em}
#charBody .btn{min-height:2.9em}
.dexlink{position:relative;align-self:center;background:transparent;border:0;padding:.2em .6em;font:700 .74em var(--fb);color:var(--ink2);text-decoration:underline;text-underline-offset:.2em;text-decoration-color:#BEB0DF}
.dexlink .newdot{position:absolute;top:-.6em;right:-1.4em;font:700 .72em var(--fb);background:var(--D);color:#fff;border:1.5px solid var(--ink);border-radius:99px;padding:.08em .4em}
.dexlink .newdot[hidden]{display:none}
.pcnote{font:600 .62em var(--fb);color:var(--ink2);text-align:center;background:#ffffffb0;border:1.5px dashed #CFC9E3;border-radius:.7em;padding:.35em .5em}
.mini-hero{width:4.4em;height:4.4em;border-radius:50%;border:2px solid var(--ink);background:var(--ps,#FFE1DE);box-shadow:3px 3px 0 var(--pc,var(--D));display:flex;align-items:center;justify-content:center;flex:none}
.mini-hero img{width:3.8em;height:3.8em;animation:bob 2.2s ease-in-out infinite}
.btn.invite{background:var(--I);color:var(--ink)}
.cell.cur{outline:3px solid var(--acc);outline-offset:2px}
.compact .mini-hero{width:3.4em;height:3.4em}.compact .mini-hero img{width:2.9em;height:2.9em}
.kit{width:100%;display:flex;flex-direction:column;gap:.35em;text-align:left}
.kit div{border:2px solid #E6E2F2;border-radius:.8em;padding:.45em .6em;font-size:.72em;line-height:1.45;color:var(--mut)}
.kit b{display:block;color:var(--ink);font:1.08em var(--fd)}
.kit b i{font:700 .7em var(--fb);font-style:normal;color:var(--acc);margin-right:.4em;letter-spacing:.06em}
.title-actions{width:100%;display:flex;flex-direction:column;gap:.65em;flex:none;position:relative;z-index:1}
#ovTitle .diffs{gap:.45em;margin-bottom:.2em}
#ovTitle .diffs button{min-height:2.7em;border-width:1.5px;border-radius:.65em;background:#ffffffa8;font-size:.85em}
#ovTitle .diffs button small{display:none}
#ovTitle .diffs button.ad{border-style:dashed;border-color:var(--acc);color:var(--acc);background:#fff;opacity:1}
#ovTitle .diffs button.ad small{display:block;font:700 .66em var(--fb);color:var(--acc)}
#cardImg{display:block;width:auto;max-width:100%;max-height:22em;border-radius:1em;border:2px solid var(--ink);box-shadow:4px 4px 0 var(--acc)}
.compact #cardImg{max-height:17em}
#ovTitle .diffs button.on{background:var(--ink);color:white;box-shadow:0 3px 0 #BEB0DF}
#ovTitle .diffs button:disabled{opacity:.4}
#ovTitle .departure{background:var(--D);min-height:3.15em;font-size:1.14em;position:relative}
.departure span{position:absolute;right:1.1em;font:1.3em var(--fb);top:50%;transform:translateY(-50%)}
.compact #ovTitle{padding:1.1em 1.25em 1.2em}
.compact .title-heading .ah1{font-size:2.35em}
.compact .title-heading p{font-size:.67em}
.compact .title-actions{gap:.55em}
@keyframes island-float{50%{transform:translateY(-4px)}}
@keyframes depart-bob{0%,100%{transform:translate(0,2px) rotate(-4deg)}50%{transform:translate(5px,-8px) rotate(4deg)}}
@keyframes route-travel{to{stroke-dashoffset:52}}
@keyframes depart-shot{0%{transform:translateY(0);opacity:0}15%{opacity:.8}80%{opacity:.8}100%{transform:translateY(-86px);opacity:0}}
@keyframes journey-twinkle{50%{opacity:.3}}
@media(prefers-reduced-motion:reduce){#ovTitle *{animation:none!important}.title-shot{display:none}}


/* ── 사이트 안에 넣을 때(html.embed): 첫 화면은 게임, 아래로 내리면 소개 글 */
html.embed,html.embed body{height:auto;overflow:auto}
html.embed body{-webkit-user-select:auto;user-select:auto;background:#fff;overflow-x:hidden}
html.embed{overscroll-behavior-y:none}
html.embed.playing,html.embed.playing body{overflow:hidden;overscroll-behavior:none;touch-action:none}   /* v45: position:fixed 는 iOS 웹뷰에서 스크롤해 둔 만큼 화면이 틀어져서 안 씀. 플레이 중 스크롤 차단은 JS(문서 touchmove 차단 + scroll 되돌림)가 맡음 */
/* v46: 아케이드는 전체화면(html.arcade)일 때만 보임 — #app 은 기본값(position:fixed;inset:0) 그대로. 소개 페이지는 따로 스크롤 */
html.embed .morebar{display:flex;align-items:center;justify-content:center;gap:.4em;height:52px;margin:0;border:0;border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);background:#fff;color:var(--ink);font:700 14px var(--fb);text-decoration:none;-webkit-tap-highlight-color:transparent}
html.embed .morebar svg{width:16px;height:16px}
