/* ==========================================================================
   ballot — marketing site
   Design tokens and values come from design_handoff_ballot_site/README.md.
   Desktop composition holds down to 760px; below that the mobile stack (390px
   comp) takes over. There is exactly one breakpoint.
   ========================================================================== */

:root {
  /* Color — see the token table in the handoff README */
  --navy-900: #0d1b27;
  --navy-800: #1a2d3d;
  --navy-600: #2d4a5a;
  /* Contrast-corrected from the comps. Each keeps its hue and saturation and
     moves lightness only, so the palette still reads the same:
       blue-600   #2878b5 -> #2671ab  (4.25:1 -> 4.68:1 as text on gray-100;
                                       also lifts white-on-accent 4.72 -> 5.21)
       slate-400  #8099a8 -> #576f7f  (2.68:1 -> 4.68:1 on gray-100, 5.21 on white)
       slate-600  #6d8291 -> #91a0ac  (3.53:1 -> 5.09:1 on navy-800) */
  --blue-600: #2671ab;
  --blue-300: #7fb0d8;
  --blue-200: #9ec3e0;
  --blue-50:  #e6f0f8;
  --slate-600: #91a0ac;
  --slate-500: #4a6070;
  --slate-400: #576f7f;
  --slate-300: #a9bccb;
  --gray-100: #f1f3f5;
  --gray-50:  #f6f8fa;
  --border-light: #eef1f4;
  --border-mid: #d3dae0;
  --white: #ffffff;

  /* Role tokens. Light values alias the hue tokens above, so nothing changes
     on pages that don't opt in. Only these are swapped for dark mode, which
     is why the swap is a value change and not a second stylesheet. */
  --bg:             #ffffff;   /* white       */
  --text:           #0d1b27;   /* navy-900    */
  --text-body:      #4a6070;   /* slate-500   */
  --text-muted:     #576f7f;   /* slate-400   */
  --link:           #2671ab;   /* blue-600    */
  --rule:           #eef1f4;   /* border-light*/
  --rule-strong:    #d3dae0;   /* border-mid  */
  --surface-subtle: #f1f3f5;   /* gray-100    */

  --font: -apple-system, 'SF Pro Text', 'SF Pro Display', 'Helvetica Neue', system-ui, sans-serif;

  /* Content column. The comps are fixed 1180px; production centers at 1180
     and lets the column shrink between 1180 and 760. */
  --max-w: 1180px;
}

/* Dark mode — opt-in per page via `.theme-auto` on <body>.
   Support only, deliberately. The landing page is a composition of alternating
   light and navy bands; on a dark canvas navy stops reading as emphasis and the
   rhythm flattens, so inverting it needs a comp, not a token swap. Support has
   no such alternation, so it inverts cleanly.
   Values are the ones already proven on the legal pages, which take them from
   the iOS app's own dark palette (Theme.swift) rather than inventing a second
   dark identity for the same brand. */
@media (prefers-color-scheme: dark) {
  .theme-auto {
    --bg:             #0a131c;   /* Theme.Colors.background */
    --text:           #f0f4f7;
    --text-body:      #b8c7d2;
    --text-muted:     #8099a8;
    --link:           #57adef;   /* blue-600 brightened for a dark canvas */
    --rule:           #253545;
    --rule-strong:    #31404b;
    --surface-subtle: #111d28;
  }
}

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

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

body {
  margin: 0;
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

img { max-width: 100%; }

/* The logo mark ships in two inks and <picture> picks one, because navy ink
   vanishes on the dark canvas. Deliberately NOT a class toggle: `.nav-brand img`
   (0,1,1) outranks a `.mark-*` class (0,1,0) and would render both marks.
   `flex: none` keeps the wrapper from being stretched by the flex parent. */
picture { display: block; flex: none; font-size: 0; }

a { text-decoration: none; }

/* Focus. The comps specify none, so these are added here.
   The README suggests the accent blue everywhere, but it measures under the
   3:1 WCAG minimum for a focus indicator against the navy surfaces, so navy
   sections get a white ring instead. */
a:focus-visible {
  outline: 2px solid var(--link);
  outline-offset: 2px;
  border-radius: 3px;
}
.on-navy a:focus-visible {
  outline-color: var(--white);
}

.wrap {
  max-width: var(--max-w);
  margin: 0 auto;
  width: 100%;
}

/* Skip link — keyboard users shouldn't have to tab the whole nav. */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 10;
  background: var(--bg);
  color: var(--link);
  font-size: 15px;
  font-weight: 600;
  padding: 12px 18px;
  border-radius: 0 0 8px 0;
}
.skip-link:focus {
  left: 0;
}

