[hidden]{display:none!important}
:root{color-scheme:dark;--ink:#ece9df;--muted:#a3a5b5;--gold:#e9c77c;--line:#ffffff20;--card:#171b28}
*{box-sizing:border-box}
body{margin:0;background:#10131d;color:var(--ink);font:14px/1.5 ui-sans-serif,system-ui,-apple-system,"Noto Sans TC",sans-serif;min-height:100vh;display:grid;place-items:center;padding:20px}
main{width:min(100%,1000px)}
header{display:flex;align-items:end;justify-content:space-between;margin:0 0 12px;gap:16px}
h1{font-size:19px;letter-spacing:.08em;margin:0;font-weight:650}.gold{color:var(--gold)}.sub,.muted{color:var(--muted);font-size:12px}
.controls{display:flex;gap:8px}
button{border:1px solid var(--line);background:#ffffff0b;color:var(--ink);border-radius:8px;padding:8px 14px;font:inherit;cursor:pointer}
button:hover:not(:disabled){border-color:#ffffff60}button:disabled{opacity:.4;cursor:default}
button.primary{background:#e9c77c22;border-color:#e9c77c90;color:var(--gold);font-weight:600;padding:10px 26px}
.screen{min-height:560px}
.stages{display:flex;gap:8px;margin-bottom:12px}
.stagebtn{flex:1;text-align:left;padding:10px 12px}.stagebtn small{display:block;color:var(--muted);font-size:11px}
.stagebtn.sel{border-color:var(--gold);background:#e9c77c14}.stagebtn.locked{opacity:.35}
.roster{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}.roster .hero{min-width:0}
.hero{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px;cursor:pointer;position:relative;transition:border-color .15s,transform .15s}
.hero:hover{border-color:#ffffff50}.hero.sel{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold) inset;transform:translateY(-2px)}
/* portrait: every HD portrait is a full-body figure ~same pixel height, so scale by HEIGHT (never stretch); wide ones (sword/cape) crop at the sides */
.hero .pf{position:relative;aspect-ratio:1/1.08;overflow:hidden;border-radius:8px;
  background:radial-gradient(ellipse at 50% 75%,color-mix(in srgb,var(--hc) 28%,transparent),transparent 65%),linear-gradient(#232a40,#151926)}
.hero .pf img{position:absolute;bottom:2%;left:50%;translate:-50% 0;height:94%;width:auto;max-width:none;filter:drop-shadow(0 4px 6px #0008);transition:transform .2s;user-select:none}
.hero:hover .pf img{transform:scale(1.04) translateY(-2px)}.hero.sel .pf img{transform:scale(1.06) translateY(-3px)}
.clsname{font-weight:800;text-shadow:0 0 8px currentColor}
.clsline{font-size:10px;color:var(--muted);margin-top:5px}.clsline button{width:100%;font-size:11px;padding:4px;border-color:#ffd23f;color:#ffd23f;background:#ffd23f18;animation:ultpulse .7s ease-in-out infinite alternate}
.clsfx{position:fixed;inset:0;background:#05060ecc;display:grid;place-items:center;z-index:50;cursor:pointer;animation:fadein .3s}
.clsfx .cf-in{display:flex;gap:24px;align-items:center;border:2px solid var(--c);border-radius:16px;padding:20px 28px;background:linear-gradient(135deg,#151a2c,#0b0d18);box-shadow:0 0 60px color-mix(in srgb,var(--c) 50%,transparent);max-width:640px;line-height:1.8}
.clsfx img{height:300px;width:auto;filter:drop-shadow(0 0 18px var(--c));animation:clsin .7s cubic-bezier(.2,1.4,.4,1)}
.clsfx b{font-size:24px;color:var(--c)}
@keyframes clsin{from{transform:scale(.6) translateY(30px);opacity:0}}@keyframes fadein{from{opacity:0}}
.powbox{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:#ffffff08;border-radius:8px;padding:6px 8px}.powbox>div{display:flex;flex-direction:column}.powbox span{font-size:10px;color:var(--muted)}.powbox b{font-size:15px;font-variant-numeric:tabular-nums}
.powbar{grid-column:1/3;height:4px;background:#ffffff14;border-radius:3px;overflow:hidden}.powbar i{display:block;height:100%}
.powtrial b{font-size:11px}.powtrial{grid-column:1/3;font-size:11px;line-height:1.5;padding:4px 6px;border-radius:6px}.powtrial.ok{background:#7dffa814;color:#bdf5cf}.powtrial.bad{background:#ff8a7a1f;color:#ffb8ad;border:1px solid #ff8a7a66}
.trialbox{border-radius:10px;padding:8px 12px;margin-bottom:10px;font-size:12px;line-height:1.7}.trialbox.ok{background:#7dffa810;border:1px solid #7dffa855}.trialbox.bad{background:#ff8a7a14;border:1px solid #ff8a7a88}.trialbox b{font-size:13px}
.stagebtn.trial{border-color:#c890ff88}
.metabar{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px}
.offline{background:linear-gradient(90deg,#2a3a6a,#1b2238);border:1px solid #7fb7ff66;border-radius:12px;padding:10px 14px;margin-bottom:10px;font-size:13px;line-height:1.7;position:relative}
.offline .x{position:absolute;right:10px;top:10px}
.stagenav{flex:none;padding:6px 10px}.stagebtn.final{border-color:#ff8a7a88}.stagebtn.final.sel{border-color:#ff8a7a}
.opts{display:flex;gap:12px;align-items:center;font-size:12px;flex-wrap:wrap}.opts label{display:flex;gap:4px;align-items:center;cursor:pointer}
.pickbtn{width:100%;margin-top:6px;font-size:11px;padding:4px;border-color:var(--gold);color:var(--gold);animation:ultpulse .8s ease-in-out infinite alternate}
.slotrow{display:flex;gap:4px;align-items:stretch}.slotrow select{flex:1;min-width:0}
.forge{flex:none;font-size:11px;padding:2px 6px;line-height:1.1}.forge small{display:block;font-size:9px;color:var(--gold)}
.autobar{position:absolute;left:50%;top:38%;translate:-50% -50%;background:#0b0d18e8;border:1px solid var(--gold);border-radius:12px;padding:14px 18px;min-width:520px;text-align:center;pointer-events:auto;box-shadow:0 8px 30px #000a}
.autobar .ab-sum{font-size:14px;margin-bottom:6px}.autobar .ab-next{font-size:13px;color:var(--muted);margin-bottom:10px}.autobar .ab-btns{display:flex;gap:8px;justify-content:center}
.ending{background:linear-gradient(135deg,#3a2a12,#1b1626);border:1px solid var(--gold);border-radius:12px;padding:12px 14px;margin:10px 0;line-height:1.8}
.dexgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.dexcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px;font-size:12px}.dexcard.isboss{border-color:#ff8a7a88}
.dexcard .dpf{position:relative;aspect-ratio:1/1;overflow:hidden;border-radius:8px;background:radial-gradient(ellipse at 50% 70%,#2c3554,#141826 70%)}
.dexcard .dpf img{position:absolute;inset:4%;width:92%;height:92%;object-fit:contain;filter:drop-shadow(0 4px 6px #0008)}
.dexcard.unknown .dpf img{filter:brightness(0) opacity(.55)}.dexcard.unknown .dname{color:var(--muted)}
.dname{font-weight:650;font-size:14px;margin-top:6px;display:flex;gap:6px;align-items:center}.stars{margin-left:auto;color:var(--gold);letter-spacing:1px}
.dkills{margin-top:2px}.dbar{height:4px;background:#ffffff18;border-radius:3px;margin:4px 0;overflow:hidden}.dbar i{display:block;height:100%;background:var(--gold)}
.dlore{color:#cfd0da;line-height:1.6;min-height:40px}.dtrait{color:var(--muted);margin-top:4px;line-height:1.5}.dtrait b{color:#9fd0ff}
.hero:not(.sel) .pf img{filter:drop-shadow(0 4px 6px #0008) saturate(.85) brightness(.92)}
.hero .name{font-weight:650;margin-top:6px;display:flex;justify-content:space-between}.hero .role{font-size:11px;color:var(--gold)}
.hero .blurb{font-size:11px;color:var(--muted);min-height:34px;margin:4px 0}
.hero .stats{font-size:11px;color:#cfd0da;display:flex;gap:10px}
.exp{height:4px;background:#ffffff18;border-radius:3px;margin-top:6px;overflow:hidden}.exp i{display:block;height:100%;background:#7fb7ff}
.badge{position:absolute;top:8px;right:8px;background:var(--gold);color:#1a1a1a;border-radius:999px;font-size:11px;font-weight:700;width:20px;height:20px;display:grid;place-items:center}
.formbar{display:flex;align-items:center;gap:14px;margin-top:14px}.formbar .tip{flex:1;font-size:12px;color:#ffd38a}
.stage{position:relative;border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 24px 80px #0008}
canvas#canvas{display:block;width:100%;height:auto;image-rendering:pixelated}
.hud{position:absolute;inset:0;pointer-events:none;padding:14px 16px;display:flex;flex-direction:column;justify-content:space-between}
.topline{display:flex;justify-content:space-between}.tag,.wave{font-size:12px;background:#111521c4;border:1px solid #ffffff1c;border-radius:8px;padding:5px 10px}
.banner{align-self:center;font-size:28px;font-weight:800;letter-spacing:.12em;text-shadow:0 2px 12px #000;opacity:0;transition:opacity .3s}
.banner.show{opacity:1}
.party{display:flex;gap:8px}.unit{width:150px;padding:6px 10px;background:#111521d9;border:1px solid #ffffff1b;border-radius:9px;font-size:11px}
.unit .hp{height:5px;margin-top:4px;background:#ffffff20;border-radius:4px;overflow:hidden}.unit .hp i{display:block;height:100%;background:linear-gradient(90deg,#69c59b,#b5de9a)}
.unit.down{opacity:.4}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:26px 30px;max-width:620px;margin:40px auto}
.result h2{margin:0 0 10px;font-size:26px;letter-spacing:.1em}.result .win{color:var(--gold)}.result .lose{color:#ff8f8f}
.result table{width:100%;border-collapse:collapse;margin:12px 0}.result td{padding:5px 4px;border-bottom:1px solid #ffffff10}
.result .up{color:#7dffa8;font-weight:700}.result .advice{background:#ffd38a14;border:1px solid #ffd38a40;border-radius:8px;padding:10px 12px;color:#ffd38a;margin:12px 0}
.actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
footer{color:#8f91a0;font-size:11px;margin-top:10px;display:flex;justify-content:space-between}

.intel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin-bottom:12px}
.intelhead{font-size:13px;margin-bottom:8px}.intelrow{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.foe{display:flex;gap:8px;align-items:flex-start;background:#ffffff06;border:1px solid #ffffff12;border-radius:9px;padding:6px 8px;font-size:12px}
.foe canvas{width:52px;height:52px;flex:none;image-rendering:pixelated;background:#0f1220;border-radius:6px}
.foe.warn{border-color:#ff9f6b80;background:#ff9f6b10}.ftrait{color:#cfd0da;font-size:11px}.fcounter{color:#9fd18b;font-size:11px}.foe.warn .fcounter{color:#ffb38a;font-weight:600}
.boss{background:#ff6b5e;color:#fff;border-radius:4px;font-size:10px;padding:0 4px}
.perks{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;min-height:20px}.perk{font-size:10px;background:#e9c77c22;color:var(--gold);border:1px solid #e9c77c55;border-radius:5px;padding:0 5px}
.perk.gen{background:#ffffff10;color:#cfd0da;border-color:#ffffff25}
.pickhead{margin:14px 0 8px;font-size:15px}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.card-perk{text-align:left;padding:12px;border-radius:10px;min-height:110px;display:flex;flex-direction:column;gap:6px}
.card-perk.own{border-color:#e9c77c80;background:#e9c77c10}.card-perk:hover{transform:translateY(-2px);border-color:var(--gold)}
.pk-name{font-weight:700;font-size:15px}.pk-desc{font-size:12px;color:#cfd0da;flex:1}.pk-tag{font-size:10px;color:var(--muted)}
.nextsteps{background:#7fb7ff12;border:1px solid #7fb7ff40;border-radius:8px;padding:8px 12px;font-size:13px;margin-top:10px}.nextsteps ul{margin:4px 0 0;padding-left:18px}
.card{max-width:720px}

.juicy-toggle{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--gold);border:1px solid #e9c77c60;border-radius:8px;padding:6px 10px;cursor:pointer;user-select:none}
.juicy-toggle.big{font-size:13px;padding:9px 12px}.juicy-toggle input{accent-color:#e9c77c}
.coinbox{font-size:15px;background:#2a2108e0;border:1px solid #ffd23f80;color:#ffd23f;border-radius:8px;padding:4px 12px;font-weight:700;position:absolute;left:50%;transform:translateX(-50%)}
.bump{animation:bump .25s ease-out}@keyframes bump{40%{transform:scale(1.18)}}
.coinbox.bump{animation:bumpc .25s ease-out}@keyframes bumpc{40%{transform:translateX(-50%) scale(1.25)}}
.unit .xp{height:3px;margin-top:3px;background:#ffffff14;border-radius:3px;overflow:hidden}.unit .xp i{display:block;height:100%;background:#7fd4ff;transition:width .15s}
.unit.lvup{border-color:#ffe066;box-shadow:0 0 14px #ffd23f88}.unit .lv{color:#ffe066}
.goldline{margin:8px 0;color:#ffd23f}

.hud .party{pointer-events:auto}.unit{cursor:default;transition:box-shadow .15s,border-color .15s}
.unit .ult{position:relative;height:13px;margin-top:4px;background:#ffffff12;border-radius:4px;overflow:hidden}
.unit .ult i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,#7a5cff,#ff7ad9);transition:width .12s}
.unit .ult span{position:relative;font-size:9px;line-height:13px;padding-left:5px;color:#fff;text-shadow:0 1px 2px #000;letter-spacing:.05em}
.unit.ready{cursor:pointer;border-color:#ffd23f;animation:ultpulse .7s ease-in-out infinite alternate}
.unit.ready .ult i{background:linear-gradient(90deg,#ffd23f,#ff7a2a,#ffd23f);background-size:200% 100%;animation:ultshine .6s linear infinite}
.unit.ready .ult span::after{content:'  ▶ 點擊施放'}
@keyframes ultpulse{from{box-shadow:0 0 6px #ffd23f66}to{box-shadow:0 0 22px #ffd23fcc;transform:translateY(-2px)}}
@keyframes ultshine{to{background-position:-200% 0}}

/* stage path / transitions / gear */
.screen.enter{animation:fadein .45s ease-out}@keyframes fadein{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.stages{align-items:stretch}.conn{width:28px;flex:none;align-self:center;height:3px;background:#ffffff20;border-radius:2px}.conn.done{background:var(--gold)}
.arrive{background:#e9c77c14;border:1px solid #e9c77c70;color:var(--gold);border-radius:10px;padding:8px 14px;margin-bottom:10px;animation:fadein .5s}
.talk{position:absolute;top:27%;left:0;height:40%;display:flex;align-items:center;gap:0;pointer-events:none;opacity:0;transform:translateX(-60px);transition:opacity .25s,transform .3s cubic-bezier(.2,.9,.3,1.2)}
.talk.show{opacity:1;transform:none}
.talk.en .tb{border-color:#ff8a7a99;background:#1a0b10e6}.talk.en .tb b{color:#ff8a7a}.talk.en img{filter:drop-shadow(0 0 10px #ff3a3a88) drop-shadow(0 4px 12px #000a)}
.talk.right{left:auto;right:0;flex-direction:row-reverse;transform:translateX(60px)}.talk.right.show{transform:none}
.talk img{height:100%;aspect-ratio:3/4;object-fit:cover;object-position:50% 6%;-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent);filter:drop-shadow(0 4px 12px #000a)}
.talk.right img{transform:scaleX(-1)}
.talk .tb{max-width:300px;margin:0 -6px;padding:9px 14px;background:#0d1020e6;border:1px solid #e9c77c88;border-radius:12px;font-size:14px;line-height:1.5;box-shadow:0 6px 20px #0009}
.talk.right .tb{border-color:#ff8a7a99}
.talk .tb b{display:block;font-size:11px;color:var(--gold);letter-spacing:.08em;margin-bottom:2px}.talk.right .tb b{color:#ff8a7a}
.ll .lav{width:20px;height:20px;border-radius:50%;object-fit:cover;object-position:50% 8%;vertical-align:middle;margin-right:5px;background:#ffffff14;border:1px solid #e9c77c66}.ll .lav.en{border-color:#ff8a7a88}
.ll.say{color:#e8e2cf}
.intro{position:absolute;inset:0;display:grid;align-content:center;justify-items:center;gap:6px;background:linear-gradient(90deg,transparent,#0a0c14bb 30%,#0a0c14bb 70%,transparent);opacity:0;pointer-events:none;text-align:center}
.intro.show{animation:introa var(--dur,1.6s) ease-in-out forwards}@keyframes introa{0%{opacity:0}18%,72%{opacity:1}100%{opacity:0}}
.intro .i1{letter-spacing:.4em;color:var(--gold);font-size:13px}.intro .i2{font-size:38px;font-weight:800;letter-spacing:.12em;text-shadow:0 2px 16px #000}.intro .i3{color:#cfd0da;font-size:14px}
.loot{display:flex;gap:14px;align-items:center;background:#e9c77c14;border:1px solid #e9c77c80;border-radius:10px;padding:12px 14px;margin:12px 0;animation:lootin .7s ease-out}
@keyframes lootin{0%{opacity:0;transform:scale(.85)}60%{transform:scale(1.04)}100%{opacity:1;transform:none}}
.gi{font-size:34px;width:52px;height:52px;display:grid;place-items:center;background:#0f1220;border:1px solid #e9c77c60;border-radius:10px;flex:none}
.teaser{margin:12px 0;padding:10px 14px;border:1px dashed #ffffff30;border-radius:10px}.teaser .tz{color:#cfd0da;margin:4px 0 8px;font-style:italic}
.sils{display:flex;gap:8px}canvas.sil{width:48px;height:48px;image-rendering:pixelated;filter:brightness(0) invert(.28)}
.gearpanel{display:grid;grid-template-columns:3fr 2fr;gap:10px;margin-top:12px}
.gearcol{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.geargrid{display:grid;gap:6px}.geareq{display:grid;grid-template-columns:64px 1fr 1fr;gap:6px;align-items:center;font-size:12px}
select{background:#0f1220;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:4px 6px;font:inherit;font-size:11px;min-width:0}
.shopitem{display:flex;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid #ffffff10;font-size:12px}.shopitem .gi{font-size:22px;width:38px;height:38px}.shopitem .gd{flex:1}
.shopitem.rare .gi{border-color:#e9c77c}.shopitem:not(.rare) .gi{border-color:#ffffff30}

/* ---------- TBH-style single screen: battle + side bar + panel over the battle ---------- */
main.wide{width:min(100%,1320px)}
.gamegrid{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:12px;align-items:start}
.stagecol{position:relative;min-width:0}
.side{position:sticky;top:10px}
.sidein{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px;display:flex;flex-direction:column;gap:10px;max-height:calc(100vh - 40px)}
.sstage b{font-size:15px;display:block;margin:2px 0}.sstage .muted{font-size:11px}
.sgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.sgrid>div{background:#ffffff08;border-radius:8px;padding:5px 8px;display:flex;flex-direction:column}.sgrid span{font-size:10px;color:var(--muted)}.sgrid b{font-size:14px;font-variant-numeric:tabular-nums}
.sbtns{display:grid;grid-template-columns:1fr 1fr;gap:6px}.sbtns button{position:relative;font-size:12px;padding:7px 6px}
.sbtns button.hot{border-color:var(--gold);color:var(--gold)}
.bdg{position:absolute;top:-6px;right:-4px;background:#ff5a4a;color:#fff;font-size:10px;font-weight:700;border-radius:999px;padding:0 5px;line-height:16px;min-width:16px}.bdg:empty{display:none}
.mode{font-size:12px;padding:6px}
.partywarn{background:#ff8a3a22;border:1px solid #ff8a3a88;color:#ffb07a;border-radius:8px;padding:6px 8px;font-size:12px}
.loghead{font-size:11px;color:var(--muted);letter-spacing:.1em;margin-bottom:-4px}
.log{overflow-y:auto;min-height:160px;max-height:360px;font-size:12px;line-height:1.55;display:flex;flex-direction:column;gap:2px;padding-right:4px}
.ll{padding:2px 6px;border-radius:5px;background:#ffffff05}.ll:first-child{background:#ffffff12;animation:fadein .3s}
.ll.win{color:#cfe9c4}.ll.lose{color:#ffb0a6}.ll.up{color:#9fd0ff}.ll.dex{color:#c8b6ff}.ll.drop{color:#ffd86a}.ll.cls{color:#ff9fb0;font-weight:600}.ll.tip{color:#e9c77c}.ll.muted{color:var(--muted)}
.offline{margin:0}
.panel{position:absolute;inset:0;background:#0d1019f2;border:1px solid var(--gold);border-radius:14px;display:flex;flex-direction:column;z-index:20;backdrop-filter:blur(2px);animation:fadein .2s}
.ptabs{display:flex;gap:6px;padding:10px 12px;border-bottom:1px solid var(--line);flex:none}
.ptab{font-size:12px;padding:6px 10px}.ptab.sel{border-color:var(--gold);color:var(--gold);background:#e9c77c14}
.pclose{margin-left:auto;font-size:12px}
.pbody{overflow-y:auto;padding:12px;flex:1}
.pbody .roster{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.pbody .hero{padding:7px}.pbody .hero .blurb{display:none}.pbody .hero .name{font-size:13px}
.pbody .formbar{margin-top:10px}
.pickbox{border:1px solid var(--gold);border-radius:12px;padding:10px 12px;margin-bottom:10px;background:#e9c77c0c}
.pickbox .cards{margin-top:8px}.pickfoot{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}.pickfoot button{font-size:12px}
.pbody .dexgrid{grid-template-columns:repeat(4,minmax(0,1fr))}.dexcard.isnew{border-color:#c8b6ff;box-shadow:0 0 0 1px #c8b6ff inset}
.setrows{display:flex;flex-direction:column;gap:12px;font-size:13px}.setrows label{display:flex;gap:6px;align-items:baseline;cursor:pointer}
.modal{position:fixed;inset:0;background:#05060ecc;display:grid;place-items:center;z-index:40}
.modal .card{margin:0}
@media (max-width:1100px){.gamegrid{grid-template-columns:1fr}.side{position:static}.panel{position:fixed;inset:20px}}
.panel{inset:0 0 auto 0;min-height:100%}.pbody{overflow:visible}
.pickbox .card-perk{padding:8px 10px;min-height:0}.pickbox .pk-desc{margin:2px 0}
.ll{word-break:keep-all;overflow-wrap:anywhere}
.unit{width:170px}.unit .hpn{font-size:10px;position:relative;z-index:1}
