/* ==========================================================================
   Casino Match — static build.
   Order: tokens → reset → chrome → home blocks → age confirmation → footer →
   legal pages → 404. Copied from the Astro source (src/styles/*.css and the
   components' styles.module.css); class names are the module keys.
   ========================================================================== */

/* --- Tokens (src/styles/theme.css) --------------------------------------- */

/**
 * Emaljeplade: sort lak, messinggravering, lakrød.
 * Every colour in the project resolves here — no colour literal in a `*.module.css` file.
 */
:root {
  /* ── Lak (grund) ─────────────────────────────────────── */
  --ink-900: #0b0b0d;
  --ink-800: #151518;
  --ink-600: #2a2a2f;

  /* ── Messing (gravering) ─────────────────────────────── */
  --brass-600: #c8922e;
  --brass-400: #f5c85b;
  --brass-300: #ffd978;

  /* ── Lakrød (topplacering) ───────────────────────────── */
  --lacquer-600: #d71920;
  --lacquer-800: #8e0e14;

  /* ── Tekst ───────────────────────────────────────────── */
  --bone: #f2f2f0;
  --slate-300: #b9bac0;
  --paper: #ffffff;
  --shade: #000000;

  /* ── Afledte flader ──────────────────────────────────── */
  --bg: var(--ink-900);
  --bg-deep: color-mix(in oklab, var(--ink-900) 82%, var(--shade));
  --surface: var(--ink-800);
  --surface-raised: color-mix(in oklab, var(--ink-800) 72%, var(--ink-600));
  --surface-sunken: color-mix(in oklab, var(--ink-900) 60%, var(--ink-800));

  --edge: var(--ink-600);
  --edge-soft: color-mix(in oklab, var(--ink-600) 62%, var(--ink-800));
  --edge-brass: color-mix(in srgb, var(--brass-600) 38%, transparent);
  --edge-brass-strong: color-mix(in srgb, var(--brass-600) 72%, transparent);
  --edge-lacquer: color-mix(in srgb, var(--lacquer-600) 58%, transparent);

  --text: var(--bone);
  --text-muted: var(--slate-300);
  --text-faint: color-mix(in oklab, var(--slate-300) 62%, var(--ink-800));
  --text-on-brass: var(--ink-900);
  --text-on-lacquer: var(--paper);

  --accent: var(--brass-600);
  --accent-bright: var(--brass-400);
  --accent-spec: var(--brass-300);
  --hot: var(--lacquer-600);
  --hot-deep: var(--lacquer-800);

  /* Plade bag de officielle mærker i footeren (lyse mærker på transparent baggrund). */
  --mark-plate: var(--ink-900);

  /* ── Gravering og glød ───────────────────────────────── */
  --engrave: inset 0 1px 0 color-mix(in srgb, var(--paper) 5%, transparent);
  --plate-shadow: 0 1px 0 color-mix(in srgb, var(--shade) 40%, transparent);
  --glow-brass: 0 0 18px -4px
    color-mix(in srgb, var(--brass-600) 42%, transparent);
  --glow-lacquer: 0 0 22px -3px
    color-mix(in srgb, var(--lacquer-600) 58%, transparent);
  --float-shadow: 0 18px 40px -20px
    color-mix(in srgb, var(--shade) 80%, transparent);

  /* ── Mål ─────────────────────────────────────────────── */
  /* One width and one gutter for the header, the footer, the offer grid and every section. */
  --layout-max-width: 1160px;
  --layout-padding-x: 1.25rem;
  --chamfer: 14px;
  --chamfer-sm: 8px;
  --radius-flat: 2px;

  /* ── Skrift ──────────────────────────────────────────── */
  --track-label: 0.16em;
  --track-tight: -0.015em;

  /* Plade med afskårne hjørner — formen der går igen på tværs af sektioner.
     Bruges som `clip-path: var(--plate-clip)` i moduler. */
  --plate-clip: polygon(
    0 0,
    calc(100% - var(--chamfer)) 0,
    100% var(--chamfer),
    100% 100%,
    var(--chamfer) 100%,
    0 calc(100% - var(--chamfer))
  );
  --plate-clip-sm: polygon(
    0 0,
    calc(100% - var(--chamfer-sm)) 0,
    100% var(--chamfer-sm),
    100% 100%,
    var(--chamfer-sm) 100%,
    0 calc(100% - var(--chamfer-sm))
  );
  --plate-clip-top: polygon(
    0 0,
    calc(100% - var(--chamfer)) 0,
    100% var(--chamfer),
    100% 100%,
    0 100%
  );
}

