/*
  Global stylesheet — single source of truth for the site.

  Structure:
    1) Reset and base
    2) Design tokens (:root) — palette and typography are owned by the
       `brand-guidelines` skill. Spacing, radii, shadows, motion, and layout
       tokens are owned here.
    3) Layout primitives
    4) Components (site-wide reusable primitives only — page-specific
       styles live with their page builds, not here)
    5) Utilities
*/

/* ===== 1) Reset and base ===== */
*, *::before, *::after {
  box-sizing: border-box;
}

html {
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: var(--font-body);
  line-height: 1.5;
  color: var(--color-text);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  line-height: 1.2;
}

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

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

button {
  font: inherit;
}

:focus-visible {
  outline: 3px solid var(--color-focus);
  outline-offset: 2px;
}

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

/* ===== 2) Design tokens ===== */
/* Palette and typography are written by the `brand-guidelines` skill from
   `build-assets/0-the-brand/tokens.json`. Spacing, radii, shadows, and
   transitions are owned here. */
:root {
  /* Palette (brand-guidelines) */
  --color-bg: #f4f8f5;
  --color-surface: #ffffff;
  --color-surface-soft: #eaf3ec;
  --color-text: #1d2328;
  --color-text-soft: #6b7785;
  --color-primary: #03a688;
  --color-primary-dark: #048a72;
  --color-primary-light: #d8e8d8;
  --color-accent: #c0597b;
  --color-focus: #03a688;

  /* Typography (brand-guidelines) */
  --font-heading: "Poppins", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  --font-body: "Poppins", "Segoe UI", "Helvetica Neue", Arial, sans-serif;

  /* Spacing */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.25rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;

  /* Radii */
  --radius-sm: 0.5rem;
  --radius-md: 0.875rem;
  --radius-lg: 1.25rem;
  --radius-pill: 999px;

  /* Shadows */
  --shadow-sm: 0 1px 3px rgba(60, 64, 67, 0.12);
  --shadow-md: 0 4px 14px rgba(17, 24, 39, 0.08);
  --shadow-lg: 0 12px 32px rgba(17, 24, 39, 0.12);

  /* Motion */
  --transition-fast: 180ms ease;
  --transition-base: 260ms ease;

  /* Layout */
  --container-max: 72rem;

  /* Aesthetic dials — the `design-system` skill SETS these per brand to diverge
     the look (sharp vs soft, flat vs shadowed, square vs pill). Defaults below are
     a soft/rounded baseline; a brand's design stage should deliberately override
     them so two brands don't look like the same template reskinned. */
  --logo-height: 2.75rem;    /* prominent by default — the logo is a brand asset, not chrome */
  --logo-max-width: 22rem;   /* generous, so wide wordmarks stay tall (not width-starved) */
  --header-bg: var(--color-surface);   /* header band — design-system may set a brand colour */
  --header-fg: var(--color-text);      /* header text/nav colour — flips for a coloured band */
  --btn-radius: var(--radius-pill);
  --card-radius: var(--radius-md);
  --card-shadow: var(--shadow-sm);
  --card-border: 1px solid color-mix(in srgb, var(--color-text) 6%, transparent);
  --chip-radius: var(--radius-pill);
}

/* Logo grows on wider screens — override the dial at the breakpoint, never per-page. */
@media (min-width: 1024px) {
  :root { --logo-height: 3.5rem; }
}

/* ===== 3) Layout primitives ===== */
.container {
  width: min(100% - 2rem, var(--container-max));
  margin-inline: auto;
}

.section {
  padding: var(--space-10) 0;
}

.grid {
  display: grid;
  gap: var(--space-4);
}

.grid-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.grid-3 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(1, minmax(0, 1fr)); }

@media (min-width: 600px) {
  .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 768px) {
  .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ===== 4) Components ===== */

/* Site header */
.site-header {
  position: sticky;
  top: 0;
  z-index: 20;
  background: var(--header-bg);
  color: var(--header-fg);
  border-bottom: 1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
}

.site-header-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-3) 0;
}

.site-logo {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}

/* The header logo is an <img src="{{logo.src}}"> whose REAL file is injected by the CMS
   at upload — its aspect ratio is unknown at build time. HEIGHT is the primary driver
   (a generous --logo-height), so every logo renders at a consistent, prominent height
   regardless of ratio; --logo-max-width is a generous, viewport-relative safety cap that
   only clamps a very wide logo on small screens (it then scales down proportionally, never
   distorts). Never pin width AND height. Tune the dials per brand — never a per-page size. */
.site-logo img {
  height: auto;
  width: auto;
  max-height: var(--logo-height);
  max-width: min(var(--logo-max-width, 22rem), 55vw);
  object-fit: contain;
}

.site-nav {
  display: inline-flex;
  align-items: center;
  gap: var(--space-4);
}

.site-cta {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}

/* CMS-rendered menus — `{{menu.navigation}}` and `{{menu.footer}}` expand to
   <ul class="canvas-navigation-menu"> / <ul class="canvas-footer-menu"> with
   <li><a> children. Style the generated classes directly. */

.canvas-navigation-menu {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}

.canvas-navigation-menu > li {
  margin: 0;
}

.canvas-navigation-menu a {
  color: var(--header-fg);
  font-weight: 600;
  font-size: 0.95rem;
  padding: var(--space-2) 0;
  border-bottom: 2px solid transparent;
  transition: color var(--transition-fast), border-color var(--transition-fast);
}

.canvas-navigation-menu a:hover,
.canvas-navigation-menu a:focus-visible {
  color: var(--color-primary);
  border-bottom-color: var(--color-primary);
}

.canvas-footer-menu {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4) var(--space-6);
  margin: 0 0 var(--space-4);
  padding: 0;
  list-style: none;
}

/* Footers can carry many links. With 8+ items, flow them into responsive columns
   (auto-fill grid) instead of one long, sprawling wrapping row — multi-column on wide
   screens, collapsing toward a single column on mobile. Short footer menus keep the
   inline row above. Where :has() is unsupported it harmlessly stays the flex row. */
.canvas-footer-menu:has(> li:nth-child(8)) {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 9rem), 1fr));
  align-items: start;
  gap: var(--space-2) var(--space-5);
}

.canvas-footer-menu > li {
  margin: 0;
}

.canvas-footer-menu a {
  color: var(--color-text-soft);
  font-size: 0.9rem;
  transition: color var(--transition-fast);
}