/* ==========================================================================
   Nav — two variants: on navy (landing) and light (support)
   ========================================================================== */

.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 24px 48px;
}
.nav-brand {
  display: flex;
  align-items: center;
  gap: 10px;
}
/* Mark sizes follow one rule: the asset's ink is 74/96 of its box, so a box
   of fontSize x 96/74 makes the mark's ink height match the wordmark beside
   it. 23px wordmark -> 30px box, 18px -> 23px, and so on. */
.nav-brand img { width: 30px; height: 30px; display: block; }
.nav-brand .wordmark {
  font-size: 23px;
  font-weight: 700;
  letter-spacing: -0.4px;
}
.nav-right {
  display: flex;
  align-items: center;
  gap: 30px;
}
.nav-link {
  font-size: 15px;
  font-weight: 500;
  transition: color 150ms ease;
}
.pill {
  display: inline-flex;
  align-items: center;
  height: 34px;
  padding: 0 16px;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  transition: border-color 150ms ease;
}

/* Navy chrome */
.nav--navy .wordmark { color: var(--white); }
.nav--navy .nav-link { color: rgba(255,255,255,0.72); }
.nav--navy .nav-link:hover { color: var(--white); }
.nav--navy .pill {
  border: 1px solid rgba(255,255,255,0.28);
  color: var(--white);
}

/* Light chrome. The band carries the background and rule; the inner
   <nav class="nav nav--light"> only lays out and colors its children. */
.chrome-light {
  background: var(--bg);
  border-bottom: 1px solid var(--rule);
}
.nav--light .wordmark { color: var(--text); }
.nav--light .nav-link { color: var(--text-body); }
.nav--light .nav-link:hover { color: var(--link); }
.nav--light .nav-link[aria-current='page'] {
  color: var(--text);
  font-weight: 600;
}
.nav--light .pill {
  border: 1px solid var(--rule-strong);
  color: var(--text-body);
}

/* ==========================================================================
   App Store badge — two variants. Not a link pre-launch.
   ========================================================================== */

.badge {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 13px 22px 13px 15px;
  border-radius: 16px;
}
.badge-tile {
  width: 36px;
  height: 36px;
  border-radius: 9px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
}
.badge-tile img { width: 26px; height: 26px; display: block; }
.badge-text {
  display: flex;
  flex-direction: column;
  line-height: 1.1;
}
.badge-text .small {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.3px;
}
.badge-text .large {
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.2px;
  color: var(--white);
}

/* On navy */
.badge--on-navy { background: var(--blue-600); }
.badge--on-navy .badge-tile { background: var(--white); }
/* 0.90, not the comp's 0.82: at 11px this paints (233,241,247) over the
   accent, which measures 4.07:1 composited and fails AA. 0.90 is the
   lowest value that clears 4.5 (4.56), so it keeps the most dimming.
   Measure alpha text COMPOSITED — the declared white reads 5.21 and lies. */
.badge--on-navy .small { color: rgba(255,255,255,0.90); }

/* On white */
.badge--on-white { background: var(--navy-800); }
.badge--on-white .badge-tile { background: var(--blue-600); }
.badge--on-white .small { color: var(--slate-300); }

.cta-row {
  display: flex;
  align-items: center;
  gap: 24px;
}
.cta-text {
  font-size: 15px;
  font-weight: 600;
  transition: color 150ms ease;
}

/* ==========================================================================
   Shared type
   ========================================================================== */

.eyebrow {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 1.8px;
}

/* ==========================================================================
   Device frame — CSS per the handoff. Screenshots are real app captures.
   ========================================================================== */

.phone {
  width: 300px;
  height: 620px;
  background: #0b0f14;
  border-radius: 46px;
  padding: 11px;
  box-shadow: inset 0 0 0 2px #2a2f36;
  flex: none;
}
.phone-screen {
  width: 100%;
  height: 100%;
  border-radius: 35px;
  overflow: hidden;
  background: var(--white);
}
.phone-screen img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
  display: block;
}