/* Font variables. In the source Astro's `<Font />` declared them from the
   `fonts` config (astro.config.mjs); here the families come from Google Fonts
   (<link> in every page) and the fallbacks are the config's. */
:root {
  --font-display: 'Bricolage Grotesque', 'Segoe UI', system-ui, sans-serif;
  --font-body: 'Be Vietnam Pro', 'Segoe UI', system-ui, sans-serif;
  --font-mono: 'DM Mono', 'Cascadia Mono', ui-monospace, monospace;
}

/* --- Reset (src/styles/global.css) --------------------------------------- */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
  tab-size: 4;
  scroll-behavior: smooth;
  background: var(--bg);
}

body,
h1,
h2,
h3,
h4,
p,
ul,
ol,
dl,
dd {
  margin: 0;
}

ul,
ol {
  padding: 0;
}

button,
input,
textarea,
select {
  font: inherit;
}

button {
  cursor: pointer;
}

/* Load-bearing. `hidden` is how the refusal panel is toggled; any `display`
   in a component rule outranks the UA rule, so the `!important` stays. */
[hidden] {
  display: none !important;
}

body {
  position: relative;
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
  background: var(--bg);
  color: var(--text);
  font-weight: 400;
  letter-spacing: var(--track-tight);
  -webkit-font-smoothing: antialiased;
}

h1,
h2,
h3,
h4 {
  font-family: var(--font-display);
  font-weight: 800;
  line-height: 1.06;
}

a {
  color: inherit;
  text-decoration: none;
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

:focus-visible {
  outline: 2px solid var(--accent-bright);
  outline-offset: 2px;
}

::selection {
  background: var(--edge-brass-strong);
  color: var(--text);
}

/* Ankre: alle sektions-ids på forsiden. */
#udbydere,
#oplysninger {
  scroll-margin-top: 5.5rem;
}

/* Keeps a control operable by keyboard while invisible. */
.srOnly {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.001s !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001s !important;
  }
}

/* --- Underlay (src/components/Underlay) ---------------------------------- */

.underlay {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-color: var(--bg);
  background-image:
    radial-gradient(
      68rem 34rem at 78% -8%,
      color-mix(in srgb, var(--lacquer-800) 26%, transparent),
      transparent 68%
    ),
    radial-gradient(
      54rem 30rem at 12% 2%,
      color-mix(in srgb, var(--brass-600) 14%, transparent),
      transparent 70%
    ),
    radial-gradient(
      80rem 40rem at 50% 108%,
      color-mix(in srgb, var(--ink-600) 55%, transparent),
      transparent 72%
    ),
    repeating-linear-gradient(
      90deg,
      color-mix(in srgb, var(--paper) 2%, transparent) 0 1px,
      transparent 1px 6rem
    );
}

/* --- Header (src/components/Crest) --------------------------------------- */

.crest {
  width: 100%;
  background: color-mix(in oklab, var(--ink-900) 82%, var(--ink-800));
}

.crest__inner {
  display: flex;
  align-items: center;
  justify-content: center;
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 0.85rem var(--layout-padding-x);
}

.crest__home {
  display: inline-flex;
  align-items: center;
}

.crest__logo {
  width: auto;
  height: 2.5rem;
}

.crest__accent-line {
  height: 2px;
  background: linear-gradient(
    to right,
    var(--brass-600),
    var(--brass-300) 22%,
    var(--brass-600) 46%,
    var(--hot-deep) 78%,
    var(--ink-600)
  );
}

@media (max-width: 640px) {
  .crest__logo {
    height: 2rem;
  }
}

/* --- Home (src/styles/Mainhall.module.css) ------------------------------- */

.mainhall {
  flex: 1;
  padding-bottom: 1rem;
}

