:root{color-scheme:dark;--bg:#080d16;--panel:#111c2b;--line:#2d4053;--ink:#e9f3fa;--muted:#a8bacb;--cyan:#67e6ed;--lime:#dcfa83;--orange:#ffad69;font-family:Inter,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 0,#19323d 0,transparent 65%);min-height:100dvh}button,a,select,input{touch-action:manipulation}button,select{font:inherit;color:inherit;background:#192a3b;border:1px solid #41566a;border-radius:9px;padding:11px 14px;min-height:44px;cursor:pointer}button:hover:not(:disabled),a:hover{color:var(--cyan);border-color:var(--cyan)}button:disabled{opacity:.4;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid var(--orange);outline-offset:3px}a{color:var(--ink);text-decoration:none}header{max-width:1500px;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:20px 26px;gap:12px;border-bottom:1px solid var(--line)}header strong{font-size:27px;letter-spacing:.08em}header a{font-size:13px;font-weight:700}.badge{color:var(--lime);border:1px solid #71844b;padding:4px 7px;font-size:11px;border-radius:4px;vertical-align:middle;letter-spacing:.1em}.game-shell{max-width:1360px;margin:auto;padding:20px 24px}.players{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:auto auto 22px;max-width:940px}.player{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px;opacity:.52;transition:opacity .2s}.player.active{opacity:1;border-color:var(--cyan);box-shadow:0 0 30px #67e6ed0b}.player-title{display:flex;justify-content:space-between;gap:5px;font-size:14px}.turn-label{color:var(--lime);font-size:12px}.progress{margin:8px 0;color:var(--muted);font-size:13px}.xp-track{height:3px;background:#26384a;margin-top:7px}.xp-fill{height:100%;background:var(--cyan)}.roulette{display:flex;gap:6px;height:28px;font-size:10px;letter-spacing:.09em;margin-bottom:8px}.reel{border:1px solid #3f5263;border-radius:5px;flex:1;overflow:hidden;height:28px;text-align:center}.reel-strip span{height:26px;display:flex;align-items:center;justify-content:center;color:var(--lime)}.cards{display:flex;gap:8px;min-height:57px}.card{flex:1;min-width:0;padding:8px 4px;font-size:13px;font-weight:800;border-radius:8px;transition:transform .16s}.card small{display:block;font-size:11px;font-weight:400;margin-top:5px}.card.wild{color:var(--lime);border-color:#8ca553}.card.selected{transform:translateY(-4px);border:2px solid var(--cyan);background:#234252}.card:disabled{filter:grayscale(1)}.previous{display:block;min-height:15px;font-size:10px;margin-top:7px;overflow-wrap:anywhere;color:var(--muted)}.play-area{display:grid;grid-template-columns:minmax(170px,1fr) minmax(0,550px) minmax(170px,1fr);gap:24px;align-items:start}.eyebrow{font-size:11px;letter-spacing:.18em;color:var(--cyan);font-weight:800}.guide-panel h1{font-size:clamp(25px,2.7vw,40px);line-height:1.25;letter-spacing:-.05em;margin:20px 0}.guide-panel p,.status-panel p{font-size:14px;line-height:1.7}.guide-panel>p:not(.eyebrow){color:var(--muted)}.guide-panel button{font-size:12px}#tutorial{border-left:2px solid var(--lime);padding-left:12px;font-size:13px;line-height:1.6;margin:18px 0}#tutorial button{min-height:32px;padding:4px 8px;margin-top:8px}.legend{font-size:12px!important}.board-wrap{min-width:0}#board{display:grid;grid-template-columns:repeat(8,1fr);aspect-ratio:1;border:5px solid #334557;border-radius:5px;overflow:hidden;box-shadow:0 22px 60px #0005}.square{border:0;border-radius:0;padding:0;min-height:0;aspect-ratio:1;position:relative;font-family:"Segoe UI Symbol",serif;font-size:clamp(23px,4.2vw,49px);line-height:1;display:flex;align-items:center;justify-content:center;overflow:hidden}.square.light{background:#95aeb4}.square.dark{background:#456373}.square.white-piece{color:#fff8de;text-shadow:0 2px 2px #16242f,1px 0 #16242f,-1px 0 #16242f}.square.black-piece{color:#10202e;text-shadow:0 1px #c5dce3,1px 0 #c5dce3,-1px 0 #c5dce3}.square:hover:not(:disabled){color:inherit}.square .coord{position:absolute;bottom:3px;left:3px;font:9px "Segoe UI",sans-serif;color:#10232f;text-shadow:none}.square.dark .coord{color:#dfedf5}.square.eligible:after{content:'';position:absolute;inset:5px;border:2px solid #daf989b0;border-radius:8px}.square.chosen{box-shadow:inset 0 0 0 4px var(--orange)}.square.target:before{content:'●';position:absolute;font:22px sans-serif;color:#17333ccc}.square.capture:before{content:'◎';font-size:clamp(29px,4.5vw,53px);color:#fb9455}.square.danger .marker{position:absolute;right:2px;top:2px;color:#982a0b;background:#ffdeb1;border-radius:3px;font:bold 13px sans-serif;padding:1px}.square.recommended .recommend{position:absolute;left:3px;top:2px;font:17px sans-serif;color:#052d32;background:var(--lime);border-radius:3px}.square.check{box-shadow:inset 0 0 0 4px #ff755f}.square.attack-path{background:#ad7772}.board-caption{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;letter-spacing:.15em;margin:10px 0}.turn-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.turn-actions #spin{grid-column:1/-1;color:#142729;background:var(--cyan);font-weight:800}.turn-actions button{font-size:13px;padding:10px 5px}#status{min-height:78px;color:var(--lime);font-weight:600}.history{color:var(--muted);font:12px/1.8 monospace;min-height:80px;padding:12px 0;border-block:1px solid var(--line);overflow-wrap:anywhere}.secondary{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}.secondary button,.secondary a{font-size:12px}.secondary a{display:block;padding:10px 0;width:100%}small{color:var(--muted)}footer{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:18px;font-size:11px;color:var(--muted);padding:18px}footer button{font-size:11px;padding:5px 8px;min-height:30px}dialog{border:1px solid #507184;border-radius:20px;background:#101d2c;color:var(--ink);padding:30px;width:min(450px,calc(100% - 28px));max-height:90dvh;box-shadow:0 30px 100px #0008}dialog::backdrop{background:#030812bb;backdrop-filter:blur(7px)}dialog h2{font-size:28px;margin:10px 0 18px}dialog p{line-height:1.7;color:var(--muted)}dialog label{display:block;margin:16px 0;font-size:14px}dialog select{display:block;width:100%;margin-top:8px}dialog button,dialog a{display:block;width:100%;margin-top:12px;text-align:center}dialog input{width:18px;height:18px;vertical-align:middle}.primary{background:var(--cyan);color:#09242d;font-weight:800}.promotion-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}details{font-size:12px;line-height:1.7;margin-top:20px}summary{cursor:pointer;padding:10px 0}#rules{color:var(--muted)}#rules table{border-collapse:collapse;font-size:10px;width:100%}td,th{padding:4px 2px;border-bottom:1px solid var(--line)}.landing{max-width:1000px;margin:60px auto;padding:24px}.landing h1{font-size:clamp(44px,9vw,100px);line-height:1.05;margin:20px 0}.landing .intro{max-width:540px;color:var(--muted);line-height:1.8}.game-tile{margin-top:40px;display:grid;grid-template-columns:140px 1fr;gap:30px;padding:30px;border:1px solid var(--line);border-radius:20px;background:var(--panel)}.chess-art{font-size:95px;color:var(--lime);align-self:center}.game-tile h2{font-size:36px;margin:8px 0}.game-tile p{color:var(--muted);line-height:1.7}.game-tile a{display:inline-block;padding:14px 22px;border-radius:8px;background:var(--cyan);color:#0a2530;font-weight:800}
@media(max-width:1000px){.play-area{grid-template-columns:minmax(0,550px) minmax(180px,1fr);gap:18px}.guide-panel{grid-column:1/-1;order:3}.guide-panel h1{display:none}.guide-panel>p,.guide-panel .eyebrow,.legend{display:none}.guide-panel{display:flex;gap:16px;flex-wrap:wrap;align-items:start}#tutorial{margin:0;flex:1}.players{max-width:none}.game-shell{padding:15px}}
@media(max-width:620px){header{padding:12px}header strong{font-size:22px}header a{font-size:10px}header button{font-size:12px;padding:9px}.game-shell{padding:10px}.players{gap:8px;margin-bottom:12px}.player{padding:9px;border-radius:11px}.player-title{font-size:11px;flex-wrap:wrap}.turn-label{font-size:10px}.progress{font-size:11px}.cards{gap:3px;min-height:51px}.card{font-size:10px;padding:6px 1px}.card small{font-size:9px}.roulette{height:23px;gap:3px;font-size:8px;margin-bottom:5px}.reel{height:23px}.reel-strip span{height:21px}.previous{font-size:8px}.play-area{display:flex;flex-direction:column;gap:12px}.board-wrap{width:100%;order:0}.square{font-size:clamp(25px,8.5vw,49px)}.square.capture:before{font-size:10vw}.status-panel{order:1;width:100%}.status-panel .eyebrow{display:none}#status{min-height:0;margin:0 0 10px;font-size:13px}.turn-actions{grid-template-columns:2fr 1fr 1fr}.turn-actions #spin{grid-column:auto}.history{min-height:0;padding:8px 0}.secondary{margin:10px 0;align-items:center}.secondary a{width:auto;margin-left:auto}.guide-panel{order:2;width:100%}.guide-panel button{font-size:11px}.board-caption{margin-bottom:0}.square.eligible:after{inset:3px}.landing{margin:20px auto}.game-tile{grid-template-columns:1fr;padding:22px;gap:0}.chess-art{font-size:65px}footer{gap:10px}#piece-tip{display:block}.square .coord{font-size:8px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}}
[hidden]{display:none!important}
[hidden]{display:none!important}
/* Cyan white side, pink black side, lime legal moves. */
body{background:radial-gradient(ellipse at 18% 8%,#0a484a55,transparent 48%),radial-gradient(ellipse at 85% 20%,#54236544,transparent 45%),#070c16}
header strong{color:#b3fbff;text-shadow:0 0 24px #55f0ff55}header{border-bottom-color:#36566a}
.player{background:linear-gradient(135deg,#102838,#141b30);border-color:#2f4a62}
#player-w.active{border-color:#6ff3ff;box-shadow:0 0 24px #36e4ff20,inset 0 0 26px #36e4ff09}
#player-b.active{border-color:#ff94ce;box-shadow:0 0 24px #ff59b522,inset 0 0 26px #ff59b509}
#player-w .player-title strong{color:#9ff9ff}#player-b .player-title strong{color:#ffb5dc}
#player-b .xp-fill{background:#ff94ce}.reel{background:#08121f;border-color:#38506b}
.reel-strip span{color:#a4faff;text-shadow:0 0 12px #6ef9ff66}
.card{background:linear-gradient(155deg,#173d51,#142334);border-color:#37617a}
.card.selected{background:linear-gradient(135deg,#1d5260,#17344e);border-color:#8dffff;box-shadow:0 0 18px #62f6ff44,inset 0 0 12px #62f6ff13}
.card.wild{background:linear-gradient(145deg,#374b23,#172a2c);color:#ddff89;border-color:#a1cc55;box-shadow:0 0 13px #cbff7220}
#board{border:3px solid #59bcc9;box-shadow:0 0 0 4px #122f43,0 0 38px #43dcff20,0 28px 65px #0009;background:#081523}
.square.light{background:#19364a}.square.dark{background:#0d1d32}
.square.white-piece{color:#a6faff;text-shadow:0 0 7px #25f2ff99,0 2px 2px #000,1px 0 #063f56,-1px 0 #063f56}
.square.black-piece{color:#ffadd7;text-shadow:0 0 7px #ff46b088,0 2px 2px #000,1px 0 #681d54,-1px 0 #681d54}
.square .coord{color:#9cb9c9!important;text-shadow:none;opacity:.8}
.square.eligible:after{border-color:#ceff8baa;box-shadow:inset 0 0 12px #c9ff7111,0 0 6px #a7e85833}
.square.chosen{background:#315755;box-shadow:inset 0 0 0 3px #e3ff98,inset 0 0 20px #b9ff5730}
.square.target:before{color:#d8ff92;text-shadow:0 0 14px #c4ff56aa}.square.capture:before{color:#ffb47b;text-shadow:0 0 15px #ff8a46}
.square.check{background:#552443;box-shadow:inset 0 0 0 3px #ff776e,inset 0 0 20px #ff435744}.square.attack-path{background:#402741}
.square.recommended .recommend{color:#d5ff96;background:#1c3f35;box-shadow:0 0 10px #c2fa6522}.square.danger .marker{background:#74362c;color:#ffe0b6}
.turn-actions #spin,.primary{background:linear-gradient(120deg,#93f8ff,#63e6d8);box-shadow:0 0 18px #6aeeef22}.badge{box-shadow:0 0 12px #dafa8318}
.board-caption span:first-child{color:#91efff}.board-caption span:last-child{color:#ffafd6}
.chess-art{color:#99f4ff;text-shadow:0 0 26px #65faff55}.game-tile{background:linear-gradient(130deg,#12323a,#221b34);border-color:#44666e;box-shadow:0 0 40px #45deff0c}
@media(max-width:620px){.players{position:relative;padding-bottom:65px}.players .cards{position:absolute;left:0;right:0;bottom:0;gap:8px;min-height:54px}.players .cards:empty{display:none}.players .card{font-size:13px;min-height:54px}.players .card small{font-size:11px}.player .previous{min-height:24px}.player{min-height:124px}}

/* Board-first composition: use viewport height on desktop, full width on touch. */
@media(min-width:1001px){
 header{max-width:none;padding:12px 24px}
 .game-shell{max-width:none;display:grid;grid-template-columns:minmax(0,min(calc(100dvh - 118px),calc(100vw - 380px))) minmax(290px,340px);grid-template-rows:auto auto 1fr;justify-content:center;gap:18px 26px;padding:18px 20px}
 .play-area{display:contents}.board-wrap{grid-column:1;grid-row:1/4;width:100%;container-type:inline-size}
 .players{grid-column:2;grid-row:1;width:100%;max-width:none;position:relative;padding-bottom:72px;gap:8px;margin:0}
 .player{padding:10px;min-width:0}.player-title{font-size:12px;flex-wrap:wrap}.progress{font-size:11px}.previous{font-size:9px}
 .players .cards{position:absolute;left:0;right:0;bottom:0;gap:8px;min-height:60px}.players .cards:empty{display:none}
 .status-panel{grid-column:2;grid-row:2}.guide-panel{grid-column:2;grid-row:3}
 .guide-panel h1,.guide-panel>.eyebrow,.guide-panel>p:not(#piece-tip){display:none}
 #tutorial{margin:0 0 12px}.guide-panel details{margin-top:8px}.status-panel>.eyebrow{margin-top:0}#status{min-height:0;margin:8px 0 14px}
 .history{min-height:0;max-height:88px;overflow:auto}.secondary{margin:12px 0}.square{font-size:clamp(28px,8.3cqw,88px)}
 footer{padding:8px}
}
@media(max-width:1000px){
 .game-shell{padding:10px 8px}.play-area{display:flex;flex-direction:column;gap:12px}.board-wrap{width:100%;order:0;container-type:inline-size}
 .status-panel{order:1;width:100%}.guide-panel{order:2;width:100%}.square{font-size:8.3cqw}
 .players{position:relative;gap:8px;padding-bottom:62px;margin-bottom:12px}.players .cards{position:absolute;left:0;right:0;bottom:0;gap:8px;min-height:54px}
 .players .cards:empty{display:none}.players .card{font-size:13px;min-height:54px}.players .card small{font-size:11px}
 .player{padding:8px;min-height:0}.player .previous{display:none}.player .roulette{height:21px;margin-bottom:0}.reel{height:21px}.reel-strip span{height:19px}
 .player-title{font-size:11px}.progress{font-size:11px;margin:5px 0}.board-caption{margin-bottom:0}
}
@media(min-width:621px) and (max-width:1000px){header{padding:10px 14px}header strong{font-size:24px}.status-panel>.eyebrow{display:none}}

/* Move offers replace piece-type comparison; reserve enough room for the route. */
.card .rarity{display:block;font-size:10px;letter-spacing:.1em;margin-bottom:5px}
.card .move-label{display:block;font-size:12px;white-space:normal;overflow-wrap:anywhere}
.card.tier-common{border-color:#678aa1}.card.tier-common .rarity{color:#b6d2e2}
.card.tier-rare{border-color:#64d5ff;background:linear-gradient(145deg,#154360,#17293e)}.card.tier-rare .rarity{color:#83e4ff}
.card.tier-epic{border-color:#ef9aff;background:linear-gradient(145deg,#493056,#22243b)}.card.tier-epic .rarity{color:#ffb6fa}
.card.selected{border-color:#dfff94;box-shadow:0 0 18px #caff6e38}
.players{padding-bottom:94px}.players .cards{min-height:82px}.players .card{min-height:82px}
@media(max-width:1000px){.players{padding-bottom:86px}.players .cards,.players .card{min-height:78px}.players .card small{font-size:10px}.player .roulette{display:none}.player-title{font-size:11px}}
@media(max-width:620px){.guide-panel{display:block}#tutorial{margin:0 0 12px}#piece-tip{margin:10px 0}.guide-panel details{margin-top:10px}}

/* One-shot reveal on fresh human offers; selection remains available throughout. */
.card.offer-reveal{position:relative;isolation:isolate;overflow:hidden;z-index:1}
.tier-rare.offer-reveal{--reveal-duration:440ms;--reveal-light:#77e8ff;animation:offer-rare var(--reveal-duration) ease-out}
.tier-epic.offer-reveal{--reveal-duration:620ms;--reveal-light:#ffc2ff;animation:offer-epic var(--reveal-duration) cubic-bezier(.16,.7,.25,1)}
.card.offer-reveal::after{content:'';position:absolute;inset:2px;border:1px solid var(--reveal-light);border-radius:7px;pointer-events:none;opacity:0;animation:offer-ring var(--reveal-duration) ease-out}
.tier-epic.offer-reveal::before{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(110deg,transparent 20%,#ffd5ff38 45%,#fff5ff80 50%,#ffd5ff38 55%,transparent 80%);transform:translateX(-115%);animation:offer-sheen var(--reveal-duration) ease-out}
@keyframes offer-rare{0%{box-shadow:0 0 0 #64d5ff00}28%{box-shadow:0 0 18px #64d5ff80,inset 0 0 12px #64d5ff28}100%{box-shadow:0 0 0 #64d5ff00}}
@keyframes offer-epic{0%{transform:scale(.98);box-shadow:0 0 0 #ef9aff00}26%{transform:scale(1.035);box-shadow:0 0 28px #ef9aff99,inset 0 0 18px #ef9aff33}65%{transform:scale(1);box-shadow:0 0 12px #ef9aff55}100%{transform:scale(1);box-shadow:0 0 0 #ef9aff00}}
@keyframes offer-ring{0%{opacity:0;transform:scale(.92)}25%{opacity:.85}100%{opacity:0;transform:scale(1)}}
@keyframes offer-sheen{0%{transform:translateX(-115%);opacity:0}20%{opacity:.8}100%{transform:translateX(115%);opacity:0}}

/* Compact game identity keeps the board header readable on phones. */
.game-brand{text-align:center;min-width:0}.game-brand>div{white-space:nowrap}.game-brand>small{display:block;font-size:9px;letter-spacing:.12em;color:#a7d7e0;margin-top:4px}.game-full-name{font-size:11px;letter-spacing:.12em;color:#a7d7e0}
@media(max-width:620px){header .game-brand strong{font-size:18px}header .game-brand .badge{font-size:9px;padding:3px 4px}.game-brand>small{font-size:8px;letter-spacing:.07em}}

/* Preserve square board geometry while reclaiming desktop vertical margins. */
@media(min-width:1001px){header{padding:6px 20px}.game-shell{padding:6px 12px;grid-template-columns:minmax(0,min(calc(100dvh - 104px),calc(100vw - 380px))) minmax(290px,340px)}footer{padding:6px}}
/* Team identity uses color, number and shape; offers remain visible before selection. */
:root{--team-blue:#83d5ff;--team-orange:#ffc078}
.square.white-piece,.square.white-piece:hover:not(:disabled){color:var(--team-blue);text-shadow:0 2px 2px #000}
.square.black-piece,.square.black-piece:hover:not(:disabled){color:var(--team-orange);text-shadow:0 2px 2px #000}
#player-w .player-title strong,.board-caption span:first-child{color:var(--team-blue)}
#player-b .player-title strong,.board-caption span:last-child{color:var(--team-orange)}
#player-w.active{border-color:var(--team-blue);box-shadow:none}#player-b.active{border-color:var(--team-orange);box-shadow:none}
#player-b .xp-fill{background:var(--team-orange)}
.side-marker{position:absolute;top:3px;right:3px;display:grid;place-items:center;width:clamp(11px,1.7cqw,18px);height:clamp(11px,1.7cqw,18px);font:700 clamp(9px,1.3cqw,13px)/1 Arial,sans-serif;text-shadow:none;background:#83d5ff;color:#071320;border:1px solid #071320;border-radius:50%;pointer-events:none}
.black-piece .side-marker{background:#ffc078;border-radius:1px}
.square.candidate::after{content:'';position:absolute;inset:3px;border:2px dashed #fff;border-radius:5px;box-shadow:0 0 0 1px #071320;pointer-events:none}
.square.candidate.chosen::after{border:3px solid #fff}
.candidate-numbers{position:absolute;bottom:2px;right:2px;padding:2px 3px;z-index:1;background:#f4f7fa;color:#091421;border:1px solid #091421;border-radius:3px;font:800 clamp(9px,1.5cqw,15px)/1 Arial,sans-serif;text-shadow:none;pointer-events:none}
.card-number{display:inline-block;font:800 11px/1.2 Arial,sans-serif;color:#f4f7fa;margin-right:5px}.card .rarity{display:inline-block}
.board-key{font:11px/1.5 'Segoe UI',sans-serif;color:#cbd9e5;margin:6px 0 0}
.board-caption{letter-spacing:.04em;margin:4px 0}
@media(min-width:1001px){.game-shell{grid-template-columns:minmax(0,min(calc(100dvh - 138px),calc(100vw - 380px))) minmax(290px,340px)}}