.canvas-footer-menu a:hover,
.canvas-footer-menu a:focus-visible {
  color: var(--color-primary);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Breadcrumb */
.breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) 0;
  color: var(--color-text-soft);
  font-size: 0.9rem;
}

.breadcrumb a {
  color: var(--color-primary);
}

.breadcrumb a:hover {
  text-decoration: underline;
}

.breadcrumb-separator {
  color: var(--color-text-soft);
  opacity: 0.6;
}

.breadcrumb [aria-current="page"] {
  color: var(--color-text);
  font-weight: 600;
}

/* Buttons */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border: 0;
  text-decoration: none;
  white-space: nowrap;
  border-radius: var(--btn-radius);
  min-height: 2.75rem;
  padding: 0.78rem 1.4rem;
  font-size: 0.98rem;
  line-height: 1;
  letter-spacing: 0.01em;
  font-weight: 700;
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition: transform var(--transition-fast), box-shadow var(--transition-fast), opacity var(--transition-fast);
}

.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn:focus-visible { outline-offset: 3px; }

.btn[disabled],
.btn[aria-disabled="true"] {
  cursor: not-allowed;
  opacity: 0.55;
  pointer-events: none;
  box-shadow: none;
}

.btn-primary {
  background: var(--color-primary);
  color: #fff;
  box-shadow: 0 4px 12px color-mix(in srgb, var(--color-primary) 28%, transparent);
}

.btn-primary:hover {
  background: var(--color-primary-dark);
  box-shadow: 0 6px 16px color-mix(in srgb, var(--color-primary) 40%, transparent);
}

.btn-secondary {
  background: var(--color-surface);
  color: var(--color-text);
  border: 1px solid color-mix(in srgb, var(--color-text) 16%, transparent);
}

.btn-secondary:hover {
  background: color-mix(in srgb, var(--color-surface-soft) 75%, #fff);
}

.btn-ghost {
  background: transparent;
  color: var(--color-text);
  border: 1px solid color-mix(in srgb, var(--color-text) 20%, transparent);
}

.btn-ghost:hover {
  background: color-mix(in srgb, var(--color-surface-soft) 65%, transparent);
}

/* Header CTAs follow the header foreground so they stay legible on a coloured band
   (no-op on the neutral default where --header-fg == --color-text). */
.site-header .btn-ghost {
  color: var(--header-fg);
  border-color: color-mix(in srgb, var(--header-fg) 20%, transparent);
}

.btn-sm {
  min-height: 2.2rem;
  padding: 0.55rem 1rem;
  font-size: 0.87rem;
}

.btn-lg {
  min-height: 3rem;
  padding: 0.9rem 1.7rem;
  font-size: 1.04rem;
}

.btn-block { width: 100%; }

.btn-icon {
  width: 2.75rem;
  min-width: 2.75rem;
  padding: 0;
  border-radius: 50%;
}

/* Card */
.card {
  background: var(--color-surface);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  border: var(--card-border);
  padding: var(--space-5);
}

.card-title {
  margin: 0 0 var(--space-2);
  font-size: 1.08rem;
}

.card-text {
  margin: 0;
  color: var(--color-text-soft);
}

/* Chip — pill-shaped tag */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.45rem 0.95rem;
  border-radius: var(--chip-radius);
  background: var(--color-surface);
  color: var(--color-primary);
  font-size: 0.82rem;
  font-weight: 600;
  border: 1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);
}

.chip-row {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

/* Site footer */
.site-footer {
  padding: var(--space-10) 0;
  color: var(--color-text-soft);
  font-size: 0.9rem;
  border-top: 1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
}

/* Member profile */
.profile-head {
  display: flex;
  gap: var(--space-5);
  align-items: center;
  margin-bottom: var(--space-6);
}
.profile-avatar {
  width: 7.5rem;
  height: 7.5rem;
  border-radius: var(--radius-pill);
  object-fit: cover;
}
.profile-id {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}
.profile-headline {
  font-size: 1.15rem;
  font-weight: 600;
}
.profile-bio {
  color: var(--color-text-soft);
  max-width: 60ch;
}
.profile-interests {
  margin-top: var(--space-3);
}

/* ===== 5) Utilities ===== */
.text-center { text-align: center; }
.muted { color: var(--color-text-soft); }

.mt-4 { margin-top: var(--space-4); }
.mt-6 { margin-top: var(--space-6); }
.mb-0 { margin-bottom: 0; }
.mb-4 { margin-bottom: var(--space-4); }
.mb-6 { margin-bottom: var(--space-6); }

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}


/* ===== 6) Page: Features (site/features.html) ===== */

/* Page-scoped accent colors — red + black, used only on the features page for extra
   contrast and drama (Super Match, VIP+, hero, closing CTA). Not part of the shared
   brand palette in :root above (that stays brand-guidelines' territory) — logged in
   notes/decisions.md. */
:root {
  --features-red: #e11d3c;
  --features-red-dark: #b8142e;
  --features-red-light: #ffe1e6;
  --features-black: #0d0d0f;
}

/* Nav theming — first use of {{menu.navigation.default}} on this brand.
   Overrides target the consumer property with higher specificity, not the
   CSS variable at equal specificity (see references/placeholders/menu.navigation.default.md). */
.hs-canvas-nav .hs-canvas-nav__cta--primary {
  background: var(--color-primary);
  color: #fff;
}
.hs-canvas-nav .hs-canvas-nav__cta--primary:hover {
  background: var(--color-primary-dark);
}

/* Features & Safety pages use the red/black treatment throughout,
   so their hamburger-drawer CTA should be red, not brand teal. */
.page-features .hs-canvas-nav .hs-canvas-nav__cta--primary,
.page-safety .hs-canvas-nav .hs-canvas-nav__cta--primary,
.page-homepage .hs-canvas-nav .hs-canvas-nav__cta--primary,
.page-faq .hs-canvas-nav .hs-canvas-nav__cta--primary {
  background: var(--features-red);
}
.page-features .hs-canvas-nav .hs-canvas-nav__cta--primary:hover,
.page-safety .hs-canvas-nav .hs-canvas-nav__cta--primary:hover,
.page-homepage .hs-canvas-nav .hs-canvas-nav__cta--primary:hover,
.page-faq .hs-canvas-nav .hs-canvas-nav__cta--primary:hover {
  background: var(--features-red-dark);
}