/* ==========================================================================
   Landing — hero
   ========================================================================== */

.hero {
  background: var(--navy-800);
}
.hero-body {
  display: flex;
  gap: 40px;
  align-items: center;
  padding: 48px 48px 76px;
}
.hero-copy { flex: 1; min-width: 0; }
.hero .eyebrow {
  color: var(--blue-300);
  margin-bottom: 22px;
}
.hero h1 {
  color: var(--white);
  font-size: 53px;
  line-height: 1.07;
  font-weight: 700;
  letter-spacing: -1.4px;
  margin: 0 0 22px;
}
.hero p:not(.eyebrow) {
  color: var(--slate-300);
  font-size: 18px;
  line-height: 1.55;
  margin: 0 0 36px;
  max-width: 520px;
}
.hero .cta-text { color: var(--white); }
.hero .cta-text:hover { color: var(--blue-300); }

.hero-phone {
  flex: none;
  position: relative;
  width: 300px;
  height: 620px;
}
.hero-glow {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 440px;
  height: 440px;
  background: radial-gradient(circle, rgba(40,120,181,0.45), transparent 68%);
  pointer-events: none;
}
.hero-phone .phone-shadow {
  position: relative;
  filter: drop-shadow(0 30px 50px rgba(0,0,0,0.4));
}

/* ==========================================================================
   Landing — feature grid
   ========================================================================== */

.features {
  background: var(--white);
  padding: 80px 56px 40px;
}
.features h2 {
  font-size: 34px;
  font-weight: 700;
  color: var(--navy-900);
  letter-spacing: -0.6px;
  margin: 0 0 44px;
  max-width: 520px;
}
.feature-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 40px 56px;
}
.feature {
  display: flex;
  gap: 18px;
}
.feature-icon {
  flex: none;
  width: 50px;
  height: 50px;
  border-radius: 13px;
  background: var(--blue-50);
  /* The inline SVGs paint with currentColor so they track the accent token
     instead of carrying their own copy of the hex. */
  color: var(--blue-600);
  display: flex;
  align-items: center;
  justify-content: center;
}
.feature h3 {
  font-size: 19px;
  font-weight: 600;
  color: var(--navy-900);
  margin: 2px 0 7px;
}
.feature p {
  font-size: 15px;
  line-height: 1.5;
  color: var(--slate-500);
  margin: 0;
}

/* ==========================================================================
   Landing — showcase band
   ========================================================================== */