.mainhall__player-link {
  margin: 0.35rem auto 1.75rem;
  max-width: var(--layout-max-width);
  padding: 0 var(--layout-padding-x);
  text-align: center;
  font-size: 0.88rem;
  line-height: 1.55;
}

.mainhall__player-link a {
  color: var(--accent-bright);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.mainhall__player-link a:hover {
  color: var(--text);
}

/* --- Hero (src/components/Opener) ---------------------------------------- */

.opener {
  position: relative;
  padding: 3.25rem 0 2rem;
}

.opener::after {
  content: '';
  position: absolute;
  left: var(--layout-padding-x);
  right: var(--layout-padding-x);
  bottom: 0;
  height: 1px;
  background: linear-gradient(
    to right,
    transparent,
    var(--edge-brass) 12%,
    var(--edge-brass) 58%,
    transparent 92%
  );
}

.opener__inner {
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 0 var(--layout-padding-x);
}

.opener__title {
  max-width: 26ch;
  margin: 0;
  font-size: clamp(2.35rem, 6.2vw, 4.15rem);
  letter-spacing: -0.022em;
  color: var(--text);
  text-wrap: balance;
}

/* Graveret understregning med hak — accentordet bærer hele hero'ens tone. */
.opener__accent {
  color: var(--accent-bright);
  background-image: linear-gradient(
    to right,
    var(--accent) 0 41%,
    transparent 41% 47%,
    var(--accent) 47% 100%
  );
  background-size: 100% 2px;
  background-position: 0 calc(100% - 0.06em);
  background-repeat: no-repeat;
  padding-bottom: 0.08em;
}

.opener__lead {
  max-width: 46ch;
  margin: 1.35rem 0 0;
  font-size: clamp(0.98rem, 1.6vw, 1.12rem);
  line-height: 1.6;
  color: var(--text-muted);
}

@media (max-width: 640px) {
  .opener {
    padding: 1.35rem 0 1rem;
  }

  .opener__title {
    max-width: none;
    font-size: clamp(1.55rem, 7.2vw, 2.1rem);
    line-height: 1.18;
    letter-spacing: -0.018em;
  }

  .opener__accent {
    background-size: 100% 1.5px;
    padding-bottom: 0.04em;
  }

  .opener__lead {
    margin: 0.7rem 0 0;
    font-size: 0.88rem;
    line-height: 1.45;
  }
}

/* --- 18+ strip (src/components/AgeFlag) ---------------------------------- */

.ageflag {
  padding: 0.85rem 0 0.35rem;
}

.ageflag__inner {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 0 var(--layout-padding-x);
}

.ageflag__marker {
  flex-shrink: 0;
  padding: 0.28rem 0.55rem;
  clip-path: var(--plate-clip-sm);
  background: color-mix(in oklab, var(--hot-deep) 78%, var(--ink-900));
  border-top: 1px solid var(--edge-brass-strong);
  font-family: var(--font-display);
  font-size: 0.82rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.1;
  color: var(--accent-spec);
}

.ageflag__text {
  margin: 0;
  font-size: 0.78rem;
  line-height: 1.45;
  color: var(--text-faint);
}

@media (max-width: 560px) {
  .ageflag {
    padding: 0.45rem 0 0.15rem;
  }

  .ageflag__inner {
    gap: 0.55rem;
    align-items: flex-start;
  }

  .ageflag__marker {
    padding: 0.2rem 0.42rem;
    font-size: 0.72rem;
  }

  .ageflag__text {
    font-size: 0.7rem;
    line-height: 1.35;
  }
}

/* --- Offer list (src/components/Offers) ---------------------------------- */

.offers {
  padding: 1.35rem 0 0.5rem;
}

.offers__inner {
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 0 var(--layout-padding-x);
}

.offers__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.85rem;
}

.offers__end {
  width: 100%;
  height: 1px;
}

/* --- Offer card (src/components/Slate) ----------------------------------- */

/* Kortets 1px-ramme er selve baggrunden: rail og inner ligger 1px inde, så rammen tegner sig
   langs alle rette kanter. */
.slate {
  position: relative;
  display: flex;
  padding: 1px;
  clip-path: var(--plate-clip);
  background: var(--edge);
}

.slate--strong {
  background: var(--edge-brass);
}