/* Every plain .btn-primary on these three pages must be red, not the brand teal —
   covers the header's desktop Join button and any hero/section CTA that doesn't
   have its own page-specific override. Higher specificity than a bare .btn-primary
   (body.page-x adds a class+element) so it always wins regardless of source order. */
.page-features .btn-primary,
.page-safety .btn-primary,
.page-homepage .btn-primary,
.page-faq .btn-primary {
  background: var(--features-red);
  box-shadow: 0 4px 12px color-mix(in srgb, var(--features-red) 28%, transparent);
}
.page-features .btn-primary:hover,
.page-safety .btn-primary:hover,
.page-homepage .btn-primary:hover,
.page-faq .btn-primary:hover {
  background: var(--features-red-dark);
  box-shadow: 0 6px 16px color-mix(in srgb, var(--features-red) 40%, transparent);
}
.hs-canvas-nav .hs-canvas-nav__menu--desktop .hs-canvas-nav__link {
  color: var(--color-text);
  font-weight: 600;
}
.hs-canvas-nav .hs-canvas-nav__menu--desktop .hs-canvas-nav__link:hover {
  color: var(--color-primary);
}

.desktop-only {}
@media (max-width: 1023px) {
  .desktop-only { display: none; }
}

/* Hero */
.features-hero {
  padding: var(--space-12) 0 var(--space-10);
  background: linear-gradient(160deg, var(--features-black), color-mix(in srgb, var(--features-black) 80%, var(--features-red) 20%));
  color: #fff;
}
.features-hero-grid {
  display: grid;
  gap: var(--space-8);
  align-items: center;
}
@media (min-width: 900px) {
  .features-hero-grid { grid-template-columns: 1.1fr 1fr; }
}
.features-eyebrow {
  display: inline-block;
  margin-bottom: var(--space-3);
  color: var(--features-red);
  font-weight: 700;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.features-hero h1 {
  font-size: clamp(2.25rem, 1.9rem + 2vw, 3.25rem);
  margin: 0 0 var(--space-4);
  color: #fff;
}
.features-hero p {
  font-size: 1.1rem;
  color: color-mix(in srgb, #fff 78%, transparent);
  max-width: 52ch;
  margin: 0;
}
.features-hero-media {
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: 0 20px 48px rgba(0, 0, 0, 0.45), 0 0 0 1px color-mix(in srgb, var(--features-red) 45%, transparent);
  aspect-ratio: 4 / 3;
}
.features-hero-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Section shell */
.features-section {
  padding: var(--space-12) 0;
  border-top: 1px solid color-mix(in srgb, var(--color-text) 6%, transparent);
}
.features-section-head {
  max-width: 60ch;
  margin: 0 0 var(--space-8);
}
.features-section-head h2 {
  font-size: clamp(1.6rem, 1.4rem + 1vw, 2.1rem);
  margin: 0 0 var(--space-2);
}
.features-section-head p {
  color: var(--color-text-soft);
  margin: 0;
}
.features-subhead {
  font-size: 1.1rem;
  margin: var(--space-6) 0 var(--space-2);
}

/* Platform availability */
.platform-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
}
.platform-card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
}
.platform-icon {
  flex: none;
  width: 3rem;
  height: 3rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: var(--color-primary);
  box-shadow: var(--card-shadow);
}
.platform-icon svg,
.platform-icon img {
  width: 1.5rem;
  height: 1.5rem;
}
.platform-name {
  font-weight: 700;
  margin: 0 0 0.15rem;
}
.platform-availability {
  display: inline-block;
  margin-top: var(--space-2);
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--color-primary-dark);
  background: var(--color-primary-light);
  padding: 0.2rem 0.6rem;
  border-radius: var(--radius-pill);
}

