:root{--bg:#070b0d;--panel:#0d1a1b;--panel-hi:#122426;--line:#1c2e2f;--text:#e8eef0;--muted:#7d8a8d;--you:#4cc9f0;--rival:#ff9f40;--mutation:#f2c46d;--tier3:#c6a8ff;--phage:#b39ddb;--danger:#ff6b6b;--display:"Bricolage Grotesque", system-ui, sans-serif;--mono:"JetBrains Mono", ui-monospace, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}[hidden]{display:none!important}html,body{background:var(--bg);height:100%;color:var(--text);font-family:var(--mono);margin:0}body{overflow:hidden}#app{height:100%;padding-block:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));grid-template-rows:auto 1fr auto;gap:12px;display:grid}h1,h2,h3{font-family:var(--display);text-wrap:balance;margin:0;font-weight:800}h1{margin-top:4px;font-size:clamp(24px,3.4vw,40px)}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible{outline:2px solid var(--text);outline-offset:2px}button:disabled{cursor:default}.eyebrow,.section-label{text-transform:uppercase;letter-spacing:.2em;color:var(--muted);font-size:12px}.hud-top{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.hud-right{align-items:center;gap:16px;display:flex}.hud-actions{gap:8px;display:flex}.hud-actions button{border:1px solid var(--line);letter-spacing:.04em;background:0 0;border-radius:10px;padding:8px 12px;font-size:13px}.hud-actions button:hover{background:var(--panel-hi)}.clock{font-variant-numeric:tabular-nums;font-size:clamp(32px,5vw,60px);font-weight:500}.clock.urgent{color:var(--danger)}.board{grid-template-columns:minmax(0,1fr) minmax(320px,380px);gap:20px;min-height:0;display:grid}#stage{touch-action:none;-webkit-user-select:none;user-select:none;min-height:0;position:relative}#stage canvas{width:100%;height:100%;position:absolute;inset:0}.zoom{z-index:2;flex-direction:column;gap:6px;display:flex;position:absolute;top:8px;right:8px}.zoom button{border:1px solid var(--line);background:#0d1a1bd9;border-radius:12px;min-width:44px;height:44px;font-size:18px}.zoom button[data-zoom=fit]{letter-spacing:.08em;font-size:12px}#panel{flex-direction:column;gap:16px;min-height:0;padding-right:4px;display:flex;overflow-y:auto}.you{color:var(--you)}.rival{color:var(--rival)}.muted{color:var(--muted)}.territory-labels{font-variant-numeric:tabular-nums;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:14px;display:flex}.territory-bar{background:var(--line);border-radius:6px;justify-content:space-between;height:12px;display:flex;overflow:hidden}.territory-bar .you{background:var(--you);transition:width .3s}.territory-bar .rival{background:var(--rival);transition:width .3s}.turn{align-items:center;gap:10px;font-size:14px;display:flex}.dot{border-radius:50%;flex:none;width:12px;height:12px}.dot.p0{background:var(--you)}.dot.p1{background:var(--rival)}.atp{align-items:baseline;gap:10px;display:flex}.atp b{font-family:var(--display);font-variant-numeric:tabular-nums;font-size:64px;line-height:1}.atp span{letter-spacing:.15em;font-size:18px}.p0 .atp span{color:var(--you)}.p1 .atp span{color:var(--rival)}.income{color:var(--muted);font-size:13px;line-height:1.6}.offers,.colonies{flex-direction:column;gap:10px;display:flex}.offer{border:1px solid var(--line);background:var(--panel);border-radius:14px;grid-template-columns:minmax(0,1fr) auto;align-items:stretch;display:grid;overflow:hidden}.offer-main{text-align:left;background:0 0;border:none;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:14px;width:100%;padding:12px 8px 12px 12px;display:grid}.offer-main:hover:not(:disabled){background:var(--panel-hi)}.offer .info{border:none;border-left:1px solid var(--line);width:40px;color:var(--muted);background:0 0;font-family:Georgia,serif;font-size:17px;font-style:italic}.offer .info:hover{color:var(--text);background:var(--panel-hi)}.offer .icon{background:var(--panel-hi);border-radius:50%;place-items:center;width:44px;height:44px;display:grid}.offer .name{font-family:var(--display);overflow-wrap:anywhere;font-size:18px;font-weight:600}.offer .sub{color:var(--muted);margin-top:2px;font-size:12px}.offer .price{text-align:right;font-variant-numeric:tabular-nums}.offer .price b{font-size:20px;font-weight:500;display:block}.offer .tier{letter-spacing:.18em;text-transform:uppercase;font-size:11px}.tier-1,.tier-2{color:var(--you)}.p1 .tier-1,.p1 .tier-2{color:var(--rival)}.tier-3{color:var(--tier3)}.tier-mut{color:var(--mutation)}.offer.sold .offer-main{opacity:.35}.offer.poor .offer-main{opacity:.55}.p0 .offer.selected{border-color:var(--you);box-shadow:0 0 0 1px var(--you) inset}.p1 .offer.selected{border-color:var(--rival);box-shadow:0 0 0 1px var(--rival) inset}.hint{border:1px dashed var(--muted);border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;font-size:13px;line-height:1.5;display:flex}.hint button{border:1px solid var(--line);background:0 0;border-radius:8px;padding:6px 10px}.hint.picker{flex-wrap:wrap}.targets{flex-wrap:wrap;flex-basis:100%;align-items:center;gap:6px;display:flex}.targets .meta{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);flex-basis:100%;margin-top:4px;font-size:11px}.hint .target{border-color:var(--phage);color:var(--phage);border-radius:999px;padding:4px 10px;font-size:12px}.side .row.phage{color:var(--phage)}.colony{border:1px solid var(--line);text-align:left;background:0 0;border-radius:12px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 12px;width:100%;padding:10px 12px;display:grid}.colony .name{font-size:14px}.colony .meta{color:var(--muted);font-size:12px}.colony.target{border-color:var(--mutation);background:var(--panel)}.colony.pending{border-style:dashed}.chips{flex-wrap:wrap;grid-column:1/-1;gap:6px;display:flex}.chip{border:1px solid var(--mutation);color:var(--mutation);border-radius:999px;padding:2px 8px;font-size:11px}.chip.new{border-style:dashed}.sell{border:1px solid var(--line);background:0 0;border-radius:8px;padding:4px 10px;font-size:12px}.sell:hover{border-color:var(--danger);color:var(--danger)}.actions{background:linear-gradient(transparent, var(--bg) 30%);grid-template-columns:1fr 1.3fr;gap:12px;margin-top:auto;padding-top:8px;display:grid;position:sticky;bottom:0}.btn{border:1px solid var(--line);background:0 0;border-radius:16px;padding:18px 16px;font-size:17px}.btn.primary{color:#04161c;font-family:var(--display);border:none;font-size:20px;font-weight:800}.p0 .btn.primary,.btn.primary.p0{background:var(--you)}.p1 .btn.primary,.btn.primary.p1{background:var(--rival);color:#1f1000}.btn:disabled{opacity:.4}.speed{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.speed button{border:1px solid var(--line);background:0 0;border-radius:10px;padding:10px}.speed button[aria-pressed=true]{background:var(--panel-hi);border-color:var(--muted)}.side{flex-direction:column;gap:8px;display:flex}.side h3{font-size:16px}.side .row{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;font-size:13px;display:flex}.overlay{z-index:20;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#040809b8;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.overlay.opaque{background:var(--bg)}.card{background:var(--panel);border:1px solid var(--line);border-radius:20px;flex-direction:column;gap:18px;width:min(440px,100%);max-height:100%;padding:28px;display:flex;overflow-y:auto}.card h2{font-size:32px}.card p{color:var(--muted);margin:0;font-size:14px;line-height:1.6}.card table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:14px}.card th,.card td{text-align:right;border-bottom:1px solid var(--line);padding:8px 0}.card th:first-child,.card td:first-child{text-align:left;color:var(--muted);font-weight:400}.card tr.total td{color:var(--text);border-bottom:none;font-size:16px;font-weight:500}.log{color:var(--muted);margin:0;padding-left:18px;font-size:13px;line-height:1.6}#panel .log{margin-top:8px}.toast{left:50%;bottom:max(24px, env(safe-area-inset-bottom));z-index:70;background:var(--panel-hi);border:1px solid var(--line);border-radius:12px;max-width:min(90vw,480px);padding:12px 18px;font-size:14px;position:fixed;transform:translate(-50%)}.toast.error{border-color:var(--danger)}.subtitle{z-index:30;left:50%;bottom:max(88px, calc(env(safe-area-inset-bottom) + 72px));-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);width:min(680px,100vw - 32px);font-family:var(--display);text-align:center;color:#d7e3e5;text-wrap:balance;pointer-events:none;opacity:0;background:#030607c7;border-radius:12px;margin:0;padding:12px 18px;font-size:16px;font-style:italic;font-weight:600;line-height:1.5;transition:opacity .6s;position:fixed;transform:translate(-50%)}.subtitle.show{opacity:1}.mbtn.small{font-size:15px;font-family:var(--mono);padding:10px 20px;font-weight:500}.menu{z-index:50;padding-block:max(24px, env(safe-area-inset-top)) max(24px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));background:radial-gradient(circle at 50% 30%,#0a1517 0%,#030607 60%);place-items:center;display:grid;position:fixed;inset:0;overflow-y:auto}.menu-inner{flex-direction:column;gap:18px;width:min(480px,100%);display:flex;position:relative}.menu-mark{align-self:center;width:min(280px,62vw);height:auto;margin-bottom:4px}.menu-lens{aspect-ratio:1;align-self:center;width:min(300px,66vw);max-width:100%;position:relative}.menu-lens>*{width:100%;height:100%;display:block;position:absolute;inset:0}.menu-quote{text-align:center;font-family:var(--display);color:#b9cdd0;align-self:center;margin:0;font-size:15px;font-style:italic;font-weight:600}.tape{color:#1b2628;clip-path:polygon(0 10%,3% 0,50% 4%,97% 0,100% 12%,98% 50%,100% 90%,96% 100%,50% 96%,3% 100%,0 88%,2% 50%);background:#e2d6ae;align-self:flex-start;margin:-4px 0 4px 6px;padding:6px 18px 4px;font-family:Caveat,cursive;font-size:26px;font-weight:700;transform:rotate(-2deg);box-shadow:0 3px 10px #00000073}.menu-title{letter-spacing:-.045em;color:#e6f1f2;font-size:clamp(48px,12vw,84px);line-height:.9}.menu-lede{color:var(--muted);max-width:42ch;margin:0;font-size:14px;line-height:1.6}.menu-buttons{flex-direction:column;gap:10px;margin-top:8px;display:flex}.mbtn{text-align:left;border:1px solid var(--line);font-family:var(--display);background:#0d1a1bd9;border-radius:16px;flex-direction:column;gap:2px;padding:16px 20px;font-size:20px;font-weight:600;display:flex}.mbtn small{font-family:var(--mono);color:var(--muted);font-size:12px;font-weight:400}.mbtn:hover{background:var(--panel-hi)}.mbtn.primary{background:var(--you);border-color:var(--you);color:#04161c;font-size:24px;font-weight:800}.mbtn.primary small{color:#0b3a48}.mbtn.danger{border-color:var(--danger);color:var(--danger)}.menu-foot{letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:8px 0 0;font-size:11px}.guide{z-index:60;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding-block:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));background:#040809bf;place-items:stretch center;display:grid;position:fixed;inset:0}.gsheet{background:var(--bg);border:1px solid var(--line);border-radius:20px;grid-template-rows:auto auto 1fr;width:min(1100px,100%);min-height:0;display:grid;overflow:hidden}.ghead{justify-content:space-between;align-items:center;padding:18px 20px 8px;display:flex}.ghead h2{font-size:28px}.gclose{border:1px solid var(--line);background:0 0;border-radius:10px;padding:8px 14px}.gtabs{border-bottom:1px solid var(--line);gap:6px;padding:0 20px 12px;display:flex;overflow-x:auto}.gtabs button{color:var(--muted);background:0 0;border:1px solid #0000;border-radius:999px;flex:none;padding:8px 14px;font-size:13px}.gtabs button[aria-selected=true]{color:var(--text);border-color:var(--line);background:var(--panel)}.gbody{min-height:0;padding:20px;overflow-y:auto}.lede{color:var(--muted);max-width:75ch;margin:0 0 16px;font-size:14px;line-height:1.6}.ggrid{grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:12px;display:grid}.gcard{background:var(--panel);border:1px solid var(--line);border-radius:16px;flex-direction:column;gap:10px;min-width:0;padding:16px;scroll-margin-top:12px;display:flex}.gcard.focus{border-color:var(--you);box-shadow:0 0 0 1px var(--you) inset}.gcard header{align-items:center;gap:14px;display:flex}.gcard .portrait{aspect-ratio:16/10;object-fit:cover;background:#050809;border-radius:10px;width:100%;height:auto;display:block}.gcard h3{font-size:19px;font-weight:600}.gcard p{margin:0;font-size:13px;line-height:1.55}.gcard .meta{color:var(--muted);margin-top:3px;font-size:12px}.gcard .meta span{white-space:nowrap}.gcard .blurb{color:var(--muted)}.gcard .todo{color:var(--mutation);font-size:12px}.gicon{background:var(--panel-hi);border-radius:50%;flex:none;place-items:center;width:56px;height:56px;display:grid}.swatch{border:1px solid var(--line);border-radius:50%;flex:none;width:36px;height:36px}.swatch.ring{background:0 0;border:2px dashed #e8f0f099}.swatch.ring.home{border-color:var(--you)}.swatch.ring.marker{border:2px solid #e2d6aeb3;border-radius:48% 52% 50% 46%}.stats{flex-direction:column;gap:4px;display:flex}.stat{color:var(--muted);grid-template-columns:80px auto 1fr;align-items:center;gap:10px;font-size:12px;display:grid}.stat .num{color:var(--text);font-variant-numeric:tabular-nums}.pips{gap:3px;display:flex}.pips i{background:var(--line);border-radius:3px;width:14px;height:6px}.pips i.on{background:var(--you)}.vs{color:var(--muted);align-items:baseline;gap:10px;font-size:12px;display:flex}.vs>span:first-child{flex:none;width:64px}.chip.good{color:#6fd39a;border-color:#6fd39a}.chip.bad{border-color:var(--danger);color:var(--danger)}.gsub{margin:24px 0 8px;font-size:20px}.scroll-x{overflow-x:auto}.matrix{border-collapse:collapse;min-width:640px;font-size:12px}.matrix th,.matrix td{border-bottom:1px solid var(--line);text-align:center;padding:8px 10px}.matrix thead th{color:var(--muted);vertical-align:bottom;font-weight:400}.matrix tbody th{text-align:left;white-space:nowrap;font-weight:500}.matrix .up{color:#6fd39a}.matrix .down{color:var(--danger)}.matrix .eq{color:var(--muted)}.rules{grid-template-columns:repeat(auto-fill,minmax(min(420px,100%),1fr));gap:12px;display:grid}.rule{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px}.rule h3{margin-bottom:8px;font-size:19px;font-weight:600}.rule p,.rule li{color:#c9d3d5;font-size:13px;line-height:1.6}.rule p{margin:0 0 8px}.rule ul,.rule ol{flex-direction:column;gap:6px;margin:0;padding-left:18px;display:flex}@media (width<=820px){body{overflow:auto}#app{height:auto;min-height:100%}.board{grid-template-rows:min(92vw,60vh) auto;grid-template-columns:1fr}#panel{padding-right:0;overflow:visible}.atp b{font-size:52px}.hud-right{flex-direction:column-reverse;align-items:flex-end;gap:6px}.hud-actions button{padding:6px 10px;font-size:12px}.guide{padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px)}.gsheet{border:none;border-radius:0}}@media (prefers-reduced-motion:reduce){.territory-bar .you,.territory-bar .rival{transition:none}}.lobby{text-align:left;flex-direction:column;gap:10px;margin-top:8px;display:flex}.lobby p{color:var(--muted);margin:0;font-size:14px;line-height:1.5}.lobby-label{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:6px;font-size:12px}.lobby-input{font:inherit;color:var(--text);background:var(--panel);border:1px solid var(--line);border-radius:12px;width:100%;min-height:48px;padding:12px 14px;font-size:18px}.lobby-input:focus-visible{outline:2px solid var(--you);outline-offset:2px}.lobby-input.code{font-family:var(--mono);letter-spacing:.4em;text-transform:uppercase;font-size:22px}.lobby-row{gap:10px;display:flex}.lobby-row .lobby-input{flex:1;min-width:0}.lobby-row .mbtn{flex:none}.lobby-status{min-height:1.5em}.lobby-status.error{color:var(--danger)!important}.room-code{font-family:var(--mono);letter-spacing:.25em;color:var(--text);text-align:center;padding:8px 0 4px;font-size:clamp(44px,14vw,72px);font-weight:700}