.slate--apex {
  background: var(--brass-600);
  animation: slate-breath 3.8s ease-in-out infinite alternate;
}

@keyframes slate-breath {
  from {
    background-color: var(--brass-600);
  }
  to {
    background-color: var(--brass-300);
  }
}

.slate__rail {
  position: relative;
  flex-shrink: 0;
  width: 2.35rem;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: var(--surface-sunken);
}

.slate__rank-label {
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  font-family: var(--font-mono);
  font-size: 0.62rem;
  font-weight: 500;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--text-faint);
}

.slate__rail--strong {
  background: linear-gradient(
    to bottom,
    color-mix(in oklab, var(--surface-raised) 82%, var(--brass-600)),
    var(--surface-sunken)
  );
}

.slate__rail--strong .slate__rank-label {
  color: var(--accent-bright);
}

.slate__rail--apex {
  background: linear-gradient(to bottom, var(--brass-400), var(--brass-600));
}

.slate__rail--apex .slate__rank-label {
  color: var(--text-on-brass);
  font-weight: 700;
}

/* Bliksvøb der vandrer op og ned ad messingrailen. */
.slate__rail--apex::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  height: 42%;
  background: linear-gradient(
    to bottom,
    transparent,
    color-mix(in srgb, var(--paper) 52%, transparent),
    transparent
  );
  animation: slate-sweep 3.4s ease-in-out infinite alternate;
}

@keyframes slate-sweep {
  from {
    transform: translateY(-115%);
    opacity: 0.15;
  }
  to {
    transform: translateY(215%);
    opacity: 0.9;
  }
}

/* The card grid takes no pointer events; the button and its overlay turn them back on
   (.hinge__knob, .hinge__pane). */
.slate__inner {
  position: relative;
  flex: 1;
  min-width: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  grid-template-areas:
    'mark figure'
    'cta cta';
  align-items: center;
  gap: 0.9rem 1rem;
  padding: 1.05rem;
  background: var(--surface);
  pointer-events: none;
}

.slate__mark {
  grid-area: mark;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.7rem 0.9rem;
  clip-path: var(--plate-clip-sm);
  background:
    linear-gradient(
      135deg,
      color-mix(in srgb, var(--paper) 7%, transparent),
      transparent 58%
    ),
    linear-gradient(
      to bottom,
      color-mix(in oklab, var(--surface-raised) 86%, var(--brass-600)),
      var(--surface-sunken)
    );
}

.slate__logo {
  width: auto;
  height: 2.5rem;
  max-width: 100%;
  object-fit: contain;
}

.slate__figure {
  grid-area: figure;
  min-width: 0;
  display: flex;
  align-items: center;
}

/* The offer link renders a wrapper (anchor + overlay); the wrapper is the grid item. */
.slate__inner > :has(> .slate__cta) {
  grid-area: cta;
}

.slate__cta {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.45rem;
  padding: 0.85rem 1.2rem;
  clip-path: var(--plate-clip-sm);
  background: linear-gradient(to bottom, var(--brass-400), var(--brass-600));
  color: var(--text-on-brass);
  font-family: var(--font-display);
  font-size: 0.92rem;
  font-weight: 800;
  letter-spacing: 0.005em;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  box-shadow: var(--engrave);
  transition: background 0.16s ease;
}

/* The overlay sits on the button, so the hover is read off their shared wrapper. */
.slate__inner > :hover > .slate__cta {
  background: linear-gradient(to bottom, var(--brass-300), var(--brass-400));
}

.slate__cta--apex {
  background: linear-gradient(to bottom, var(--hot), var(--hot-deep));
  color: var(--text-on-lacquer);
  animation: slate-glow 2.4s ease-in-out infinite alternate;
}

.slate__inner > :hover > .slate__cta--apex {
  background: linear-gradient(
    to bottom,
    color-mix(in oklab, var(--hot) 88%, var(--paper)),
    var(--hot)
  );
}

@keyframes slate-glow {
  from {
    box-shadow:
      var(--engrave),
      0 0 8px -2px color-mix(in srgb, var(--lacquer-600) 55%, transparent);
  }
  to {
    box-shadow:
      var(--engrave),
      0 0 17px 1px color-mix(in srgb, var(--lacquer-600) 85%, transparent);
  }
}