/* Membership tier cards */
.tier-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
  align-items: stretch;
}
.tier-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.tier-card--vip {
  border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
}
.tier-card--vip-plus {
  background: var(--features-black);
  color: #fff;
  border-color: color-mix(in srgb, var(--features-red) 45%, transparent);
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.35);
}
.tier-name {
  font-family: var(--font-heading);
  font-size: 1.3rem;
  font-weight: 700;
  margin: 0;
}
.tier-badge {
  display: inline-flex;
}
.tier-badge--vip { color: var(--color-primary); }
.tier-badge--vip-plus { color: var(--features-red); }
.tier-desc {
  color: var(--color-text-soft);
  margin: 0;
}
.tier-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  flex: 1;
}
.tier-list li {
  padding-left: 1.5rem;
  position: relative;
  color: var(--color-text);
  font-size: 0.95rem;
}
.tier-card--vip-plus .tier-list li {
  color: color-mix(in srgb, #fff 92%, transparent);
}
.tier-card--vip-plus .tier-desc {
  color: color-mix(in srgb, #fff 72%, transparent);
}
.tier-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.4em;
  width: 0.8rem;
  height: 0.8rem;
  border-radius: 50%;
  background: var(--color-primary-light);
  box-shadow: inset 0 0 0 2px var(--color-primary);
}
.tier-card--vip-plus .tier-list li::before {
  background: color-mix(in srgb, var(--features-red) 25%, transparent);
  box-shadow: inset 0 0 0 2px var(--features-red);
}

/* Feature comparison table */
.table-scroll {
  overflow-x: auto;
}
.compare-table {
  width: 100%;
  border-collapse: collapse;
  min-width: 640px;
}
.compare-table th,
.compare-table td {
  padding: var(--space-3) var(--space-4);
  text-align: center;
  border-bottom: 1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
}
.compare-table th:first-child,
.compare-table td:first-child {
  text-align: left;
}
.compare-table thead th {
  font-family: var(--font-heading);
  font-size: 1rem;
  color: var(--color-text);
}
.compare-table .tier-badge {
  justify-content: center;
}
.compare-table th:last-child,
.compare-table td:last-child {
  background: color-mix(in srgb, var(--features-black) 6%, transparent);
  border-bottom-color: color-mix(in srgb, var(--features-red) 30%, transparent);
}
.compare-table thead th:last-child {
  border-bottom: 2px solid var(--features-red);
}
.compare-table td:last-child.compare-yes {
  color: var(--features-red);
}
.compare-yes {
  color: var(--color-primary);
  font-weight: 700;
}
.compare-no {
  color: var(--color-text-soft);
}

/* Algorithm / plain feature lists */
.features-list-plain {
  columns: 2;
  column-gap: var(--space-8);
  margin: var(--space-2) 0 var(--space-6);
  padding-left: 1.2rem;
  color: var(--color-text);
}
.features-list-plain li {
  margin-bottom: var(--space-2);
  break-inside: avoid;
}
@media (max-width: 640px) {
  .features-list-plain { columns: 1; }
}

/* Safety */
.safety-block + .safety-block {
  margin-top: var(--space-6);
}

/* Closing CTA */
.features-cta {
  text-align: center;
  padding: var(--space-12) var(--space-6);
  background: var(--features-black);
  border-radius: var(--radius-lg);
  color: #fff;
}
.features-cta h2 {
  margin: 0 0 var(--space-3);
  color: #fff;
}
.features-cta p {
  color: color-mix(in srgb, #fff 75%, transparent);
  margin: 0 auto var(--space-6);
  max-width: 55ch;
}
/* Super Match callout — the copy calls this feature "vibrant and distinctive",
   so the card gets the boldest red/black treatment on the page. */
.supermatch-callout {
  background: linear-gradient(135deg, var(--features-black), color-mix(in srgb, var(--features-black) 75%, var(--features-red) 25%));
  color: #fff;
  border-radius: var(--radius-lg);
  padding: var(--space-8);
  box-shadow: 0 16px 44px rgba(0, 0, 0, 0.4);
  border: 1px solid color-mix(in srgb, var(--features-red) 40%, transparent);
}
.supermatch-eyebrow {
  display: inline-block;
  margin-bottom: var(--space-3);
  padding: 0.25rem 0.75rem;
  border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--features-red) 85%, transparent);
  color: #fff;
  font-weight: 700;
  font-size: 0.78rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.supermatch-callout p {
  color: color-mix(in srgb, #fff 88%, transparent);
}
.supermatch-callout p:last-child {
  margin-bottom: 0;
}

/* VIP+ "top tier" ribbon on the membership card */
.tier-ribbon {
  align-self: flex-start;
  padding: 0.2rem 0.7rem;
  border-radius: var(--radius-pill);
  background: var(--features-red);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

/* ===== 7) Page: Safety (site/safety.html) ===== */

/* Hero — black band, white text, red accents (per user request for more red/black). */
.safety-hero {
  padding: var(--space-12) 0 var(--space-10);
  background: linear-gradient(160deg, var(--features-black), color-mix(in srgb, var(--features-black) 82%, var(--features-red) 18%));
  color: #fff;
}
.safety-hero-inner {
  max-width: 68ch;
}
.safety-eyebrow {
  display: inline-block;
  margin-bottom: var(--space-3);
  color: var(--features-red);
  font-weight: 700;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.safety-hero h1 {
  font-size: clamp(2.1rem, 1.8rem + 1.6vw, 3rem);
  margin: 0 0 var(--space-4);
  color: #fff;
}
.safety-hero-lead {
  font-size: 1.08rem;
  color: #fff;
  font-weight: 600;
  margin: 0 0 var(--space-3);
}
.safety-hero p {
  font-size: 1.08rem;
  color: color-mix(in srgb, #fff 78%, transparent);
  margin: 0;
}
.safety-hero-link {
  color: color-mix(in srgb, #fff 90%, transparent);
}
.safety-hero-link:hover {
  color: var(--features-red);
}

/* Closing CTA — black band, red primary button */
.safety-cta {
  padding: var(--space-12) var(--space-6);
  background: var(--features-black);
  border-radius: var(--radius-lg);
  color: #fff;
  text-align: center;
}
.safety-cta h2 {
  margin: 0 0 var(--space-3);
  color: #fff;
}
.safety-cta p {
  max-width: 60ch;
  margin: 0 auto var(--space-6);
  color: color-mix(in srgb, #fff 78%, transparent);
  font-size: 1.05rem;
}
/* Category section — dark variant (used on one category per page for contrast).
   BUG FIXED: the cards themselves were left on the default white .card background
   while their text was switched to white — invisible white-on-white. The card
   surface itself must go dark too, same pattern as .tier-card--vip-plus. */
.safety-category--dark {
  background: var(--features-black);
  color: #fff;
}
.safety-category--dark .safety-category-desc {
  color: color-mix(in srgb, #fff 75%, transparent);
}
.safety-category--dark .safety-card {
  background: color-mix(in srgb, #fff 6%, var(--features-black));
  border-color: color-mix(in srgb, var(--features-red) 35%, transparent);
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
}
.safety-category--dark .safety-card h3 {
  color: #fff;
}
.safety-category--dark .safety-card .card-text {
  color: color-mix(in srgb, #fff 82%, transparent);
}
.safety-category--dark .safety-icon {
  background: color-mix(in srgb, var(--features-red) 22%, transparent);
}
.safety-category--dark .safety-protects {
  border-left-color: var(--features-red);
  color: color-mix(in srgb, #fff 92%, transparent);
}
.safety-category--dark .safety-protects strong {
  color: var(--features-red);
}
.safety-hero-link {
  display: inline-block;
  margin-top: var(--space-4);
  font-weight: 600;
  color: var(--color-primary);
}
.safety-hero-link:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Category sections */
.safety-category {
  padding: var(--space-10) 0;
  border-top: 1px solid color-mix(in srgb, var(--color-text) 6%, transparent);
}
.safety-category-head {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  margin: 0 0 var(--space-2);
}
.safety-category-icon {
  font-size: 1.4rem;
  line-height: 1;
}
.safety-category-head h2 {
  margin: 0;
  font-size: clamp(1.4rem, 1.25rem + 0.8vw, 1.8rem);
}
.safety-category-desc {
  color: var(--color-text-soft);
  margin: 0 0 var(--space-6);
  max-width: 60ch;
}

/* Feature cards */
.safety-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));
  align-items: stretch;
}
.safety-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.safety-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--radius-pill);
  background: var(--color-primary-light);
  font-size: 1.3rem;
  margin-bottom: var(--space-1);
}
.safety-card h3 {
  margin: 0;
  font-size: 1.05rem;
}
.safety-card .card-text {
  margin: 0;
}
.safety-protects {
  margin: var(--space-1) 0 0;
  padding-left: var(--space-3);
  border-left: 3px solid var(--color-primary);
  color: var(--color-text);
  font-size: 0.92rem;
}
.safety-protects strong {
  color: var(--color-primary-dark);
}

/* ===== 8) Page: Homepage (site/homepage.html) ===== */
/* Recreation of the live homepage's copy/structure, restyled with the
   features-red/features-black treatment used on Features & Safety. */

.homepage-eyebrow {
  display: inline-block;
  margin-bottom: var(--space-3);
  color: var(--features-red);
  font-weight: 700;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* Hero — full-bleed background photo behind the text/CTA, no color overlay on
   the image itself (removed at user request). Content is anchored left via its
   own inner div (never combine .container's auto-margins with a max-width on
   the same element again — that silently centers it instead of matching the
   page's normal left-reading edge, which is what happened the first time this
   was built). Legibility comes from text-shadow only, so it holds on any photo
   at any viewport — including mobile, where the image still fills the section
   and the text still sits directly on top of it, not stacked below it. */
.homepage-hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: min(34rem, 82vh);
  display: flex;
  align-items: center;
  padding: var(--space-12) 0 var(--space-10);
  color: #fff;
}
.homepage-hero-media {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.homepage-hero-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}
.homepage-hero-content {
  position: relative;
  z-index: 2;
  max-width: 34rem;
  margin-inline: 0;
  text-shadow: 0 2px 18px rgba(0, 0, 0, 0.65), 0 1px 4px rgba(0, 0, 0, 0.55);
}
.homepage-hero h1 {
  font-size: clamp(2.25rem, 1.9rem + 2vw, 3.25rem);
  margin: 0 0 var(--space-4);
  color: #fff;
}
/* Small black strip directly under the hero, carrying the supporting hero copy
   that used to sit below the headline (moved out at user request so the hero
   itself is just eyebrow + headline + CTA). */
.homepage-hero-subtext {
  background: var(--features-black);
  padding: var(--space-5) 0;
}
.homepage-hero-subtext p {
  margin: 0 auto;
  max-width: 60ch;
  color: #fff;
  font-size: 1.05rem;
  text-align: center;
}

/* Eyebrow badge — scoped to the hero only (the ticker section reuses the plain
   .homepage-eyebrow text-only style, which stays untouched). A dark translucent
   pill so the red label stays readable sitting directly on the photo now that
   there's no overlay behind it. */
.homepage-hero .homepage-eyebrow {
  display: inline-flex;
  align-items: center;
  color: #fff;
  background: color-mix(in srgb, var(--features-black) 62%, transparent);
  border: 1px solid color-mix(in srgb, var(--features-red) 55%, transparent);
  padding: 0.4rem 1rem;
  border-radius: var(--radius-pill);
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
}

/* Hero CTA pulse — a ripple radiating outward, matching the emphasis the join
   button had on the original live homepage. Paused on hover/focus so it isn't
   distracting right when someone's about to click, and the global
   prefers-reduced-motion rule at the top of this file already stops it for
   anyone with that preference. */
@keyframes homepage-hero-cta-pulse {
  0% {
    box-shadow: 0 0 0 0 color-mix(in srgb, var(--features-red) 55%, transparent);
  }
  70% {
    box-shadow: 0 0 0 14px color-mix(in srgb, var(--features-red) 0%, transparent);
  }
  100% {
    box-shadow: 0 0 0 0 color-mix(in srgb, var(--features-red) 0%, transparent);
  }
}
.homepage-hero-content .btn-primary {
  animation: homepage-hero-cta-pulse 2.2s ease-out infinite;
  min-height: 3.6rem;
  padding: 1.1rem 2.3rem;
  font-size: 1.18rem;
}
.homepage-hero-content .btn-primary:hover,
.homepage-hero-content .btn-primary:focus-visible {
  animation-play-state: paused;
}

/* Welcome — light section, red eyebrow-style heading. Now a text+image grid
   (image placeholder added at user request) instead of a single centered
   column, so text is left-aligned to read naturally beside the image. */
.homepage-welcome-grid {
  display: grid;
  gap: var(--space-8);
  align-items: center;
}
@media (min-width: 900px) {
  .homepage-welcome-grid { grid-template-columns: 1fr 1fr; }
}
.homepage-welcome-inner {
  max-width: 62ch;
}
.homepage-welcome-inner h2 {
  color: var(--features-red);
  margin: 0 0 var(--space-3);
}
.homepage-welcome-inner p {
  color: var(--color-text-soft);
  font-size: 1.08rem;
  margin: 0 0 var(--space-6);
}
.homepage-welcome-media {
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  aspect-ratio: 4 / 3;
}
.homepage-welcome-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Features cross-link — replaces the old "How Fab Hookup Works" step grid. */
.homepage-features-link {
  text-align: center;
}
.homepage-features-link p {
  margin: 0;
  font-size: 1.05rem;
  color: var(--color-text);
}
.homepage-features-link a {
  color: var(--features-red);
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.homepage-features-link a:hover {
  color: var(--features-red-dark);
}

/* Groundbreaking Tools — black section, matches .safety-category--dark */
.homepage-tools--dark {
  background: var(--features-black);
  color: #fff;
  padding: var(--space-12) 0;
  border-radius: var(--radius-lg);
}
.homepage-tools-grid {
  display: grid;
  gap: var(--space-8);
  align-items: center;
}
@media (min-width: 900px) {
  .homepage-tools-grid { grid-template-columns: 1fr 1fr; }
}
.homepage-tools--dark h2 {
  color: #fff;
  margin: 0 0 var(--space-3);
}
.homepage-tools--dark > .homepage-tools-grid > div:first-child > p {
  color: color-mix(in srgb, #fff 78%, transparent);
  margin: 0 0 var(--space-6);
}
.homepage-tools-list {
  list-style: none;
  margin: 0 0 var(--space-6);
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.homepage-tools-list li {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
}
.homepage-tools-icon {
  flex: none;
  width: 2.5rem;
  height: 2.5rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--features-red) 22%, transparent);
  color: var(--features-red);
  font-weight: 700;
}
.homepage-tools-list h3 {
  margin: 0 0 0.2rem;
  font-size: 1.02rem;
  color: #fff;
}
.homepage-tools-list p {
  margin: 0;
  color: color-mix(in srgb, #fff 78%, transparent);
  font-size: 0.95rem;
}
.homepage-tools-media {
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
  aspect-ratio: 4 / 3;
}
.homepage-tools-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Micro-Quiz — replaces the old FAQ accordion. Pure CSS/HTML, no JS: uses the
   radio/checkbox "hack" (hidden native inputs + <label for> + sibling
   combinators) so each answered question reveals the next, matching the
   toolkit's no-custom-JS rule (a <script> tag beyond JSON-LD gets silently
   stripped on ZIP import). Inputs are hidden with the existing
   .visually-hidden utility (not display:none) so they stay in the tab order
   and keyboard/screen-reader users can still answer via their <label>. The
   "500+" match count and the whole "Finding matches..." beat are static,
   illustrative UI copy — no live matching logic exists behind this, so the
   number is intentionally a round, obviously-approximate figure rather than
   a fake-precise one. Flagged in notes/decisions.md. */
.quiz-head {
  text-align: center;
  max-width: 60ch;
  margin: 0 auto var(--space-8);
}
.quiz-head h2 {
  margin: 0 0 var(--space-2);
}
.quiz-head p {
  color: var(--color-text-soft);
  margin: 0;
}
.quiz-card {
  position: relative;
  max-width: 40rem;
  margin: 0 auto;
  background: var(--color-surface);
  border-radius: var(--card-radius);
  box-shadow: var(--shadow-lg);
  border: var(--card-border);
  padding: var(--space-8) var(--space-6);
  text-align: center;
}
.quiz-step-2,
.quiz-step-3,
.quiz-step-4,
.quiz-outcome {
  display: none;
}
.quiz-q1-input:checked ~ .quiz-step-2,
.quiz-q2-input:checked ~ .quiz-step-3,
.quiz-q3-input:checked ~ .quiz-step-4 {
  display: block;
}
.quiz-reveal-input:checked ~ .quiz-step-1,
.quiz-reveal-input:checked ~ .quiz-step-2,
.quiz-reveal-input:checked ~ .quiz-step-3,
.quiz-reveal-input:checked ~ .quiz-step-4 {
  display: none;
}
.quiz-reveal-input:checked ~ .quiz-outcome {
  display: grid;
}
.quiz-step + .quiz-step {
  margin-top: var(--space-6);
  padding-top: var(--space-6);
  border-top: 1px solid color-mix(in srgb, var(--color-text) 8%, transparent);
}
.quiz-question {
  margin: 0 0 var(--space-4);
  font-weight: 700;
  font-size: 1.05rem;
  color: var(--color-text);
}
.quiz-options {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3);
}
.quiz-options label {
  cursor: pointer;
  padding: 0.65rem 1.25rem;
  border-radius: var(--radius-pill);
  border: 1px solid color-mix(in srgb, var(--color-text) 20%, transparent);
  font-weight: 600;
  font-size: 0.92rem;
  color: var(--color-text);
  transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
}
.quiz-options label:hover {
  border-color: var(--features-red);
}
/* Highlight the chosen pill — each rule pairs one input's :checked state with
   its own label[for] elsewhere in the DOM (label/input don't need to be
   adjacent for `for` to work, which is what lets the inputs all sit up front
   for the step-reveal selectors above). */
#quiz-goal-casual:checked ~ .quiz-step-1 label[for="quiz-goal-casual"],
#quiz-goal-serious:checked ~ .quiz-step-1 label[for="quiz-goal-serious"],
#quiz-goal-flirty:checked ~ .quiz-step-1 label[for="quiz-goal-flirty"],
#quiz-age-a:checked ~ .quiz-step-2 label[for="quiz-age-a"],
#quiz-age-b:checked ~ .quiz-step-2 label[for="quiz-age-b"],
#quiz-age-c:checked ~ .quiz-step-2 label[for="quiz-age-c"],
#quiz-dist-a:checked ~ .quiz-step-3 label[for="quiz-dist-a"],
#quiz-dist-b:checked ~ .quiz-step-3 label[for="quiz-dist-b"],
#quiz-dist-c:checked ~ .quiz-step-3 label[for="quiz-dist-c"] {
  background: var(--features-red);
  border-color: var(--features-red);
  color: #fff;
}
/* Keyboard focus ring on the pill, since the real input is visually hidden */
#quiz-goal-casual:focus-visible ~ .quiz-step-1 label[for="quiz-goal-casual"],
#quiz-goal-serious:focus-visible ~ .quiz-step-1 label[for="quiz-goal-serious"],
#quiz-goal-flirty:focus-visible ~ .quiz-step-1 label[for="quiz-goal-flirty"],
#quiz-age-a:focus-visible ~ .quiz-step-2 label[for="quiz-age-a"],
#quiz-age-b:focus-visible ~ .quiz-step-2 label[for="quiz-age-b"],
#quiz-age-c:focus-visible ~ .quiz-step-2 label[for="quiz-age-c"],
#quiz-dist-a:focus-visible ~ .quiz-step-3 label[for="quiz-dist-a"],
#quiz-dist-b:focus-visible ~ .quiz-step-3 label[for="quiz-dist-b"],
#quiz-dist-c:focus-visible ~ .quiz-step-3 label[for="quiz-dist-c"],
.quiz-reveal-input:focus-visible ~ .quiz-step-4 .quiz-reveal-btn {
  outline: 3px solid var(--color-focus, var(--features-red));
  outline-offset: 2px;
}
.quiz-reveal-btn {
  display: inline-block;
}

/* Outcome: loading spinner crossfades into the result inside the same grid
   cell (no JS timer — a single CSS animation on each layer, timed so the
   loading state holds for ~1.8s before the result takes over). Base
   `.quiz-outcome { display:none }` stays in charge of hiding it until
   answered — this block only arranges the two children once it's shown. */
.quiz-outcome .quiz-loading,
.quiz-outcome .quiz-result {
  grid-area: 1 / 1;
  opacity: 0;
}
.quiz-reveal-input:checked ~ .quiz-outcome .quiz-loading {
  animation: quiz-loading-fade 2.2s ease forwards;
}
.quiz-reveal-input:checked ~ .quiz-outcome .quiz-result {
  animation: quiz-result-fade 2.2s ease forwards;
}
@keyframes quiz-loading-fade {
  0% { opacity: 1; }
  80% { opacity: 1; }
  100% { opacity: 0; }
}
@keyframes quiz-result-fade {
  0% { opacity: 0; }
  80% { opacity: 0; }
  100% { opacity: 1; }
}
.quiz-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-3);
}
.quiz-loading p {
  margin: 0;
  font-weight: 600;
  color: var(--color-text-soft);
}
.quiz-spinner {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 50%;
  border: 4px solid color-mix(in srgb, var(--features-red) 20%, transparent);
  border-top-color: var(--features-red);
  animation: quiz-spin 0.8s linear infinite;
}
@keyframes quiz-spin {
  to { transform: rotate(360deg); }
}
.quiz-result {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
}
.quiz-result-count {
  margin: 0;
  font-family: var(--font-heading);
  font-size: clamp(2.4rem, 2rem + 1.4vw, 3rem);
  font-weight: 800;
  color: var(--features-red);
  line-height: 1;
}
/* Randomised-looking match count — genuinely no backend/JS exists to compute
   a real number (still true, still no custom JS allowed on import), so this
   pre-authors one plausible, always-500-or-higher number per each of the 27
   possible answer combinations (3 goal x 3 age x 3 distance) as real,
   accessible text — not CSS-generated content, so screen readers still get
   an actual number rather than nothing. Only the span matching the exact
   combination checked is shown; the rest stay display:none. This reads as
   "randomised" per answer without ever going below 500 or needing a script. */
.quiz-match-num {
  display: none;
}
#quiz-goal-casual:checked ~ #quiz-age-a:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-a__quiz-dist-a"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-a:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-a__quiz-dist-b"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-a:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-a__quiz-dist-c"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-b:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-b__quiz-dist-a"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-b:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-b__quiz-dist-b"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-b:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-b__quiz-dist-c"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-c:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-c__quiz-dist-a"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-c:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-c__quiz-dist-b"] { display: inline; }
#quiz-goal-casual:checked ~ #quiz-age-c:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-casual__quiz-age-c__quiz-dist-c"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-a:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-a__quiz-dist-a"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-a:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-a__quiz-dist-b"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-a:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-a__quiz-dist-c"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-b:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-b__quiz-dist-a"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-b:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-b__quiz-dist-b"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-b:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-b__quiz-dist-c"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-c:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-c__quiz-dist-a"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-c:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-c__quiz-dist-b"] { display: inline; }
#quiz-goal-serious:checked ~ #quiz-age-c:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-serious__quiz-age-c__quiz-dist-c"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-a:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-a__quiz-dist-a"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-a:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-a__quiz-dist-b"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-a:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-a__quiz-dist-c"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-b:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-b__quiz-dist-a"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-b:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-b__quiz-dist-b"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-b:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-b__quiz-dist-c"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-c:checked ~ #quiz-dist-a:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-c__quiz-dist-a"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-c:checked ~ #quiz-dist-b:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-c__quiz-dist-b"] { display: inline; }
#quiz-goal-flirty:checked ~ #quiz-age-c:checked ~ #quiz-dist-c:checked ~ .quiz-outcome .quiz-match-num[data-combo="quiz-goal-flirty__quiz-age-c__quiz-dist-c"] { display: inline; }
.quiz-result-label {
  margin: 0 0 var(--space-2);
  color: var(--color-text-soft);
}
/* Pulsing CTA — reuses the same ripple keyframe as the hero Join button. */
.quiz-result-cta {
  animation: homepage-hero-cta-pulse 2.2s ease-out infinite;
}
.quiz-result-cta:hover,
.quiz-result-cta:focus-visible {
  animation-play-state: paused;
}
.quiz-retake {
  margin-top: var(--space-2);
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--color-text-soft);
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
}
.quiz-retake:hover {
  color: var(--features-red);
}

/* Closing CTA — black band, red button, matches .safety-cta */
.homepage-cta {
  padding: var(--space-12) var(--space-6);
  background: var(--features-black);
  border-radius: var(--radius-lg);
  color: #fff;
  text-align: center;
}
.homepage-cta h2 {
  margin: 0 0 var(--space-6);
  color: #fff;
}

/* Homepage — real member ticker. Authored with data-members-styles="none": the CMS
   emits real, live member classes and no CSS. Scoped to .homepage-ticker (not the bare
   [data-members] attribute) so this styling never leaks onto a future member block
   built elsewhere on the site. No fabricated ratings or aggregate counts here — the
   live homepage's "9.1M Rated Members" ticker and per-member star ratings aren't
   fields the member loop exposes, so they're intentionally left out rather than
   invented. See references/placeholders/members.loop.md for the full contract. */
.homepage-social-proof-head {
  text-align: center;
  max-width: 60ch;
  margin: 0 auto var(--space-6);
}
.homepage-social-proof-head h2 {
  margin: 0 0 var(--space-2);
}
.homepage-social-proof-head p {
  color: var(--color-text-soft);
  margin: 0;
}
.homepage-ticker-wrap {
  margin: 0 auto var(--space-4);
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
}

/* Auto-scrolling marquee track — TWO identical member-loop instances placed side by
   side (same query, so the CMS renders the same real members into both), animated
   from 0 to -50% so the loop is seamless: real member data throughout, no JS, no
   fabricated content, and the existing reduced-motion rule at the top of this file
   already zeroes the animation duration for anyone who has that preference. */
.homepage-ticker-track {
  display: flex;
  width: max-content;
  animation: homepage-ticker-scroll 32s linear infinite;
}
.homepage-ticker-track:hover,
.homepage-ticker-track:focus-within {
  animation-play-state: paused;
}
@keyframes homepage-ticker-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* The rail itself — real member photos/names only. */
.homepage-ticker[data-members] .lp-grid {
  display: flex;
  gap: var(--space-4);
  list-style: none;
  margin: 0;
  padding: var(--space-2) var(--space-1) var(--space-4);
}
.homepage-ticker[data-members] .mem-card {
  flex: 0 0 auto;
  width: 6.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.35rem;
  text-align: center;
  box-sizing: border-box;
  position: relative;
  background: none;
  border: none;
  box-shadow: none;
  padding: 0;
}
.homepage-ticker[data-members] .mem-card img,
.homepage-ticker[data-members] .mem-card__initial {
  width: 5rem;
  height: 5rem;
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-pill);
  flex: 0 0 auto;
}
.homepage-ticker[data-members] .mem-card img {
  display: block;
  object-fit: cover;
  object-position: 50% 30%;
  border: 3px solid var(--features-red);
}
.homepage-ticker[data-members] .mem-card__initial {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--features-black);
  color: #fff;
  font-size: 1.5rem;
  font-weight: 700;
  text-transform: uppercase;
  border: 3px solid var(--features-red);
}
.homepage-ticker[data-members] .badge {
  position: static;
  display: inline-block;
  margin-top: -0.4rem;
  font-size: 0.62rem;
  font-weight: 700;
  padding: 0.08rem 0.45rem;
  border-radius: var(--radius-pill);
  background: var(--features-red);
  color: #fff;
  max-width: 100%;
}
.homepage-ticker[data-members] .mem-card__name {
  margin: 0;
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--color-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
.homepage-ticker[data-members] .mem-card__where {
  margin: 0;
  font-size: 0.72rem;
  color: var(--color-text-soft);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
.homepage-ticker[data-members] .mem-card__where:empty {
  display: none;
}
.homepage-ticker[data-members] .mem-card__line {
  display: none;
}
.homepage-ticker[data-members] .lp-members__empty {
  margin: 0 auto;
  text-align: center;
  color: var(--color-text-soft);
  font-size: 0.9rem;
}
.homepage-ticker[data-members] a:focus-visible {
  outline: 3px solid var(--color-focus, var(--features-red));
  outline-offset: 2px;
  box-shadow: 0 0 0 5px var(--color-surface, #ffffff);
}

/* Member-card CTA: kept genuinely visible (not hidden) so the accessible name and the
   visible label match — see members.loop.md's WCAG 2.5.3 warning. The ::after stretches
   the link's hit area over the whole card (image, name, badge) since .mem-card already
   has position:relative as its containing block. */
.homepage-ticker[data-members] .mem-card__cta {
  position: static;
  display: inline-block;
  margin-top: 0.1rem;
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--features-red);
  text-decoration: underline;
  text-underline-offset: 2px;
  white-space: nowrap;
}
.homepage-ticker[data-members] .mem-card__cta::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}
.homepage-ticker[data-members] .mem-card__cta:hover,
.homepage-ticker[data-members] .mem-card__cta:focus-visible {
  color: var(--features-red-dark);
}

/* Fallback: hidden by default, revealed when the loop came back empty OR the section is
   genuinely empty (local preview — no CMS ran). Caption above always shows; the fallback
   is the only piece that needs to hide/reveal. Written so the :has()-unsupported state
   (hidden) is the honest one. */
.homepage-ticker-fallback {
  display: none;
  text-align: center;
  color: var(--color-text-soft);
  margin: 0 0 var(--space-6);
}
.homepage-social-proof:has(.lp-members__empty) .homepage-ticker-fallback,
.homepage-social-proof:has(.homepage-ticker:empty) .homepage-ticker-fallback {
  display: block;
}

/* Homepage — manual "9.1M Rated Members" stat (added at user's explicit request;
   not sourced from a live field, so it's authored as static copy rather than
   pulled from the member loop). */
.homepage-ticker-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.1rem;
  margin: 0 0 var(--space-5);
}
.homepage-ticker-stat-number {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 1.7rem + 1.2vw, 2.6rem);
  font-weight: 800;
  color: var(--features-red);
  line-height: 1;
}
.homepage-ticker-stat-label {
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-text-soft);
}

