:root{--felt: #0a5c34;--felt-dark: #07421f;--card-bg: #fdfaf2;--card-border: #d9cfae;--ink-black: #1d232b;--ink-red: #c9252d;--gold: #e8b53a;--blue: #1e40af;--green: #16a34a;--yellow: #eab308;--pink: #ec4899;--board-w: clamp(312px, 100vw - 8px, 58vh)}@supports (height: 1dvh){:root{--board-w: clamp(312px, 100vw - 8px, 58dvh)}}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{font-family:system-ui,-apple-system,Segoe UI,sans-serif;background-color:var(--felt-dark);color:#f3f6f2;-webkit-user-select:none;user-select:none;overscroll-behavior:none}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}#root{min-height:100vh;min-height:100dvh;min-width:320px;display:flex;flex-direction:column;background:radial-gradient(ellipse closest-side at 50% 50%,var(--felt) 0%,var(--felt-dark) 75%)}body{overflow-x:auto}.screen{flex:1;display:flex;flex-direction:column;align-items:center;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom));gap:16px}.btn{padding:12px 24px;border-radius:14px;background:#fff2;border:1px solid #ffffff44;font-weight:600;transition:transform .06s ease}.btn:active{transform:scale(.97)}.btn.primary{background:var(--gold);border-color:#f5d47c;color:#3a2c07}.btn.big{font-size:1.3rem;padding:16px 36px}.btn.ghost{background:transparent;border-color:#fff3;color:#fffa}.btn:disabled{opacity:.4}.muted{color:#fff9;font-size:.9rem;text-align:center}.chip-dot{display:inline-block;width:16px;height:16px;border-radius:50%;border:2px solid #ffffffcc;vertical-align:-2px}.big-dot{width:40px;height:40px}.chip-dot.blue{background:var(--blue)}.chip-dot.green{background:var(--green)}.chip-dot.yellow{background:var(--yellow)}.chip-dot.purple{background:var(--pink)}.toasts{position:fixed;top:max(12px,env(safe-area-inset-top));left:50%;translate:-50% 0;display:flex;flex-direction:column;gap:8px;z-index:50}.toast{background:#b91c1c;color:#fff;padding:10px 18px;border-radius:12px;font-weight:600;box-shadow:0 4px 16px #0007}.reconnect-bar{position:fixed;top:0;left:0;right:0;z-index:30;background:#b45309;text-align:center;padding:max(4px,env(safe-area-inset-top)) max(8px,env(safe-area-inset-right)) 4px max(8px,env(safe-area-inset-left));font-size:.85rem;animation:reconnect-appear .2s ease-out .6s backwards}@keyframes reconnect-appear{0%{opacity:0}}.build-tag{position:fixed;left:4px;bottom:max(2px,env(safe-area-inset-bottom));z-index:40;font:9px/1 ui-monospace,monospace;color:#fff5;pointer-events:none}.home{justify-content:center}.logo{font-size:3.2rem;font-style:italic;color:var(--gold);text-shadow:0 3px 0 #00000055}.divider{color:#fff7;font-size:.9rem}.join-row{display:flex;gap:10px}.code-input{width:9ch;font-size:1.6rem;font-family:ui-monospace,monospace;letter-spacing:.25ch;text-align:center;padding:10px;border-radius:14px;border:2px solid #ffffff55;background:#ffffff14;color:#fff;outline:none}.code-input:focus{border-color:var(--gold)}.game-code{font-family:ui-monospace,monospace;font-size:2.6rem;letter-spacing:.3ch;background:#ffffff14;border:2px dashed #ffffff66;border-radius:16px;padding:12px 24px;color:var(--gold);display:flex;flex-direction:column;align-items:center}.code-hint{font-size:.75rem;letter-spacing:normal;font-family:inherit;color:#fff8}.setting-row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:min(360px,100%)}.player-name-input{flex:1;min-width:0;font:inherit;font-weight:600;color:#fff;background:transparent;border:none;border-bottom:1.5px dashed #ffffff55;outline:none;padding:0 0 2px}.player-name-input:focus{border-bottom-color:var(--gold)}.player-name-input::placeholder{color:#fff6;font-style:italic;font-weight:400}.host-crown{font-size:.9rem}.slider-wrap{display:flex;align-items:center;gap:10px;width:55%}.slider-wrap input[type=range]{flex:1;accent-color:var(--gold);min-width:0}.slider-wrap input[type=range]:disabled{opacity:.5}.slider-value{font-weight:800;font-variant-numeric:tabular-nums;color:var(--gold);min-width:1.4ch;text-align:right}.player-list{list-style:none;width:min(360px,100%);display:flex;flex-direction:column;gap:8px}.player-list li{display:flex;align-items:center;gap:10px;background:#ffffff12;border-radius:12px;padding:10px 14px}.player-list li.disconnected{opacity:.45}.player-name{flex:1;font-weight:600}.player-name.unnamed{font-style:italic;color:#fff7;font-weight:400}.ready-tag{font-size:.8rem;color:#fff8}.ready-tag.is-ready{color:#4ade80;font-weight:700}.color-picker{display:flex;gap:12px}.color-swatch{width:36px;height:36px;border-radius:50%;border:3px solid #ffffff55;color:#fff;font-weight:900;font-size:1rem;display:flex;align-items:center;justify-content:center;transition:transform .1s ease;text-shadow:0 1px 2px #0008;cursor:pointer}.color-swatch.blue{background:var(--blue)}.color-swatch.green{background:var(--green)}.color-swatch.yellow{background:var(--yellow)}.color-swatch.purple{background:var(--pink)}.color-swatch.mine{border-color:#fff;transform:scale(1.15);box-shadow:0 0 10px 2px #fff6}.color-swatch.taken{opacity:.75}.color-swatch.pending{animation:swatch-pulse .8s ease-in-out infinite}@keyframes swatch-pulse{50%{opacity:.5}}.kick-btn{color:#f87171;font-weight:800;font-size:1rem;padding:2px 8px;border-radius:8px;border:1px solid #f8717155}.settings{display:flex;flex-direction:column;gap:10px;width:min(360px,100%);margin-bottom:10px}.switch{width:46px;height:26px;flex-shrink:0;border-radius:13px;background:#fff2;border:1px solid #ffffff44;position:relative;transition:background .15s ease,border-color .15s ease}.switch:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fffc;transition:transform .15s ease,background .15s ease}.switch.on{background:var(--gold);border-color:#f5d47c}.switch.on:after{transform:translate(20px);background:#3a2c07}.switch:disabled{opacity:.5}.game{gap:8px;padding-left:0;padding-right:0;padding-top:max(8px,env(safe-area-inset-top))}.game-header{width:100%;padding:0 10px;display:flex;align-items:center;gap:6px}.players-ribbon{flex:1;min-width:0;display:flex;gap:6px;overflow-x:auto;justify-content:safe center;scrollbar-width:none}.players-ribbon::-webkit-scrollbar{display:none}.ribbon-player{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:#ffffff12;border:2px solid transparent;white-space:nowrap;font-size:.85rem}.ribbon-player.current{border-color:var(--gold);background:#e8b53a2b}.ribbon-player.disconnected{opacity:.4}.ribbon-player.away{opacity:.4;border-style:dashed;border-color:#fff5}.ribbon-meta{color:#fff9;display:inline-flex;align-items:center;gap:6px}.ribbon-count{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums}.ribbon-count-icon{font-size:1.15em;line-height:1;translate:0 -.05em}.clock{font-variant-numeric:tabular-nums}.clock.urgent{color:#f87171}.board{width:var(--board-w);display:grid;grid-template-columns:18px repeat(10,1fr);gap:2px;background:#ffffff1e;border:3px solid #ffffff2e;border-radius:10px;padding:3px 21px 3px 3px}.coord{display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff7;padding:1px 0;-webkit-user-select:none;user-select:none}.cell{position:relative;aspect-ratio:4 / 5;background:var(--card-bg);border:1px solid var(--card-border);border-radius:5%/4%;display:flex;align-items:center;justify-content:center;padding:0}.cell.corner{background:linear-gradient(135deg,#f7e9bd,#e8b53a)}.corner-star{font-size:calc((var(--board-w) - 30px) * .055);color:#7c5c0b}.cell-card{display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:.95}.cell-card.red{color:var(--ink-red)}.cell-card.black{color:var(--ink-black)}.cell-rank{font-size:calc((var(--board-w) - 30px) * .046);font-weight:800}.cell-suit{font-size:calc((var(--board-w) - 30px) * .044)}.cell{transition:filter .15s ease}.board.targeting .cell:not(.eligible):not(.joker-from){filter:brightness(.72) saturate(.8)}.cell.eligible{outline:3.5px solid var(--gold);outline-offset:-1px;box-shadow:0 0 12px 3px #e8b53acc;animation:pulse-cell .9s ease-in-out infinite;z-index:1}.board.quiet .cell.eligible{outline:none;box-shadow:none;animation:none}@keyframes pulse-cell{50%{outline-color:#fff;box-shadow:0 0 16px 5px #ffffffb0}}.chip{position:absolute;inset:-1px;border-radius:5%/4%;box-shadow:inset 0 0 0 3px var(--seat);pointer-events:none}.cell.owned-blue{border-color:var(--blue)}.cell.owned-green{border-color:var(--green)}.cell.owned-yellow{border-color:var(--yellow)}.cell.owned-purple{border-color:var(--pink)}.chip.blue{--seat: var(--blue);background:#1e40af6e}.chip.green{--seat: var(--green);background:#16a34a6e}.chip.yellow{--seat: var(--yellow);background:#eab3086e}.chip.purple{--seat: var(--pink);background:#ec48996e}.chip.locked{background:var(--seat);box-shadow:inset 0 0 0 1px var(--card-border)}.seq-mark{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:3;font-size:calc((var(--board-w) - 30px) * .052);font-weight:800;font-style:italic;line-height:1;color:#fffdf5;text-shadow:0 2px 0 #00000055}.cell.seq-fresh .cell-card{animation:seq-face-out var(--seq-cross) ease var(--land) both}.cell.seq-fresh .seq-mark{animation:seq-appear var(--seq-cross) ease var(--land) both}.cell.seq-fresh .chip.locked{--seq-stage: seq-lock-bg var(--seq-cross) ease var(--land) both, seq-won var(--seq-glow) ease-in-out calc(var(--land) + var(--seq-cross)) 1;animation:var(--seq-stage)}.cell.seq-fresh .chip.locked.fly-in{animation:chip-fly 1.25s both,var(--seq-stage)}.cell.seq-fresh .chip.locked.swap-in{animation:chip-swap .65s cubic-bezier(.45,0,.25,1) both,var(--seq-stage)}@keyframes seq-appear{0%{opacity:0}to{opacity:1}}@keyframes seq-face-out{to{opacity:0}}@keyframes seq-lock-bg{0%{background-color:color-mix(in srgb,var(--seat) 43%,transparent)}to{background-color:var(--seat)}}@keyframes seq-won{0%,to{box-shadow:inset 0 0 0 1px var(--card-border);z-index:2}40%{box-shadow:inset 0 0 0 2px var(--gold),0 0 18px 6px #e8b53acc;z-index:2}}.cell.joker-from{outline:3px solid #e11d48;outline-offset:-1px;z-index:1}.chip.fly-in{animation:chip-fly 1.25s both}@keyframes chip-fly{0%{transform:translateY(72vh) scale(1.7);box-shadow:0 18px 22px 2px #000a;opacity:.95;z-index:4;animation-timing-function:cubic-bezier(.15,.75,.35,1)}38%{transform:translateY(0) scale(1.5);box-shadow:0 14px 16px 1px #0009;opacity:1;animation-timing-function:ease-in-out}64%{transform:translateY(0) scale(1.48);box-shadow:0 14px 16px 1px #0009;animation-timing-function:cubic-bezier(.55,0,.85,.35)}80%{transform:scale(.88);box-shadow:0 2px 3px #0008,inset 0 -2px 4px #0005;z-index:4;animation-timing-function:ease-out}90%{transform:scale(1.08);animation-timing-function:ease-in-out}to{transform:none;z-index:auto}}.chip.swap-in{--dx: 0;--dy: 0;animation:chip-swap .65s cubic-bezier(.45,0,.25,1) both}@keyframes chip-swap{0%{transform:translate(calc(var(--dx) * 152%),calc(var(--dy) * 152%)) scale(1);z-index:3}45%{transform:translate(calc(var(--dx) * 76%),calc(var(--dy) * 76%)) scale(1.45);box-shadow:0 8px 18px #000a,0 0 14px 4px #e8b53acc}80%{transform:translate(0) scale(.92);z-index:3}to{transform:translate(0) scale(1);z-index:auto}}.smoke-scene{position:absolute;inset:0;pointer-events:none;z-index:5}.smoke-victims{position:absolute;inset:0;animation:smoke-out .6s ease-in .55s both}.smoke-puff{--px: 0%;--py: 0%;--ps: 1;position:absolute;left:50%;top:50%;width:60%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#e3e3e3f0 0%,#a8a8a8b8 45%,transparent 72%);filter:blur(1.5px);opacity:0;transform:translate(-50%,-50%) scale(.2);animation:puff 1s ease-out both}@keyframes puff{0%{transform:translate(-50%,-50%) scale(.2);opacity:0}18%{opacity:.95}to{transform:translate(calc(-50% + var(--px)),calc(-50% + var(--py))) scale(calc(2.4 * var(--ps)));opacity:0}}.smoke-jack{position:absolute;inset:8% 16%;background:var(--card-bg);border:1.5px solid var(--card-border);border-radius:8%/5.7%;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:calc((var(--board-w) - 30px) * .044);box-shadow:0 4px 10px #0009;animation:jack-slam .5s cubic-bezier(.15,.75,.35,1) both}.smoke-jack.red{color:var(--ink-red)}.smoke-jack.black{color:var(--ink-black)}@keyframes jack-slam{0%{transform:translateY(65vh) scale(1.9) rotate(10deg);opacity:.95}85%{transform:none}to{transform:none;opacity:1}}@keyframes smoke-out{0%{opacity:1}to{transform:scale(2.1) translateY(-35%);filter:blur(8px) grayscale(1);opacity:0}}.hand{display:flex;flex-wrap:nowrap;justify-content:center;gap:5px;padding:4px 10px 2px;width:100%;height:calc(clamp(42px,13.4vw,84px) * 7 / 5 + 6px);align-items:center;overflow-x:hidden;overflow-x:clip;overflow-y:visible}.hand-card{width:clamp(42px,13.4vw,84px);min-width:0;aspect-ratio:5 / 7;padding:0;transition:transform .12s ease}.hand-card.selected{transform:translateY(-10px) scale(1.06)}.hand-card.inactive{opacity:.6}.hand-card.leaving{pointer-events:none;animation:card-consume .45s ease-in forwards}@keyframes card-consume{0%{max-width:84px;margin:0;transform:scale(1);opacity:1}60%{max-width:84px;margin:0;transform:scale(.3);opacity:0}to{max-width:0;margin:0 -2.5px;transform:scale(.3);opacity:0}}.hand-card.drawn{animation:card-draw 1.5s ease-out 1s backwards}.hand-card.drawn .hand-card-face{animation:draw-border-pulse 1.5s ease-out 1s backwards}@keyframes card-draw{0%{max-width:0;margin:0 -2.5px;transform:translate(80px) rotate(8deg);opacity:0}30%{max-width:84px;margin:0;transform:none;opacity:1}38%{transform:rotate(-7deg)}46%{transform:rotate(7deg)}54%{transform:rotate(-6deg)}62%{transform:rotate(6deg)}70%{transform:rotate(-5deg)}78%{transform:rotate(4deg)}86%{transform:rotate(-3deg)}93%{transform:rotate(2deg)}to{max-width:84px;margin:0;transform:none}}@keyframes draw-border-pulse{0%,30%,to{border-color:var(--card-border);box-shadow:0 3px 8px #0006}40%,70%{border-color:var(--gold);box-shadow:0 3px 8px #0006,0 0 12px 3px #e8b53aaa}55%,85%{border-color:var(--card-border);box-shadow:0 3px 8px #0006}}.hand-card-face{width:100%;height:100%;background:var(--card-bg);border:2px solid var(--card-border);border-radius:5%/3.6%;box-shadow:0 3px 8px #0006;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden;line-height:1}.hand-card.selected .hand-card-face{border-color:var(--gold);box-shadow:0 6px 14px #000a,0 0 0 2px var(--gold)}.hand-card-face.red{color:var(--ink-red)}.hand-card-face.black{color:var(--ink-black)}.hand-card-rank{font-size:clamp(1.2rem,5vw,2rem);font-weight:900}.hand-card-pip{font-size:clamp(1.4rem,5.8vw,2.4rem)}.joker-rank{position:absolute;top:7%;left:0;right:0;text-align:center;font-size:clamp(.55rem,2.2vw,.85rem);letter-spacing:.08em;background:linear-gradient(90deg,#e11d48,#f59e0b,#16a34a,#2563eb,#9333ea);-webkit-background-clip:text;background-clip:text;color:transparent}.joker-pip{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;line-height:1;font-size:clamp(1.5rem,6.4vw,2.6rem);filter:drop-shadow(0 1px 2px #0006)}@property --joker-angle{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.hand-card-face.joker{border:3px solid transparent;background:linear-gradient(160deg,var(--card-bg) 60%,#f6ecd0) padding-box,conic-gradient(from var(--joker-angle),#e11d48,#f59e0b,#16a34a,#06b6d4,#2563eb,#9333ea,#e11d48) border-box;animation:joker-border-spin 2.6s linear infinite}@keyframes joker-border-spin{to{--joker-angle: 360deg}}.joker .hand-card-power{background:linear-gradient(90deg,#e11d48,#9333ea);color:#fff}.hand-card-power{position:absolute;bottom:6%;font-size:clamp(.55rem,2vw,.75rem);font-weight:800;letter-spacing:.05em;background:currentColor;border-radius:4px;padding:2px 5px}.hand-card-power{color:var(--card-bg);background:currentcolor}.hand-card-face.red .hand-card-power{background:var(--ink-red);color:var(--card-bg)}.hand-card-face.black .hand-card-power{background:var(--ink-black);color:var(--card-bg)}.status-line{width:var(--board-w);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;min-height:1.6em;padding:0 12px}.status-line .clock{justify-self:start;font-weight:700;color:#fffa}.status-line .clock.your-turn{color:var(--gold)}.status-line .clock.urgent{color:#f87171}.stack-info{justify-self:end}.hint{display:flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;color:#fffe}.stack-info{display:flex;align-items:center;gap:5px;font-weight:700;color:#fffa;font-variant-numeric:tabular-nums;white-space:nowrap}.stack-icon{width:1.1em;height:1.1em}.move-log{width:min(360px,100%);display:flex;flex-direction:column;gap:2px;font-size:.78rem;color:#fff9}.move-log-row{display:flex;align-items:center;justify-content:center;gap:6px}.move-log-row.newest{color:#fffd}.move-log-row .chip-dot{width:10px;height:10px;border-width:1.5px}.log-name{font-weight:700}.log-card{font-weight:800;background:var(--card-bg);border-radius:4px;padding:0 5px;line-height:1.3}.log-card.red{color:var(--ink-red)}.log-card.black{color:var(--ink-black)}.log-coord{font-variant-numeric:tabular-nums;color:#fffa}.game-code-mini{flex-shrink:0;font-family:ui-monospace,monospace;font-size:.9rem;letter-spacing:.15ch;color:var(--gold);padding:4px 10px;border-radius:10px;border:1px dashed #ffffff2e;background:#ffffff0a}.leave-btn{flex-shrink:0;color:#fff7;font-size:1.05rem;font-weight:800;padding:4px 10px;border-radius:10px;border:1px solid #ffffff2e}.install-card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:20px 24px;border-radius:20px;background:#fff1;border:1px solid #ffffff2e;max-width:min(420px,calc(100vw - 40px));text-align:center}.install-card h2{font-size:1.15rem}.install-steps{margin:0;padding-left:1.3em;text-align:left;color:#fffc;font-size:.95rem;line-height:1.6}.switch.needs-install{opacity:.5}.bell-btn{flex-shrink:0;font-size:1rem;padding:4px 8px;border-radius:10px;border:1px solid #ffffff2e}.bell-btn:not(.on){filter:grayscale(1);opacity:.65}.show-results{position:fixed;bottom:max(14px,env(safe-area-inset-bottom));left:50%;translate:-50% 0;z-index:20;background:var(--gold);border-color:#f5d47c;color:#3a2c07;box-shadow:0 6px 18px #000a}.overlay{position:fixed;inset:0;background:#000000a8;display:flex;align-items:center;justify-content:center;z-index:30}.spinner{width:34px;height:34px;border-radius:50%;border:4px solid #ffffff33;border-top-color:var(--gold);animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.overlay-card{background:var(--felt);border:2px solid var(--gold);border-radius:20px;padding:32px 40px;display:flex;flex-direction:column;align-items:center;gap:18px;box-shadow:0 12px 40px #000c;max-width:min(420px,calc(100vw - 40px));text-align:center}.overlay-card h2{font-size:1.8rem}