.slate__cta-icon {
  flex-shrink: 0;
}

@media (min-width: 769px) {
  .slate__inner {
    grid-template-columns: 9.25rem minmax(0, 1fr) auto;
    grid-template-areas: 'mark figure cta';
    gap: 0.7rem 1.4rem;
    padding: 1.15rem 1.4rem;
  }

  .slate__rail {
    width: 2.6rem;
  }
}

/* --- Offer line (src/components/Headfigure) ------------------------------ */

/* Carries a short line of copy, so it must be able to wrap without bursting the card. */
.figure__amount {
  margin: 0;
  max-width: 22ch;
  font-family: var(--font-display);
  font-size: clamp(1.25rem, 3.2vw, 1.62rem);
  font-weight: 800;
  line-height: 1.14;
  letter-spacing: -0.02em;
  color: var(--accent-spec);
  overflow-wrap: anywhere;
  hyphens: auto;
}

/* --- Offer link (src/components/OfferLink) ------------------------------- */

/* Positioning only, no colours: the look of the button arrives on the anchor from the card.
   The card grid runs `pointer-events: none`, so the anchor and the pane each turn events
   back on themselves. Nothing may stand between the anchor and the pane: app.js resolves
   the pane to the anchor through `previousElementSibling`. */
.hinge {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.hinge__knob {
  position: relative;
  pointer-events: auto;
  text-decoration: none;
}

.hinge__pane {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: auto;
  cursor: pointer;
}

/* --- Notice under the list (src/components/Disclosure) ------------------- */

.disclosure {
  padding: 1.75rem 0 3.25rem;
}

.disclosure__inner {
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 0 var(--layout-padding-x);
}

.disclosure__title {
  margin: 0 0 1.5rem;
  font-family: var(--font-mono);
  font-size: 1.02rem;
  font-weight: 700;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--text-muted);
}

.disclosure__columns {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0 2.25rem;
  border-top: 1px solid var(--edge-soft);
  padding-top: 1.5rem;
}

.disclosure__column {
  position: relative;
}

.disclosure__column + .disclosure__column {
  padding-left: 2.25rem;
  margin-left: -1.125rem;
}

.disclosure__column + .disclosure__column::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.2rem;
  bottom: 0.2rem;
  width: 1px;
  background: var(--edge-soft);
}

.disclosure__heading {
  margin: 0 0 0.6rem;
  font-family: var(--font-body);
  font-size: 0.86rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--text);
}

.disclosure__text {
  margin: 0;
  font-size: 0.82rem;
  line-height: 1.72;
  color: var(--text-faint);
}

@media (max-width: 900px) {
  .disclosure__columns {
    grid-template-columns: 1fr;
    gap: 1.4rem;
  }

  .disclosure__column + .disclosure__column {
    padding-left: 0;
    margin-left: 0;
    padding-top: 1.4rem;
  }

  .disclosure__column + .disclosure__column::before {
    left: 0;
    right: 0;
    top: 0;
    bottom: auto;
    width: auto;
    height: 1px;
  }
}

/* --- Age confirmation page "/" (src/components/Gatehouse) ---------------- */

/* In the source the gate was a full-screen overlay. On "/" its card is the page itself:
   the overlay rules (position: fixed, inset, z-index, dimmed backdrop) are dropped, the
   centring stays, and the block fills the page. */
.gatehouse {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}

.gatehouse__card {
  width: 100%;
  max-width: 28rem;
  padding: 1.5rem 1.35rem;
  clip-path: var(--plate-clip);
  background: var(--surface);
  border: 1px solid var(--edge-brass);
  text-align: center;
}

/* A circle on a square box (width = height), not a pill. */
.gatehouse__badge {
  width: 4.5rem;
  height: 4.5rem;
  margin: 0 auto 0.9rem;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--accent-bright);
  background: var(--surface-sunken);
  border: 2px solid var(--accent);
}

.gatehouse__kicker {
  margin: 0 0 0.4rem;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--text-muted);
}

.gatehouse__title {
  margin: 0 0 0.65rem;
  font-size: clamp(1.45rem, 4vw, 1.85rem);
  line-height: 1.2;
  color: var(--text);
}