/* ===== 9) Page: FAQ (site/faq.html) ===== */
/* Deliberately different shape from the old homepage FAQ accordion (now a
   quiz) and from a generic flat CMS FAQ list: grouped into three categories
   (matching the safety page's categorized-grid language) with a dark middle
   band for visual rhythm, each still using native <details>/<summary> so it
   needs no JS. */
.faq-hero {
  padding: var(--space-12) 0 var(--space-10);
  background: linear-gradient(160deg, var(--features-black), color-mix(in srgb, var(--features-black) 82%, var(--features-red) 18%));
  color: #fff;
}
.faq-hero-inner {
  max-width: 62ch;
}
.faq-eyebrow {
  display: inline-block;
  margin-bottom: var(--space-3);
  color: var(--features-red);
  font-weight: 700;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.faq-hero h1 {
  font-size: clamp(2.1rem, 1.8rem + 1.6vw, 3rem);
  margin: 0 0 var(--space-4);
  color: #fff;
}
.faq-hero p {
  font-size: 1.08rem;
  color: color-mix(in srgb, #fff 78%, transparent);
  margin: 0;
}

.faq-category {
  padding: var(--space-10) 0;
  border-top: 1px solid color-mix(in srgb, var(--color-text) 6%, transparent);
}
.faq-category--dark {
  background: var(--features-black);
  color: #fff;
}
.faq-category-head {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  margin: 0 0 var(--space-6);
}
.faq-category-icon {
  font-size: 1.4rem;
  line-height: 1;
}
.faq-category-head h2 {
  margin: 0;
  font-size: clamp(1.4rem, 1.25rem + 0.8vw, 1.8rem);
}
.faq-category--dark h2 {
  color: #fff;
}
.faq-list {
  max-width: 68ch;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.faq-item {
  background: var(--color-surface);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  border: var(--card-border);
  padding: var(--space-4) var(--space-5);
}
.faq-category--dark .faq-item {
  background: color-mix(in srgb, #fff 6%, var(--features-black));
  border-color: color-mix(in srgb, var(--features-red) 35%, transparent);
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
}
.faq-item summary {
  cursor: pointer;
  font-weight: 700;
  color: var(--color-text);
  list-style: none;
}
.faq-category--dark .faq-item summary {
  color: #fff;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+";
  float: right;
  color: var(--features-red);
  font-weight: 700;
}
.faq-item[open] summary::after {
  content: "−";
}
.faq-item p {
  margin: var(--space-3) 0 0;
  color: var(--color-text-soft);
}
.faq-category--dark .faq-item p {
  color: color-mix(in srgb, #fff 82%, transparent);
}
.faq-item p a {
  color: var(--features-red);
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.faq-item p a:hover {
  color: var(--features-red-dark);
}

/* Closing CTA — matches .safety-cta / .features-cta */
.faq-cta {
  text-align: center;
  padding: var(--space-12) var(--space-6);
  background: var(--features-black);
  border-radius: var(--radius-lg);
  color: #fff;
}
.faq-cta h2 {
  margin: 0 0 var(--space-3);
  color: #fff;
}
.faq-cta p {
  color: color-mix(in srgb, #fff 75%, transparent);
  margin: 0 auto var(--space-6);
  max-width: 55ch;
}
