/* tcgbinder theme.css — three skins, one component set. See docs/08-visual-design.md.
   Switch with <html data-skin="mako|wasteland|kaiju|showdown">. All skins are dark; print is black-on-white.
   Contrast measured by tools/contrast.py: every text token >= 4.5:1, accents/status >= 3:1. */

/* ---------------------------------------------------------------- tokens */
:root, :root[data-skin="mako"] {
  --bg: #050a24; --surface: #0c1a4d; --surface-low: #071033; --surface-2: #0f2160;
  --border: #dfe6ff; --border-inner: #2b3d8f; --border-w: 2px;
  --ink: #eef2ff; --ink-2: #aab6e6; --ink-muted: #6f7fbf;
  --accent: #5ef2c0; --accent-2: #ffd75e;
  --good: #57e389; --warn: #ffd75e; --bad: #ff8a5b; --critical: #ff5c7a;
  --gauge-a: #5ef2c0; --gauge-b: #3496ef;
  --radius: 2px;
  --font-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-display: var(--font-ui);
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --display-weight: 600; --display-transform: none; --display-spacing: .04em;
  --shadow: inset 0 0 0 1px var(--border-inner), 0 2px 0 #00000080;
  --panel-bg: linear-gradient(180deg, var(--surface), var(--surface-low));
  --pointer: "▶";
}
:root[data-skin="wasteland"] {
  --bg: #0b0800; --surface: #120d00; --surface-low: #120d00; --surface-2: #1a1300;
  --border: #ffb000; --border-inner: transparent; --border-w: 1px;
  --ink: #ffb000; --ink-2: #b37a00; --ink-muted: #8a5f00;
  --accent: #ffd35c; --accent-2: #ffb000;
  --good: #5cff7a; --warn: #ffd35c; --bad: #ff8a3d; --critical: #ff5c3a;
  --gauge-a: #ffb000; --gauge-b: #ffb000;
  --radius: 0;
  --font-ui: "VT323", "IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;
  --font-display: var(--font-ui);
  --font-mono: var(--font-ui);
  --display-weight: 400; --display-transform: uppercase; --display-spacing: .08em;
  --shadow: none;
  --panel-bg: var(--surface);
  --pointer: ">";
  --ui-scale: 1.15; /* VT323 renders small; body font-size is multiplied */
}
:root[data-skin="wasteland"][data-phosphor="green"] {
  --bg: #050a05; --surface: #0b140b; --surface-low: #0b140b; --surface-2: #112011;
  --border: #33ff66; --ink: #33ff66; --ink-2: #1fae46; --ink-muted: #178a37;
  --accent: #b6ffc8; --accent-2: #33ff66; --gauge-a: #33ff66; --gauge-b: #33ff66;
}
:root[data-skin="kaiju"] {
  --bg: #0b0808; --surface: #161010; --surface-low: #161010; --surface-2: #1f1616;
  --border: #3a2a2a; --border-inner: transparent; --border-w: 1px; --rule: #ff3b2f;
  --ink: #f1eae0; --ink-2: #b9aca6; --ink-muted: #7d6f6a;
  --accent: #ff3b2f; --accent-2: #ffb020;
  --good: #8be36a; --warn: #ffb020; --bad: #ff7a3d; --critical: #ff3b2f;
  --gauge-a: #ff3b2f; --gauge-b: #ffb020;
  --radius: 0;
  --font-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-display: "Anton", "Oswald", "Arial Narrow", Impact, sans-serif-condensed, sans-serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --display-weight: 400; --display-transform: uppercase; --display-spacing: .06em;
  --shadow: 0 8px 24px #00000099;
  --panel-bg: var(--surface);
  --pointer: "■";
}
:root[data-skin="showdown"] {
  /* monster-movie double bill: a colossal crab (teal, tremor) against a giant moth (gold, wingbeat) */
  --bg: #070b0e; --surface: #0d1418; --surface-low: #0a1013; --surface-2: #132029;
  --border: #22333a; --border-inner: transparent; --border-w: 1px; --rule: #3ee8c8; --rule-2: #ffcf5a;
  --ink: #eef3ef; --ink-2: #a9bcb6; --ink-muted: #6f8681;
  --accent: #3ee8c8; --accent-2: #ffcf5a;
  --good: #7ee787; --warn: #ffcf5a; --bad: #ff8c5a; --critical: #ff5470;
  --gauge-a: #3ee8c8; --gauge-b: #ffcf5a;
  --radius: 2px;
  --font-ui: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-display: "Anton", "Oswald", "Arial Narrow", Impact, sans-serif-condensed, sans-serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --display-weight: 400; --display-transform: uppercase; --display-spacing: .08em;
  --shadow: 0 10px 28px #000000aa;
  --panel-bg: linear-gradient(180deg, var(--surface-2) 0%, var(--surface) 38px);
  --pointer: "◆";
}