.gatehouse__text {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.65;
  color: var(--text-muted);
}

.gatehouse__actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.65rem;
  margin-top: 1.35rem;
}

.gatehouse__accept,
.gatehouse__decline {
  padding: 0.75rem 0.9rem;
  clip-path: var(--plate-clip-sm);
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  cursor: pointer;
  border: 0;
}

.gatehouse__accept {
  background: linear-gradient(to bottom, var(--brass-400), var(--brass-600));
  color: var(--text-on-brass);
}

.gatehouse__decline {
  background: transparent;
  border: 1px solid var(--edge);
  color: var(--text-muted);
}

.gatehouse__decline:hover {
  border-color: var(--edge-brass);
  color: var(--text);
}

@media (max-width: 520px) {
  .gatehouse__actions {
    grid-template-columns: 1fr;
  }
}

/* --- Refusal screen on "/" (src/components/Lockout) ---------------------- */

.lockout {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  background: color-mix(in srgb, var(--ink-900) 88%, transparent);
}

.lockout__card {
  width: 100%;
  max-width: 28rem;
  padding: 1.5rem 1.35rem;
  clip-path: var(--plate-clip);
  background: var(--surface);
  border: 1px solid var(--edge-brass);
  text-align: center;
}

/* A circle on a square box (width = height), not a pill. */
.lockout__badge {
  width: 4.5rem;
  height: 4.5rem;
  margin: 0 auto 0.9rem;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--accent-bright);
  background: var(--surface-sunken);
  border: 2px solid var(--accent);
}

.lockout__kicker {
  margin: 0 0 0.4rem;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--text-muted);
}

.lockout__title {
  margin: 0 0 0.65rem;
  font-size: clamp(1.45rem, 4vw, 1.85rem);
  line-height: 1.2;
  color: var(--text);
}

.lockout__text {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.65;
  color: var(--text-muted);
}

.lockout__button {
  margin-top: 1.25rem;
  padding: 0.75rem 1rem;
  clip-path: var(--plate-clip-sm);
  border: 0;
  background: linear-gradient(to bottom, var(--brass-400), var(--brass-600));
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-on-brass);
  cursor: pointer;
}

/* --- Footer (src/components/Colophon) ------------------------------------ */

/* Gradient-overgang i stedet for en grå streg. */
.colophon {
  margin-top: auto;
  padding-bottom: 4.75rem;
  background: linear-gradient(
    to bottom,
    transparent,
    color-mix(in oklab, var(--ink-900) 70%, var(--hot-deep)) 55%,
    var(--bg-deep)
  );
}

.colophon__inner {
  max-width: var(--layout-max-width);
  margin: 0 auto;
  padding: 2.5rem var(--layout-padding-x) 1.5rem;
}

.colophon__licence-banner {
  margin: 0 0 1.15rem;
  padding: 1rem 1.15rem;
  border: 1px solid var(--edge-brass-strong);
  background: color-mix(in oklab, var(--surface) 82%, var(--brass-600));
  clip-path: var(--plate-clip-sm);
}

.colophon__licence-text {
  margin: 0;
  font-size: 0.88rem;
  font-weight: 600;
  line-height: 1.55;
  color: var(--text);
}

.colophon__age-row {
  display: flex;
  align-items: flex-start;
  gap: 0.85rem;
  margin: 0 0 1.5rem;
  padding: 0.85rem 0 1.25rem;
  border-bottom: 1px solid var(--edge-soft);
}

/* A circle on a square box (width = height), not a pill. */
.colophon__age-marker {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.35rem;
  height: 2.35rem;
  border: 2px solid var(--accent-bright);
  border-radius: 50%;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--accent-bright);
}

.colophon__age-text {
  margin: 0;
  font-size: 0.8rem;
  line-height: 1.6;
  color: var(--text-muted);
}

.colophon__top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 1.75rem 2.5rem;
  padding-bottom: 1.35rem;
  border-bottom: 1px solid var(--edge-soft);
}

.colophon__brand {
  max-width: 34rem;
}

.colophon__brand-logo {
  width: auto;
  height: 2.1rem;
  opacity: 0.92;
}

