:root{font-family:Inter,ui-sans-serif,system-ui,Arial,sans-serif;color:#e9f4fa;background:#09111e;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse 90% 26% at 45% 0%,#19435c77,transparent),#08101b;min-height:100vh}button,select{font:inherit}button{cursor:pointer;background:#1e3850;color:#fff;border:1px solid #43708d;border-radius:9px;padding:10px 14px;transition:.13s;min-height:38px}button:hover:not(:disabled){background:#2c5878;transform:translateY(-1px)}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,select:focus-visible{outline:3px solid #ffb84d;outline-offset:2px}a{color:#a7e2ff}.hidden{display:none!important}.masthead{padding:19px clamp(16px,3.5vw,48px);display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #264052;background:#0b1a29ee}.brand{display:flex;align-items:center;gap:13px}.brand-icon{width:48px;height:48px;display:grid;place-items:center;background:#163850;border:1px solid #3d8cbd;border-radius:12px;font-size:28px}.brand h1{font-size:clamp(18px,2vw,26px);margin:0;letter-spacing:.05em}.brand h1 strong{color:#5de8e8}.brand small,.masthead nav,.hint,.fine{font-size:12px;color:#a2bdc9}.masthead nav{display:flex;align-items:center;gap:18px}.engine-badge{background:#0f3f42;color:#a8f5dc;font-size:10px;font-weight:800;padding:7px 9px;border-radius:99px;letter-spacing:.09em}main{max-width:1450px;margin:auto;padding:20px clamp(12px,3vw,42px) 50px}.lobby{display:grid;grid-template-columns:1fr minmax(300px,390px);align-items:center;gap:40px;min-height:500px}.lobby h2{font-size:clamp(30px,5vw,60px);line-height:1.08;letter-spacing:-.035em;margin:10px 0 20px}.lobby p{max-width:550px;color:#bdd5df;line-height:1.65}.overline{letter-spacing:.24em!important;color:#55d4cb!important;font-weight:800;font-size:12px}.lobby-form,.panel{background:#102134;border:1px solid #2e4b61;border-radius:14px;padding:22px;box-shadow:0 15px 45px #0002}.lobby-form h3{margin-top:0}.lobby-form label{display:block;font-weight:700;font-size:13px;color:#c5dde7;margin:15px 0}.lobby-form select{display:block;width:100%;margin-top:8px;background:#081a2d;border:1px solid #395c70;border-radius:8px;padding:12px;color:#fff}.primary{background:#1d7d77;border:1px solid #56b6a4;font-weight:800;color:#fff}.primary:hover:not(:disabled){background:#25998e}.lobby-form .primary{width:100%;margin-top:15px}.toolbar{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap}.turn-summary{font-size:15px;font-weight:800;display:flex;gap:9px;align-items:center}.signal{width:9px;height:9px;border-radius:50%;background:#55dbac;box-shadow:0 0 12px #55dbac}.tag,#scoreline,#turnChip{padding:6px 10px;border-radius:7px;border:1px solid #3d6174;background:#1c3444;color:#c1e7f4;font-size:12px}.stage{border:1px solid #36526a;border-radius:18px;overflow:hidden;background:radial-gradient(ellipse at 50% 40%,#153b50,#102134 65%);box-shadow:0 12px 40px #0005}.trainerbar{background:#122234aa;display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #2d4e61;padding:12px 24px}.trainerbar.player{border-top:1px solid #2d4e61;border-bottom:0}.trainerlabel{display:flex;align-items:center;gap:12px}.trainerlabel>span{font-size:24px;color:#45d4dd}.trainerlabel strong{display:block;font-size:12px;letter-spacing:.09em}.trainerlabel small{display:block;color:#9ab8c8;margin-top:4px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:22px;padding:17px 24px}.field-row .zone{min-width:0}.zone h3{font-size:10px;color:#97b6c5;letter-spacing:.16em;margin:0 0 10px;font-weight:800}.pokemon-strip{display:flex;gap:9px;align-items:stretch;flex-wrap:wrap;min-height:135px}.active-slot{justify-content:flex-start}.battleline{display:flex;justify-content:center;gap:25px;align-items:center;min-height:34px;border-top:1px dashed #46647a;border-bottom:1px dashed #46647a;color:#668da3;font-weight:900;letter-spacing:.18em}.poke{border:1px solid #45657a;background:#192e43;border-radius:10px;width:105px;min-height:132px;padding:6px;display:flex;flex-direction:column;gap:4px;position:relative;align-items:center;overflow:hidden}.poke img,.handcard img{width:100%;object-fit:contain;border-radius:5px;max-height:115px}.poke img{height:86px}.poke strong{font-size:11px;max-width:98px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.poke .stats{font-size:10px;color:#bfd6df}.poke.legal{border-color:#56e6bc;box-shadow:0 0 0 2px #207c68}.poke.legal:after{content:'TARGET';position:absolute;top:0;right:0;background:#096853;padding:2px 4px;font-size:9px;border-radius:2px}.poke.broken{border-color:#bd5b5b}.empty{border:1px dashed #385f73;color:#80a2b4;display:grid;place-items:center;padding:20px;border-radius:9px;min-width:100px;font-size:12px;text-align:center}.below{display:grid;grid-template-columns:minmax(0,2fr) minmax(270px,1fr);gap:15px;margin-top:15px}.main-column,.side-column{display:flex;flex-direction:column;gap:15px;min-width:0}.panel{padding:17px}.panel h3{font-size:14px;letter-spacing:.07em;margin:0 0 12px}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.panel-heading h3{margin-bottom:10px}.hand{display:flex;flex-wrap:wrap;gap:9px;min-height:142px;margin-bottom:10px}.handcard{border:2px solid transparent;background:#1c3344;border-radius:10px;padding:5px;width:105px;position:relative;overflow:hidden;text-align:center}.handcard.selected{border-color:#eec45b;box-shadow:0 0 12px #dd9d3850}.handcard img{height:119px}.handcard strong{font-size:10px;display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:11px}.actions button{font-size:12px}.secondary{background:#19364b}.danger{background:#4b2637;border-color:#ad626f}.history{max-height:330px;overflow:auto;padding-left:20px;margin:6px 0;color:#b8d2db;font-size:12px;line-height:1.6}.history li{margin-bottom:6px}.decision{border-color:#347e8b;background:linear-gradient(135deg,#132d3b,#12263d)}.decision.active{border-color:#57d4c6;box-shadow:0 0 22px #2aac8840}.choice-list{display:grid;gap:6px;max-height:270px;overflow:auto}.choice-list label{display:flex;align-items:center;gap:8px;padding:9px;border-radius:6px;background:#1c3b4b;font-size:12px;cursor:pointer}.choice-list input{accent-color:#57d4c6}.error{background:#5a2732;color:#ffd6d6;padding:10px;border:1px solid #a44a58;border-radius:8px;font-size:13px;margin:8px 0}.error:empty{display:none}.description{color:#c3dce5;font-size:12px;line-height:1.5}.muted{color:#8ba7b6}.small-label{font-size:10px;letter-spacing:.12em;font-weight:800;color:#92c5db;margin:12px 0 6px}footer{text-align:center;color:#698fa2;font-size:11px;padding:20px}@media(max-width:900px){.below,.lobby{grid-template-columns:1fr}.masthead nav{gap:10px}.field-row{gap:8px;padding:13px}.poke,.handcard{width:87px}.poke img{height:68px}.handcard img{height:98px}.field-row .zone h3{font-size:9px}}@media(max-width:520px){.masthead{padding:12px}.masthead nav .engine-badge{display:none}.brand small{font-size:9px}.trainerbar{padding:11px}.field-row{grid-template-columns:1fr}.field-row .zone{min-height:80px}.pokemon-strip{min-height:0}.poke{min-height:114px}.battleline{margin:8px 0}}
.builder-link{display:inline-block;margin:12px 0;color:#81dcba;text-decoration:underline;text-underline-offset:4px;font-weight:650}
/* Multiplayer-specific lobby; shared battlefield keeps the original visual system. */
.online-lobby{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(290px,.85fr);gap:36px;align-items:center;min-height:530px}
.online-lobby h2{font-size:clamp(30px,5vw,60px);line-height:1.07;letter-spacing:-.035em;margin:10px 0 24px}
.online-lobby p{color:#bdd5df;line-height:1.6;max-width:560px}
.lobby-form input,.room-panel input{display:block;width:100%;margin-top:8px;background:#081a2d;border:1px solid #395c70;border-radius:8px;padding:12px;color:#fff;font:inherit}
.room-panel{max-width:820px;margin:40px auto;padding:30px}
.room-panel h2{font-size:clamp(26px,4vw,44px);letter-spacing:.055em;margin:12px 0}
.room-invite{display:flex;align-items:end;gap:10px}.room-invite input{flex:1;min-width:0}
.lobby-players{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:25px 0}
.lobby-seat{border:1px solid #41677b;background:#142b3d;border-radius:12px;padding:16px}.lobby-seat strong{display:block;margin-bottom:8px}.lobby-seat .tag{display:inline-block;margin-top:12px}
.room-code-input{text-transform:uppercase;letter-spacing:.2em;font-weight:800}
#waitingRoom .error:empty,.online-lobby .error:empty{display:none}
@media(max-width:850px){.online-lobby{grid-template-columns:1fr;gap:15px;padding:20px 0}.room-invite{flex-direction:column;align-items:stretch}.lobby-players{grid-template-columns:1fr}}

/* v0.23: shared quick-play battlefield and hover magnifier for CPU & online. */
.arena-layout{display:grid;grid-template-columns:145px minmax(0,1fr);align-items:stretch}
.arena-field{min-width:0}
.prize-sidebar{padding:16px 11px;border-right:1px solid #36566a;background:linear-gradient(180deg,#0e263a,#0a1a2b);display:flex;flex-direction:column;justify-content:space-around;gap:24px}
.prize-group h3{font-size:10px;letter-spacing:.12em;line-height:1.3;color:#9fc5d4;margin:0 0 7px}
.prize-count{display:block;color:#d5f4f5;font-size:13px;font-weight:800;margin-bottom:10px}
.prize-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;max-width:115px}
.prize-back{display:grid;place-items:center;aspect-ratio:3/4;min-height:38px;border:2px solid #5386a4;border-radius:5px;background:repeating-linear-gradient(135deg,#153d60 0 8px,#1f4f72 8px 15px);box-shadow:0 2px 5px #0006,inset 0 0 0 2px #10243e;color:#ffc763;font-size:18px;font-weight:900}
.prize-back.prize-taken{opacity:.27;border-style:dashed;background:#07131d;color:#8ca8b8}
.field-row.bottom{grid-template-columns:minmax(0,0.9fr) minmax(350px,1.25fr)}
.active-with-attacks{display:flex;align-items:flex-start;gap:13px;min-width:0}
.active-with-attacks .active-slot{min-width:105px;flex:0 0 105px}
.inline-attack-panel{flex:1;min-width:0;background:#0d2235a6;border:1px solid #385b70;border-radius:10px;padding:10px;align-self:stretch}
.inline-attack-panel h4{font-size:10px;letter-spacing:.14em;margin:0 0 8px;color:#9fcddd}
.inline-attacks{display:flex;flex-direction:column;gap:8px}
button.attack-action{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;width:100%;min-height:45px;padding:7px 10px;text-align:left;background:#185753;border:1px solid #42b6a0}
button.attack-action:not(:disabled):hover{background:#20776f}
.attack-name{font-size:12px;font-weight:800;white-space:normal;line-height:1.25}
.attack-damage{font-size:13px;color:#ffdb89;min-width:20px;text-align:right}
.attack-cost{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:3px}
.energy-pip{width:18px;height:18px;display:inline-grid;place-items:center;border-radius:50%;border:1px solid #d6e0e8aa;color:white;text-shadow:0 1px 3px #000;font-size:9px;font-weight:900;background:#73889a}
.energy-fire{background:#de6736}.energy-water{background:#3493dc}.energy-grass{background:#4c9f57}.energy-lightning{background:#d4ab25}.energy-psychic{background:#a15ac4}.energy-fighting{background:#a8794c}.energy-darkness{background:#56536c}.energy-metal{background:#828f9a}.energy-colorless{background:#8a999f}
.poke.ineligible{opacity:.67}
.poke.legal{cursor:crosshair;box-shadow:0 0 0 2px #5ef5b6,0 0 20px #36f5b350;animation:target-glow 1.35s ease-in-out infinite alternate}
@keyframes target-glow{to{box-shadow:0 0 0 3px #5ef5b6,0 0 26px #36f5b375}}
.target-hint{font-size:13px;color:#bff7e3;font-weight:750;line-height:1.4;align-self:center}
button.cancel-target{background:#422b3d;border-color:#c07b89}
.handcard{transition:transform .12s,border-color .12s;overflow:visible}
.handcard img{pointer-events:none}
.handcard:hover{border-color:#64c6da;transform:translateY(-3px)}
.card-preview{position:fixed;z-index:1000;width:min(328px,calc(100vw - 20px));max-height:calc(100dvh - 18px);overflow-y:auto;overscroll-behavior:contain;border:1px solid #8bbfcf;border-radius:13px;background:#101e2c;box-shadow:0 18px 58px #000d;padding:9px;pointer-events:none}
.card-preview.pinned{pointer-events:auto;border-color:#efd18c}
.card-preview .preview-art{width:100%;display:block;max-height:min(420px,65dvh);object-fit:contain;border-radius:8px;background:#0c1722}
.card-preview .preview-data{padding:8px 4px;color:#eaf3f7;font-size:12px;line-height:1.4}
.preview-data>strong{font-size:15px}.preview-data small{color:#b4cdde}
.card-preview .preview-effect{padding-top:7px;border-top:1px solid #365164;margin-top:7px}
.card-preview .preview-effect p{margin:2px 0 0;color:#c5dce8}
.card-preview .preview-close{position:sticky;top:0;float:right;min-height:30px;padding:2px 9px;background:#3b2831;color:#fff;border:1px solid #bb8195;border-radius:6px;z-index:1;display:none}
.card-preview.pinned .preview-close{display:block}
.card-preview.text-only .preview-data{max-height:370px;overflow:auto}
@media(max-width:1150px){.arena-layout{grid-template-columns:115px minmax(0,1fr)}.prize-grid{gap:3px}.prize-back{min-height:33px}.field-row.bottom{grid-template-columns:minmax(0,1fr)}.field-row .active-zone{margin-top:3px}.active-with-attacks .active-slot{flex-basis:90px;min-width:90px}}
@media(max-width:710px){.arena-layout{display:flex;flex-direction:column}.prize-sidebar{flex-direction:row;border-right:0;border-bottom:1px solid #36566a;gap:10px;padding:10px 15px}.prize-group{flex:1;min-width:0}.prize-grid{grid-template-columns:repeat(6,minmax(0,1fr));max-width:100%;gap:4px}.prize-back{min-height:25px;font-size:11px}.prize-group h3{font-size:9px}.prize-count{font-size:11px;margin-bottom:5px}.active-with-attacks .active-slot{flex-basis:88px}.inline-attack-panel{padding:7px}button.attack-action{grid-template-columns:minmax(0,1fr) auto;gap:4px}.attack-damage{grid-column:2;grid-row:1}.attack-cost{grid-column:1 / -1;justify-content:start}.card-preview{width:min(280px,calc(100vw - 20px))}}
@media(prefers-reduced-motion:reduce){.poke.legal{animation:none}.handcard{transition:none}}

/* v0.25: physical battlefield layout: prizes belong to the corresponding side. */
.arena-layout{grid-template-columns:148px minmax(0,1fr)}
.arena-field{display:flex;flex-direction:column;min-width:0}
.territory{display:flex;flex-direction:column;min-height:310px}
.opponent-territory{background:linear-gradient(165deg,#14344c52,#0c223000)}
.player-territory{background:linear-gradient(25deg,#154a4052,#0d293900)}
.territory .field-row,.territory .field-row.bottom{display:flex;flex-direction:column;gap:13px;padding:13px 20px;flex:1;min-height:0}
.territory .field-row .bench-zone{order:0}
.territory .field-row .active-zone{order:1}
.player-territory .field-row .active-zone{order:0}
.player-territory .field-row .bench-zone{order:1}
.territory .zone{min-width:0}
.territory .pokemon-strip{min-height:unset;gap:12px;align-items:flex-start}
.territory .bench-zone .pokemon-strip{min-height:118px}
.territory .active-zone .pokemon-strip{min-height:145px}
.active-with-attacks{display:flex;align-items:flex-start;gap:22px;flex-wrap:wrap}
.active-with-attacks .active-slot{min-width:130px;flex:0 0 130px}
.inline-attack-panel{max-width:440px;flex:1 1 260px}
.prize-sidebar{padding:0 10px;background:linear-gradient(180deg,#0e263a,#0b2030);display:grid;grid-template-rows:minmax(0,1fr) 35px minmax(0,1fr);align-items:center;gap:0;border-right:1px solid #36566a}
.prize-group{min-width:0;align-self:center}
.prize-group:first-child{grid-row:1}
.prize-group:last-child{grid-row:3}
.prize-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;max-width:122px}
.prize-back{aspect-ratio:300/420;min-height:unset;border:1px solid #d8bc68;border-radius:6px;background:#123b65 url('neo_card_back.svg') center/100% 100% no-repeat;box-shadow:0 3px 6px #0008;color:transparent}
.prize-back.prize-taken{background:#0c1b2b;opacity:.24;border:1px dashed #526579}
.poke{width:128px;min-height:160px;overflow:visible;padding:7px;gap:5px;isolation:isolate}
.poke:has(.energy-peeks){padding-top:4px}
.poke .pokemon-face{display:block;width:100%;height:108px;position:relative;border-radius:6px;overflow:hidden;border:1px solid #57708a;background:#0d293a;box-shadow:0 4px 9px #0005}
.poke .pokemon-face>img{height:100%;max-height:unset;width:100%;object-fit:contain;display:block}
.poke .pokemon-face .empty{height:100%;padding:5px}
.poke strong{max-width:113px}
.energy-peeks{height:31px;min-width:100%;display:block;position:relative;pointer-events:none;flex:none}
.attached-energy{position:absolute;top:0;left:calc(var(--energy-position) * 16%);width:36%;height:29px;display:block;overflow:hidden;box-shadow:0 1px 5px #000b;border:1px solid #e1d5ad;border-radius:4px 4px 1px 1px;background:#d5b65b;z-index:1}
.attached-energy img{width:100%;height:auto;max-height:none;object-fit:cover;object-position:top;display:block;border-radius:0}
.attached-energy>span{font-size:8px;color:#14243a;display:block;line-height:2.3;font-weight:900;text-align:center}
.energy-overflow{position:absolute;right:-3px;top:3px;background:#edf9f5;color:#144846;font-size:10px;padding:2px 4px;border-radius:4px;z-index:10;font-weight:900}
.poke:not(:has(.energy-peeks)) .pokemon-face{margin-top:31px}
.poke.card-entered{animation:field-deploy .7s cubic-bezier(.16,.78,.15,1.04) both}
.poke.card-hit{animation:field-hit .62s ease-out}
.poke.card-powered{animation:field-power .75s ease-out}
@keyframes field-deploy{0%{opacity:.1;transform:translateY(-16px) scale(.88);filter:brightness(1.75)}60%{opacity:1;transform:translateY(4px) scale(1.05)}100%{transform:none;filter:none}}
@keyframes field-hit{0%,100%{transform:translateX(0);filter:none}20%{transform:translateX(-6px);filter:brightness(1.8)}45%{transform:translateX(7px);filter:brightness(1.6)}70%{transform:translateX(-3px)}}
@keyframes field-power{0%{box-shadow:0 0 0 #2fe6aa00}35%{box-shadow:0 0 25px #57e5bd}100%{box-shadow:0 0 0 #2fe6aa00}}
.duel-feedback{pointer-events:none;position:fixed;left:50%;top:100px;transform:translate(-50%,-22px) scale(.96);opacity:0;z-index:900;max-width:min(540px,calc(100vw - 30px));background:linear-gradient(130deg,#1d4659,#0b2b37);border:1px solid #7ccfc0;color:#effffb;padding:15px 25px;border-radius:13px;font-size:16px;font-weight:800;box-shadow:0 12px 45px #000c;text-align:center;transition:opacity .16s,transform .2s}
.duel-feedback.show{opacity:1;transform:translate(-50%,0) scale(1)}
.duel-feedback.turn-change{font-size:23px;letter-spacing:.13em;border:2px solid #e9d284;box-shadow:0 0 25px #5be8cf80,0 12px 45px #000d}
@media(max-width:900px){.arena-layout{grid-template-columns:110px minmax(0,1fr)}.prize-sidebar{padding:0 6px}.prize-grid{gap:3px}.territory .field-row,.territory .field-row.bottom{padding:11px}.active-with-attacks{gap:10px}.territory{min-height:270px}}
@media(max-width:710px){.arena-layout{display:grid;grid-template-columns:84px minmax(0,1fr)}.prize-sidebar{display:grid;grid-template-rows:minmax(0,1fr) 34px minmax(0,1fr);flex-direction:unset;padding:0 4px;border-right:1px solid #36566a;border-bottom:0}.prize-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-width:80px;gap:2px}.prize-group h3{font-size:9px;line-height:1.2}.prize-count{font-size:10px}.prize-back{min-height:unset;font-size:0}.territory .field-row{gap:8px}.territory .bench-zone .pokemon-strip{min-height:90px}.poke{width:99px;min-height:147px}.poke .pokemon-face{height:92px}.poke strong{max-width:86px;font-size:9px}.poke .stats{font-size:9px}.attached-energy{height:26px}.energy-peeks{height:28px}.poke:not(:has(.energy-peeks)) .pokemon-face{margin-top:28px}.active-with-attacks .active-slot{flex:0 0 102px;min-width:102px}.inline-attack-panel{flex-basis:155px;max-width:none}.inline-attacks{gap:5px}.duel-feedback{top:65px;font-size:13px}.duel-feedback.turn-change{font-size:17px}}
@media(max-width:520px){.territory .field-row{display:flex;flex-direction:column}.territory .zone{min-height:unset}.territory .bench-zone .pokemon-strip{min-height:86px}.active-with-attacks{display:flex}.active-with-attacks .active-slot{flex:0 0 99px}.inline-attack-panel{flex:1 1 148px}.territory .zone h3{font-size:9px}}
@media(prefers-reduced-motion:reduce){.poke.card-entered,.poke.card-hit,.poke.card-powered{animation:none}.duel-feedback{transition:none}}

/* Online room chat — docked in the lobby or the duel sidebar. */
.room-chat{min-width:0;margin-top:14px;padding:14px}
.room-chat .chat-heading{display:flex;justify-content:space-between;align-items:center;gap:8px}
.room-chat .chat-heading h3{margin:0;color:#d7f4ff;font-size:14px;letter-spacing:.1em}
.room-chat .chat-heading .tag{font-size:10px}
.chat-messages{display:flex;flex-direction:column;gap:8px;min-height:100px;max-height:240px;overflow-y:auto;padding:10px 1px;overscroll-behavior:contain}
.chat-message{max-width:94%;align-self:flex-start;background:#1a344a;border:1px solid #3a576d;border-radius:10px 10px 10px 3px;padding:7px 10px;white-space:pre-wrap;overflow-wrap:anywhere}
.chat-message.mine{align-self:flex-end;border-color:#2f9c91;background:#174b48;border-radius:10px 10px 3px 10px}
.chat-sender{font-size:11px;display:block;color:#82d9cf;font-weight:700;margin-bottom:3px}
.chat-message p{margin:0;color:#e9f5ff;font-size:13px;line-height:1.4}
.chat-form{display:flex;align-items:center;gap:7px}
.chat-form input{min-width:0;flex:1;background:#0a1b2d;border:1px solid #43647b;color:white;border-radius:8px;padding:11px;font:inherit;font-size:13px}
.chat-form button{white-space:nowrap}
@media(max-width:900px){.room-chat{width:100%}}

/* v0.30: centered Classic board, for both local and online layouts. */
.territory .field-row .zone{width:100%;min-width:0}
.territory .zone h3{text-align:center}
.territory .pokemon-strip,.territory .active-slot{justify-content:center;align-items:flex-start}
.territory .active-with-attacks{justify-content:center;align-items:flex-start;gap:20px}
.territory .active-with-attacks .active-slot{justify-content:center}
.territory .inline-attack-panel{min-width:0}
.hand{justify-content:center}

/* A persistent waiting indicator, independent from the transient action animation. */
.stage{position:relative}
.opponent-activity-status{min-height:49px;display:flex;gap:11px;align-items:center;justify-content:center;flex-wrap:wrap;padding:10px 18px;border-bottom:1px solid #31546b;background:linear-gradient(90deg,#0c2539,#163c47,#0c2539);color:#d7f7f1;text-align:center}
.opponent-activity-status .activity-dot{width:10px;height:10px;flex:0 0 10px;border-radius:50%;background:#679dab;box-shadow:0 0 0 3px #163946}
.opponent-activity-status.waiting{background:linear-gradient(90deg,#0d263d,#1c3d52,#0d263d);border-bottom-color:#4c93b2}
.opponent-activity-status.waiting .activity-dot{background:#ffc968;box-shadow:0 0 13px #ffb64b9c;animation:activity-breath 1.8s ease-in-out infinite}
.activity-title{font-size:12px;font-weight:900;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
.activity-subtitle{font-size:12px;color:#a6c7d6;min-width:0;overflow-wrap:anywhere}
.opponent-activity-status.waiting .activity-subtitle{color:#d4e6ef}
@keyframes activity-breath{0%,100%{opacity:.45;transform:scale(.8)}50%{opacity:1;transform:scale(1.17)}}

/* Opponent actions arrive as ordered public events, including actions between polls. */
.opponent-action-fx{position:absolute;z-index:20;pointer-events:none;left:50%;top:clamp(155px,27%,265px);width:min(560px,calc(100% - 35px));transform:translateX(-50%);display:grid;place-items:center}
.opponent-action-fx .action-fx-card{display:flex;align-items:center;justify-content:center;gap:14px;max-width:100%;padding:13px 23px;border:1px solid #91dfd6;border-radius:15px;background:linear-gradient(125deg,#122b44f5,#16464cf5);box-shadow:0 10px 36px #000d,0 0 34px #3fe3dd66;color:#f5ffff;animation:opponent-fx-appear 1.13s ease-in-out both;transform-origin:center;text-align:center}
.action-fx-card strong{font-size:clamp(13px,1.4vw,19px);line-height:1.25;text-wrap:balance;overflow-wrap:anywhere}
.action-fx-card .fx-symbol{font-size:32px;font-weight:900;flex:none;filter:drop-shadow(0 0 7px currentColor)}
.action-fx-card .fx-card-art{height:72px;width:51px;object-fit:contain;border-radius:4px;border:1px solid #bdd6d8;background:#0b1a28;flex:none;box-shadow:0 5px 12px #0008;transform:rotate(-6deg);animation:opponent-fx-card .8s ease-out both}
.action-fx-card.fx-attack{border-color:#f9b26a;background:linear-gradient(125deg,#47263deF,#5e352deb);box-shadow:0 10px 42px #000d,0 0 42px #eb835288}
.action-fx-card.fx-energy,.action-fx-card.fx-power{border-color:#7fe5cf;box-shadow:0 10px 38px #000c,0 0 40px #50ffe166}
.action-fx-card.fx-evolve{border-color:#ecd994;background:linear-gradient(125deg,#1a4768f2,#51416aec)}
.action-fx-card.fx-choice,.action-fx-card.fx-turn{padding:13px 21px}
.stage.opponent-action-flash .opponent-territory{animation:opponent-field-light .9s ease-in-out}
@keyframes opponent-fx-appear{0%{opacity:0;transform:translateY(20px) scale(.84);filter:brightness(1.6)}20%{opacity:1;transform:translateY(0) scale(1.045);filter:brightness(1.24)}68%{opacity:1;transform:none;filter:none}100%{opacity:0;transform:translateY(-13px) scale(.98)}}
@keyframes opponent-fx-card{0%{transform:rotate(-16deg) translateY(24px) scale(.7)}65%{transform:rotate(2deg) translateY(-3px) scale(1.1)}100%{transform:rotate(-6deg)}}
@keyframes opponent-field-light{0%,100%{box-shadow:inset 0 0 0 #0dd9ed00}40%{box-shadow:inset 0 0 55px #4cc6dc75}}
@media(max-width:710px){.territory .active-with-attacks{gap:10px}.opponent-action-fx{left:54%;width:calc(100% - 24px);top:clamp(140px,26%,235px)}.opponent-action-fx .action-fx-card{padding:10px 12px;gap:9px}.action-fx-card .fx-symbol{font-size:23px}.action-fx-card .fx-card-art{width:40px;height:58px}.opponent-activity-status{padding:8px 10px;gap:7px}.activity-title{font-size:10px}.activity-subtitle{font-size:11px}}
@media(prefers-reduced-motion:reduce){.opponent-activity-status.waiting .activity-dot,.opponent-action-fx .action-fx-card,.opponent-action-fx .fx-card-art,.stage.opponent-action-flash .opponent-territory{animation:none!important}.opponent-action-fx .action-fx-card{opacity:1}}
/* Keep opposing Active Pokémon directly facing one another, even with attacks visible. */
.territory .active-with-attacks{display:grid;grid-template-columns:minmax(0,1fr) 130px minmax(0,1fr);column-gap:12px;align-items:start;width:100%}
.territory .active-with-attacks .active-slot{grid-column:2;grid-row:1;width:130px;min-width:0;flex:initial}
.territory .active-with-attacks .inline-attack-panel{grid-column:3;grid-row:1;width:100%;max-width:440px;min-width:0;flex:initial}
@media(max-width:710px){
 .territory .active-with-attacks{display:flex;flex-direction:column;align-items:center;gap:10px}
 .territory .active-with-attacks .active-slot{width:100%;min-width:0;flex:none}
 .territory .active-with-attacks .inline-attack-panel{width:min(100%,440px);flex:none}
}

/* v0.34: every authoritative Pokémon choice is made on the actual battlefield. */
.field-choice-bar{position:sticky;top:0;z-index:32;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px;padding:12px 15px;background:linear-gradient(100deg,#113847fa,#174a4af5,#113847fa);border-bottom:2px solid #6ef2d4;box-shadow:0 9px 25px #0009;text-align:center}
.field-choice-text{display:flex;flex-direction:column;gap:3px;min-width:0;max-width:640px}
.field-choice-text strong{font-size:clamp(13px,1.65vw,17px);color:#f1fffa}
.field-choice-text small{font-size:12px;color:#bcf5e1}
.poke.decision-target{border:2px solid #7cffc4;outline:2px solid #90ffda;outline-offset:2px;animation:field-decision-pulse 1.4s ease-in-out infinite alternate;opacity:1!important}
.poke.decision-target:after{content:'SELECT';background:#087559;color:#fff;font-weight:900;letter-spacing:.04em}
.poke.decision-target.chosen{outline-color:#ffd56d;box-shadow:0 0 0 4px #ffc84b,0 0 32px #f6bb47c0;animation:none}
.poke.decision-target.chosen:after{content:'✓ PICKED';background:#ab7320}
.stage:has(.field-choice-bar:not(.hidden)) .poke.ineligible{opacity:.44;filter:saturate(.65)}
@keyframes field-decision-pulse{from{box-shadow:0 0 0 1px #69ffd78a,0 0 9px #4bf7bd66}to{box-shadow:0 0 0 4px #6cffe9b9,0 0 31px #5affcbbb}}
/* Non-field decisions belong in the center of the viewport, above the duel. */
.choice-modal{position:fixed;z-index:700;inset:0;display:grid;place-items:center;padding:18px;background:#030b15d9;backdrop-filter:blur(5px)}
.choice-dialog{width:min(540px,100%);max-height:min(86dvh,760px);overflow-y:auto;overscroll-behavior:contain;outline:none;animation:choice-modal-enter .22s ease-out}
.choice-dialog .decision{padding:24px;border:2px solid #76e7ca;border-radius:17px;box-shadow:0 24px 95px #000e,0 0 38px #44e7bd46;background:linear-gradient(145deg,#173648,#0f2439)}
.choice-dialog .decision h3{font-size:clamp(17px,3vw,22px);letter-spacing:normal;line-height:1.25}
.choice-dialog .decision .description{font-size:14px}
.choice-dialog .choice-list{max-height:min(48dvh,390px);gap:8px}
.choice-dialog .choice-list label{padding:13px 14px;font-size:14px;border:1px solid #426579}
.choice-dialog .choice-list label:has(input:checked){border-color:#81ecd2;background:#1c625b}
.choice-dialog .actions{margin-top:16px;justify-content:flex-end}
@keyframes choice-modal-enter{from{opacity:0;transform:translateY(15px) scale(.97)}to{opacity:1;transform:none}}
@media(max-width:520px){.field-choice-bar{padding:9px 8px;gap:8px}.field-choice-text strong{font-size:12px}.field-choice-text small{font-size:10px}.field-choice-bar button{padding:7px 9px;font-size:12px}.choice-modal{padding:9px}.choice-dialog .decision{padding:17px}.choice-dialog .choice-list label{padding:10px}}
@media(prefers-reduced-motion:reduce){.poke.decision-target,.choice-dialog{animation:none}}

/* v0.35: clear, low-friction turn coaching. This UI never grants actions. */
.turn-coach{display:flex;align-items:center;justify-content:space-between;gap:12px 22px;flex-wrap:wrap;padding:11px 17px;background:linear-gradient(100deg,#102f42,#174c4b,#112e43);border-bottom:1px solid #458d8b;color:#e5fffb}
.turn-coach.waiting{background:linear-gradient(100deg,#17293f,#2b354e,#17293f);border-color:#637591}
.turn-coach.decision,.turn-coach.targeting{background:linear-gradient(100deg,#1b4254,#1b594c,#1b4254);border-bottom-color:#8cf9d0}
.turn-coach.setup{background:linear-gradient(100deg,#15344d,#254b60,#15344d)}
.coach-message{display:flex;flex-direction:column;gap:3px;flex:1 1 220px;min-width:0}
.coach-message strong{font-size:13px;letter-spacing:.02em;color:#f5fffd}
.coach-message span{font-size:12px;line-height:1.4;color:#bfdce3}
.coach-chips{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.coach-chip{border:1px solid #48777d;background:#153e4e;border-radius:999px;padding:6px 9px;color:#bfeade;font-size:11px;font-weight:700;white-space:nowrap}
.coach-chip.done{border-color:#7c7d82;background:#31434a;color:#b5c7cd}
.stage.your-turn .player-territory{box-shadow:inset 0 -2px #27bda05c}
/* Battlefield card health and conditions stay legible on narrow screens. */
.poke .vitals{width:100%;display:flex;flex-direction:column;gap:3px;flex:none}
.hp-count{font-weight:800;color:#e6fff4;font-size:10px;line-height:1.25;font-variant-numeric:tabular-nums;text-align:center}
.hp-track{width:100%;height:6px;display:block;background:#081823;border:1px solid #3d5362;overflow:hidden;border-radius:99px}
.hp-fill{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#3cbd93,#7dedc2);transition:width .3s ease-out}
.vitals.wounded .hp-fill{background:linear-gradient(90deg,#c18327,#f5c66a)}
.vitals.critical .hp-fill{background:linear-gradient(90deg,#9e3548,#f36d79)}
.condition-badges{display:flex;gap:3px;flex-wrap:wrap;justify-content:center;min-width:0}
.condition-badge{font-size:9px;font-weight:800;color:#ffe5c3;background:#653d30;border:1px solid #d79d62;border-radius:4px;padding:2px 4px;line-height:1.2}
.handcard-type{display:block;margin-top:4px;color:#9cd9d2;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;line-height:1.2}
/* Visible attack text replaces hover-only descriptions, especially important for touch. */
button.attack-action{grid-template-columns:minmax(0,1fr) auto auto}
button.attack-action .attack-effect{grid-column:1 / -1;color:#d5f0e9;font-size:10px;font-weight:500;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
button.attack-action:disabled .attack-effect{color:#a2b5b6}
@media(max-width:710px){.turn-coach{padding:9px 10px;gap:7px}.coach-message span{font-size:11px}.coach-chip{font-size:10px;padding:4px 7px}.coach-chips{justify-content:flex-start}.poke .hp-count{font-size:9px}.poke .stats{font-size:9px}.handcard-type{font-size:8px}button.attack-action .attack-effect{grid-column:1 / -1}}
@media(prefers-reduced-motion:reduce){.hp-fill{transition:none}}

/* v0.36 — Shared attack/evolution announcement, visible damage and public timeline. */
.combat-fx{pointer-events:none;position:fixed;left:50%;top:30dvh;transform:translate(-50%,-50%);width:min(540px,calc(100% - 30px));z-index:600;display:grid;place-items:center}
.combat-banner{display:flex;gap:14px;align-items:center;justify-content:center;min-width:0;max-width:100%;padding:18px 24px;border-radius:16px;border:2px solid #f9b879;color:#fff8ed;background:linear-gradient(117deg,#552e40f2,#7d402bf5);box-shadow:0 12px 52px #000e,0 0 42px #ffa7579c;text-align:left;animation:combat-banner-rise 1.23s ease-out both}
.combat-banner.evolve{background:linear-gradient(117deg,#26495f,#554d80);border-color:#d4c3ff;box-shadow:0 12px 52px #000e,0 0 44px #afacff89}
.combat-glyph{font-size:34px;font-weight:900;filter:drop-shadow(0 0 9px #fff8);flex:none}
.combat-copy{display:flex;flex-direction:column;gap:5px;min-width:0}
.combat-copy strong{font-size:clamp(21px,3.5vw,31px);letter-spacing:.04em;line-height:1.1;overflow-wrap:anywhere}
.combat-copy span{color:#ffe6ce;font-size:clamp(12px,1.6vw,15px);line-height:1.35;overflow-wrap:anywhere}
.combat-banner.evolve .combat-copy span{color:#f2ecff}
@keyframes combat-banner-rise{0%{opacity:0;transform:translateY(23px) scale(.92)}15%,72%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-13px) scale(1.03)}}
.stage.combat-attack.combat-me .player-territory .active-zone .poke,.stage.combat-attack.combat-foe .opponent-territory .active-zone .poke{animation:combat-attacker-pulse .82s ease-in-out 1;border-color:#ffcb79;box-shadow:0 0 0 3px #fbc379,0 0 34px #f59050!important;z-index:5}
.stage.combat-attack.combat-me .opponent-territory .active-zone .poke,.stage.combat-attack.combat-foe .player-territory .active-zone .poke{animation:combat-target-pulse .88s ease-in-out 1}
.stage.combat-evolve.combat-me .player-territory,.stage.combat-evolve.combat-foe .opponent-territory{animation:evolution-field-glow 1.1s ease-in-out 1}
@keyframes combat-attacker-pulse{0%,100%{transform:none}30%{transform:translateY(-5px) scale(1.065)}65%{transform:scale(1.025)}}
@keyframes combat-target-pulse{0%,100%{filter:none}40%{filter:brightness(1.75)}}
@keyframes evolution-field-glow{0%,100%{box-shadow:inset 0 0 0 #a4beff00}45%{box-shadow:inset 0 0 55px #9aafff7d}}
.poke .combat-hp-pop{position:absolute;z-index:28;left:50%;top:18%;transform:translateX(-50%);font-size:17px;line-height:1;font-weight:950;letter-spacing:.02em;white-space:nowrap;text-shadow:0 2px 4px #000,0 1px 12px #000;pointer-events:none;animation:hp-number-float 1.3s ease-out both}
.poke .combat-hp-pop.lost{color:#ff9e83}.poke .combat-hp-pop.recovered{color:#93ffca}
.poke.combat-hit{animation:hp-hit-flash .6s ease-in-out}.poke.combat-heal{animation:hp-heal-flash .7s ease-in-out}
@keyframes hp-number-float{0%{opacity:0;transform:translate(-50%,14px) scale(.8)}18%{opacity:1;transform:translate(-50%,0) scale(1.2)}75%{opacity:1}100%{opacity:0;transform:translate(-50%,-39px)}}
@keyframes hp-hit-flash{30%{filter:brightness(1.75)}}
@keyframes hp-heal-flash{30%{filter:brightness(1.5) saturate(1.5)}}
.action-timeline{list-style:none;padding:0;margin:0;display:grid;gap:7px;max-height:285px;overflow:auto}
.timeline-entry{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:start;gap:9px;padding:9px;background:#0c2232;border:1px solid #2e4b61;border-radius:9px;font-size:11px;line-height:1.45;color:#cfe1ec}
.timeline-entry:first-child{background:#16434d;border-color:#417d86}
.timeline-entry.attack{border-left:3px solid #f9b879}.timeline-entry.evolve{border-left:3px solid #c7bdff}
.timeline-icon{font-size:17px;text-align:center}.timeline-entry small{font-size:9px;font-weight:900;color:#9cbac8;white-space:nowrap;margin-top:3px}
.timeline-empty{color:#93aabb;font-size:11px;line-height:1.5;padding:4px}
button.attack-action .attack-warning{grid-column:1/-1;font-size:10px;color:#ffd594;line-height:1.4;font-weight:700}
button.attack-action:disabled .attack-warning{color:#b6b2a3}
@media(max-width:710px){.combat-fx{top:28dvh;width:calc(100% - 26px)}.combat-banner{padding:11px 14px;gap:8px}.combat-glyph{font-size:25px}.combat-copy strong{font-size:19px}.action-timeline{max-height:225px}.timeline-entry{font-size:10px}}
@media(prefers-reduced-motion:reduce){.combat-banner{animation:none;opacity:1}.stage.combat-attack .poke,.stage.combat-evolve .territory,.poke.combat-hit,.poke.combat-heal,.poke .combat-hp-pop{animation:none!important}.poke .combat-hp-pop{opacity:1}}

/* v0.37 — Independent deck selection for both seats in the waiting room. */
.room-deck-picker{margin:22px 0 10px;padding:18px;border:1px solid #3c8f93;border-radius:12px;background:linear-gradient(125deg,#10343e,#13263d)}
.room-deck-heading{display:flex;align-items:start;justify-content:space-between;gap:12px}
.room-deck-heading h3{margin:0 0 4px;font-size:13px;color:#d7fbf4;letter-spacing:.1em}
.room-deck-heading p{margin:0 0 12px;color:#bcd7e1;font-size:12px;line-height:1.5}
.room-deck-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 12px;align-items:end}
.room-deck-controls label{grid-column:1/-1;color:#a9dee1;font-size:12px;font-weight:700}
.room-deck-controls select{width:100%;min-width:0;background:#081a2d;border:1px solid #3b7081;border-radius:8px;padding:11px 12px;color:white;font:inherit;min-height:44px}
.room-deck-controls button{min-height:44px}
#roomDeckHint{margin:10px 0 0;font-size:12px;color:#bdd7db}
#roomDeckHint.unsaved{color:#ffd994;font-weight:700}
.lobby-seat.mine{border-color:#48bdaa;box-shadow:0 0 0 1px #48bdaa55}
@media(max-width:520px){.room-deck-controls{grid-template-columns:1fr}.room-deck-heading{flex-wrap:wrap}}

/* Card-Flip Game and other permanent Prize reveal effects. */
.prize-rail .prize-back.prize-face-up,
.prize-grid .prize-back.prize-face-up {
 background: #f9eed0 !important;
 color: #3b2f24 !important;
 border: 1px solid #9e855e !important;
 text-shadow: none !important;
 font-weight: 700;
 white-space: normal;
 line-height: 1.1;
}

/* Card-first selection dialog, sized for readable artwork on desktop and phones. */
.choice-dialog{width:min(860px,calc(100vw - 24px))}
.choice-dialog .choice-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(145px,1fr));gap:12px;max-height:min(60dvh,620px);overflow:auto}
.choice-dialog .choice-list label.illustrated-choice{display:flex;flex-direction:column;align-items:center;gap:8px;min-height:100px;padding:10px;cursor:pointer;text-align:center;position:relative}
.choice-dialog .choice-list .choice-card-art{display:block;width:min(100%,145px);aspect-ratio:245/342;object-fit:contain;filter:drop-shadow(0 4px 8px #0008)}
.choice-dialog .choice-list label.illustrated-choice:has(input:checked){outline:2px solid #d9f5a5;outline-offset:-3px}
.choice-dialog .choice-list label.illustrated-choice:focus-within{box-shadow:0 0 0 3px #a4f3e9}
@media(max-width:520px){
 .choice-dialog .choice-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
 .choice-dialog .choice-list label.illustrated-choice{padding:7px}
 .choice-dialog .choice-list .choice-card-art{width:min(100%,110px)}
}

/* Ordered selections: the order of clicks is part of the Pokédex decision. */
.choice-dialog .illustrated-choice .selection-order{
 position:absolute;top:3px;right:3px;display:grid;place-items:center;
 min-width:28px;height:28px;padding:0 5px;border-radius:999px;
 background:#ffe49b;color:#172c38;font-weight:900;font-size:14px;
 box-shadow:0 2px 8px #000a;z-index:2
}
.choice-dialog .choice-card-label{display:block;min-width:0;font-weight:750;overflow-wrap:anywhere}
.choice-dialog .illustrated-choice:has(.selection-order){border-color:#f9dd86;background:#35524a}

/* Read-only deck inventory: preserve every card in deck searches but visually
   distinguish entries that the authoritative reducer will not accept. */
.choice-dialog .choice-list label.choice-ineligible{
 opacity:.40;filter:grayscale(1);cursor:not-allowed;
 background:#182d3b;border-color:#425261
}
.choice-dialog .choice-list label.choice-ineligible .choice-card-art{filter:grayscale(1)}
.choice-dialog .choice-list label.choice-ineligible input{pointer-events:none}
.choice-dialog .choice-list label.choice-ineligible:hover{opacity:.56}

/* An attempted second Energy attachment needs feedback, not a permanent HUD badge. */
.energy-limit-toast{position:fixed;z-index:10050;top:max(12px,env(safe-area-inset-top));left:50%;transform:translate(-50%,-8px);max-width:min(340px,calc(100vw - 32px));padding:9px 14px;border:1px solid #e2b85d;border-radius:9px;background:#192a35f5;color:#ffe8b2;box-shadow:0 8px 24px #0008;text-align:center;font-size:13px;font-weight:650;line-height:1.35;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .16s ease,transform .16s ease,visibility .16s}
.energy-limit-toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.energy-limit-toast{transition:none}}

/* Readable ten-HP damage tokens for both field zones. */
.poke .pokemon-card-stage{position:relative;display:block;width:100%;min-width:0}
.poke .pokemon-card-stage .pokemon-face{width:100%}
.poke .damage-pips{position:absolute;top:50%;right:-12px;transform:translateY(-50%);display:flex!important;flex-direction:column;flex-wrap:wrap;align-content:center;gap:2px;max-height:100%;pointer-events:none;z-index:8}
.poke .damage-pip{display:block;width:9px;height:9px;flex:none;border:1.5px solid #e9f3df;border-radius:50%;background:#10271bb8;box-shadow:0 1px 3px #0009}
.poke .damage-pip.filled{background:#ec6553;border-color:#ffe8ce;box-shadow:0 0 4px #ed7259a0}
body.duel-active .stage .territory .bench-zone .poke .damage-pips{right:-10px;gap:1px}
body.duel-active .stage .territory .bench-zone .poke .damage-pip{width:6px;height:6px;border-width:1px}
.card-preview .preview-life,.card-preview .preview-energy{margin:8px 0;padding:8px;background:#1b3540;border-radius:7px}
.card-preview .preview-life-label{display:flex;justify-content:space-between;gap:8px;margin-bottom:5px}
.card-preview .preview-life-track{height:10px;border-radius:8px;background:#553533;overflow:hidden}
.card-preview .preview-life-track>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#6dde92,#bbdf6c)}
.card-preview .preview-energy{display:flex;flex-direction:column;gap:3px}

/* Full-screen startup stage shared by CPU, RPG, Cube and online match entry. */
.duel-loading[hidden],.duel-loading-actions [hidden]{display:none!important}
.duel-loading{position:fixed;inset:0;z-index:12000;display:grid;place-items:center;padding:22px;background:radial-gradient(circle at 50% 30%,#183c58 0%,#101e30 45%,#080f1b 100%);color:#eaf6fc;text-align:center;overflow:auto}
.duel-loading-card{max-width:480px;width:100%;padding:30px 24px}
.duel-loading-mark{width:68px;height:68px;margin:0 auto 17px;display:grid;place-items:center;border-radius:19px;border:1px solid #548baa;background:#123c55;font-size:36px;box-shadow:0 0 40px #2c8da633}
.duel-loading-kicker{font-size:11px;font-weight:850;letter-spacing:.22em;color:#71e4db}
.duel-loading h1{font-size:clamp(24px,5vw,36px);margin:11px 0 23px;letter-spacing:-.03em}
.duel-loading p:not(.duel-loading-kicker){font-size:14px;line-height:1.5;color:#b4cddd}
.duel-loading-spinner{width:40px;height:40px;margin:0 auto 22px;border:3px solid #345671;border-top-color:#68ebdd;border-radius:50%;animation:duel-boot-spin .85s linear infinite}
.duel-loading-actions{display:flex;justify-content:center;align-items:center;gap:16px;flex-wrap:wrap;margin-top:24px}
.duel-loading-actions button{background:#1b7974;border-color:#60cfc0}
@keyframes duel-boot-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.duel-loading-spinner{animation:none;border-top-color:#68ebdd}}
