:root{--bg: #0b1020;--bg-2: #111a2e;--panel: rgba(17, 26, 46, .78);--panel-solid: #131d33;--panel-border: rgba(255, 255, 255, .08);--text: #e8edf7;--muted: #98a4bd;--accent: #f5b942;--accent-2: #4cc9f0;--danger: #ef4444;--ok: #22c55e;--radius: 14px;--shadow: 0 10px 30px rgba(0, 0, 0, .35);--font: "Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--wood: #2f7a55;--brick: #d0603a;--sheep: #9ccf62;--wheat: #e9be3f;--ore: #8895a7;--desert: #dcc890}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:15px;color:var(--text);background:radial-gradient(1200px 600px at 10% -10%,rgba(76,201,240,.12),transparent 60%),radial-gradient(900px 500px at 100% 100%,rgba(245,185,66,.1),transparent 60%),var(--bg);-webkit-font-smoothing:antialiased;overflow-x:hidden}button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer;border:0;background:none;padding:0}button:disabled{cursor:not-allowed;opacity:.45}input{font-family:inherit;font-size:inherit}a{color:var(--accent-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:12px;font-weight:700;background:#ffffff14;border:1px solid var(--panel-border);transition:transform .08s ease,background .15s ease,box-shadow .15s ease;white-space:nowrap}.btn:hover:not(:disabled){background:#ffffff24}.btn:active:not(:disabled){transform:translateY(1px)}.btn.primary{background:linear-gradient(135deg,#f7c85c,#e9a52a);color:#1b1405;border-color:transparent;box-shadow:0 6px 18px #f5b94259}.btn.primary:hover:not(:disabled){background:linear-gradient(135deg,#ffd66e,#f0ad33)}.btn.accent{background:linear-gradient(135deg,#5ad2f5,#2aa8d6);color:#05202b;border-color:transparent}.btn.danger{background:#ef444429;border-color:#ef444466;color:#fecaca}.btn.sm{padding:6px 10px;border-radius:9px;font-size:13px}.btn.ghost{background:transparent}.btn.active{outline:2px solid var(--accent);outline-offset:1px}.panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow)}.panel-title{font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:700;margin:0 0 8px}.input{width:100%;padding:12px 14px;border-radius:12px;background:#ffffff0f;border:1px solid var(--panel-border);color:var(--text);outline:none;transition:border-color .15s}.input:focus{border-color:var(--accent-2)}.input.code{text-transform:uppercase;letter-spacing:.3em;font-weight:800;text-align:center;font-size:20px}.muted{color:var(--muted)}.error{color:#fca5a5;font-size:13px}.home{min-height:100%;display:grid;place-items:center;padding:24px}.home-card{width:min(460px,100%);padding:28px;display:flex;flex-direction:column;gap:16px}.logo{display:flex;align-items:center;gap:12px;margin-bottom:4px}.logo h1{margin:0;font-size:30px;font-weight:800;letter-spacing:-.02em}.logo .tag{color:var(--muted);font-size:13px}.divider{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.1em}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--panel-border)}.row{display:flex;gap:10px;align-items:center}.row>.input{flex:1}.lobby{min-height:100%;display:grid;place-items:center;padding:24px}.lobby-card{width:min(560px,100%);padding:28px;display:flex;flex-direction:column;gap:18px}.code-box{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-radius:12px;background:#ffffff0d;border:1px dashed var(--panel-border)}.code-box .code{font-size:34px;font-weight:800;letter-spacing:.25em;color:var(--accent)}.seat-list{display:flex;flex-direction:column;gap:8px}.seat{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;background:#ffffff0a;border:1px solid var(--panel-border)}.seat .name{flex:1;font-weight:700}.dot{width:14px;height:14px;border-radius:50%;box-shadow:0 0 0 3px #ffffff14;flex-shrink:0}.dot.off{opacity:.35}.swatches{display:flex;gap:8px}.swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;transition:transform .1s}.swatch:hover:not(:disabled){transform:scale(1.12)}.swatch.selected{border-color:#fff}.swatch:disabled{opacity:.25}.game{height:100%;display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"top side" "board side" "hand side";gap:12px;padding:12px}.topbar{grid-area:top;position:relative;z-index:20;display:flex;align-items:center;gap:14px;padding:10px 16px}.topbar .status{flex:1;font-weight:700;display:flex;align-items:center;gap:10px;min-width:0}.topbar .status .who{padding:4px 10px;border-radius:999px;color:#0b1020;font-weight:800;font-size:13px;white-space:nowrap;flex-shrink:0}.topbar .status .txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.topbar .meta{font-size:12px;white-space:nowrap}.board-wrap{grid-area:board;position:relative;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}.board-wrap svg{width:100%;height:100%;max-height:100%}.side{grid-area:side;display:flex;flex-direction:column;gap:12px;min-height:0}.hand{grid-area:hand;padding:12px 16px;display:flex;flex-direction:column;gap:10px}.players{padding:12px;display:flex;flex-direction:column;gap:8px}.player{display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:"dot name pts" "dot meta pts";column-gap:10px;padding:8px 10px;border-radius:12px;border:1px solid transparent;background:#ffffff08;transition:border-color .2s}.player.current{border-color:var(--accent);background:#f5b94214}.player .dot{grid-area:dot;align-self:center}.player .name{grid-area:name;font-weight:700;display:flex;gap:6px;align-items:center}.player .meta{grid-area:meta;color:var(--muted);font-size:12px;display:flex;gap:10px;flex-wrap:wrap}.player .pts{grid-area:pts;font-size:22px;font-weight:800;align-self:center}.badge{font-size:11px;padding:2px 7px;border-radius:999px;background:#ffffff14;font-weight:700}.badge.gold{background:#f5b94233;color:var(--accent)}.logchat{flex:1;min-height:160px;display:flex;flex-direction:column;padding:12px}.tabs{display:flex;gap:6px;margin-bottom:8px}.tab{padding:6px 12px;border-radius:999px;font-size:13px;font-weight:700;color:var(--muted)}.tab.active{background:#ffffff1a;color:var(--text)}.log-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:4px;font-size:13px;scrollbar-width:thin}.log-item{padding:4px 8px;border-radius:8px;border-left:3px solid transparent;background:#ffffff05;line-height:1.35}.log-item.roll,.chat-msg .n{font-weight:700}.chat-form{display:flex;gap:8px;margin-top:8px}.chat-form .input{padding:8px 12px}.hand-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.cards{display:flex;gap:8px;flex-wrap:wrap}.card{position:relative;width:62px;height:78px;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:26px;border:1px solid rgba(0,0,0,.25);box-shadow:inset 0 1px #ffffff40,0 4px 10px #0000004d;color:#0b1020;transition:transform .1s}.card.zero{opacity:.35;filter:saturate(.4)}.card .cnt{position:absolute;top:-8px;right:-8px;min-width:24px;height:24px;border-radius:999px;background:#0b1020;color:#fff;font-size:13px;font-weight:800;display:grid;place-items:center;border:2px solid rgba(255,255,255,.2);padding:0 6px}.card .lbl{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;opacity:.75}.card.wood{background:linear-gradient(160deg,#3f9a6c,#23664a)}.card.brick{background:linear-gradient(160deg,#e6774f,#b3492a)}.card.sheep{background:linear-gradient(160deg,#b7e37e,#7fb64a)}.card.wheat{background:linear-gradient(160deg,#f4cf5f,#d3a52a)}.card.ore{background:linear-gradient(160deg,#a7b3c4,#6f7d92)}.card.dev{background:linear-gradient(160deg,#6d5bd0,#3f2f8f);color:#fff;width:auto;min-width:96px;padding:0 10px;font-size:22px}.card.dev .lbl{opacity:.9;text-transform:none;letter-spacing:0;font-size:11px;text-align:center}.card.dev.new{filter:grayscale(.5) brightness(.8)}.card.dev.playable{cursor:pointer}.card.dev.playable:hover{transform:translateY(-3px)}.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.actions .spacer{flex:1}.cost{display:inline-flex;gap:2px;margin-left:4px}.cost i{display:inline-block;width:10px;height:10px;border-radius:3px}.cost i.wood{background:var(--wood)}.cost i.brick{background:var(--brick)}.cost i.sheep{background:var(--sheep)}.cost i.wheat{background:var(--wheat)}.cost i.ore{background:var(--ore)}.dice{display:flex;gap:6px}.die{width:34px;height:34px;border-radius:8px;background:#fff;color:#0b1020;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:5px;gap:2px;box-shadow:0 4px 10px #0006;animation:roll .5s ease}.die i{border-radius:50%;background:#0b1020;visibility:hidden}.die i.on{visibility:visible}@keyframes roll{0%{transform:rotate(-180deg) scale(.4);opacity:0}70%{transform:rotate(15deg) scale(1.1);opacity:1}to{transform:rotate(0) scale(1)}}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#03060ea8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:grid;place-items:center;z-index:50;padding:16px}.modal{width:min(520px,100%);padding:22px;display:flex;flex-direction:column;gap:14px;background:var(--panel-solid);animation:pop .18s ease}.modal h3{margin:0;font-size:20px}@keyframes pop{0%{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}.picker{display:flex;gap:8px;flex-wrap:wrap}.pick{display:flex;flex-direction:column;align-items:center;gap:4px}.pick .ctrl{display:flex;align-items:center;gap:6px}.pick .ctrl button{width:26px;height:26px;border-radius:8px;background:#ffffff1a;font-weight:800}.trade-banner{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:40;padding:14px 18px;display:flex;align-items:center;gap:14px;background:var(--panel-solid);animation:pop .18s ease;max-width:calc(100% - 32px);flex-wrap:wrap}.bundle{display:inline-flex;gap:4px;align-items:center}.chip{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:999px;font-size:13px;font-weight:800;color:#0b1020}.chip.wood{background:var(--wood);color:#fff}.chip.brick{background:var(--brick);color:#fff}.chip.sheep{background:var(--sheep)}.chip.wheat{background:var(--wheat)}.chip.ore{background:var(--ore)}.toast{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:60;padding:10px 16px;border-radius:12px;background:#ef4444eb;color:#fff;font-weight:700;box-shadow:var(--shadow);animation:pop .18s ease}.winner{text-align:center}.winner .big{font-size:40px;margin:6px 0}.hint{font-size:13px;color:var(--muted)}.hex{transition:filter .15s}.hex.clickable{cursor:pointer}.hex.clickable:hover{filter:brightness(1.2)}.spot{cursor:pointer;opacity:.55;transition:opacity .12s,transform .12s}.spot:hover{opacity:1}.building.clickable,.steal-target{cursor:pointer}@keyframes pulse{0%,to{opacity:.45}50%{opacity:.95}}.pulse{animation:pulse 1.2s ease-in-out infinite}@media(max-width:1000px){.game{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto auto;grid-template-areas:"top" "board" "hand" "side";height:auto}.board-wrap{min-height:62vw;max-height:70vh}.board-wrap svg{height:auto}.logchat{min-height:240px;max-height:340px}}@media(max-width:560px){body{font-size:14px}.card{width:52px;height:66px;font-size:22px}.topbar{flex-wrap:wrap;gap:8px}.topbar .status{flex-basis:100%}.topbar .status .txt{white-space:normal}.topbar .meta{flex:1}.actions .btn{padding:8px 12px;font-size:13px}.actions .spacer{display:none}.actions .btn.accent{flex-basis:100%}}.board{overflow:visible}.waves{animation:drift 9s linear infinite}.waves.slow{animation-duration:14s;animation-direction:reverse}@keyframes drift{0%{transform:translate(0)}to{transform:translate(80px)}}.anim-grow{transform-box:fill-box;transform-origin:center;animation:grow .45s cubic-bezier(.34,1.56,.64,1) both}@keyframes grow{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.anim-drop{transform-box:fill-box;transform-origin:center bottom;animation:drop .55s cubic-bezier(.34,1.56,.64,1) both}@keyframes drop{0%{transform:translateY(-26px) scale(.4);opacity:0}60%{transform:translateY(3px) scale(1.08);opacity:1}to{transform:translateY(0) scale(1)}}.robber{transition:transform .7s cubic-bezier(.22,1,.36,1);pointer-events:none}.robber use{animation:bob 2.4s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-2px)}}.hot-ring{transform-box:fill-box;transform-origin:center;animation:hotring 1.1s ease-out 2}@keyframes hotring{0%{transform:scale(.6);opacity:1}to{transform:scale(1.6);opacity:0}}.token.hot circle:nth-child(2){fill:#fff2c9}.hex .token{transition:filter .2s}.port{transition:opacity .2s}.card{overflow:visible}.card.bump{animation:bump .5s cubic-bezier(.34,1.56,.64,1)}@keyframes bump{0%{transform:scale(1)}40%{transform:scale(1.14) translateY(-4px)}to{transform:scale(1)}}.float-gain{position:absolute;left:50%;top:-4px;transform:translate(-50%);font-size:16px;font-weight:800;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6);pointer-events:none;animation:floatup 1.4s ease-out forwards}.float-gain.neg{color:#fecaca}@keyframes floatup{0%{opacity:0;transform:translate(-50%,6px)}15%{opacity:1}to{opacity:0;transform:translate(-50%,-34px)}}.die.tumbling{animation:tumble .12s linear infinite}@keyframes tumble{0%{transform:rotate(-8deg) scale(1.05)}50%{transform:rotate(8deg) scale(.95)}to{transform:rotate(-8deg) scale(1.05)}}.player.current{animation:glowborder 2.2s ease-in-out infinite}@keyframes glowborder{0%,to{box-shadow:0 0 #f5b94200}50%{box-shadow:0 0 14px #f5b94259}}.panel{animation:fadein .35s ease both}@keyframes fadein{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.chip svg,.card>svg{display:block}.card .art{width:44px;height:44px;filter:drop-shadow(0 2px 2px rgba(0,0,0,.35))}.pick .chip{padding:4px 8px}.fx-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:70;overflow:hidden}.fx-fly{position:absolute;left:0;top:0;margin:-20px 0 0 -20px;will-change:transform,opacity}.fx-chip{display:grid;place-items:center;width:40px;height:40px;border-radius:12px;box-shadow:0 6px 16px #00000073,inset 0 1px #ffffff59;border:1px solid rgba(0,0,0,.3)}.fx-chip.wood{background:linear-gradient(160deg,#3f9a6c,#23664a)}.fx-chip.brick{background:linear-gradient(160deg,#e6774f,#b3492a)}.fx-chip.sheep{background:linear-gradient(160deg,#b7e37e,#7fb64a)}.fx-chip.wheat{background:linear-gradient(160deg,#f4cf5f,#d3a52a)}.fx-chip.ore{background:linear-gradient(160deg,#a7b3c4,#6f7d92)}.fx-cardback{display:block;width:34px;height:46px;border-radius:7px;background:repeating-linear-gradient(45deg,rgba(255,255,255,.08) 0 4px,transparent 4px 8px),linear-gradient(160deg,#6d5bd0,#3f2f8f);border:2px solid #d9c58f;box-shadow:0 6px 16px #00000073}.confetti{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:55}.score-row{animation:pop .35s ease both}.score-row .score{font-size:20px;min-width:32px;text-align:right}.dice3d{position:absolute;transform:translate(-50%,-50%);display:flex;gap:22px;perspective:600px;pointer-events:none}.die3d-wrap{position:relative;width:44px;height:44px;transform-style:preserve-3d}.die3d-shadow{position:absolute;left:2px;top:34px;width:44px;height:16px;border-radius:50%;background:#00000073;filter:blur(4px)}.die3d{position:absolute;top:0;right:0;bottom:0;left:0;transform-style:preserve-3d}.die3d .face{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(160deg,#fff,#e9edf3);border-radius:8px;border:1px solid rgba(0,0,0,.18);display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:6px;gap:2px;backface-visibility:hidden}.die3d .face i{border-radius:50%;background:#0b1020;visibility:hidden}.die3d .face i.on{visibility:visible}.die3d .front{transform:translateZ(22px)}.die3d .back{transform:rotateY(180deg) translateZ(22px)}.die3d .right{transform:rotateY(90deg) translateZ(22px)}.die3d .left{transform:rotateY(-90deg) translateZ(22px)}.die3d .top{transform:rotateX(90deg) translateZ(22px)}.die3d .bottom{transform:rotateX(-90deg) translateZ(22px)}.robber-jump{transform-box:fill-box;transform-origin:center bottom;animation:hop .7s cubic-bezier(.3,0,.4,1) both}@keyframes hop{0%{transform:translateY(0) scale(1)}15%{transform:translateY(2px) scale(1.15,.85)}50%{transform:translateY(-48px) scale(.92,1.12)}85%{transform:translateY(0) scale(1)}92%{transform:translateY(2px) scale(1.12,.88)}to{transform:translateY(0) scale(1)}}.dust circle{transform-box:fill-box;transform-origin:center;opacity:0;animation:dust .6s ease-out both}@keyframes dust{0%{opacity:0;transform:scale(.3) translateY(0)}20%{opacity:.9}to{opacity:0;transform:scale(2.2) translateY(-10px)}}.winner-blink{animation:sparkle .9s ease-in-out infinite}@keyframes sparkle{0%,to{filter:brightness(1) drop-shadow(0 0 0 rgba(255,214,110,0))}50%{filter:brightness(1.7) drop-shadow(0 0 8px rgba(255,214,110,.9))}}.sway{transform-box:fill-box;transform-origin:50% 100%;animation:sway 3.2s ease-in-out infinite}.sway.soft{animation-duration:5s}@keyframes sway{0%,to{rotate:-2.5deg}50%{rotate:2.5deg}}.graze{animation:graze 6s ease-in-out infinite}@keyframes graze{0%,70%,to{translate:0 0}75%{translate:0 -1.5px}80%{translate:0 0}85%{translate:0 -1.5px}90%{translate:0 0}}.twinkle{animation:twinkle 2.8s ease-in-out infinite}@keyframes twinkle{0%,to{opacity:.35}50%{opacity:1}}.smoke circle{transform-box:fill-box;transform-origin:center;opacity:0;animation:smoke 3.3s linear infinite}@keyframes smoke{0%{opacity:0;transform:translate(0) scale(.5)}15%{opacity:.55}to{opacity:0;transform:translate(4px,-22px) scale(1.8)}}.gull{animation:gull 42s linear infinite;animation-delay:6s;opacity:0}@keyframes gull{0%{opacity:0;translate:0 0}1%{opacity:.9}14%{opacity:.9;translate:110% 22px}15%,to{opacity:0;translate:110% 22px}}.gull-wings{transform-box:fill-box;transform-origin:center;animation:flap .5s ease-in-out infinite alternate}@keyframes flap{0%{transform:scaleY(1)}to{transform:scaleY(.25)}}.sweep{animation:sweep 1.3s cubic-bezier(.4,0,.2,1) both}@keyframes sweep{0%{transform:translate(0)}to{transform:translate(var(--sweep))}}.turn-tint{animation:tint 1.4s ease-out both}@keyframes tint{0%{opacity:0}25%{opacity:.18}to{opacity:0}}.turn-glow{animation:turnglow .5s ease-in-out 3}@keyframes turnglow{0%,to{filter:brightness(1)}50%{filter:brightness(1.8) drop-shadow(0 0 6px #fff)}}.flip-in{animation:flipin .7s cubic-bezier(.2,.7,.2,1) both;transform-style:preserve-3d}@keyframes flipin{0%{transform:perspective(500px) rotateY(180deg) translateY(-10px);opacity:0}40%{opacity:1}to{transform:perspective(500px) rotateY(0) translateY(0)}}.fx-devcard{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:78px;height:100px;border-radius:10px;background:linear-gradient(160deg,#6d5bd0,#3f2f8f);color:#fff;font-size:30px;border:2px solid #d9c58f;box-shadow:0 12px 30px #00000080;margin:-30px 0 0 -20px}.fx-devcard small{font-size:10px;font-weight:800;text-align:center;line-height:1.1;padding:0 4px}.pts-pop{display:inline-block;animation:ptspop .5s cubic-bezier(.34,1.56,.64,1)}@keyframes ptspop{0%{transform:scale(1.6);color:var(--accent)}to{transform:scale(1)}}.tab.blink{animation:tabblink 1s ease-in-out infinite}@keyframes tabblink{0%,to{color:var(--muted)}50%{color:var(--accent)}}@media(prefers-reduced-motion:reduce){.sway,.graze,.twinkle,.smoke circle,.gull,.waves,.robber use{animation:none}}.avatar{display:inline-grid;place-items:center;border-radius:50%;border:3px solid transparent;overflow:hidden;flex-shrink:0;box-shadow:0 3px 8px #00000059}.avatar svg{display:block;width:88%;height:88%}.seat.off .avatar,.player.off .avatar{filter:grayscale(.8);opacity:.55}.avatar-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.avatar-pick{display:grid;place-items:center;padding:4px;border-radius:14px;background:#ffffff0a;border:1px solid var(--panel-border);transition:transform .12s,background .15s}.avatar-pick:hover:not(:disabled){transform:translateY(-2px) scale(1.05);background:#ffffff1a}.avatar-pick.selected{background:#f5b94226;border-color:var(--accent)}.avatar-pick:disabled{opacity:.3}.player{grid-template-columns:auto 1fr auto;column-gap:12px}.player .av-wrap{grid-area:dot;align-self:center;display:inline-block}.player .av-wrap.got{animation:avgot .6s cubic-bezier(.34,1.56,.64,1)}@keyframes avgot{0%{transform:scale(1)}40%{transform:scale(1.22) rotate(-6deg)}to{transform:scale(1)}}@media(max-width:560px){.avatar-grid{grid-template-columns:repeat(4,1fr)}}.die-flat{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .25s ease;pointer-events:none}.die-flat .face{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(160deg,#fff,#e9edf3);border-radius:9px;border:1px solid rgba(0,0,0,.18);box-shadow:0 4px 10px #00000073,inset 0 -3px #00000014;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:6px;gap:2px}.die-flat .face i{border-radius:50%;background:#0b1020;visibility:hidden}.die-flat .face i.on{visibility:visible}.die3d-wrap.flat .die-flat{opacity:1}.die3d-wrap.flat .die3d{opacity:0;transition:opacity .25s ease}.die3d-wrap.flat .die3d-shadow{opacity:.6}.cost{display:inline-flex;gap:3px;margin-left:6px;align-items:center}.cost i{display:none}.mini-card{display:inline-grid;place-items:center;border-radius:4px;border:1px solid rgba(0,0,0,.35);box-shadow:inset 0 1px #ffffff4d,0 1px 2px #00000059;flex-shrink:0}.mini-card svg{display:block}.mini-card.wood{background:linear-gradient(160deg,#3f9a6c,#23664a)}.mini-card.brick{background:linear-gradient(160deg,#e6774f,#b3492a)}.mini-card.sheep{background:linear-gradient(160deg,#b7e37e,#7fb64a)}.mini-card.wheat{background:linear-gradient(160deg,#f4cf5f,#d3a52a)}.mini-card.ore{background:linear-gradient(160deg,#a7b3c4,#6f7d92)}.btn:disabled .mini-card{filter:saturate(.5)}.pict{width:18px;height:18px;display:inline-block;vertical-align:-4px}.player .meta{gap:12px;font-size:13px;color:var(--text)}.player .meta .stat{display:inline-flex;align-items:center;gap:4px;font-weight:700}.legend{display:flex;flex-wrap:wrap;gap:6px 12px;padding:6px 4px 0;font-size:11px;color:var(--muted);border-top:1px solid var(--panel-border);margin-top:4px}.legend span{display:inline-flex;align-items:center;gap:4px}.legend .pict{width:14px;height:14px;vertical-align:-3px}.react-bar{position:relative}.react-toggle{font-size:16px;padding:4px 8px}.react-list{position:absolute;right:0;top:calc(100% + 8px);display:grid;grid-template-columns:repeat(7,1fr);gap:4px;padding:8px;background:var(--panel-solid);border:1px solid var(--panel-border);border-radius:14px;box-shadow:var(--shadow);z-index:30;transform-origin:top right;transform:scale(.8);opacity:0;pointer-events:none;transition:transform .15s cubic-bezier(.34,1.56,.64,1),opacity .15s}.react-bar.open .react-list{transform:scale(1);opacity:1;pointer-events:auto}.react-btn{width:36px;height:36px;border-radius:10px;font-size:20px;display:grid;place-items:center;transition:transform .1s,background .15s}.react-btn:hover{background:#ffffff1a;transform:scale(1.25)}.react-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:65;overflow:hidden}.react-burst{position:absolute;width:0;height:0}.react-main{position:absolute;left:0;top:0;font-size:40px;line-height:1;transform:translate(-50%,-50%);animation:reactmain 2.4s cubic-bezier(.2,.8,.2,1) both;filter:drop-shadow(0 4px 10px rgba(0,0,0,.5))}@keyframes reactmain{0%{transform:translate(-50%,-50%) scale(.2) rotate(-20deg);opacity:0}15%{transform:translate(-50%,-80%) scale(1.5) rotate(8deg);opacity:1}30%{transform:translate(-50%,-80%) scale(1.2) rotate(-4deg)}80%{transform:translate(-50%,-110%) scale(1.2) rotate(0);opacity:1}to{transform:translate(-50%,-160%) scale(.8);opacity:0}}.react-part{position:absolute;left:0;top:0;font-size:22px;line-height:1;opacity:0;animation:reactpart 1.6s ease-out both}@keyframes reactpart{0%{transform:translate(-50%,-50%) scale(.3);opacity:0}20%{opacity:1}to{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(var(--s)) rotate(var(--rot));opacity:0}}.avatar.react-wobble{animation:wobble .7s ease-in-out}@keyframes wobble{0%,to{transform:rotate(0)}20%{transform:rotate(-12deg) scale(1.1)}40%{transform:rotate(10deg) scale(1.1)}60%{transform:rotate(-6deg)}80%{transform:rotate(4deg)}}@media(max-width:560px){.react-list{grid-template-columns:repeat(5,1fr)}}.modal.rules{width:min(760px,100%);max-height:calc(100vh - 32px);overflow-y:auto;gap:18px;scrollbar-width:thin}.rules-head{display:flex;align-items:center;justify-content:space-between;position:sticky;top:-22px;margin:-22px -22px 0;padding:18px 22px 10px;background:var(--panel-solid);z-index:2}.rules-head h3{font-size:24px}.rules section{display:flex;flex-direction:column;gap:8px}.rules h4{margin:0;font-size:17px}.rules p{margin:0;line-height:1.5}.rules ol{margin:0;padding-left:20px;line-height:1.5}.rules .hint{line-height:1.45}.ill-row{display:flex;flex-wrap:wrap;gap:10px}.ill{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 10px;border-radius:12px;background:#ffffff0a;border:1px solid var(--panel-border);font-size:12px;color:var(--muted);text-align:center;min-width:96px}.ill b{color:var(--accent)}.ill .pict{width:36px;height:36px}.ill-hex{width:84px;height:84px}.ill-die{display:inline-grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:2px;padding:5px;border-radius:7px;background:#fff;box-shadow:0 3px 8px #0006;margin-right:4px}.ill-die i{border-radius:50%;background:#0b1020;visibility:hidden}.ill-die i.on{visibility:visible}.steps{list-style:none;padding:0!important;display:flex;flex-direction:column;gap:8px}.steps li{display:grid;grid-template-columns:76px 1fr;gap:12px;align-items:center;padding:8px 10px;border-radius:12px;background:#ffffff0a}.step-ill{display:flex;align-items:center;justify-content:center;font-size:28px}.price-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}.price{display:grid;grid-template-columns:64px 1fr;gap:10px;align-items:center;padding:10px;border-radius:12px;background:#ffffff0a;border:1px solid var(--panel-border)}.price>svg,.price>.ill-devcard{justify-self:center}.price>div{display:flex;flex-direction:column;gap:4px}.price .cost{margin:0}.price small{color:var(--muted);line-height:1.4}.ill-devcard{font-size:40px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}.two-col p{margin-bottom:8px}.port-ill{display:inline-flex;flex-direction:column;align-items:center;gap:2px;width:58px;height:58px;border-radius:50%;background:#f6ead0;border:2px solid #8a6f3a;color:#3b2f14;justify-content:center;font-size:12px}.dev-list{display:flex;flex-direction:column;gap:6px}.dev-list>div{display:grid;grid-template-columns:36px 1fr;gap:8px;align-items:start;line-height:1.45}.dev-list>div>span{font-size:24px;text-align:center}@media(max-width:640px){.price-list,.two-col{grid-template-columns:1fr}}.react-list{width:300px}.phrase-list{grid-column:1 / -1;display:flex;flex-direction:column;gap:3px;max-height:320px;overflow-y:auto;scrollbar-width:thin}.phrase{text-align:left;padding:7px 10px;border-radius:9px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px;transition:background .12s}.phrase:hover:not(:disabled){background:#ffffff1a}.phrase .dot{width:10px;height:10px}.phrase-msg{font-style:italic}.speech{position:absolute;max-width:240px;padding:10px 14px;border-radius:16px;border:2px solid var(--accent);background:#fff;color:#0b1020;font-weight:700;font-size:14px;line-height:1.3;box-shadow:0 10px 30px #00000073;transform:translate(-100%,-50%) translate(-34px);animation:speech 4.2s cubic-bezier(.34,1.56,.64,1) both;transform-origin:right center}.speech:after{content:"";position:absolute;right:-10px;top:50%;width:14px;height:14px;background:#fff;border-right:2px solid;border-top:2px solid;border-color:inherit;transform:translateY(-50%) rotate(45deg)}@keyframes speech{0%{opacity:0;transform:translate(-100%,-50%) translate(-34px) scale(.5)}6%{opacity:1;transform:translate(-100%,-50%) translate(-34px) scale(1.05)}10%{transform:translate(-100%,-50%) translate(-34px) scale(1)}88%{opacity:1;transform:translate(-100%,-50%) translate(-34px) scale(1)}to{opacity:0;transform:translate(-100%,-50%) translate(-34px) scale(.8)}}@media(max-width:1000px){.speech{transform:translate(-18px,-100%) translateY(-34px);transform-origin:left bottom;animation-name:speech-m}.speech:after{right:auto;left:12px;top:auto;bottom:-10px;transform:rotate(135deg)}@keyframes speech-m{0%{opacity:0;transform:translate(-18px,-100%) translateY(-34px) scale(.5)}6%{opacity:1;transform:translate(-18px,-100%) translateY(-34px) scale(1.05)}10%,88%{opacity:1;transform:translate(-18px,-100%) translateY(-34px) scale(1)}to{opacity:0;transform:translate(-18px,-100%) translateY(-34px) scale(.8)}}}.mention{padding:0 4px;border-radius:5px;background:#ffffff1f}.speech .mention{background:#00000014}.ship{transition:transform 1.5s cubic-bezier(.3,.1,.3,1);pointer-events:none}.ship-bob{transform-box:fill-box;transform-origin:center;animation:shipbob 2.2s ease-in-out infinite}@keyframes shipbob{0%,to{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-3px) rotate(2deg)}}.bank-pop{transform-box:fill-box;transform-origin:center;animation:bankpop .5s cubic-bezier(.34,1.56,.64,1)}@keyframes bankpop{0%{transform:scale(1.6)}to{transform:scale(1)}}.bank-stack{transition:opacity .4s}.station{transition:opacity .3s}.station.off{opacity:.45;filter:grayscale(.7)}.station-halo{transform-box:fill-box;transform-origin:center;animation:halo 1.8s ease-in-out infinite}@keyframes halo{0%,to{transform:scale(.9);opacity:.35}50%{transform:scale(1.15);opacity:.7}}.station.current .station-ring{stroke-width:5;filter:drop-shadow(0 0 6px rgba(255,255,255,.6))}.station-text{animation:pop .3s ease both}.btn.avail{border-color:#f5b94299;box-shadow:0 0 #f5b94259;animation:availglow 2s ease-in-out infinite}@keyframes availglow{0%,to{box-shadow:0 0 #f5b94200}50%{box-shadow:0 0 12px #f5b94273}}.speech.to-right{transform:translateY(-50%) translate(40px);transform-origin:left center;animation-name:speech-r}.speech.to-right:after{right:auto;left:-10px;transform:translateY(-50%) rotate(-135deg)}@keyframes speech-r{0%{opacity:0;transform:translateY(-50%) translate(40px) scale(.5)}6%{opacity:1;transform:translateY(-50%) translate(40px) scale(1.05)}10%,88%{opacity:1;transform:translateY(-50%) translate(40px) scale(1)}to{opacity:0;transform:translateY(-50%) translate(40px) scale(.8)}}.card.dev .new-tag{font-size:9px;opacity:.7;text-transform:none}.card.dev{min-width:104px;height:92px;gap:1px}.card.dev svg{filter:drop-shadow(0 2px 2px rgba(0,0,0,.35))}.marching{animation:march .9s linear infinite}@keyframes march{to{stroke-dashoffset:-14}}.spot-ring{transform-box:fill-box;transform-origin:center;animation:spotring 1.6s ease-out infinite}@keyframes spotring{0%{transform:scale(.85);opacity:1}to{transform:scale(1.5);opacity:0}}.pulse-strong{animation:pulsestrong 1.2s ease-in-out infinite}@keyframes pulsestrong{0%,to{opacity:.7}50%{opacity:1}}.spot:hover .spot-ring{animation:none;opacity:1;transform:scale(1.1)}.dim{animation:dimin .3s ease both}@keyframes dimin{0%{fill-opacity:0}to{fill-opacity:.42}}.spot{opacity:1}.spot:hover{opacity:1;filter:brightness(1.2)}.demo-bar{position:fixed;left:50%;top:8px;transform:translate(-50%);z-index:80;display:flex;align-items:center;gap:12px;padding:8px 12px 8px 16px;border-radius:14px;background:#131d33f2;border:1px solid var(--accent);box-shadow:var(--shadow);max-width:calc(100% - 24px)}.demo-title{font-weight:800;font-size:14px;color:var(--accent);max-width:520px}.demo-actions{display:flex;gap:6px;align-items:center}.demo-steps{position:relative}.demo-steps summary{list-style:none;cursor:pointer}.demo-step-list{position:absolute;right:0;top:calc(100% + 6px);width:420px;max-height:60vh;overflow-y:auto;display:flex;flex-direction:column;gap:2px;padding:8px;background:var(--panel-solid);border:1px solid var(--panel-border);border-radius:12px;box-shadow:var(--shadow)}.admin-box{display:flex;justify-content:center}