/* game-data colors: fixed across skins, always paired with a glyph or label */
:root {
  --role-ramp: #199e70; --role-draw: #3987e5; --role-removal: #e66767; --role-protection: #c98500;
  --role-tutor: #9085e9; --role-wincon: #d55181; --role-token: #d95926; --role-land: #8f8f8f;
  --mtg-w: #efe6c4; --mtg-u: #3987e5; --mtg-b: #8c7fb0; --mtg-r: #e66767; --mtg-g: #199e70; --mtg-c: #9a9a9a; --mtg-m: #c98500;
  --series-1: #3987e5; --series-2: #d95926; --series-3: #199e70; --series-4: #c98500;
  --series-5: #d55181; --series-6: #008300; --series-7: #9085e9; --series-8: #e66767;
  --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 24px; --space-6: 32px;
}

/* ---------------------------------------------------------------- base */
*, *::before, *::after { box-sizing: border-box; }
html { color-scheme: dark; }
body {
  margin: 0; background: var(--bg); color: var(--ink);
  font-family: var(--font-ui); font-size: calc(15px * var(--ui-scale, 1)); line-height: 1.45;
  min-height: 100vh; padding-block: var(--space-4); padding-inline: var(--space-4);
}
h1, h2, h3, .display {
  font-family: var(--font-display); font-weight: var(--display-weight);
  text-transform: var(--display-transform); letter-spacing: var(--display-spacing);
  color: var(--accent-2); margin: 0 0 var(--space-3);
}
h1 { font-size: 1.9em; } h2 { font-size: 1.4em; } h3 { font-size: 1.1em; }
:root[data-skin="kaiju"] h1, :root[data-skin="showdown"] h1 { font-size: 2.6em; line-height: 1; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.mono, .num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.muted { color: var(--ink-muted); } .secondary { color: var(--ink-2); }
.label { font-size: .78em; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-2); }
hr { border: 0; border-top: 1px solid var(--border); opacity: .5; }

/* ---------------------------------------------------------------- panel (the JRPG window) */
.panel {
  background: var(--panel-bg); border: var(--border-w) solid var(--border); border-radius: var(--radius);
  box-shadow: var(--shadow); padding: var(--space-4); margin-block-end: var(--space-4);
  position: relative;
}
.panel > .panel-title {
  font-family: var(--font-display); font-weight: var(--display-weight); text-transform: var(--display-transform);
  letter-spacing: var(--display-spacing); color: var(--accent-2); font-size: .95em;
  margin: calc(-1 * var(--space-4)) calc(-1 * var(--space-4)) var(--space-3);
  padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-inner, var(--border));
}
:root[data-skin="mako"] .panel > .panel-title { font-variant: small-caps; letter-spacing: .1em; }
:root[data-skin="wasteland"] .panel > .panel-title::before { content: "▌ "; animation: blink 1.2s steps(1) infinite; }
:root[data-skin="kaiju"] .panel { border-top: 4px solid var(--rule); }
:root[data-skin="kaiju"] .panel > .panel-title { font-size: 1.3em; }
/* showdown: every panel is split between the two titans — teal on the left, gold on the right */
:root[data-skin="showdown"] .panel { border-top: 4px solid transparent; border-image: linear-gradient(90deg, var(--rule) 0 48%, var(--rule-2) 52% 100%) 1; }
:root[data-skin="showdown"] .panel > .panel-title { font-size: 1.25em; }
:root[data-skin="showdown"] .panel > .panel-title::after { content: ""; display: inline-block; width: .6em; height: .6em; margin-inline-start: .5em; vertical-align: middle; background: var(--rule-2); clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); }
.panel .panel-footer { margin: var(--space-3) calc(-1 * var(--space-4)) calc(-1 * var(--space-4)); padding: var(--space-2) var(--space-4); border-top: 1px solid var(--border-inner, var(--border)); color: var(--ink-2); font-size: .9em; }