.colophon__tagline {
  margin: 0.9rem 0 0;
  font-size: 0.8rem;
  line-height: 1.65;
  color: var(--text-faint);
}

.colophon__nav {
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;
  gap: 0.55rem 1.15rem;
  max-width: 24rem;
}

.colophon__link,
.colophon__anchor-link {
  font-size: 0.8rem;
  color: var(--text-muted);
}

.colophon__link:hover,
.colophon__anchor-link:hover {
  color: var(--text);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.colophon__anchor-link {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--accent-bright);
}

.colophon__block {
  margin-top: 1.5rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--edge-soft);
}

.colophon__block-heading {
  margin: 0 0 0.75rem;
  font-family: var(--font-mono);
  font-size: 0.68rem;
  font-weight: 500;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--accent);
}

.colophon__licensees {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 0.65rem;
}

.colophon__licensee {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}

.colophon__licensee-name {
  font-size: 0.86rem;
  font-weight: 600;
  color: var(--text);
}

.colophon__licensee-meta {
  font-size: 0.78rem;
  line-height: 1.45;
  color: var(--text-muted);
}

.colophon__note {
  margin: 0.85rem 0 0;
  font-size: 0.76rem;
  line-height: 1.55;
  color: var(--text-faint);
}

.colophon__regulator-name {
  margin: 0 0 0.45rem;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--text);
}

.colophon__contacts {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 0.3rem;
  font-size: 0.8rem;
  line-height: 1.5;
  color: var(--text-muted);
}

.colophon__inline-link {
  color: var(--accent-bright);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.colophon__inline-link:hover {
  color: var(--text);
}

.colophon__help {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 1rem;
}

.colophon__help-card {
  display: flex;
  align-items: center;
  gap: 0.9rem;
}

.colophon__help-mark-link {
  flex-shrink: 0;
}

.colophon__help-plate {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 7.5rem;
  min-height: 2.6rem;
  padding: 0.45rem 0.65rem;
  background: var(--mark-plate);
  border: 1px solid var(--edge);
  clip-path: var(--plate-clip-sm);
}

.colophon__help-mark {
  width: auto;
  height: 1.45rem;
  max-width: 7rem;
  object-fit: contain;
}

.colophon__help-copy {
  min-width: 0;
}

.colophon__help-name {
  font-size: 0.86rem;
  font-weight: 600;
  color: var(--text);
  text-decoration: none;
}

.colophon__help-name:hover {
  color: var(--accent-bright);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.colophon__help-detail {
  margin: 0.15rem 0 0;
  font-size: 0.76rem;
  line-height: 1.45;
  color: var(--text-faint);
}

.colophon__help-phone {
  display: inline-block;
  margin-top: 0.2rem;
  font-family: var(--font-mono);
  font-size: 0.78rem;
  color: var(--accent-bright);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.colophon__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.35rem 0.6rem;
  margin: 1.5rem 0 0;
  font-size: 0.72rem;
  line-height: 1.5;
  color: var(--text-faint);
}

.colophon__meta-sep {
  width: 3px;
  height: 3px;
  background: var(--accent);
  flex-shrink: 0;
}

.colophon__meta-link {
  color: var(--text-muted);
  text-decoration: underline;
  text-underline-offset: 2px;
}

@media (min-width: 720px) {
  .colophon__help {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1.15rem;
  }

  .colophon__help-card {
    flex-direction: column;
    align-items: flex-start;
  }
}

@media (max-width: 760px) {
  .colophon__top {
    grid-template-columns: 1fr;
  }

  .colophon__nav {
    max-width: none;
  }
}

@media (max-width: 500px) {
  .colophon {
    padding-bottom: 4.25rem;
  }
}

/* --- Legal pages (src/styles/Treatise.module.css) ------------------------ */

.treatise {
  flex: 1;
  width: 100%;
  max-width: 52rem;
  margin: 0 auto;
  padding: 3rem var(--layout-padding-x) 3.5rem;
}

.treatise__eyebrow {
  margin: 0 0 0.9rem;
  font-family: var(--font-mono);
  font-size: 0.68rem;
  font-weight: 500;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--accent);
}

.treatise h1 {
  margin: 0 0 1.15rem;
  font-size: clamp(2rem, 5vw, 2.85rem);
  color: var(--text);
}

.treatise__lead {
  margin: 0;
  max-width: 60ch;
  font-size: 1rem;
  line-height: 1.68;
  color: var(--text-muted);
}

.treatise h2 {
  margin: 2.35rem 0 0.85rem;
  padding-top: 1.35rem;
  border-top: 1px solid var(--edge-soft);
  font-size: 1.18rem;
  color: var(--text);
}

.treatise h3 {
  margin: 1.5rem 0 0.5rem;
  font-family: var(--font-body);
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--text);
}