.showcase {
  background: var(--gray-100);
  padding: 72px 56px;
}
.showcase-inner {
  display: flex;
  align-items: center;
  gap: 64px;
  max-width: 1000px;
  margin: 0 auto;
}
.showcase-phone {
  flex: none;
  transform: scale(0.98);
  filter: drop-shadow(0 22px 40px rgba(10,19,28,0.16));
}
.showcase-copy { flex: 1; min-width: 0; }
.showcase .eyebrow {
  color: var(--blue-600);
  margin-bottom: 16px;
}
.showcase h2 {
  font-size: 32px;
  font-weight: 700;
  color: var(--navy-900);
  letter-spacing: -0.6px;
  margin: 0 0 16px;
}
.showcase p:not(.eyebrow) {
  font-size: 16px;
  line-height: 1.6;
  color: var(--slate-500);
  margin: 0 0 26px;
  max-width: 420px;
}
.stages {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.stage {
  display: inline-flex;
  align-items: center;
  height: 32px;
  padding: 0 14px;
  border-radius: 999px;
  background: var(--white);
  color: var(--slate-500);
  font-size: 13px;
  font-weight: 600;
}
.stage--current {
  background: var(--blue-600);
  color: var(--white);
}
.stage--future { color: var(--slate-400); }

/* ==========================================================================
   Landing — trust band and closing CTA
   ========================================================================== */

.trust {
  background: var(--navy-600);
  padding: 66px 48px;
  text-align: center;
}
.trust-inner {
  max-width: 780px;
  margin: 0 auto;
}
.trust .eyebrow {
  color: var(--blue-200);
  margin-bottom: 16px;
}
.trust p:not(.eyebrow) {
  font-size: 26px;
  line-height: 1.45;
  color: var(--white);
  font-weight: 500;
  letter-spacing: -0.3px;
  margin: 0;
}

.closing {
  background: var(--white);
  padding: 92px 56px;
  text-align: center;
}
.closing .eyebrow {
  color: var(--blue-600);
  margin-bottom: 26px;
}
.closing h2 {
  font-size: 46px;
  line-height: 1.14;
  font-weight: 700;
  color: var(--navy-900);
  letter-spacing: -1.1px;
  margin: 0 auto 38px;
  max-width: 720px;
}
.closing .cta-row { justify-content: center; }
.closing .cta-text { color: var(--blue-600); }
.closing .cta-text:hover { color: var(--navy-800); }

/* ==========================================================================
   Footer — navy (landing) and light (support)
   ========================================================================== */

.footer { padding: 42px 48px; }
.footer-inner {
  max-width: var(--max-w);
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 20px;
}
.footer-brand {
  display: flex;
  align-items: center;
  gap: 10px;
}
.footer-brand img { width: 23px; height: 23px; display: block; }
.footer-brand .wordmark { font-size: 18px; font-weight: 700; }
.footer-copyright {
  font-size: 14px;
  margin-left: 8px;
}
.footer-links {
  display: flex;
  align-items: center;
  gap: 26px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.footer-links .only-mobile { display: none; }
.footer-links a {
  font-size: 14px;
  font-weight: 500;
  transition: color 150ms ease;
}

.footer--navy { background: var(--navy-800); }
.footer--navy .wordmark { color: var(--white); }
.footer--navy .footer-copyright { color: var(--slate-600); }
.footer--navy .footer-links a { color: var(--slate-300); }
.footer--navy .footer-links a:hover { color: var(--white); }

.footer--light {
  background: var(--bg);
  border-top: 1px solid var(--rule);
  padding: 38px 48px;
}
.footer--light .wordmark { color: var(--text); }
.footer--light .footer-copyright { color: var(--text-muted); }
.footer--light .footer-links a { color: var(--text-body); }
.footer--light .footer-links a:hover { color: var(--link); }

/* ==========================================================================
   Support page
   ========================================================================== */

.support-main {
  padding: 76px 48px 88px;
}
.support-main > * { max-width: 820px; }
.support-head .eyebrow {
  color: var(--link);
  margin-bottom: 18px;
}
.support-head h1 {
  font-size: 44px;
  line-height: 1.1;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1.1px;
  margin: 0 0 18px;
}
.support-head p:not(.eyebrow) {
  font-size: 18px;
  line-height: 1.6;
  color: var(--text-body);
  margin: 0;
}

.support-cards {
  display: flex;
  gap: 20px;
  margin: 54px 0 0;
}
.support-card {
  flex: 1;
  background: var(--surface-subtle);
  border-radius: 18px;
  padding: 26px 28px;
}
.card-label {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.6px;
  color: var(--text-muted);
  margin-bottom: 9px;
}
.card-link {
  display: inline-block;
  font-size: 20px;
  font-weight: 600;
  color: var(--link);
  letter-spacing: -0.3px;
  transition: color 150ms ease;
}
.card-link:hover { color: var(--text); }
/* Styled as the comp draws it — navy, reading as a heading — but still a
   mailto, since a dead "Report a data error" label helps nobody. */
.card-link--plain { color: var(--text); }
.card-link--plain:hover { color: var(--link); }
.support-card p:not(.card-label) {
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--text-body);
  margin: 12px 0 0;
}

.faq { margin-top: 66px; }
.faq h2 {
  font-size: 28px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -0.5px;
  margin: 0 0 26px;
}
.faq dl { margin: 0; }
.faq-item {
  border-top: 1px solid var(--rule);
  padding: 22px 0;
}
.faq-item:last-child { border-bottom: 1px solid var(--rule); }
.faq dt {
  font-size: 18px;
  font-weight: 600;
  color: var(--text);
  margin: 0 0 8px;
}
.faq dd {
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--text-body);
  margin: 0;
  max-width: 720px;
}
.faq dd a { color: var(--link); font-weight: 500; }