/* ---------------------------------------------------------------- menu list */
.menu { list-style: none; margin: 0; padding: 0; }
.menu li { display: grid; grid-template-columns: 1.4em 1fr auto; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-2); border-radius: var(--radius); cursor: pointer; min-height: 44px; }
.menu li::before { content: ""; color: var(--accent); font-family: var(--font-mono); }
.menu li:hover, .menu li[aria-selected="true"], .menu li:focus-visible { background: var(--surface-2); }
.menu li[aria-selected="true"]::before, .menu li:focus-visible::before { content: var(--pointer); }
:root[data-skin="wasteland"] .menu li[aria-selected="true"]::before { animation: blink 1s steps(1) infinite; }
.menu li .num { color: var(--ink-2); }

/* ---------------------------------------------------------------- gauge (segmented bar) */
.gauge { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: var(--space-2); }
.gauge .segments { display: grid; grid-template-columns: repeat(12, 1fr); gap: 2px; height: 10px; }
.gauge .segments i { display: block; background: var(--surface-2); border: 1px solid var(--border-inner, var(--border)); }
.gauge .segments i.on { background: linear-gradient(90deg, var(--gauge-a), var(--gauge-b)); border-color: transparent; }
.gauge .value { font-family: var(--font-mono); font-variant-numeric: tabular-nums; color: var(--ink-2); min-width: 3.5em; text-align: right; }
:root[data-skin="wasteland"] .gauge .segments i.on { background: var(--gauge-a); }

/* ---------------------------------------------------------------- orb (role marker) */
.orb { display: inline-block; width: 12px; height: 12px; border-radius: 50%; vertical-align: -1px; margin-inline-end: var(--space-1);
  background: radial-gradient(circle at 35% 30%, #ffffffb0 0 12%, transparent 40%), var(--orb, var(--ink-muted)); }
:root[data-skin="wasteland"] .orb { background: transparent; border: 2px solid var(--orb, var(--ink-muted)); }
:root[data-skin="kaiju"] .orb { border-radius: 0; background: var(--orb, var(--ink-muted)); }
:root[data-skin="showdown"] .orb { border-radius: 0; background: var(--orb, var(--ink-muted)); clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); }
.orb[data-role="ramp"] { --orb: var(--role-ramp); } .orb[data-role="draw"] { --orb: var(--role-draw); }
.orb[data-role="removal"] { --orb: var(--role-removal); } .orb[data-role="protection"] { --orb: var(--role-protection); }
.orb[data-role="tutor"] { --orb: var(--role-tutor); } .orb[data-role="wincon"] { --orb: var(--role-wincon); }
.orb[data-role="token"] { --orb: var(--role-token); } .orb[data-role="land"] { --orb: var(--role-land); }

/* ---------------------------------------------------------------- badges */
.badge { display: inline-flex; align-items: center; gap: var(--space-1); padding: 1px var(--space-2); font-size: .78em; letter-spacing: .06em; text-transform: uppercase;
  border: 1px solid var(--border); border-radius: var(--radius); color: var(--ink-2); font-family: var(--font-mono); }
.badge[data-status="good"] { color: var(--good); border-color: var(--good); }
.badge[data-status="warn"] { color: var(--warn); border-color: var(--warn); }
.badge[data-status="bad"] { color: var(--bad); border-color: var(--bad); }
.badge[data-status="critical"] { color: var(--critical); border-color: var(--critical); }
.badge[data-level]::before { content: "○○○○○"; letter-spacing: -.05em; }
.badge[data-level="1"]::before { content: "●○○○○"; } .badge[data-level="2"]::before { content: "●●○○○"; }
.badge[data-level="3"]::before { content: "●●●○○"; } .badge[data-level="4"]::before { content: "●●●●○"; } .badge[data-level="5"]::before { content: "●●●●●"; }
:root[data-skin="kaiju"] .badge[data-level] { font-family: var(--font-display); font-size: .9em; color: var(--accent); border-color: var(--accent); }
:root[data-skin="kaiju"] .badge[data-level]::before { content: "THREAT "; letter-spacing: .06em; }
:root[data-skin="kaiju"] .badge[data-level]::after { content: attr(data-level); }
:root[data-skin="showdown"] .badge[data-level] { font-family: var(--font-display); font-size: .9em; color: var(--accent-2); border-color: var(--accent-2); }
:root[data-skin="showdown"] .badge[data-level]::before { content: "ROUND "; letter-spacing: .06em; }
:root[data-skin="showdown"] .badge[data-level]::after { content: attr(data-level); }

/* ---------------------------------------------------------------- buttons & inputs */
.btn { font: inherit; font-family: var(--font-display); font-weight: var(--display-weight); text-transform: var(--display-transform); letter-spacing: var(--display-spacing);
  background: var(--accent); color: var(--bg); border: 2px solid var(--accent); border-radius: var(--radius); padding: var(--space-2) var(--space-4); min-height: 44px; cursor: pointer; }
.btn.secondary { background: transparent; color: var(--accent); }
.btn.danger { background: var(--bad); border-color: var(--bad); color: var(--bg); }
.btn:hover { filter: brightness(1.1); }
:root[data-skin="wasteland"] .btn { background: transparent; color: var(--ink); border-color: transparent; padding-inline: var(--space-2); }
:root[data-skin="wasteland"] .btn::before { content: "[ "; } :root[data-skin="wasteland"] .btn::after { content: " ]"; }
:root[data-skin="wasteland"] .btn:hover, :root[data-skin="wasteland"] .btn:focus-visible { background: var(--ink); color: var(--bg); }
:root[data-skin="wasteland"] .btn.danger { color: var(--critical); }
input, select, textarea { font: inherit; color: var(--ink); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius); padding: var(--space-2) var(--space-3); min-height: 44px; width: 100%; }
input::placeholder { color: var(--ink-muted); }
.field { display: grid; gap: var(--space-1); margin-block-end: var(--space-3); }

