:root{--bg: #0a0a0a;--panel: rgba(23, 23, 23, .94);--panel-border: #333;--ink: #ececec;--ink-dim: #8f8f8f;--accent: #d4a843;--accent-soft: rgba(212, 168, 67, .35);--danger: #c4453d;--ok: #62a052;--warn: #cf8b2e;--radius: 10px;--shadow: 0 6px 24px rgba(0, 0, 0, .55);font-size:15px}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;height:100dvh;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--ink);font-family:Iowan Old Style,Palatino Linotype,Palatino,Georgia,serif}button{font:inherit;color:var(--ink);background:#232323;border:1px solid var(--panel-border);border-radius:6px;padding:5px 12px;cursor:pointer}button:hover{border-color:var(--accent)}button:disabled{opacity:.45;cursor:default}button.primary{background:#3a2f10;border-color:var(--accent)}button.danger{border-color:var(--danger)}button.small{padding:2px 8px;font-size:12px}input,textarea,select{font:inherit;color:var(--ink);background:#161616;border:1px solid var(--panel-border);border-radius:6px;padding:6px 10px}input:focus,textarea:focus{outline:1px solid var(--accent)}.lobby{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;background:radial-gradient(ellipse at 50% -20%,rgba(212,168,67,.15),transparent 60%),var(--bg)}.lobby h1{margin:0;filter:drop-shadow(0 2px 14px rgba(212,168,67,.3))}.lobby .tagline{color:var(--ink-dim);margin-top:-12px}.lobby .card{background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px 26px;width:min(480px,92vw);display:flex;flex-direction:column;gap:12px}.lobby .row{display:flex;gap:10px;align-items:center}.lobby .row input{flex:1}.lobby .subtle{color:var(--ink-dim);font-size:13px}.lobby .error{color:#e08578;font-size:14px}.lobby-link{color:var(--ink-dim);font-size:13px;text-decoration:none}.lobby-link:hover{color:var(--accent)}.about{overflow-y:auto;padding:24px 0}.about h1{margin-top:auto}.about .card{gap:0;line-height:1.55;margin-bottom:auto}.about p{margin:8px 0}.about a{color:var(--accent);text-decoration:none}.about a:hover{text-decoration:underline}.about code{font-size:.9em}.about .back{color:var(--ink-dim);margin-top:10px}.about .back:hover{color:var(--accent);text-decoration:none}.about .credit{display:flex;gap:18px;align-items:flex-start;border:1px solid var(--accent-soft);border-radius:var(--radius);padding:16px 18px;margin:12px 0;flex-wrap:wrap}.about .credit>img{width:72px;flex-shrink:0;margin-top:4px}.about .credit>div{flex:1;min-width:220px}.about .credit h2{margin:0;color:var(--accent);font-size:22px;font-weight:400;text-transform:uppercase;letter-spacing:2px}.about .credit-tag{color:var(--ink-dim);font-size:13px;margin-bottom:2px}.about .credit-links{display:flex;gap:22px;flex-wrap:wrap;font-size:14px}.about .credit-links span{color:var(--ink-dim)}.table-root{height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;padding:6px 12px;background:var(--panel);border-bottom:1px solid var(--panel-border);z-index:40}.room-info{display:flex;align-items:center;gap:10px;margin-right:6px}.home-logo{height:24px;cursor:pointer;transition:filter .12s ease}.home-logo:hover{filter:drop-shadow(0 0 6px var(--accent-soft)) brightness(1.15)}.topbar .code{font-weight:700;letter-spacing:2px;color:var(--accent);cursor:pointer;padding:1px 9px;border:1px solid var(--panel-border);border-radius:6px;background:#161616}.topbar .code:hover{border-color:var(--accent)}.topbar .status{font-size:12px;color:var(--ink-dim);white-space:nowrap}.topbar .turn-count{font-size:12px;color:var(--accent);white-space:nowrap}.topbar .status.connected{color:var(--ok)}.topbar .status.reconnecting{color:var(--warn)}.topbar .spacer{flex:1}.bar-narrow{display:none}@media (max-width: 1000px){.bar-wide{display:none}.bar-narrow{display:inline-block}.room-info{gap:8px;margin-right:2px}}.table-main{position:relative;flex:1;overflow:hidden}.battlefield-viewport{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;background:radial-gradient(ellipse at center,#0000 55%,#0000008c),var(--table-bg, #191919);touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}[data-drop]{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}.table-surface{position:absolute;border-radius:40px;box-shadow:inset 0 0 120px #000000b3,0 0 0 14px #141414,0 0 60px #000c;background-size:cover;background-position:center;background-color:#2b2014;background-image:var(--table-image, url(/table.jpg)),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600'%3E%3Cfilter id='w'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.012 0.15' numOctaves='4' seed='7'/%3E%3CfeColorMatrix values='0 0 0 0 0.19 0 0 0 0 0.135 0 0 0 0 0.08 0 0 0 0 1'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='linear' slope='0' intercept='1'/%3E%3C/feComponentTransfer%3E%3CfeBlend mode='multiply' in2='SourceGraphic'/%3E%3C/filter%3E%3Crect width='600' height='600' fill='%23352818' filter='url(%23w)'/%3E%3C/svg%3E")}.tcard{position:absolute;will-change:transform;transition:transform .14s ease;cursor:grab}.tcard.dragging{transition:none;cursor:grabbing;z-index:30!important}.tcard.remote-drag{transition:transform .15s linear;opacity:.85}.drag-layer{position:fixed;overflow:hidden;pointer-events:none;z-index:60}.tcard.selected .cardframe{outline:3px solid var(--accent);outline-offset:-1px;border-radius:6px}.tcard .cardframe{border-radius:6px;overflow:hidden;box-shadow:0 3px 10px #0009}.tcard img{display:block;width:100%;height:100%;object-fit:cover}.counter-badges{position:absolute;top:4px;left:4px;display:flex;flex-direction:column;gap:2px;pointer-events:none}.counter-badge{background:#0c0c0ce0;border:1px solid var(--accent-soft);color:var(--ink);border-radius:10px;font-size:11px;padding:1px 6px;white-space:nowrap}.pt-badge{position:absolute;right:3px;bottom:3px;background:#0c0c0ceb;border:1px solid var(--accent-soft);border-radius:6px;font-size:12px;font-weight:700;padding:0 5px;pointer-events:none}.owner-ring{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:8px;pointer-events:none;border:2px solid transparent}.playmat{position:absolute;border-radius:56px;border:4px solid;overflow:hidden;background:#0a0a0a59}.playmat-art{position:absolute;left:50%;top:50%;background-size:cover;background-position:center;opacity:.9}.playmat-name{position:absolute;right:34px;bottom:18px;font-size:30px;letter-spacing:4px;text-transform:uppercase;text-shadow:0 1px 6px #000,0 0 2px #000;opacity:.75;pointer-events:none}.player-chip{display:inline-block;width:9px;height:9px;border-radius:3px;flex:none;box-shadow:0 0 3px #000000b3}.swatch{width:26px;height:26px;border-radius:7px;border:2px solid transparent;cursor:pointer;padding:0}.swatch.picked{border-color:var(--ink)}.cursor-dot{position:absolute;pointer-events:none;z-index:60;transition:transform .15s linear}.cursor-dot .dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 6px #000c}.cursor-dot .label{font-size:11px;background:#0c0c0cd9;padding:1px 5px;border-radius:4px;margin-top:2px;white-space:nowrap}.hud{position:absolute;display:flex;gap:8px;align-items:flex-end;background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:8px;z-index:20}.hud.pos-bottom{left:10px;bottom:10px}.hud.pos-top{left:50%;top:10px;transform:translate(-50%);flex-direction:row;align-items:flex-start}.hud.pos-left,.hud.pos-right{top:50%;transform:translateY(-50%);flex-direction:column;align-items:stretch}.hud.pos-left{left:10px}.hud.pos-right{right:10px}.hud.pos-left .piles,.hud.pos-right .piles{flex-direction:column;align-self:center}.hud.pos-left .who,.hud.pos-right .who{min-width:0}.hud.pos-left .revealed-strip,.hud.pos-right .revealed-strip{flex-wrap:wrap;max-width:130px}.hud.turn{border-color:var(--accent);box-shadow:0 0 18px var(--accent-soft),var(--shadow)}.hud .who{display:flex;flex-direction:column;gap:4px;min-width:118px}.hud-collapse{position:absolute;top:0;right:0;padding:2px 7px;font-size:10px;line-height:14px;background:transparent;border:none;color:var(--ink-dim);cursor:pointer;z-index:1}.hud-collapse:hover{color:var(--accent);border:none}.hud.collapsed{padding:5px 26px 5px 10px;cursor:pointer;z-index:26}.hud-mini{display:flex;align-items:center;gap:8px;font-size:13px;white-space:nowrap}.hud-mini .mini-stat{color:var(--ink-dim)}.hud .name{font-weight:700;display:flex;align-items:center;gap:6px;cursor:pointer}.presence{display:inline-flex;align-items:center;color:var(--ink-dim)}.turn-badge{background:var(--accent);color:#0f0d06;border-radius:8px;font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;padding:1px 7px}.presence.connected{color:var(--ok)}.presence.away{color:var(--warn)}.presence.dead{color:var(--danger)}.life{display:flex;align-items:center;gap:6px}.life .total{font-size:30px;font-weight:700;min-width:52px;text-align:center;cursor:ns-resize;color:var(--ink)}.life .stack{display:flex;flex-direction:column;gap:2px}.pcounters{display:flex;gap:4px;flex-wrap:wrap;font-size:12px}.pcounter{background:#1e1e1e;border:1px solid var(--panel-border);border-radius:8px;padding:1px 7px;cursor:pointer}.cmdr-dmg{font-size:11px;display:flex;flex-direction:column;gap:2px}.cmdr-dmg .row{display:flex;align-items:center;gap:4px}.piles{display:flex;gap:6px}.pile{width:62px;height:86px;border-radius:6px;border:1px dashed var(--panel-border);position:relative;cursor:pointer;background:#131313;flex-shrink:0}.pile .mtg-card{display:block;width:100%;height:100%}.pile .mtg-card-face{border-radius:6px!important}.pile .pile-label{position:absolute;bottom:-2px;left:0;right:0;text-align:center;font-size:10px;color:var(--ink-dim);background:#0a0a0ad9;border-radius:0 0 6px 6px}.pile .pile-count{position:absolute;top:3px;right:3px;background:#0a0a0aeb;border:1px solid var(--accent-soft);border-radius:9px;font-size:12px;padding:0 6px;font-weight:700}.pile.droptarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent),0 0 14px var(--accent-soft)}.revealed-strip{display:flex;gap:3px}.revealed-strip .rev-card{width:40px}.revealed-strip .rev-card .mtg-card{display:block;width:100%}.revealed-strip .rev-card .mtg-card-face{border-radius:3px!important}.revealed-strip.actionable .rev-card{cursor:context-menu;outline:1px solid var(--accent-soft)}.revealed-strip.actionable .rev-card:hover{outline-color:var(--accent)}.hand-strip{position:absolute;bottom:0;left:clamp(96px,40vw,600px);right:clamp(8px,17vw,300px);display:flex;justify-content:center;align-items:flex-end;z-index:25;padding:0 8px;pointer-events:none}.hand-card{pointer-events:auto;width:108px;margin:0 var(--hand-overlap, -14px);transition:transform .12s ease,margin .12s ease,width .12s ease;position:relative;cursor:grab;transform:translateY(34px);touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.hand-card:hover{transform:translateY(-22px) scale(1.35);z-index:5;margin:0 24px}.hand-card.lifted{width:0;margin:0}.hand-card.lifted .mtg-card{visibility:hidden}.hand-strip.drop-ready{min-height:90px}.hand-strip.drop-ready .hand-card:hover{transform:translateY(34px);margin:0 var(--hand-overlap, -14px);z-index:auto}.hand-strip.drop-hover{background:linear-gradient(to top,var(--accent-soft),transparent 80%);border-radius:14px 14px 0 0;box-shadow:inset 0 -3px 0 var(--accent)}.hand-card .mtg-card{display:block;width:100%}.hand-card .mtg-card-face{border-radius:6px!important;box-shadow:0 4px 14px #000000b3!important}.hand-card.revealed:after{content:"👁";position:absolute;top:2px;left:4px;font-size:14px;filter:drop-shadow(0 0 3px #000)}.side-panel{position:absolute;right:10px;bottom:10px;width:280px;max-height:46vh;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);box-shadow:var(--shadow);z-index:30;overflow:hidden}.side-panel header{padding:6px 10px;font-weight:700;border-bottom:1px solid var(--panel-border);display:flex;justify-content:space-between}.log-list{overflow-y:auto;padding:6px 10px;font-size:13px;display:flex;flex-direction:column;gap:3px}.log-list .roll{color:var(--accent)}.log-list .life{color:#d98f85}.log-list time{color:var(--ink-dim);font-size:10px;margin-right:5px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;max-width:min(860px,94vw);max-height:88vh;overflow-y:auto;display:flex;flex-direction:column;gap:12px}.modal h3{margin:0;color:var(--accent)}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.modal-close{background:none;border:none;box-shadow:none;color:var(--ink-dim);font-size:16px;line-height:1;padding:2px 6px;cursor:pointer}.modal-close:hover{color:var(--ink)}.card-grid{display:flex;flex-wrap:wrap;gap:10px}.card-grid .gcard{width:130px;cursor:pointer;position:relative}.card-grid .gcard .mtg-card{display:block;width:100%}.card-grid .gcard .mtg-card-face{border-radius:6px!important}.card-grid .gcard .glabel{font-size:11px;text-align:center;color:var(--ink-dim)}.card-grid .gcard:hover .mtg-card-face{outline:2px solid var(--accent)}.card-grid .gcard .gactions{position:absolute;top:0;right:0;bottom:0;left:0;display:none;flex-direction:column;justify-content:center;align-items:center;gap:4px;background:#0a0805bf;border-radius:6px}.card-grid .gcard:hover .gactions{display:flex}.ctx-menu{position:fixed;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;box-shadow:var(--shadow);padding:4px;z-index:200;min-width:170px;font-size:14px}.ctx-menu .item{padding:5px 12px;border-radius:5px;cursor:pointer;white-space:nowrap}.ctx-menu .item:hover{background:#2b2b2b}.ctx-menu .sep{height:1px;background:var(--panel-border);margin:4px 6px}.ctx-menu .item.has-sub{position:relative;display:flex;justify-content:space-between;align-items:center;gap:14px}.ctx-menu .sub-arrow{color:var(--ink-dim);font-size:11px}.ctx-menu .sub{display:none;position:absolute;left:calc(100% - 6px);top:-5px}.ctx-menu .item.has-sub:hover>.sub{display:block}.hover-preview{position:fixed;left:12px;top:54px;width:300px;z-index:90;pointer-events:none;display:flex;flex-direction:column;gap:6px}.hover-preview .mtg-card{display:block;width:100%}.hover-preview .mtg-card-face{border-radius:12px!important;box-shadow:var(--shadow)!important}.hover-preview.sideways .mtg-card{transform:rotate(90deg) scale(.72)}.card-ghost{opacity:.85;pointer-events:none;z-index:80}.card-ghost .mtg-card-face{border-radius:5px!important;box-shadow:0 6px 18px #000000b3!important}.hover-preview .oracle{background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:8px 10px;font-size:13px;white-space:pre-wrap}.dice-overlay{position:fixed;left:50%;top:38%;transform:translate(-50%,-50%);z-index:95;pointer-events:none;display:flex;flex-direction:column;align-items:center;gap:8px}.die{width:92px;height:92px;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#38300f,#1d1909);border:2px solid var(--accent);border-radius:18px;font-size:42px;font-weight:700;color:var(--accent);box-shadow:0 0 40px var(--accent-soft),var(--shadow);animation:die-tumble .9s cubic-bezier(.2,.8,.3,1.1)}.die.coin{border-radius:50%;font-size:26px}.die-caption{background:var(--panel);border-radius:6px;padding:2px 10px;font-size:13px}@keyframes die-tumble{0%{transform:rotate(0) scale(.2) translateY(-140px);opacity:0}55%{transform:rotate(680deg) scale(1.15) translateY(8px);opacity:1}75%{transform:rotate(715deg) scale(.95)}to{transform:rotate(720deg) scale(1)}}.fade-pop{animation:fade-pop .18s ease}@keyframes fade-pop{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.help-hint{position:absolute;bottom:6px;right:12px;color:var(--ink-dim);font-size:11px;z-index:20}@media (max-width: 1280px),(max-height: 820px){.hud{padding:6px;gap:6px}.hud .who{min-width:92px}.life .total{font-size:24px;min-width:40px}.pile{width:50px;height:70px}.pile .pile-label{font-size:9px}.pile .pile-count{font-size:11px;padding:0 5px}.hand-card{width:92px}.hover-preview,.side-panel{width:240px}.help-hint{display:none}}@media (max-width: 700px){.hand-strip{left:8px;right:8px}.hud.pos-bottom{bottom:104px}.hud{max-width:calc(100vw - 20px);flex-wrap:wrap}.piles{flex-wrap:wrap}}