/* ==========================================================================
   404. Reuses the Support page's light chrome and footer, so the only new
   thing here is the message block.
   ========================================================================== */

.notfound {
  padding: 118px 48px 140px;
  max-width: 820px;
}
.notfound .eyebrow {
  color: var(--link);
  margin-bottom: 18px;
}
.notfound h1 {
  font-size: 44px;
  line-height: 1.1;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1.1px;
  margin: 0 0 18px;
}
/* p:not(.eyebrow), not a bare `.notfound p` — that is (0,1,1) and outranks
   `.eyebrow` (0,1,0), which would render the 404 label at 18px. Same trap
   already hit on the hero, the showcase, and the support cards. */
.notfound p:not(.eyebrow) {
  font-size: 18px;
  line-height: 1.6;
  color: var(--text-body);
  margin: 0;
}
.notfound-links {
  display: flex;
  align-items: center;
  gap: 28px;
  margin-top: 36px;
}
.notfound-links a {
  font-size: 16px;
  font-weight: 600;
  color: var(--link);
  transition: color 150ms ease;
}
.notfound-links a:hover { color: var(--text); }

/* Sticky footer. The 404 is the only page short enough for the footer to
   land mid-viewport with dead space under it, so this is scoped to the class
   on <body> rather than applied globally. */
.page-short {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}
.page-short main { flex: 1 0 auto; }
.page-short .footer { flex: none; }

/* ==========================================================================
   Mobile stack — the 390px comp. Single breakpoint per the handoff.
   ========================================================================== */

