/*
 * Honey MVP shared tokens.
 *
 * Poppins and Inter are self-hosted under this directory. The legacy Space
 * Grotesk and Plus Jakarta Sans binaries remain available as compatibility
 * fallbacks while consumers migrate to the Honey families.
 */
/* Poppins has no official variable build on Fontsource/Google Fonts; ship the
 * Honey display weights as static latin subsets (GH#789). */
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/poppins-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./fonts/poppins-latin-600-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./fonts/poppins-latin-700-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('./fonts/inter-latin-variable.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Legacy local families retained for consumers that still request them. */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-600-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./fonts/space-grotesk-latin-700-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./fonts/plus-jakarta-sans-latin-400-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/plus-jakarta-sans-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./fonts/plus-jakarta-sans-latin-600-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./fonts/plus-jakarta-sans-latin-700-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('./fonts/jetbrains-mono-latin-400-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('./fonts/jetbrains-mono-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  --font-display: 'Poppins', 'Space Grotesk', system-ui, sans-serif;
  --font-ui: 'Inter', 'Plus Jakarta Sans', system-ui, sans-serif;
  --font-body: var(--font-ui);
  --font-mono: 'JetBrains Mono', ui-monospace, monospace;
  --type-h1: clamp(2rem, 3.4vw, 3rem);
  --type-h1-lh: 1.08;
  --type-body: 1rem;
  --type-body-lh: 1.45;

  --gold: #fbbf24;
  --gold-deep: #b45309;
  --gold-soft: rgba(251, 191, 36, 0.2);
  /* Keep --accent literal for the favicon/manifest synchronizer. */
  --accent: #fbbf24;
  --accent-hover: #f59e0b;
  --accent-soft: var(--gold-soft);
  --navy: #0f172a;
  --blue: #2563eb;
  /* Generic anchors — not money. `--accent-text` stays reserved for prices /
     primary-action ink (AGENTS.md). Light default tracks DESIGN.md §3 blue. */
  --link: var(--blue);
  --link-hover: #1d4ed8;
  /* Market temperature (never a button). Distinct from --rose failure red.
     --hot is a ring/fill; --hot-text is the per-theme readable ink.
     Light ink clears AA on both --bg-surface and --bg-map (GH#483). */
  --hot: #f5a524;
  --hot-soft: rgba(245, 165, 36, 0.14);
  --hot-text: #af3b0b;
  --mint: #15803d;
  --mint-soft: rgba(21, 128, 61, 0.14);
  /* Scheduled/pending — brighter fill than --gold-deep money ink.
     --amber is a fill/chip; --amber-text is the per-theme readable ink. */
  --amber: #f59e0b;
  --amber-soft: rgba(245, 158, 11, 0.14);
  --amber-text: #a16207;
  --rose: #dc2626;
  --rose-soft: rgba(220, 38, 38, 0.14);
  --on-accent: #0f172a;
  --on-scrim: #ffffff;
  /* Gold is a fill, not small text: `--accent` fails contrast as ink on the
     light ground (1.67:1 on #fff). `--accent-text` is the per-theme readable
     money/action ink required by DESIGN.md section 3. */
  --accent-text: var(--gold-deep);
  --accent-text-hover: var(--navy);
  /* The takeover ground is theme-independent, so it starts at the readable
     gold so white labels clear 4.5:1 across the whole wash. */
  --takeover-from: var(--gold-deep);
  --takeover-to: var(--navy);

  --space-1: 2px;
  --space-2: 4px;
  --space-3: 6px;
  --space-4: 8px;
  --space-5: 12px;
  --space-6: 16px;
  --space-7: 20px;
  --space-8: 24px;
  --space-9: 32px;
  --space-10: 40px;
  --space-11: 56px;
  --space-12: 72px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-panel: 16px;
  --radius-modal: 20px;
  --radius-pill: 999px;
  --ease-enter: cubic-bezier(.2, .8, .2, 1);

  /* Map dual-tone outline pair (DESIGN.md section 7, GH#469 / GH#781).
     Deliberately theme-independent literals, not theme tokens. MapView can swap
     OpenFreeMap light/dark basemap styles with chrome (GH#495), but each style's
     tiles still span both luminance extremes (pale land, mid urban fill, dark
     water/buildings). A single per-theme ink therefore fails somewhere inside
     one basemap; the pair is used together so the light tone carries the
     boundary on dark tiles and the dark tone carries it on light tiles, and at
     least one tone clears WCAG 2.2 SC 1.4.11 (3:1 non-text) on a given ground.
     Consumers: scheduled/paused/unlisted pin edges, crowned silhouette
     drop-shadow, live-bid/claimable MapLibre dots, and city-label ink/halo.
     Do not fold either value into a per-theme block. */
  --marker-outline-ring: #f8fafc;
  --marker-outline-halo: #0f172a;

  /* Placement crowns: ornament only, never an action/status substitute. */
  --crown-gold-line: #e8c547;
  --crown-gold-from: #f6e27a;
  --crown-gold-to: #d4af37;
  --crown-gold-edge: #c9a227;
  --on-crown-gold: #1a1408;
  --crown-silver-line: #c0c7d4;
  --crown-silver-from: #eef1f6;
  --crown-silver-to: #b8c0cc;
  --crown-silver-edge: #9aa3b2;
  --on-crown-silver: #1a1c22;
  --crown-bronze-line: #c4844a;
  --crown-bronze-from: #e0a36a;
  --crown-bronze-to: #b87333;
  --crown-bronze-edge: #a86b3c;
  --on-crown-bronze: #1c120a;
}

/* Honey default: daylight public composition. */
.theme-public,
.theme-public[data-theme='light'],
.theme-admin,
.theme-admin[data-theme='light'] {
  color-scheme: light;
  /* Lighten vs prior #edeff3 so muted copy on bare canvas clears AA
     (secondary/tertiary ≥4.5:1); still cooler/grayer than --bg-surface. */
  --bg-canvas: #f8f9fa;
  --bg-map: #dce9f5;
  --bg-surface: #ffffff;
  --bg-raised: #f9fafb;
  --bg-hover: #f3f4f6;
  --border: #e5e7eb;
  --border-strong: #d1d5db;
  /* Opaque focus indicator: ≥3:1 non-text contrast (WCAG 2.2 SC 1.4.11)
     on --bg-surface / --bg-canvas / --bg-raised / --bg-map (GH#506). */
  --focus-ring: #b45309;
  --text-primary: #0f172a;
  --text-secondary: #6b7280;
  /* AA on --bg-surface #ffffff: #64748b ≈ 4.76:1 (not #9ca3af @ 2.54:1). */
  --text-tertiary: #64748b;
  --shadow-panel: 0 8px 24px rgba(15, 23, 42, .08);
  --shadow-modal: 0 24px 64px rgba(15, 23, 42, .16);
  --map-glow: #ffffff;
  --map-line: rgba(15, 23, 42, .06);
  --map-dot: rgba(37, 99, 235, .16);
  --scrim: rgba(15, 23, 42, .45);
  --scrim-strong: rgba(15, 23, 42, .72);
  --backdrop: rgba(15, 23, 42, .42);
  --bg-base: var(--bg-canvas);
  --accent-text: var(--gold-deep);
  --accent-text-hover: var(--navy);
  --link: var(--blue);
  --link-hover: #1d4ed8;
  /* Readable status ink on light surfaces: ≥4.5:1 on #ffffff and --bg-map
     #dce9f5 (marker bid labels sit on the map ground; GH#483). */
  --hot-text: #af3b0b;
  --amber-text: #a16207;
}

/* Approved public dark variant from the Honey screen set. */
.theme-public[data-theme='dark'] {
  color-scheme: dark;
  --bg-canvas: #08070c;
  --bg-map: #0b0a14;
  --bg-surface: #131120;
  --bg-raised: #1b1828;
  --bg-hover: #241f35;
  --border: #2a2539;
  --border-strong: #3a3450;
  /* Opaque gold clears ≥3:1 on dark public grounds (GH#506). */
  --focus-ring: #fbbf24;
  --text-primary: #f5f3f9;
  --text-secondary: #a29db4;
  --text-tertiary: #6c667e;
  --shadow-panel: 0 8px 24px rgba(0, 0, 0, .45);
  --shadow-modal: 0 24px 64px rgba(0, 0, 0, .6);
  --map-glow: #141228;
  --map-line: rgba(255, 255, 255, .04);
  --map-dot: rgba(251, 191, 36, .16);
  --scrim: rgba(8, 7, 12, .5);
  --scrim-strong: rgba(8, 7, 12, .72);
  --backdrop: rgba(8, 7, 12, .66);
  --bg-base: var(--bg-canvas);
  --on-accent: #0f172a;
  --on-scrim: #ffffff;
  /* On the dark ground the readable money ink is full gold; --gold-deep only
     reaches 4.00:1 there. */
  --accent-text: var(--gold);
  --accent-text-hover: var(--accent-hover);
  /* Lighter link blue clears AA on dark surfaces (base --blue is ~4.1:1 on
     --bg-surface #131120; sky-400-class ink is ~8:1+). */
  --link: #60a5fa;
  --link-hover: #93c5fd;
  /* Bright fills are high-contrast ink on dark surfaces. */
  --hot-text: var(--hot);
  --amber-text: var(--amber);
}

* { box-sizing: border-box; }

body {
  margin: 0;
  color: var(--text-primary);
  background: var(--bg-canvas);
  font-family: var(--font-ui);
  font-size: 14px;
  line-height: var(--type-body-lh);
}

button, input, select, textarea { font: inherit; }
button { cursor: pointer; }
a { color: var(--link); text-decoration: none; }
/* Hover ink is scoped to anchors carrying no component class. `a:hover` is
   specificity (0,1,1) and would outrank every class-only anchor colour rule
   (.wordmark / .brand-lockup / .owner-link / .browse-city-link /
   .placement-board-city-link, and anchor-rendered .button-secondary), repainting
   brand and city-name links with generic link ink on hover. The rest state is
   left unscoped: plain `a` is (0,0,1) and already loses to any component class. */
a:not([class]):hover { color: var(--link-hover); }
.display { font-family: var(--font-display); letter-spacing: -.01em; }
.mono { font-family: var(--font-mono); font-size: 12px; }
.eyebrow { color: var(--text-secondary); font-size: 11px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; }
.muted { color: var(--text-tertiary); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
}
