:root{--ink:#18223d;--muted:#69718a;--line:#dce2f0;--panel:#fffffff2;--blue:#3269d9;--yellow:#f4bd26;--red:#e45158;--pink:#ef68ad;--purple:#7958c7;--shadow:0 18px 50px #07142e35}
*{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--ink);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;background:#101d3b url("pokemon-splendor-bg.png") center/cover fixed}body:before{content:"";position:fixed;inset:0;z-index:-1;background:linear-gradient(180deg,#07152ab5,#10234dcc)}
button,input,select{font:inherit}button{min-height:40px;padding:0 14px;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--ink);cursor:pointer;font-weight:800}button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 5px 14px #10204022}button:disabled{opacity:.4;cursor:not-allowed}.primary{color:#fff;border-color:#2459c2;background:linear-gradient(135deg,#4381ef,#2455bd)}.danger{color:#fff;border-color:#bb3542;background:#d84752}.wide{width:100%;margin-top:9px}.small{min-height:30px;padding:0 9px;font-size:11px}.hidden{display:none!important}
.shell{min-height:100vh;padding:16px}header,.setup-wrap,.game{width:min(1760px,100%);margin:auto}header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;color:#fff}h1,h2,h3,p{margin:0}h1{font-size:clamp(30px,4vw,52px);text-shadow:0 4px 15px #0008}h1 span{color:#ffd84e}.eyebrow{margin-bottom:4px;color:#efbc38;font-size:10px;font-weight:1000;letter-spacing:.17em}.status,.badge{padding:7px 11px;border:1px solid #ffffff38;border-radius:999px;background:#0a183bbd;color:#fff;font-size:12px;font-weight:900}.panel{padding:17px;border:1px solid #fff8;border-radius:17px;background:var(--panel);box-shadow:var(--shadow);backdrop-filter:blur(10px)}
.setup-wrap{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;max-width:920px}.intro{grid-row:span 2}.intro>p:not(.eyebrow){margin:14px 0 22px;color:var(--muted);line-height:1.75}.mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.mode{height:auto;display:grid;gap:3px;padding:15px;text-align:left}.mode span{font-size:12px;color:var(--muted)}.mode.active{border-color:var(--blue);box-shadow:inset 0 0 0 1px var(--blue)}.setup-card{display:grid;align-content:center;gap:13px}label{display:grid;gap:6px;color:var(--muted);font-size:12px;font-weight:800}input,select{width:100%;min-height:42px;padding:7px 10px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink)}
.game{display:grid;grid-template-columns:240px minmax(0,1fr);gap:12px}.game>.room-role-banner{grid-column:1/-1}.game aside{display:grid;align-content:start;gap:12px}.observer-panels{position:sticky;top:12px;display:grid;gap:12px;max-height:calc(100vh - 24px);overflow:auto;scrollbar-gutter:stable}.table-area{display:grid;grid-template-columns:112px minmax(600px,1fr) 310px;grid-template-areas:"notice notice notice" "supply special trainer" "supply markets trainer" "supply markets action";align-items:start;gap:12px;min-width:0}.room-code{margin:7px 0 13px;padding:10px;border-radius:11px;background:#14264b;color:#ffd950;font-size:32px;font-weight:1000;letter-spacing:.18em;text-align:center}.section-head,.market-title{display:flex;align-items:center;justify-content:space-between;gap:10px}.section-head{margin-bottom:13px}.section-head h2{font-size:19px}.hint,.market-title span{color:var(--muted);font-size:11px}.players{display:grid;gap:7px}.player{padding:9px;border-radius:10px;background:#eef2fa}.player.turn{box-shadow:inset 4px 0 var(--yellow)}.player.me{background:#e4edff}.player-top{display:flex;justify-content:space-between;font-weight:900}.player-meta{margin-top:4px;color:var(--muted);font-size:11px}.notice{grid-area:notice;padding:12px 16px;border:1px solid #e8c45c;border-radius:13px;background:#fff3bded;color:#5c4611;font-weight:900}
.supply{grid-area:supply;position:sticky;top:12px;padding:12px 10px}.supply .section-head{display:block;margin-bottom:10px;text-align:center}.supply .section-head h2{font-size:15px}.supply .eyebrow,.supply .hint{display:none}.tokens{display:grid;grid-template-columns:1fr;gap:9px}.token{position:relative;display:grid;place-items:center;min-height:82px;border:0;color:#fff;text-shadow:0 1px 3px #0008;overflow:hidden;background:linear-gradient(145deg,#f8faff,#e8edf7)}.token:before{content:"";position:absolute;top:6px;width:58px;height:58px;border-radius:50%;background-image:var(--ball);background-position:center;background-size:cover;box-shadow:0 4px 11px #1020403b}.token b,.token span{position:relative;z-index:1}.token b{margin-top:1px;padding:1px 7px;border-radius:999px;background:#07152bbd;font-size:17px}.token span{align-self:end;margin-bottom:4px;color:#26314a;text-shadow:none;font-size:9px}.token.selected{outline:4px solid #ffd23f}.token.red{--ball:url("red.png")}.token.black{--ball:url("black.png")}.token.yellow{--ball:url("yellow.png")}.token.pink{--ball:url("pink.png")}.token.blue{--ball:url("blue.png")}.token.purple{--ball:url("master.png")}
.special-row{grid-area:special;display:grid;grid-template-columns:1fr 1fr;gap:12px}.market-group{display:grid;grid-template-columns:100px minmax(0,210px);gap:10px;align-items:stretch;min-width:0}.special-deck,.deck{display:grid;place-items:center;padding:10px;border-radius:14px;background:linear-gradient(145deg,#263f7a,#121c39);color:#fff;text-align:center}.special-deck b{font-size:17px}.special-deck span,.deck span{font-size:11px}.markets{grid-area:markets;display:grid;gap:10px}.market-row{display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px;align-items:stretch}.deck{cursor:pointer}.deck b{font-size:26px}.cards{display:grid;grid-template-columns:repeat(4,minmax(145px,1fr));gap:9px}.cards.single{width:100%;grid-template-columns:minmax(145px,210px)}
.poke-card{position:relative;min-height:150px;padding:10px;border:2px solid #fff;border-radius:14px;background:linear-gradient(145deg,#fff,#edf1f8);box-shadow:0 6px 15px #10204028;overflow:hidden;cursor:pointer}.poke-card:hover{transform:translateY(-2px)}.poke-card.selected{outline:4px solid #ffd23f}.card-quick-actions{position:absolute;z-index:4;top:8px;left:8px;right:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:7px;border:1px solid #ffffffb8;border-radius:11px;background:#07152bd9;box-shadow:0 8px 22px #07152b80;backdrop-filter:blur(5px)}.card-quick-actions:has(button:only-child){grid-template-columns:1fr}.card-quick-actions button{min-height:34px;padding:0 8px;border-radius:8px;font-size:12px}.poke-card .art{height:54px;margin:-10px -10px 8px;display:grid;place-items:center;background:linear-gradient(135deg,var(--card),#fff);font-size:37px}.card-face{display:block;width:calc(100% + 20px);height:auto;margin:-10px -10px 8px;aspect-ratio:745/1040;object-fit:cover;border-radius:12px 12px 6px 6px}.card-ball{width:48px;height:48px;border-radius:50%;object-fit:cover;box-shadow:0 3px 9px #17213a3d}.poke-card .name{display:flex;justify-content:space-between;gap:5px;font-weight:1000}.poke-card .points{color:#d69200}.cost,.bonus{display:flex;gap:4px;flex-wrap:wrap;margin-top:7px}.orb{display:inline-flex;align-items:center;gap:2px;min-width:31px;padding:2px 5px 2px 2px;border:1px solid #d7ddea;border-radius:999px;background:#fff;color:#26314a;text-align:center;font-size:10px;font-weight:900;box-shadow:0 1px 4px #1420421f}.orb img,.mini-ball{width:20px;height:20px;border-radius:50%;object-fit:cover}.orb b{font-size:10px}.mini-ball{display:inline-block;vertical-align:middle;margin-right:1px}.evo{margin-top:6px;color:var(--purple);font-size:10px;font-weight:800}.card-actions{display:flex;gap:5px;margin-top:8px}.card-actions button{min-height:28px;padding:0 7px;font-size:10px}.placeholder{min-height:120px;display:grid;place-items:center;color:var(--muted);border:1px dashed var(--line);border-radius:13px}
.action-panel{grid-area:action;position:static;z-index:1}.action-panel .section-head{align-items:flex-start}.action-panel .actions{display:grid;grid-template-columns:1fr}.action-panel .actions button{width:100%}.action-panel .return-ball{min-height:52px;display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:7px 12px;text-align:left}.return-ball img{width:36px;height:36px;flex:0 0 36px;border-radius:50%;object-fit:cover;filter:drop-shadow(0 3px 5px #10204038)}.return-ball span{line-height:1.25}.selection{min-height:18px;margin-bottom:7px;color:var(--muted);font-size:12px}.actions{display:flex;gap:8px;flex-wrap:wrap}.resource-strip{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:13px}.trainer-board{grid-area:trainer;position:sticky;top:12px;max-height:calc(100vh - 210px);overflow:auto}.trainer-board h3{margin:13px 0 8px;font-size:14px}.owned-pokemon-list,.reserved-pokemon-list{display:grid;gap:7px}.owned-pokemon,.reserved-pokemon{display:grid;gap:6px;padding:9px 10px;border:1px solid #d8e0ef;border-radius:11px;background:linear-gradient(135deg,#fff,#eef3fb);box-shadow:0 3px 9px #10204016}.reserved-pokemon{position:relative;cursor:pointer}.reserved-pokemon:hover{transform:translateY(-1px);border-color:#b8c7e4}.reserved-pokemon.selected{outline:3px solid #ffd23f}.owned-pokemon-main{display:flex;align-items:center;justify-content:space-between;gap:8px}.owned-pokemon-main>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.owned-pokemon-stats{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}.owned-bonus{display:inline-flex;align-items:center;gap:4px;color:#39445d;font-size:10px;font-weight:900;white-space:nowrap}.owned-bonus img,.evolution-cost img,.reserved-cost-item img{width:20px;height:20px;border-radius:50%;object-fit:cover}.owned-bonus.none{color:var(--muted)}.owned-score{padding:3px 7px;border-radius:999px;background:#fff0bd;color:#9a6500;font-size:11px;font-weight:1000;white-space:nowrap}.owned-evolution{display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding-top:5px;border-top:1px solid #e1e6f0;color:var(--muted);font-size:10px}.owned-evolution b{color:var(--purple)}.evolution-cost,.reserved-cost-item{display:inline-flex;align-items:center;gap:3px}.reserved-cost{display:flex;align-items:center;justify-content:space-between;gap:7px;padding:5px 0;border-top:1px solid #e1e6f0;color:var(--muted);font-size:10px}.reserved-cost>div{display:flex;justify-content:flex-end;gap:4px;flex-wrap:wrap}.reserved-cost-item{padding:1px 4px 1px 1px;border:1px solid #dde3ef;border-radius:999px;background:#fff;color:#39445d}.reserved-free{color:var(--green,#287255);font-weight:900}.collection{display:grid;grid-template-columns:1fr 1fr;gap:8px;overflow:visible;padding:3px 2px}.collection .poke-card{min-width:0;max-width:none}.trainer-board .poke-card{min-height:132px}.trainer-board .poke-card .art{height:42px;font-size:29px}.score{font-size:26px;color:#d78a00;font-weight:1000}.score small{font-size:10px}.log{display:grid;gap:5px;max-height:210px;overflow:auto}.log.collapsed{display:none}.log div{padding:7px;border-radius:7px;background:#eff2f8;font-size:11px}.modal{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:20px;background:#071127b8}.modal-card{width:min(560px,100%);max-height:85vh;overflow:auto;padding:20px;border-radius:17px;background:#fff;box-shadow:0 25px 70px #0008}.modal-card h2{margin-bottom:13px}
.trainer-inspect-button{min-height:0;padding:0;border:0;border-radius:0;background:transparent;color:inherit;text-align:left;font-weight:900;text-decoration:underline;text-decoration-color:#3269d966;text-underline-offset:3px}.trainer-inspect-button:hover:not(:disabled){color:var(--blue);box-shadow:none;transform:none}.trainer-inspector{width:min(760px,100%);max-height:min(88vh,900px);overflow:auto}.inspector-head{position:sticky;top:-20px;z-index:3;margin:-20px -20px 14px;padding:18px 20px 13px;border-bottom:1px solid var(--line);background:#fffffff2;backdrop-filter:blur(9px)}.inspector-meta{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}.inspector-meta span,.inspector-section-head span{padding:5px 8px;border-radius:999px;background:#edf2fb;color:#41506f;font-size:11px;font-weight:900}.inspector-section{margin-top:14px}.inspector-section h3{margin:0 0 8px;font-size:14px}.inspector-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.inspector-resources{display:flex;gap:6px;flex-wrap:wrap;padding:9px;border:1px solid #dde4f1;border-radius:11px;background:#f6f8fc}.secret-reserve{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px dashed #9ba9c4;border-radius:11px;background:linear-gradient(135deg,#263f7a,#121c39);color:#fff}.secret-reserve-mark{width:38px;height:52px;display:grid;place-items:center;flex:0 0 38px;border:1px solid #ffffff66;border-radius:8px;background:repeating-linear-gradient(45deg,#ffffff12 0 6px,#ffffff24 6px 12px);font-size:22px;font-weight:1000}.secret-reserve strong,.secret-reserve span{display:block}.secret-reserve span{margin-top:3px;color:#ffffffb8;font-size:10px}.reserved-pokemon.readonly{cursor:default}.reserved-pokemon.readonly:hover{transform:none;border-color:#d8e0ef}.placeholder.compact{min-height:62px}.modal:not(.hidden){animation:modal-fade .16s ease-out}.trainer-inspector{animation:inspector-rise .2s ease-out}@keyframes modal-fade{from{opacity:0}}@keyframes inspector-rise{from{opacity:0;transform:translateY(12px) scale(.985)}}
@media(max-width:1320px){.game{grid-template-columns:220px minmax(0,1fr)}.table-area{grid-template-columns:105px minmax(460px,1fr) 260px}.market-group{grid-template-columns:82px minmax(0,1fr)}.cards{grid-template-columns:repeat(2,minmax(130px,1fr))}.cards.single{width:100%;grid-template-columns:1fr}.collection{grid-template-columns:1fr}}
@media(max-width:1050px){.game{grid-template-columns:1fr}.game aside{grid-template-columns:1fr 2fr}.observer-panels{position:static;grid-template-columns:1fr 1fr;max-height:none;overflow:visible}.table-area{grid-template-columns:110px minmax(0,1fr) 280px}}
@media(max-width:820px){.table-area{grid-template-columns:1fr;grid-template-areas:"notice" "supply" "special" "markets" "trainer" "action"}.supply,.trainer-board{position:static;max-height:none}.supply .section-head{display:flex;text-align:left}.supply .eyebrow,.supply .hint{display:block}.tokens{grid-template-columns:repeat(6,1fr)}.collection{grid-template-columns:repeat(2,minmax(0,1fr))}.action-panel .actions{display:flex}.action-panel .actions button{width:auto}}
@media(max-width:760px){.shell{padding:12px}.setup-wrap{grid-template-columns:1fr}.intro{grid-row:auto}.game aside,.observer-panels{grid-template-columns:1fr}.tokens{grid-template-columns:repeat(3,1fr)}.market-row{grid-template-columns:72px minmax(0,1fr)}.market-group{grid-template-columns:70px minmax(0,1fr)}.special-row{gap:8px}.special-deck{padding:7px}.special-deck b{font-size:13px}.cards{grid-template-columns:repeat(2,minmax(115px,1fr))}.cards.single{width:100%;grid-template-columns:1fr}.poke-card{min-height:145px}header{align-items:flex-start;flex-direction:column}.mode-grid{grid-template-columns:1fr}}

/* Keep the current action visible together with the trainer board on desktop. */
.table-area{grid-template-areas:"notice notice notice" "supply special trainer" "supply markets trainer"}
.trainer-column{grid-area:trainer;position:sticky;top:12px;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;max-height:calc(100vh - 24px);min-height:0;align-self:start}
.trainer-column .action-panel{grid-area:auto;position:static}
.trainer-column .trainer-board{grid-area:auto;position:static;top:auto;min-height:0;max-height:none;overflow:auto}
.spectator-action-note{padding:11px;border:1px dashed #d2b44e;border-radius:10px;background:#fff8dc;color:#70590c;line-height:1.6}
@media(max-width:820px){.table-area{grid-template-areas:"notice" "supply" "special" "markets" "trainer"}.trainer-column{position:static;grid-template-rows:auto auto;max-height:none}.trainer-column .trainer-board{max-height:none;overflow:visible}}
