:root{--bg:#10131a;--surface:#1a1f2b;--surface-2:#232936;--line:#303747;--text:#eef1f6;--text-muted:#9aa4b8;--accent:#ff5151;--radius:14px;--pick-red:#e4572e;--pick-yellow:#f2b705;--pick-green:#2e9e5b;--pick-blue:#2d7dd2}*{-webkit-tap-highlight-color:rgba(0,0,0,0)}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;min-height:100dvh;overscroll-behavior-y:none}.app-shell{max-width:900px;margin:0 auto;padding:max(1rem,env(safe-area-inset-top)) 1rem max(1rem,env(safe-area-inset-bottom))}.brand{font-weight:800;letter-spacing:-.02em}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1rem}.btn{border:0;border-radius:10px;font-weight:600}.btn-accent{background:var(--accent);color:#fff}.btn-accent:focus,.btn-accent:hover{background:hsl(0,100%,57.8823529412%);color:#fff}.btn-accent:disabled{opacity:.45}.btn-quiet{background:var(--surface-2);color:var(--text)}.btn-quiet:focus,.btn-quiet:hover{background:var(--line);color:var(--text)}.btn-quiet:disabled{opacity:.45}.form-control{border:1px solid var(--line);border-radius:10px}.form-control,.form-control:focus{background:var(--surface-2);color:var(--text)}.form-control:focus{border-color:var(--accent);box-shadow:none}.form-control::placeholder{color:var(--text-muted)}.room-code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:2rem;font-weight:800;letter-spacing:.3em;text-indent:.3em}.card-face{position:relative;display:grid;place-items:center;width:var(--cw,68px);height:calc(var(--cw, 68px)*1.5);border-radius:10px;border:2px solid rgba(255,255,255,.9);box-shadow:0 3px 10px rgba(0,0,0,.45);font-weight:800;color:#fff;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex:0 0 auto}.card-face.c-red{background:#e4572e}.card-face.c-yellow{background:#f2b705;color:#2b2000;border-color:rgba(0,0,0,.25)}.card-face.c-green{background:#2e9e5b}.card-face.c-blue{background:#2d7dd2}.card-face.c-wild{background:conic-gradient(from 45deg,#e4572e 0 25%,#f2b705 0 50%,#2e9e5b 0 75%,#2d7dd2 0)}.card-face .glyph{font-size:calc(var(--cw, 68px)*.46);line-height:1;text-shadow:0 2px 4px rgba(0,0,0,.35)}.card-face .corner{position:absolute;top:4px;left:6px;font-size:calc(var(--cw, 68px)*.2);opacity:.95}.card-face:before{content:"";position:absolute;inset:12% 8%;border-radius:50%;background:rgba(255,255,255,.18);transform:rotate(-20deg)}.card-back{background-color:#262c3a;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.07) 0 6px,transparent 0 12px);border:2px solid var(--line);color:var(--text-muted)}.hand-row{display:flex;gap:0;overflow-x:auto;padding:.75rem .25rem 1rem;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}.hand-row .hand-card{scroll-snap-align:center;margin-right:calc(var(--overlap, 12px)*-1);transition:transform .12s ease;background:none;border:0;padding:0}.hand-row .hand-card:last-child{margin-right:0}.hand-row .hand-card.is-playable{transform:translateY(-12px);filter:drop-shadow(0 6px 10px rgba(0,0,0,.5))}.hand-row .hand-card.is-dead{opacity:.72}.hand-row .hand-card:active.is-playable{transform:translateY(-18px) scale(1.04)}.discard-stack{display:grid;place-items:center;grid-gap:.35rem;gap:.35rem}.colour-dot{width:14px;height:14px;border-radius:50%;display:inline-block}.colour-dot.c-red{background:#e4572e}.colour-dot.c-yellow{background:#f2b705}.colour-dot.c-green{background:#2e9e5b}.colour-dot.c-blue{background:#2d7dd2}.opponent{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:.5rem .75rem}.opponent.is-turn{border-color:var(--accent);box-shadow:0 0 0 2px rgba(255,81,81,.25)}.opponent.is-offline{opacity:.55}.last-call{animation:pulse 1s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}@media(prefers-reduced-motion:reduce){.last-call{animation:none}.hand-row .hand-card{transition:none}}.turn-banner{border-radius:10px;padding:.5rem .75rem;font-weight:700;background:var(--surface-2)}.turn-banner.is-you{background:rgba(255,81,81,.15);color:#ffb3b3}.log-line{color:var(--text-muted);font-size:.85rem}