{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "table-themes",
  "title": "Table themes",
  "description": "Seven table themes: Matrix, CoinPoker, GGPoker, ACR, Ignition, Halloween and Classic. A stylesheet keyed on data-skin plus the hook that remembers the player's pick.",
  "files": [
    {
      "path": "src/components/trainer/skin.tsx",
      "content": "\"use client\";\n\nimport { createContext, useContext, useSyncExternalStore, type ReactNode } from \"react\";\n\nimport * as storage from \"@/lib/trainer/storage\";\n\n/**\n * Table chrome. `native` is the navy felt from the Train tab; `web` is the\n * zinc trainer surface; `felt` is a classic green oval; `matrix` is the\n * black-and-phosphor terminal look. The site skins (`coinpoker`, `ggpoker`,\n * `acr`, `ignition`) echo the palettes of those rooms so a player can drill\n * on a table that reads like the one they play on. `halloween` is the\n * seasonal one: midnight purple felt and pumpkin orange. `pokerdata` is the\n * monochrome table of pokerdata.io: charcoal felt, white hairlines, no\n * wordmark; pinned by its explorer, never in the picker.\n */\nexport type TrainerSkin =\n  | \"native\"\n  | \"web\"\n  | \"felt\"\n  | \"matrix\"\n  | \"coinpoker\"\n  | \"ggpoker\"\n  | \"acr\"\n  | \"ignition\"\n  | \"halloween\"\n  | \"pokerdata\";\n\n/** The table themes a player can pick, in menu order. Classic is the green felt. */\nexport const TABLE_THEMES: { value: TrainerSkin; label: string }[] = [\n  { value: \"matrix\", label: \"Matrix\" },\n  { value: \"coinpoker\", label: \"CoinPoker\" },\n  { value: \"ggpoker\", label: \"GGPoker\" },\n  { value: \"acr\", label: \"ACR\" },\n  { value: \"ignition\", label: \"Ignition\" },\n  { value: \"halloween\", label: \"Halloween\" },\n  { value: \"felt\", label: \"Classic\" },\n];\n\nconst DEFAULT_KEY = \"trainer.skin.v1\";\nconst VALID: TrainerSkin[] = [\n  \"native\",\n  \"web\",\n  \"felt\",\n  \"matrix\",\n  \"coinpoker\",\n  \"ggpoker\",\n  \"acr\",\n  \"ignition\",\n  \"halloween\",\n  \"pokerdata\",\n];\n\nlet current: TrainerSkin = \"native\";\nlet fallback: TrainerSkin = \"native\";\n/** Storage key the mounted provider reads and writes. Pages can keep their own. */\nlet activeKey = DEFAULT_KEY;\nlet hydratedKey: string | null = null;\nconst listeners = new Set<() => void>();\n\nfunction isSkin(v: string | null): v is TrainerSkin {\n  return !!v && (VALID as string[]).includes(v);\n}\n\nfunction hydrate(): void {\n  if (hydratedKey === activeKey) return;\n  hydratedKey = activeKey;\n  const stored = storage.getItem(activeKey);\n  current = isSkin(stored) ? stored : fallback;\n  listeners.forEach((l) => l());\n}\n\nexport function setTrainerSkin(next: TrainerSkin): void {\n  if (next === current) return;\n  current = next;\n  listeners.forEach((l) => l());\n  storage.setItem(activeKey, next);\n}\n\n/** A theme pinned by `TableTheme`; null follows the player's pick. */\nconst PinnedSkin = createContext<TrainerSkin | null>(null);\n\n/**\n * Pins every table inside to one theme, whatever the player picked. For a\n * table drawn from a spec, where the theme is part of the content. Set\n * `data-skin` on the same element so the CSS follows.\n */\nexport function TableTheme({ skin, children }: { skin: TrainerSkin; children: ReactNode }) {\n  return <PinnedSkin.Provider value={skin}>{children}</PinnedSkin.Provider>;\n}\n\nexport function useTrainerSkin(): TrainerSkin {\n  const pinned = useContext(PinnedSkin);\n  const picked = useSyncExternalStore(\n    (cb) => {\n      listeners.add(cb);\n      hydrate();\n      return () => {\n        listeners.delete(cb);\n      };\n    },\n    () => current,\n    () => fallback,\n  );\n  return pinned ?? picked;\n}\n\n/**\n * `skin` is the default when nothing is stored. `storageKey` gives a page\n * its own saved choice (the Train table keeps its theme apart from the drill\n * trainer's). Only one provider is mounted at a time, so the module state\n * follows whichever rendered last.\n */\nexport function TrainerSkinProvider({\n  skin,\n  storageKey = DEFAULT_KEY,\n  children,\n}: {\n  skin?: TrainerSkin;\n  storageKey?: string;\n  children: ReactNode;\n}) {\n  if (skin) fallback = skin;\n  if (storageKey !== activeKey) {\n    activeKey = storageKey;\n    hydratedKey = null;\n    current = fallback;\n  }\n  return children;\n}\n",
      "type": "registry:lib",
      "target": "components/trainer/skin.tsx"
    },
    {
      "path": "src/lib/trainer/storage.ts",
      "content": "\"use client\";\n\n/**\n * SSR-safe localStorage shim. The mobile trainer persists through an async\n * AsyncStorage wrapper; the ported code keeps the same call shape so the two\n * stay diffable, but here the reads are synchronous under the hood.\n */\n\nexport function getItem(key: string): string | null {\n  if (typeof window === \"undefined\") return null;\n  try {\n    return window.localStorage.getItem(key);\n  } catch {\n    // Private mode / storage disabled — the trainer degrades to session-only.\n    return null;\n  }\n}\n\nexport function setItem(key: string, value: string): void {\n  if (typeof window === \"undefined\") return;\n  try {\n    window.localStorage.setItem(key, value);\n  } catch {\n    // Best-effort persistence; failures are non-fatal.\n  }\n}\n",
      "type": "registry:lib",
      "target": "lib/trainer/storage.ts"
    },
    {
      "path": "src/app/table-skins.css",
      "content": "/*\n * Train-table themes (`data-skin` on the table root).\n *\n * Each themed skin sets one set of variables: the page field, the UI accent\n * and inks for the action bar, dock, hand strip and pot pill, and the table\n * variables the components read for seat plates, card backs, bet chips and\n * the dealer button (those fall back to the navy skin's values when unset).\n * The hook rules below are shared by every themed skin and only style the\n * `data-*` hooks the components expose, so the navy, zinc and classic skins\n * are untouched.\n */\n\n/* ---------- Matrix: black field, phosphor green, monospace numbers ------- */\n[data-skin=\"matrix\"] {\n  --ui-bg: #000;\n  --ui-font: var(--font-mono);\n  --ui-tracking: 0.06em;\n  --ui-accent: #00ff41;\n  --ui-accent-hover: #5cff86;\n  --ui-accent-ink: #001a06;\n  --ui-accent-glow: 0 0 14px rgba(0, 255, 65, 0.45), 0 0 40px rgba(0, 255, 65, 0.15);\n  --ui-accent-glow-hover: 0 0 18px rgba(0, 255, 65, 0.65), 0 0 48px rgba(0, 255, 65, 0.22);\n  --ui-glow: 0 0 10px rgba(0, 255, 65, 0.45);\n  --ui-ink: #d8ffe2;\n  --ui-ink-muted: rgba(216, 255, 226, 0.55);\n  --ui-line: rgba(0, 255, 65, 0.28);\n  --ui-line-strong: rgba(0, 255, 65, 0.6);\n  --ui-line-faint: rgba(0, 255, 65, 0.1);\n  --ui-fill: rgba(0, 255, 65, 0.06);\n  --ui-fill-strong: rgba(0, 255, 65, 0.14);\n  --ui-surface: rgba(0, 0, 0, 0.75);\n  --ui-pot-ink: #00ff41;\n  --ui-key-ink: #00ff41;\n\n  --seat-live: rgba(0, 255, 65, 0.55);\n  --seat-acting: #00ff41;\n  --seat-acting-track: rgba(0, 255, 65, 0.2);\n  --seat-acting-glow: 0 0 14px rgba(0, 255, 65, 0.55), 0 0 32px rgba(0, 255, 65, 0.2);\n  --seat-muted: rgba(0, 255, 65, 0.16);\n  --seat-sitout: #ff3b6b;\n  --seat-plate: rgba(0, 0, 0, 0.92);\n  --seat-plate-muted: rgba(0, 0, 0, 0.6);\n  --seat-name: #d8ffe2;\n  --seat-name-muted: rgba(216, 255, 226, 0.3);\n  --seat-stack: #00ff41;\n  --seat-stack-muted: rgba(0, 255, 65, 0.3);\n  --seat-timer-ink: #00ff41;\n  --seat-timer-bg: #000;\n  --seat-winner-glow: rgba(0, 255, 65, 0.75);\n  --seat-radius: 6px;\n  --seat-border-width: 1px;\n  --seat-stack-shadow: 0 0 8px rgba(0, 255, 65, 0.45);\n\n  --card-back-bg: #020a04;\n  --card-back-image: linear-gradient(158deg, rgba(0, 255, 65, 0.16) 0%, rgba(0, 255, 65, 0.02) 45%, rgba(0, 0, 0, 0.3) 100%),\n    radial-gradient(circle at 50% 50%, rgba(0, 255, 65, 0.35) 0 12%, rgba(0, 255, 65, 0) 13%),\n    repeating-linear-gradient(90deg, rgba(0, 255, 65, 0.14) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(0deg, rgba(0, 255, 65, 0.08) 0 1px, transparent 1px 3px);\n  --card-back-frame: rgba(0, 255, 65, 0.7);\n  --card-back-edge: rgba(0, 255, 65, 0.25);\n  --card-back-inner: rgba(0, 255, 65, 0.4);\n\n  --table-chip: #031a0b;\n  --table-chip-ink: #d8ffe2;\n  --dealer-bg: #000;\n  --dealer-ink: #00ff41;\n  --dealer-ring: #00ff41;\n  --slot-border: rgba(0, 255, 65, 0.22);\n  --slot-bg: rgba(0, 0, 0, 0.5);\n}\n\n/* ---------- CoinPoker: charcoal client, green cloth, crimson accent ------ */\n[data-skin=\"coinpoker\"] {\n  /* Square portraits in a crimson frame, the new client's seat tiles. */\n  --seat-portrait-radius: 10px;\n  --seat-portrait-ring: #c4183a;\n  --seat-portrait-ring-width: 2px;\n  /* Uniform dark buttons; only Raise is colored. */\n  --btn-quiet-bg: #22262b;\n  --btn-quiet-ink: #e8ebee;\n  --btn-quiet-line: rgba(255, 255, 255, 0.1);\n  --btn-plain-bg: #2b3036;\n  --btn-plain-ink: #fff;\n  --btn-plain-line: rgba(255, 255, 255, 0.14);\n  --btn-radius: 14px;\n\n  --ui-bg: #121417;\n  --ui-accent: #e0193e;\n  --ui-accent-hover: #f0325a;\n  --ui-accent-ink: #fff;\n  --ui-ink: #f2f4f6;\n  --ui-ink-muted: rgba(242, 244, 246, 0.6);\n  --ui-line: rgba(255, 255, 255, 0.12);\n  --ui-line-strong: rgba(255, 255, 255, 0.28);\n  --ui-line-faint: rgba(255, 255, 255, 0.06);\n  --ui-fill: rgba(255, 255, 255, 0.06);\n  --ui-fill-strong: rgba(224, 25, 62, 0.16);\n  --ui-surface: #1d2126;\n  --ui-pot-ink: #fff;\n  --ui-key-ink: #f2f4f6;\n\n  --seat-live: #3dce6e;\n  --seat-acting: #2ec8d6;\n  --seat-plate: rgba(18, 20, 24, 0.96);\n  --seat-plate-muted: rgba(18, 20, 24, 0.7);\n  --seat-stack: #f6c445;\n  --seat-radius: 12px;\n\n  --card-back-bg: #b3122b;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.22) 100%),\n    radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.3) 0 14%, rgba(255, 255, 255, 0) 15%),\n    repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.12) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.12) 0 1px, transparent 1px 4px);\n  --card-back-frame: #f7dfe3;\n  --card-back-edge: rgba(70, 10, 20, 0.6);\n  --table-chip: #d3121c;\n  --dealer-bg: #fff;\n  --dealer-ink: #121417;\n  --dealer-ring: #e0193e;\n}\n\n/* ---------- GGPoker: burgundy room, green felt, brass rim, white plates -- */\n[data-skin=\"ggpoker\"] {\n  /* Round portraits in a brass ring. */\n  --seat-portrait-radius: 9999px;\n  --seat-portrait-ring: #c9a85a;\n  --seat-portrait-ring-width: 2px;\n  /* Grey Fold, green Call, gold Raise. */\n  --btn-quiet-bg: #3a3d44;\n  --btn-quiet-ink: #e9e6df;\n  --btn-quiet-line: rgba(255, 255, 255, 0.08);\n  --btn-plain-bg: #2f9e5a;\n  --btn-plain-ink: #fff;\n  --btn-plain-line: rgba(255, 255, 255, 0.12);\n  --btn-radius: 12px;\n\n  --ui-bg: #17090c;\n  --ui-accent: #f0a63a;\n  --ui-accent-hover: #ffbb55;\n  --ui-accent-ink: #231200;\n  --ui-ink: #f7f1e6;\n  --ui-ink-muted: rgba(247, 241, 230, 0.6);\n  --ui-line: rgba(240, 166, 58, 0.3);\n  --ui-line-strong: rgba(240, 166, 58, 0.6);\n  --ui-line-faint: rgba(240, 166, 58, 0.12);\n  --ui-fill: rgba(240, 166, 58, 0.08);\n  --ui-fill-strong: rgba(240, 166, 58, 0.18);\n  --ui-surface: #2a151a;\n  --ui-pot-ink: #ffe3a6;\n  --ui-key-ink: #f0a63a;\n\n  --seat-live: #c9a85a;\n  --seat-acting: #ffd166;\n  --seat-acting-track: rgba(255, 209, 102, 0.3);\n  --seat-acting-glow: 0 0 14px rgba(255, 209, 102, 0.55);\n  --seat-muted: rgba(201, 168, 90, 0.35);\n  --seat-plate: rgba(248, 246, 240, 0.97);\n  --seat-plate-muted: rgba(248, 246, 240, 0.55);\n  --seat-name: #1d1a16;\n  --seat-name-muted: rgba(29, 26, 22, 0.5);\n  --seat-stack: #1d1a16;\n  --seat-stack-muted: rgba(29, 26, 22, 0.45);\n  --seat-timer-ink: #1d1a16;\n  --seat-timer-bg: #ffd166;\n  --seat-radius: 14px;\n  --seat-border-width: 2px;\n\n  --card-back-bg: #141416;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.3) 100%),\n    radial-gradient(circle at 50% 50%, rgba(226, 59, 59, 0.95) 0 13%, rgba(226, 59, 59, 0) 14%),\n    repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.07) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.07) 0 1px, transparent 1px 4px);\n  --card-back-frame: #e8e2d4;\n  --card-back-edge: rgba(0, 0, 0, 0.7);\n  --card-back-inner: rgba(226, 59, 59, 0.6);\n  --table-chip: #c9a85a;\n  --table-chip-ink: #fff;\n  --dealer-bg: #fff;\n  --dealer-ink: #1d1a16;\n  --dealer-ring: #c9a85a;\n}\n\n/* ---------- ACR: black client, slate felt, orange-red accent ------------- */\n[data-skin=\"acr\"] {\n  /* Rounded-square portraits. */\n  --seat-portrait-radius: 12px;\n  --seat-portrait-ring: #3a3f47;\n  --seat-portrait-ring-width: 2px;\n  /* Red Fold, green Call, orange Raise. */\n  --btn-quiet-bg: #5a1a1f;\n  --btn-quiet-ink: #ffd9dc;\n  --btn-quiet-line: rgba(255, 90, 90, 0.25);\n  --btn-plain-bg: #1f7a45;\n  --btn-plain-ink: #fff;\n  --btn-plain-line: rgba(255, 255, 255, 0.12);\n  --btn-radius: 8px;\n\n  --ui-bg: #0c0d10;\n  --ui-accent: #ff5a1f;\n  --ui-accent-hover: #ff7442;\n  --ui-accent-ink: #fff;\n  --ui-ink: #eef0f3;\n  --ui-ink-muted: rgba(238, 240, 243, 0.6);\n  --ui-line: rgba(255, 255, 255, 0.12);\n  --ui-line-strong: rgba(255, 90, 31, 0.55);\n  --ui-line-faint: rgba(255, 255, 255, 0.06);\n  --ui-fill: rgba(255, 255, 255, 0.05);\n  --ui-fill-strong: rgba(255, 90, 31, 0.18);\n  --ui-surface: #15171b;\n  --ui-pot-ink: #fff;\n  --ui-key-ink: #ff5a1f;\n\n  --seat-live: #5b6470;\n  --seat-acting: #ff5a1f;\n  --seat-acting-track: rgba(255, 90, 31, 0.3);\n  --seat-acting-glow: 0 0 14px rgba(255, 90, 31, 0.55);\n  --seat-muted: #353a42;\n  --seat-plate: rgba(16, 18, 22, 0.96);\n  --seat-plate-muted: rgba(16, 18, 22, 0.7);\n  --seat-stack: #ffffff;\n  --seat-stack-muted: rgba(255, 255, 255, 0.4);\n  --seat-timer-ink: #ff5a1f;\n  --seat-timer-bg: #0c0d10;\n  --seat-radius: 8px;\n\n  --card-back-bg: #b8252c;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.25) 100%),\n    radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.28) 0 14%, rgba(255, 255, 255, 0) 15%),\n    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.1) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.1) 0 1px, transparent 1px 4px);\n  --card-back-frame: #f3e9e9;\n  --card-back-edge: rgba(60, 10, 12, 0.6);\n  --table-chip: #ff5a1f;\n  --dealer-bg: #fff;\n  --dealer-ink: #0c0d10;\n  --dealer-ring: #ff5a1f;\n}\n\n/* ---------- Ignition: charcoal client, grey felt, orange racetrack ------- */\n[data-skin=\"ignition\"] {\n  /* Round portraits in a quiet grey ring. */\n  --seat-portrait-radius: 9999px;\n  --seat-portrait-ring: #3a3c41;\n  --seat-portrait-ring-width: 2px;\n  /* Grey Fold and Call, orange Raise. */\n  --btn-quiet-bg: #2e2f33;\n  --btn-quiet-ink: #e6e6e3;\n  --btn-quiet-line: rgba(255, 255, 255, 0.08);\n  --btn-plain-bg: #3b3c41;\n  --btn-plain-ink: #fff;\n  --btn-plain-line: rgba(255, 255, 255, 0.12);\n  --btn-radius: 10px;\n\n  --ui-bg: #1a1a1c;\n  --ui-accent: #f5841f;\n  --ui-accent-hover: #ff9a3d;\n  --ui-accent-ink: #1a0c00;\n  --ui-ink: #f3f3f1;\n  --ui-ink-muted: rgba(243, 243, 241, 0.6);\n  --ui-line: rgba(255, 255, 255, 0.12);\n  --ui-line-strong: rgba(245, 132, 31, 0.55);\n  --ui-line-faint: rgba(255, 255, 255, 0.06);\n  --ui-fill: rgba(255, 255, 255, 0.06);\n  --ui-fill-strong: rgba(245, 132, 31, 0.18);\n  --ui-surface: #242427;\n  --ui-pot-ink: #fff;\n  --ui-key-ink: #f5841f;\n\n  --seat-live: #6b6f76;\n  --seat-acting: #f5841f;\n  --seat-acting-track: rgba(245, 132, 31, 0.3);\n  --seat-acting-glow: 0 0 14px rgba(245, 132, 31, 0.55);\n  --seat-muted: #3a3c41;\n  --seat-plate: rgba(17, 17, 19, 0.96);\n  --seat-plate-muted: rgba(17, 17, 19, 0.7);\n  --seat-stack: #f5c04a;\n  --seat-timer-ink: #f5841f;\n  --seat-timer-bg: #1a1a1c;\n  --seat-radius: 10px;\n\n  --card-back-bg: #2a2b30;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.16) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.3) 100%),\n    radial-gradient(circle at 50% 50%, rgba(245, 132, 31, 0.9) 0 13%, rgba(245, 132, 31, 0) 14%),\n    repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 4px);\n  --card-back-frame: #f5841f;\n  --card-back-edge: rgba(0, 0, 0, 0.7);\n  --card-back-inner: rgba(245, 132, 31, 0.5);\n  --table-chip: #f5841f;\n  --table-chip-ink: #fff;\n  --dealer-bg: #f5841f;\n  --dealer-ink: #1a0c00;\n  --dealer-ring: #fff;\n}\n\n/* ---------- Halloween: midnight purple felt, pumpkin orange ------------- */\n[data-skin=\"halloween\"] {\n  --ui-bg: #0a0410;\n  --ui-accent: #ff7a18;\n  --ui-accent-hover: #ff9440;\n  --ui-accent-ink: #1a0800;\n  --ui-accent-glow: 0 0 14px rgba(255, 122, 24, 0.45), 0 0 36px rgba(255, 122, 24, 0.15);\n  --ui-accent-glow-hover: 0 0 18px rgba(255, 122, 24, 0.6), 0 0 44px rgba(255, 122, 24, 0.22);\n  --ui-glow: 0 0 10px rgba(255, 122, 24, 0.4);\n  --ui-ink: #f6ecff;\n  --ui-ink-muted: rgba(246, 236, 255, 0.6);\n  --ui-line: rgba(255, 122, 24, 0.3);\n  --ui-line-strong: rgba(255, 122, 24, 0.6);\n  --ui-line-faint: rgba(255, 122, 24, 0.12);\n  --ui-fill: rgba(140, 80, 200, 0.14);\n  --ui-fill-strong: rgba(255, 122, 24, 0.18);\n  --ui-surface: #190b26;\n  --ui-pot-ink: #ffb46b;\n  --ui-key-ink: #ff7a18;\n\n  --seat-live: #7a4cae;\n  --seat-acting: #ff7a18;\n  --seat-acting-track: rgba(255, 122, 24, 0.3);\n  --seat-acting-glow: 0 0 14px rgba(255, 122, 24, 0.6), 0 0 30px rgba(255, 122, 24, 0.2);\n  --seat-muted: rgba(122, 76, 174, 0.35);\n  --seat-sitout: #b6ff3b;\n  --seat-plate: rgba(10, 4, 16, 0.94);\n  --seat-plate-muted: rgba(10, 4, 16, 0.65);\n  --seat-name: #f6ecff;\n  --seat-name-muted: rgba(246, 236, 255, 0.4);\n  --seat-stack: #ff9a3d;\n  --seat-stack-muted: rgba(255, 154, 61, 0.4);\n  --seat-timer-ink: #ff7a18;\n  --seat-timer-bg: #0a0410;\n  --seat-winner-glow: rgba(255, 122, 24, 0.75);\n  --seat-portrait-radius: 9999px;\n  --seat-portrait-ring: #ff7a18;\n  --seat-portrait-ring-width: 2px;\n  --seat-radius: 12px;\n\n  --card-back-bg: #140821;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.3) 100%),\n    radial-gradient(circle at 50% 50%, rgba(255, 122, 24, 0.95) 0 13%, rgba(255, 122, 24, 0) 14%),\n    repeating-linear-gradient(45deg, rgba(190, 120, 255, 0.12) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(-45deg, rgba(190, 120, 255, 0.12) 0 1px, transparent 1px 4px);\n  --card-back-frame: #ff7a18;\n  --card-back-edge: rgba(0, 0, 0, 0.7);\n  --card-back-inner: rgba(255, 122, 24, 0.5);\n  --table-chip: #ff7a18;\n  --table-chip-ink: #fff;\n  --dealer-bg: #ff7a18;\n  --dealer-ink: #1a0800;\n  --dealer-ring: #f6ecff;\n  --slot-border: rgba(255, 122, 24, 0.25);\n  --slot-bg: rgba(0, 0, 0, 0.3);\n\n  --btn-quiet-bg: #1b0d2a;\n  --btn-quiet-ink: rgba(246, 236, 255, 0.7);\n  --btn-quiet-line: rgba(122, 76, 174, 0.35);\n  --btn-plain-bg: #4a2a78;\n  --btn-plain-ink: #fff;\n  --btn-plain-line: rgba(190, 120, 255, 0.3);\n  --btn-radius: 12px;\n}\n\n/* ---------- pokerdata: charcoal felt, white hairlines, no colour ---------- */\n[data-skin=\"pokerdata\"] {\n  --ui-bg: #0a0a0a;\n  --ui-accent: #fafafa;\n  --ui-accent-hover: #ffffff;\n  --ui-accent-ink: #0a0a0a;\n  --ui-ink: #fafafa;\n  --ui-ink-muted: rgba(250, 250, 250, 0.6);\n  --ui-line: rgba(255, 255, 255, 0.1);\n  --ui-line-strong: rgba(255, 255, 255, 0.4);\n  --ui-line-faint: rgba(255, 255, 255, 0.06);\n  --ui-fill: rgba(255, 255, 255, 0.06);\n  --ui-fill-strong: rgba(255, 255, 255, 0.14);\n  --ui-surface: #171717;\n  --ui-pot-ink: #fafafa;\n  --ui-key-ink: #fafafa;\n\n  --btn-quiet-bg: #171717;\n  --btn-quiet-ink: #fafafa;\n  --btn-quiet-line: rgba(255, 255, 255, 0.1);\n  --btn-plain-bg: #262626;\n  --btn-plain-ink: #fafafa;\n  --btn-plain-line: rgba(255, 255, 255, 0.14);\n  --btn-radius: 6px;\n\n  --seat-live: rgba(255, 255, 255, 0.45);\n  --seat-acting: #fafafa;\n  --seat-acting-track: rgba(255, 255, 255, 0.25);\n  --seat-acting-glow: 0 0 12px rgba(255, 255, 255, 0.35);\n  --seat-muted: rgba(255, 255, 255, 0.14);\n  --seat-plate: rgba(10, 10, 10, 0.94);\n  --seat-plate-muted: rgba(10, 10, 10, 0.6);\n  --seat-stack: #fafafa;\n  --seat-timer-ink: #fafafa;\n  --seat-timer-bg: #0a0a0a;\n  --seat-radius: 6px;\n  --seat-border-width: 1px;\n\n  --card-back-bg: #262626;\n  --card-back-image: linear-gradient(158deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.02) 45%, rgba(0, 0, 0, 0.25) 100%),\n    repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 0 1px, transparent 1px 4px),\n    repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.05) 0 1px, transparent 1px 4px);\n  --card-back-frame: rgba(255, 255, 255, 0.35);\n  --card-back-edge: rgba(0, 0, 0, 0.7);\n  --card-back-inner: rgba(255, 255, 255, 0.12);\n  --table-chip: #fafafa;\n  --table-chip-ink: #fafafa;\n  --dealer-bg: #fafafa;\n  --dealer-ink: #0a0a0a;\n  --dealer-ring: #0a0a0a;\n}\n\n/* ======================= shared hook rules ============================== */\n\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) {\n  background: var(--ui-bg);\n  color-scheme: dark;\n}\n\n/* Seat plates */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-seat-plate] {\n  border-radius: var(--seat-radius, 12px);\n  border-width: var(--seat-border-width, 2px);\n  backdrop-filter: blur(4px);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-seat-stack] {\n  font-family: var(--ui-font, inherit);\n  text-shadow: var(--seat-stack-shadow, none);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-seat-name] {\n  font-family: var(--ui-font, inherit);\n}\n[data-skin=\"matrix\"] [data-seat-plate][data-acting] [data-seat-stack] {\n  text-shadow: 0 0 10px rgba(0, 255, 65, 0.8);\n}\n[data-skin=\"matrix\"] [data-seat-name] {\n  font-weight: 500;\n  letter-spacing: 0.02em;\n}\n\n/* Action tags on the plate. Matrix outlines them; the site skins keep the pills. */\n[data-skin=\"matrix\"] [data-action-tag] {\n  background: #000 !important;\n  border: 1px solid currentColor;\n  font-family: var(--font-mono);\n  letter-spacing: 0.08em;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.8);\n}\n[data-skin=\"matrix\"] [data-action-tag=\"fold\"] {\n  color: rgba(216, 255, 226, 0.45) !important;\n}\n[data-skin=\"matrix\"] [data-action-tag=\"check\"] {\n  color: #7ad7ff !important;\n}\n[data-skin=\"matrix\"] [data-action-tag=\"call\"] {\n  color: #00ff41 !important;\n}\n[data-skin=\"matrix\"] [data-action-tag=\"bet\"] {\n  color: #ffb13b !important;\n}\n\n/* Pot pill */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-pot-pill] {\n  background: var(--ui-surface) !important;\n  border: 1px solid var(--ui-line-strong);\n  color: var(--ui-pot-ink) !important;\n  font-family: var(--ui-font, inherit);\n  font-weight: 600;\n  letter-spacing: var(--ui-tracking, 0.02em);\n  text-transform: uppercase;\n  box-shadow: var(--ui-glow, none), 0 2px 8px rgba(0, 0, 0, 0.6) !important;\n}\n\n/* Board slots */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) .border-dashed {\n  border-color: var(--slot-border, rgba(255, 255, 255, 0.15)) !important;\n  background: var(--slot-bg, rgba(0, 0, 0, 0.2)) !important;\n}\n\n/* Header: hand strip and session accuracy. */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-strip-chip] {\n  background: var(--ui-surface) !important;\n  border: 1px solid var(--ui-line);\n  color: var(--ui-ink) !important;\n  font-family: var(--ui-font, inherit);\n  font-weight: 500;\n  opacity: 1 !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-strip-chip=\"fold\"] {\n  border-color: var(--ui-line-faint);\n  color: var(--ui-ink-muted) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-strip-chip=\"take-action\"] {\n  border-color: var(--ui-accent);\n  color: var(--ui-accent) !important;\n  box-shadow: var(--ui-glow, none);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-pos-chip] {\n  background: var(--ui-fill-strong) !important;\n  color: var(--ui-accent) !important;\n  font-family: var(--ui-font, inherit);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-pos-chip=\"muted\"] {\n  background: var(--ui-fill) !important;\n  color: var(--ui-ink-muted) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-accuracy] > span:first-child {\n  color: var(--ui-ink-muted) !important;\n  font-family: var(--ui-font, inherit);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-accuracy] > span:last-child {\n  color: var(--ui-accent) !important;\n  text-shadow: var(--ui-glow, none);\n}\n\n/* RNG number in the corner. */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rng] [role=\"status\"] > span:first-child {\n  color: var(--ui-accent) !important;\n  text-shadow: var(--ui-glow, none);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rng] [role=\"status\"] > span:last-child {\n  color: var(--ui-ink-muted) !important;\n}\n\n/* Action bar: Fold quiet, Check/Call plain, Raise in the accent. */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button] {\n  border-radius: var(--btn-radius, 10px) !important;\n  border-width: 1px;\n  font-family: var(--ui-font, inherit);\n  transition:\n    background-color 0.15s ease,\n    box-shadow 0.15s ease,\n    border-color 0.15s ease;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"quiet\"] {\n  background: var(--btn-quiet-bg, var(--ui-surface)) !important;\n  border-color: var(--btn-quiet-line, var(--ui-line-faint)) !important;\n  color: var(--btn-quiet-ink, var(--ui-ink-muted)) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"quiet\"]:hover:not(:disabled) {\n  border-color: var(--ui-line) !important;\n  color: var(--ui-ink) !important;\n  filter: brightness(1.12);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"plain\"] {\n  background: var(--btn-plain-bg, var(--ui-fill)) !important;\n  border-color: var(--btn-plain-line, var(--ui-line)) !important;\n  color: var(--btn-plain-ink, var(--ui-ink)) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"plain\"]:hover:not(:disabled) {\n  border-color: var(--ui-line-strong) !important;\n  filter: brightness(1.12);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"strong\"] {\n  background: var(--ui-accent) !important;\n  border-color: var(--ui-accent) !important;\n  color: var(--ui-accent-ink) !important;\n  box-shadow: var(--ui-accent-glow, 0 4px 14px rgba(0, 0, 0, 0.35));\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button=\"strong\"]:hover:not(:disabled) {\n  background: var(--ui-accent-hover) !important;\n  box-shadow: var(--ui-accent-glow-hover, 0 6px 18px rgba(0, 0, 0, 0.4));\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-action-button] kbd {\n  border-color: currentColor;\n  opacity: 0.6;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-empty-cell] {\n  border-color: var(--ui-line-faint) !important;\n  background: transparent !important;\n  border-radius: var(--btn-radius, 10px);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-size-chip] {\n  border-color: var(--ui-line) !important;\n  color: var(--ui-ink-muted) !important;\n  font-family: var(--ui-font, inherit);\n  background: var(--ui-surface) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-size-chip]:hover:not(:disabled) {\n  border-color: var(--ui-line-strong) !important;\n  color: var(--ui-ink) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-size-chip][aria-pressed=\"true\"] {\n  border-color: var(--ui-accent) !important;\n  background: var(--ui-fill-strong) !important;\n  color: var(--ui-accent) !important;\n}\n\n/* Session dock: outlined tiles, the primary one in the accent. */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rail-tile] {\n  border: 1px solid var(--ui-line);\n  background: var(--ui-surface) !important;\n  color: var(--ui-ink) !important;\n  border-radius: 12px !important;\n  backdrop-filter: blur(6px);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rail-tile]:hover {\n  background: var(--ui-fill-strong) !important;\n  border-color: var(--ui-line-strong);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rail-tile=\"current\"] {\n  background: var(--ui-fill-strong) !important;\n  border-color: var(--ui-accent);\n  color: var(--ui-accent) !important;\n  box-shadow: var(--ui-glow, none);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rail-tile=\"primary\"] {\n  background: var(--ui-accent) !important;\n  border-color: var(--ui-accent);\n  color: var(--ui-accent-ink) !important;\n  box-shadow: var(--ui-accent-glow, 0 4px 14px rgba(0, 0, 0, 0.35));\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-rail-key] {\n  background: var(--ui-bg) !important;\n  border-color: var(--ui-line-strong) !important;\n  color: var(--ui-key-ink) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-mobile-dock] {\n  background: var(--ui-surface) !important;\n  border-color: var(--ui-line) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) button[aria-label=\"Keyboard shortcuts\"] {\n  color: var(--ui-ink-muted);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) button[aria-label=\"Keyboard shortcuts\"]:hover {\n  background: var(--ui-fill-strong);\n  color: var(--ui-accent);\n}\n\n/* Lobby */\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby] h1 {\n  font-family: var(--ui-font, inherit);\n  color: var(--ui-accent);\n  text-shadow: var(--ui-glow, none);\n}\n[data-skin=\"matrix\"] [data-lobby] h1 {\n  letter-spacing: 0.04em;\n}\n[data-skin=\"matrix\"] [data-lobby] h1::before {\n  content: \"> \";\n  opacity: 0.6;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby] [role=\"tablist\"] {\n  border-color: var(--ui-line) !important;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby] [role=\"tab\"] {\n  font-family: var(--ui-font, inherit);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby] [role=\"tab\"][aria-selected=\"true\"] {\n  border-color: var(--ui-accent) !important;\n  color: var(--ui-accent) !important;\n  text-shadow: var(--ui-glow, none);\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby-art] {\n  background: var(--ui-surface) !important;\n  border: 1px solid var(--ui-line);\n  transition:\n    border-color 0.2s ease,\n    box-shadow 0.2s ease;\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby] button:not(:disabled):hover [data-lobby-art] {\n  border-color: var(--ui-accent);\n  box-shadow: var(--ui-accent-glow, 0 8px 24px rgba(0, 0, 0, 0.45));\n}\n:is([data-skin=\"matrix\"], [data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby-felt] {\n  border-color: var(--ui-line-strong) !important;\n}\n[data-skin=\"matrix\"] [data-lobby-felt] {\n  box-shadow:\n    0 0 16px rgba(0, 255, 65, 0.18),\n    inset 0 0 24px rgba(0, 255, 65, 0.08);\n}\n[data-skin=\"matrix\"] [data-lobby-card] {\n  background-color: #020a04 !important;\n  border-color: rgba(0, 255, 65, 0.55) !important;\n  background-image: repeating-linear-gradient(90deg, rgba(0, 255, 65, 0.18) 0 1px, transparent 1px 4px) !important;\n}\n:is([data-skin=\"coinpoker\"], [data-skin=\"ggpoker\"], [data-skin=\"acr\"], [data-skin=\"ignition\"], [data-skin=\"halloween\"], [data-skin=\"pokerdata\"]) [data-lobby-card] {\n  background-color: var(--card-back-bg) !important;\n  border-color: var(--card-back-frame) !important;\n}\n\n/*\n * Phone table (the table container under 32rem, where the shared layout\n * switches to the portrait oval). The oval fills the space between the\n * header and the action bar instead of keeping a fixed 3:4 shape: taller on\n * a tall phone (down to a 0.55 width-to-height ratio), rounder when the\n * browser's toolbars leave less height, so the seats spread over the whole\n * stage instead of crowding into a small oval. `anchorsFor` places the seats\n * for the shape it measures. The hero's cards sit clear of their nameplate,\n * and an action tag gets its own strip on top of the plate instead of\n * covering the name.\n */\n@container (width < 32rem) {\n  [data-skin=\"matrix\"] [data-table-oval] {\n    aspect-ratio: auto;\n    width: 100%;\n    max-width: none;\n    height: min(100%, calc(100cqw / 0.55));\n  }\n  [data-skin=\"matrix\"] [data-seat-hand=\"hero\"] {\n    margin-bottom: 0.25rem;\n  }\n  [data-skin=\"matrix\"] [data-seat-hand=\"hero\"] .coin-hole-card {\n    font-size: 12px;\n  }\n  [data-skin=\"matrix\"] [data-seat-plate]:has([data-action-tag]) {\n    padding-top: 0.6rem;\n  }\n}\n\n/* The frame around the phone oval leaves less room above and below: the top\n   seat and the hero's plate still clear the header and the action bar. */\n@media (width < 32rem) {\n  [data-skin=\"matrix\"] :has(> [data-table-oval]) {\n    padding-block: 1.75rem;\n  }\n}\n",
      "type": "registry:file",
      "target": "app/table-skins.css"
    }
  ],
  "type": "registry:lib"
}