@media (max-width: 760px) {
  .nav {
    padding: 18px 22px;
    gap: 12px;
  }
  .nav-brand img { width: 26px; height: 26px; }
  .nav-brand .wordmark { font-size: 20px; }
  .nav-right { gap: 18px; }

  /* Both comps carry exactly one Support link per breakpoint: the nav on
     desktop, the footer on mobile. Swap them rather than showing both. */
  .nav-link { display: none; }
  .footer-links .only-mobile { display: list-item; }

  .pill {
    height: 30px;
    padding: 0 14px;
    font-size: 12px;
  }

  /* Hero. The comp puts the phone BETWEEN the body copy and the CTA stack,
     but the CTA lives inside .hero-copy so the desktop column holds together.
     `display: contents` lifts the copy's children into .hero-body for the
     mobile stack so they can be ordered around the phone. */
  .hero-body {
    display: flex;
    flex-direction: column;
    /* The desktop column gap must not leak into the stack — the mobile comp
       spaces these with margins. */
    gap: 0;
    padding: 26px 22px 40px;
  }
  .hero-copy { display: contents; }
  .hero-copy .eyebrow { order: 1; }
  .hero-copy h1 { order: 2; }
  .hero-copy p:not(.eyebrow) { order: 3; }
  .hero-phone { order: 4; }
  .hero .cta-row { order: 5; }
  .hero .eyebrow {
    font-size: 11px;
    letter-spacing: 1.6px;
    margin-bottom: 16px;
  }
  .hero h1 {
    font-size: 34px;
    line-height: 1.1;
    letter-spacing: -1px;
    margin: 0 0 16px;
  }
  .hero p:not(.eyebrow) {
    font-size: 16px;
    margin: 0 0 26px;
    max-width: none;
  }

  /* Phone sits between the copy and the CTAs on mobile — deliberate,
     per the handoff. Scaled to 0.8 from the top so the 620px frame
     occupies a 500px box. */
  .hero-phone {
    width: auto;
    height: 500px;
    margin-top: 10px;
    display: flex;
    justify-content: center;
    /* Without this the wrapper stretches to the 500px box and the 0.8 scale
       is applied to the stretched height instead of the phone's 620px. */
    align-items: flex-start;
  }
  .hero-phone .phone-shadow { flex: none; }
  .hero-glow {
    top: 34%;
    width: 360px;
    height: 360px;
  }
  .hero-phone .phone-shadow {
    transform: scale(0.8);
    transform-origin: top center;
    filter: drop-shadow(0 24px 40px rgba(0,0,0,0.4));
  }

  .hero .cta-row {
    flex-direction: column;
    align-items: center;
    gap: 16px;
    margin-top: 26px;
  }

  .badge {
    padding: 12px 20px 12px 14px;
    border-radius: 15px;
  }
  .badge-tile { width: 34px; height: 34px; }
  .badge-tile img { width: 24px; height: 24px; }
  .badge-text .large { font-size: 17px; }

  /* Features */
  .features { padding: 48px 22px 8px; }
  .features h2 {
    font-size: 26px;
    letter-spacing: -0.5px;
    margin: 0 0 28px;
  }
  .feature-grid {
    grid-template-columns: 1fr;
    gap: 26px;
  }
  .feature { gap: 14px; }
  .feature-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
  }
  .feature-icon svg { width: 22px; height: 22px; }
  .feature h3 {
    font-size: 17px;
    margin: 1px 0 6px;
  }

  /* Showcase — copy first, phone below */
  .showcase {
    padding: 44px 22px;
    margin-top: 40px;
  }
  .showcase-inner {
    flex-direction: column-reverse;
    gap: 30px;
    align-items: stretch;
  }
  .showcase .eyebrow {
    font-size: 11px;
    letter-spacing: 1.6px;
    margin-bottom: 14px;
  }
  .showcase h2 {
    font-size: 26px;
    letter-spacing: -0.5px;
    margin: 0 0 14px;
  }
  .showcase p:not(.eyebrow) {
    margin: 0 0 22px;
    max-width: none;
  }
  .stage {
    height: 30px;
    padding: 0 13px;
    font-size: 12.5px;
  }
  .showcase-phone {
    height: 500px;
    display: flex;
    justify-content: center;
    transform: none;
    filter: none;
  }
  .showcase-phone .phone {
    transform: scale(0.8);
    transform-origin: top center;
    filter: drop-shadow(0 20px 36px rgba(10,19,28,0.18));
  }

  /* Trust */
  .trust { padding: 46px 22px; }
  .trust .eyebrow {
    font-size: 11px;
    letter-spacing: 1.6px;
    margin-bottom: 14px;
  }
  .trust p:not(.eyebrow) {
    font-size: 20px;
    letter-spacing: -0.2px;
  }

  /* Closing */
  .closing { padding: 56px 22px; }
  .closing .eyebrow {
    font-size: 11px;
    letter-spacing: 1.6px;
    margin-bottom: 20px;
  }
  .closing h2 {
    font-size: 32px;
    letter-spacing: -0.9px;
    margin: 0 auto 28px;
  }
  .closing .cta-row {
    flex-direction: column;
    align-items: center;
    gap: 18px;
  }

  /* Footer */
  .footer { padding: 32px 22px; }
  .footer-inner {
    flex-direction: column;
    align-items: flex-start;
    gap: 18px;
  }
  .footer-brand { gap: 9px; }
  .footer-brand img { width: 22px; height: 22px; }
  .footer-brand .wordmark { font-size: 17px; }
  .footer-copyright {
    margin-left: 0;
    font-size: 13px;
    order: 3;
  }
  .footer-links {
    flex-direction: column;
    align-items: flex-start;
    gap: 11px;
  }

  /* Support */
  .support-main { padding: 40px 22px 56px; }
  .support-cards { margin: 30px 0 0; }
  .faq { margin-top: 44px; }
  .footer--light { padding: 32px 22px; }
  .support-head h1 {
    font-size: 32px;
    letter-spacing: -0.8px;
  }
  .support-head p:not(.eyebrow) { font-size: 16px; }
  .support-cards {
    flex-direction: column;
    gap: 16px;
  }
  .support-card { padding: 22px; }
  .card-link { font-size: 18px; }
  .faq h2 { font-size: 24px; }
  .faq-item { padding: 20px 0; }
  .faq dt { font-size: 17px; }
  .faq dd { font-size: 15px; }

  .notfound { padding: 64px 22px 84px; }
  .notfound h1 {
    font-size: 34px;
    letter-spacing: -0.8px;
  }
  .notfound p:not(.eyebrow) { font-size: 16px; }
  .notfound-links {
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
    margin-top: 30px;
  }
}

/* Nothing on this site animates. Transitions are hover-only, but honor the
   preference anyway. */
@media (prefers-reduced-motion: reduce) {
  * {
    transition: none !important;
    animation: none !important;
  }
}