/* ---------------------------------------------------------------- card tile & table */
.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(120px, 22vw, 160px), 1fr)); gap: var(--space-3); }
.card-tile { position: relative; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; background: var(--surface-2); aspect-ratio: 63 / 88; max-width: 100%; }
.card-tile img, .card-tile .placeholder { width: 100%; height: 100%; object-fit: cover; display: block; }
.card-tile .placeholder { display: grid; place-items: center; color: var(--ink-muted); padding: var(--space-3); text-align: center; font-size: .8em; }
.card-tile .chip { position: absolute; bottom: var(--space-1); padding: 0 var(--space-1); font-family: var(--font-mono); font-size: .75em; background: #000000b0; color: var(--ink); border-radius: var(--radius); }
.card-tile .chip.owned { left: var(--space-1); color: var(--good); } .card-tile .chip.price { right: var(--space-1); }
.card-tile .roles { position: absolute; top: var(--space-1); right: var(--space-1); }
.table { width: 100%; border-collapse: collapse; font-size: .95em; }
.table th { text-align: left; font-size: .78em; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-2); position: sticky; top: 0; background: var(--surface); border-bottom: 1px solid var(--border); padding: var(--space-2); }
.table td { padding: var(--space-2); border-bottom: 1px solid var(--border-inner, transparent); }
.table tbody tr:nth-child(even) { background: var(--surface-2); }
.table td.num, .table th.num { text-align: right; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.delta-up { color: var(--good); } .delta-down { color: var(--bad); }
.table-wrap { overflow-x: auto; }

/* ---------------------------------------------------------------- toast, dialog, mascots */
.toast { position: fixed; right: var(--space-4); bottom: var(--space-4); max-width: min(360px, calc(100vw - 32px)); z-index: 20; }
dialog.panel { margin: auto; max-width: min(560px, calc(100vw - 32px)); animation: unroll 120ms ease-out; }
dialog::backdrop { background: #000000a0; }
:root[data-skin="wasteland"] dialog.panel { animation: none; }
:root[data-skin="kaiju"] dialog.panel { animation: stomp 160ms ease-out; }
:root[data-skin="showdown"] dialog.panel { animation: wingbeat 260ms ease-out; }
.mascot { display: inline-block; fill: currentColor; }
.empty { display: grid; justify-items: center; gap: var(--space-2); color: var(--ink-2); padding: var(--space-5); text-align: center; }
.empty .mascot { width: 96px; height: 96px; color: var(--ink-2); }  /* plumage in the secondary ink: a grey-brown ground bird, not a gold one */
.masthead { position: relative; overflow: hidden; }
.masthead .mascot.kaiju-bg { display: none; }
:root[data-skin="kaiju"] .masthead .mascot.kaiju-bg { display: block; position: absolute; right: -20px; bottom: -30px; width: 260px; height: 160px; color: var(--rule); opacity: .18; pointer-events: none; }
.masthead .mascot.moth-bg { display: none; }
:root[data-skin="showdown"] .masthead .mascot.kaiju-bg { display: block; position: absolute; left: -30px; bottom: -34px; width: 240px; height: 148px; color: var(--rule); opacity: .16; pointer-events: none; }
:root[data-skin="showdown"] .masthead .mascot.moth-bg { display: block; position: absolute; right: -24px; bottom: -22px; width: 250px; height: 150px; color: var(--rule-2); opacity: .16; pointer-events: none; animation: hover-wing 4s ease-in-out infinite; }
.seismo { display: none; }
:root[data-skin="kaiju"] .seismo { display: block; width: 100%; height: 14px; color: var(--rule); }
:root[data-skin="showdown"] .seismo { display: block; width: 100%; height: 14px; color: var(--rule); filter: drop-shadow(0 0 5px var(--rule-2)); }

/* ---------------------------------------------------------------- chart frame */
.chart { background: var(--surface-low); border: 1px solid var(--border-inner, var(--border)); padding: var(--space-3); border-radius: var(--radius); }
.chart .legend { display: flex; flex-wrap: wrap; gap: var(--space-3); font-size: .85em; color: var(--ink-2); margin-block-start: var(--space-2); }
.chart .legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-inline-end: var(--space-1); vertical-align: -1px; }
.chart .legend .s1 i { background: var(--series-1); } .chart .legend .s2 i { background: var(--series-2); } .chart .legend .s3 i { background: var(--series-3); } .chart .legend .s4 i { background: var(--series-4); }
.chart svg text { fill: var(--ink-2); font-family: var(--font-mono); font-size: 11px; }
.chart svg .grid { stroke: var(--border-inner, var(--border)); stroke-opacity: .5; }
.chart svg .axis { stroke: var(--ink-muted); }
:root[data-skin="wasteland"] .chart svg .axis { stroke: var(--ink); }

/* ---------------------------------------------------------------- scanlines (wasteland) */
:root[data-skin="wasteland"]:not([data-crt="off"]) body::after {
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 50;
  background: repeating-linear-gradient(0deg, transparent 0 2px, #00000033 2px 3px);
}
:root[data-skin="wasteland"][data-flicker="on"] body::after { animation: flicker 4s steps(2) infinite; }

/* ---------------------------------------------------------------- layout helpers */
.grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-4); }
.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--space-3); }
.tile { background: var(--surface-2); border: 1px solid var(--border-inner, var(--border)); border-radius: var(--radius); padding: var(--space-3); }
.tile .big { font-family: var(--font-mono); font-size: 1.6em; color: var(--accent-2); font-variant-numeric: tabular-nums; }
.tabbar { position: fixed; inset-inline: 0; bottom: 0; display: none; grid-auto-flow: column; background: var(--surface); border-top: var(--border-w) solid var(--border); }
.tabbar a { padding: var(--space-3); text-align: center; font-size: .8em; letter-spacing: .06em; text-transform: uppercase; }
@media (max-width: 480px) { .tabbar { display: grid; } body { padding-block-end: 72px; } }