.treatise p,
.treatise li {
  font-size: 0.92rem;
  line-height: 1.75;
  color: var(--text-muted);
}

.treatise p {
  margin: 0 0 0.9rem;
}

.treatise ul {
  margin: 0 0 1rem;
  padding-left: 0;
  list-style: none;
}

.treatise li {
  position: relative;
  padding-left: 1.1rem;
  margin-bottom: 0.5rem;
}

.treatise li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.72em;
  width: 4px;
  height: 4px;
  background: var(--accent);
}

.treatise .treatise__numbered {
  margin: 0 0 1rem;
  padding-left: 1.35rem;
  list-style: decimal;
}

.treatise .treatise__numbered li {
  padding-left: 0.35rem;
  margin-bottom: 0.65rem;
}

.treatise .treatise__numbered li::before {
  content: none;
}

.treatise strong {
  color: var(--text);
}

.treatise a {
  color: var(--accent-bright);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.treatise__reference {
  font-family: var(--font-mono);
  font-size: 0.86em;
  color: var(--text);
}

/* Framed statement — the cooperation note on the responsible-gambling page. */
.treatise__note {
  margin: 1.35rem 0 0;
  padding: 0.9rem 1.05rem;
  border: 1px solid var(--edge-brass);
  background: color-mix(in oklab, var(--surface) 88%, var(--brass-600));
  clip-path: var(--plate-clip-sm);
}

.treatise .treatise__note p {
  margin: 0;
  color: var(--text);
}

.treatise__updated {
  margin: 2.5rem 0 0;
  padding: 0.7rem 0.95rem;
  max-width: fit-content;
  clip-path: var(--plate-clip-sm);
  background: var(--surface-sunken);
  font-family: var(--font-mono);
  font-size: 0.7rem;
  letter-spacing: 0.04em;
  color: var(--text-faint);
}

.treatise .treatise__updated {
  margin: 2.5rem 0 0;
  font-size: 0.7rem;
  line-height: 1.5;
  color: var(--text-faint);
}

/* The player-information page shows the stamp right under its lead. */
.treatise .treatise__updated--top {
  margin: 1.25rem 0 0;
}

/* --- 404 (src/styles/Transit.module.css) --------------------------------- */

.transit {
  flex: 1;
  display: grid;
  place-items: center;
  padding: 3.5rem var(--layout-padding-x) 4.5rem;
}

.transit__card {
  width: 100%;
  max-width: 36rem;
  padding: 2.15rem 2rem 1.85rem;
  clip-path: var(--plate-clip);
  background: var(--surface);
  border-top: 2px solid var(--edge-brass);
  text-align: center;
}

.transit__code {
  display: inline-block;
  margin: 0 0 0.85rem;
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: var(--track-label);
  color: var(--accent);
}

.transit__title {
  margin: 0 0 0.75rem;
  font-size: clamp(1.6rem, 4vw, 2.2rem);
  color: var(--text);
}

.transit__description {
  margin: 0 auto 1.5rem;
  max-width: 42ch;
  font-size: 0.92rem;
  line-height: 1.65;
  color: var(--text-muted);
}

.transit__back-link {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.78rem 1.2rem;
  clip-path: var(--plate-clip-sm);
  background: linear-gradient(to bottom, var(--brass-400), var(--brass-600));
  color: var(--text-on-brass);
  font-family: var(--font-display);
  font-size: 0.9rem;
  font-weight: 800;
}

.transit__back-link:hover {
  background: linear-gradient(to bottom, var(--brass-300), var(--brass-400));
}