/* ---------------------------------------------------------------- motion */
@keyframes blink { 50% { opacity: 0; } }
@keyframes unroll { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes stomp { 0% { transform: translateY(-6px); box-shadow: 0 0 0 4px var(--rule); } 100% { transform: none; } }
@keyframes flicker { 0%, 100% { opacity: 1; } 50% { opacity: .92; } }
@keyframes wingbeat { 0% { transform: scaleX(.6); opacity: 0; } 55% { transform: scaleX(1.04); } 100% { transform: none; opacity: 1; } }
@keyframes hover-wing { 0%, 100% { transform: translateY(0) scaleX(1); } 50% { transform: translateY(-6px) scaleX(.94); } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }

/* ---------------------------------------------------------------- print */
@media print {
  :root { --bg: #fff; --surface: #fff; --surface-low: #fff; --surface-2: #f2f2f2; --border: #000; --border-inner: #999; --ink: #000; --ink-2: #333; --ink-muted: #666; --accent: #000; --accent-2: #000; --shadow: none; --panel-bg: #fff; }
  body { padding: 0; font-family: system-ui, sans-serif; } body::after { display: none; }
  .mascot, .tabbar, .btn, .toast { display: none !important; }
  .panel { break-inside: avoid; } .container-page { break-before: page; }
  .table th { position: static; }
}
