/* ============================================================
   Actia AI — styles.css
   Colors: #000 bg | #845EEE signal/purple | #E1F770 pulse/lime

   Structure, top to bottom:
     1  Reset
     2  Tokens (:root) and breakpoints
     3  Base elements and page shell
     4  Common chrome — nav, footer, buttons (every page)
     5  Shared components — card frame, panel, diagram, footnote
     6  Page sections — landing, pricing, guides, contact, access,
        legal, FAQ.  Each carries its own responsive rules.
     7  Utilities — declared last so a utility wins over a
        component's own rule at equal specificity.

   Breakpoints: mobile-first base, then >=768 (tablet) and >=1024
   (desktop, the primary target).  Some older sections still use
   max-width:768 for the mobile stack; both are honoured here.
   ============================================================ */

/* ============================================================
   1  RESET
   ============================================================ */

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

/* ============================================================
   2  TOKENS
   Single source of truth for colour, type and spacing.
   ============================================================ */

:root {
  --purple: #845EEE;
  --lime: #E1F770;
  /*  --lime: #845EEE; */
  --bg: #000000;
  --card-bg: #0A0118;
  --text: #FFFFFF;
  --text-muted: #E0E0E0;
  --font-display: 'Alan Sans', system-ui, sans-serif;
  --font: 'Plus Jakarta Sans', system-ui, sans-serif;
  --max-w: 1264px;   /* page cap: content stops here, black beyond */
  --margin: 5%;      /* content side margin (mobile base); stepped per breakpoint below */
  --inset: 28px;     /* copy inset inside the page margin (mobile base); mirrors
                        .price-card's horizontal padding so un-panelled text
                        lines up with card content. Stepped below. */
  --section-gap: 80px;  /* vertical rhythm between the major blocks of a
                           segment landing page (mobile base). Stepped below;
                           these two values are the only ones to tweak. */

  /* Type scale — single source of truth for text sizes. Values are the
     ones already in use across the site, named so any page can share them.
     --text-lg (18px) is the standard body size on the landing page. */
  --text-sm:   14px;
  --text-base: 16px;   /* page default (set on <body>) */
  --text-lg:   18px;   /* body copy — hero, section intros, page prose */
  --text-xl:   20px;
  --text-2xl:  26px;
  --text-3xl:  32px;
  --text-4xl:  40px;
  --text-5xl:  46px;

  /* Spacing scale — for the margin utilities below. Grown as the
     markup needs it; add steps rather than one-off pixel values. */
  --space-sm:  16px;
  --space-md:  28px;
  --space-lg:  44px;
  --space-xl:  56px;
}

/* ============================================================
   BREAKPOINTS — the only two the site uses. Mobile-first: the base
   CSS above is the phone layout; each min-width layers on top.
   (Native @media can't read custom properties, so the values live
   here as the single reference and step --margin per band.)
     tablet   >= 768px   -> 8%
     desktop  >= 1024px  -> 10%   (primary target, matches mockup)
   ============================================================ */
@media (min-width: 768px)  { :root { --margin: 5%; } }

@media (min-width: 1024px) { :root { --margin: 7.5%; } }

/* --inset steps at 769 to stay in lockstep with .price-card, whose padding
   switches on max-width: 768. --section-gap steps with it. */
@media (min-width: 769px)  { :root { --inset: 40px; --section-gap: 96px; } }

/* ============================================================
   3  BASE ELEMENTS AND PAGE SHELL
   ============================================================ */

html {
  scroll-behavior: smooth;
  background: var(--bg);   /* letterbox colour shown beyond the cap */
}

body {
  color: var(--text);
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.5;
  overflow-x: hidden;
  position: relative;
}

/* Background artwork lives here, once. Inner pages are the default; the
   landing page overrides it below. A new page therefore gets the inner
   artwork automatically, with no rule to remember. */
.page-wrap {
  max-width: var(--max-w);
  margin-inline: auto;
  min-height: 100vh;
  overflow: hidden;
  background: var(--bg) url('assets/inner_background.jpg') no-repeat center top;
  background-size: 100% auto;
}

/* Hero-led pages — the home page (.page-home) and the segment landing
   pages (.page-hero) — carry the original artwork, plus a taller crop cut
   for phones. Every other page scales the one inner image at all widths. */
.page-home .page-wrap,
.page-hero .page-wrap {
  background-image: url('assets/background.jpg');
}

@media (max-width: 768px) {
  .page-home .page-wrap,
  .page-hero .page-wrap {
    background-image: url('assets/mobile_background.jpg');
  }
}

#site-header { min-height: 90px; }

/* Stacked section inside a multi-section page (index). */
.section {
  position: relative;
  z-index: 1;
  padding: 100px var(--margin);
}

/* ============================================================
   PAGE — the frame a standalone content page's <main> carries.
   Distinct from .section, which is for stacked sections inside a
   page (index) and keeps its own tighter rhythm. Height comes from
   .page-wrap's min-height, so it isn't repeated here.
   ============================================================ */
.page {
  position: relative;
  z-index: 1;
  padding: 72px var(--margin) 160px;
}

/* Centered heading block a standalone page opens with. */
.page-center {
  width: 100%;
  max-width: var(--max-w);
  margin: 0 auto;
  text-align: center;
}

.page-title {
  font-family: var(--font-display);
  font-size: 46px;
  font-weight: 300;
  line-height: 1.2;
  margin-bottom: 56px;
}

@media (max-width: 768px) {
  .page-title {
    font-size: 34px;
    margin-bottom: 40px;
  }
}

/* Prose on a page, outside a panel — the same size and measure as panel
   copy without the card frame. --inset lines it up with card content on a
   page that has cards, and holds a sensible measure on one that doesn't. */
.page-text {
  font-size: var(--text-lg);
  line-height: 1.6;
  margin-inline: var(--inset);
  color: var(--text-muted);
}

/* Consecutive paragraphs need their own rhythm out here; the global reset
   zeroes margins and there is no panel to supply it. */
.page-text + .page-text {
  margin-top: 1.1em;
}

/* Prose links in page copy. Matches the legal pages' treatment; without
   this a link falls back to the browser default, unreadable on black. */
.page-text a {
  color: var(--text);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.2s;
}

.page-text a:hover {
  color: var(--lime);
}

/* Bulleted list on an un-panelled page. Same prose size as .page-text —
   keep the two in step if the prose colour ever changes. */
.page-list {
  margin-inline: var(--inset);
  margin-top: var(--space-sm);
  padding-left: var(--space-lg);
  list-style: disc;
}

.page-list li {
  font-size: var(--text-lg);
  line-height: 1.6;
  color: var(--text-muted);
}

.page-list li + li {
  margin-top: 8px;
}

/* A list laid out in columns: .grid-2's 44px gap is right between columns
   but too airy between rows of short items. Capped and centred so short
   values sit as a block rather than spanning the full measure. */
.page-list.grid-2 {
  gap: var(--space-sm) var(--space-lg);
  max-width: 560px;
  margin-inline: auto;
}

.page-list.grid-2 li + li {
  margin-top: 0;
}

/* EXPERIMENT — caps to lift the four role names. Tracking added because
   uppercase set solid reads cramped; drop both lines to revert. */
.page-list.grid-2 li {
  text-transform: uppercase;
  letter-spacing: 0.1em;
}

/* Section headings for an un-panelled page. .page-h2 names the section,
   .page-h3 is the descriptive line under it. Both share --inset with
   .page-text so headings and copy share a left edge. */
.page-h2 {
  font-family: var(--font-display);
  font-size: var(--text-3xl);
  font-weight: 300;
  line-height: 1.25;
  margin-inline: var(--inset);
  margin-bottom: 6px;
}

.page-h3 {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  font-weight: 500;
  line-height: 1.3;
  color: var(--lime);
  margin-inline: var(--inset);
}

/* Space between the stacked sections of a content page. */
.page-section + .page-section {
  margin-top: var(--space-xl);
}

.page-h2 + .page-text,
.page-h3 + .page-text {
  margin-top: var(--space-sm);
}

/* A heading that follows body copy needs its own air above. Pages built
   from .page-section get this from the section gap instead. */
.page-text + .page-h2,
.page-list + .page-h2 {
  margin-top: var(--space-xl);
}

@media (max-width: 768px) {
  .page-h2 { font-size: var(--text-2xl); }
}

/* ============================================================
   4  COMMON CHROME
   Nav, footer and buttons — injected on every page.
   ============================================================ */

/* ============================================================
   4.1  Nav
   ============================================================ */

.nav {
  position: sticky;
  top: 0;
  z-index: 100;
  background: transparent;
  backdrop-filter: none
}

.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 90px;
  padding-inline: var(--margin);
}

.nav-logo {
  display: block;
}

.nav-logo img {
  height: 40px;
  display: block;
}

/* ---- Nav dropdown menu: dim caps on desktop, hamburger on phone ---- */
.nav-menu { position: relative; top: 2px; }

.nav-menu > summary { display: block; list-style: none; }

.nav-menu > summary::-webkit-details-marker { display: none; }

.nav-menu-list { display: flex; gap: 32px; list-style: none; }

.nav-menu-item { position: relative; }

.nav-menu-top {
  font: 700 13px var(--font);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.5);
  background: none; border: 0; padding: 8px 0; cursor: pointer;
  transition: color 0.15s;
}

/* Nav item that navigates directly instead of opening a dropdown. The base
   .nav-menu-top rule is written for <button>, so an <a> needs its underline
   removed and a box that can take the mobile tap-target height. */
a.nav-menu-top {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
}

.nav-menu-item:hover .nav-menu-top,
.nav-menu-item:focus-within .nav-menu-top { color: var(--text); }

.nav-menu-drop {
  position: absolute; top: 100%; left: 0; min-width: 180px;
  display: flex; flex-direction: column; padding: 8px 0;
  background: rgba(0,0,0,0.92); border: 1px solid var(--purple); border-radius: 12px;
  opacity: 0; visibility: hidden; transition: opacity 0.15s;
}

.nav-menu-item:hover .nav-menu-drop,
.nav-menu-item:focus-within .nav-menu-drop { opacity: 1; visibility: visible; }

.nav-menu-drop a { padding: 8px 16px; color: var(--text-muted); text-decoration: none; }

.nav-menu-drop a:hover { color: var(--text); background: rgba(255,255,255,0.05); }

/* Desktop: no burger; list always shown, open state irrelevant */
@media (min-width: 769px) {
  .nav-menu > summary { display: none; }
  .nav-menu-list { display: flex; }
  .nav-menu::details-content { content-visibility: visible; }
}

/* Phone: burger toggles an opaque panel under the bar */
@media (max-width: 768px) {
  .nav-menu { position: static; }

  /* panel anchors to .nav, not the menu */
  .nav-menu > summary {
    display: flex; flex-direction: column; justify-content: center; gap: 4px;
    width: 44px; height: 44px; padding: 0 10px; cursor: pointer;
  }

  .nav-burger span { height: 2px; width: 100%; background: var(--text); border-radius: 2px; }

  .nav-menu[open] .nav-burger span:nth-child(1) { transform: translateY(6px) rotate(45deg); }

  .nav-menu[open] .nav-burger span:nth-child(2) { opacity: 0; }

  .nav-menu[open] .nav-burger span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

  .nav-menu-list {
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; gap: 0; padding: 8px 5%;
    background: rgba(0,0,0,0.95);
    border-bottom: 1px solid var(--purple);
  }

  .nav-menu-top { width: 100%; text-align: left; min-height: 44px; }

  a.nav-menu-top { display: flex; }

  .nav-menu-drop {                            /* hover is unusable on touch — flatten */
    position: static; opacity: 1; visibility: visible;
    background: none; border: 0; border-radius: 0; padding: 0 0 8px 12px;
  }
}

/* ============================================================
   4.2  Footer
   ============================================================ */

.footer {
  background: #270842;
  max-width: var(--max-w);
  margin-inline: auto;
  padding-block: 70px;
}

.footer-inner {
  padding-inline: var(--margin);
}

.footer-content {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
}

.footer-left {
  display: flex;
  flex-direction: column;
}

.footer-logo-link {
  display: block;
}

.footer-logo {
  height: 57px;
  width: auto;
  display: block;
  margin-bottom: 28px;
}

.footer-contact {
  font-size: 14px;
  line-height: 26px;
  color: #F8F7F2;
  margin-bottom: 23px;
}

.footer-copy {
  font-size: 14px;
  line-height: 20px;
  color: #F8F7F2;
  margin-bottom: 30px;
}

.footer-social {
  display: flex;
  align-items: center;
  gap: 16px;
}

.footer-social-link {
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0.9;
  transition: opacity 0.2s;
}

.footer-social-link:hover {
  opacity: 1;
}

.footer-nav {
  display: flex;
  gap: 64px;
}

.footer-nav-col {
  list-style: none;
  display: flex;
  flex-direction: column;
}

.footer-nav-col li a {
  display: block;
  line-height: 34px;
  color: #F8F7F2;
  text-decoration: none;
  transition: opacity 0.2s;
}

.footer-nav-col li a:hover {
  opacity: 0.7;
  text-decoration: underline;
}

/* Footer — centered single column, reordered */
@media (max-width: 768px) {
  /* Footer – purple, centered, single column.
       order: puts children in logo → contact → nav → social → copyright,
       which needs .footer-left unwrapped so they are all flex siblings. */
  .footer {
    padding-block: 72px 48px;
  }

  .footer-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
  }

  .footer-left {
    display: contents;
  }

  .footer-logo-link {
    order: 1;
  }

  .footer-logo {
    height: 71px;
    width: auto;
    margin-bottom: 49px;
  }

  .footer-contact {
    order: 2;
    font-size: 18px;
    text-align: center;
    margin-bottom: 52px;
  }

  .footer-nav {
    order: 3;
    flex-direction: column;
    gap: 0;
    align-items: center;
    margin-bottom: 56px;
  }

  .footer-nav-col {
    align-items: center;
  }

  .footer-nav-col li a {
    font-size: 18px;
    line-height: 34px;
    text-align: center;
  }

  .footer-social {
    order: 4;
    justify-content: center;
    margin-bottom: 45px;
  }

  .footer-copy {
    order: 5;
    text-align: center;
    margin-bottom: 0;
  }
}

/* ============================================================
   4.3  Buttons
   ============================================================ */

.btn-primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--purple);
  color: #000;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 16px;
  letter-spacing: 0.8px;
  text-decoration: none;
  border: 2px solid transparent;
  border-radius: 40px;
  padding: 13px 21px;
  height: 45px;
  min-width: 250px;
  cursor: pointer;
  box-shadow: 0 6px 6px rgba(118, 80, 245, 0.3);
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.btn-primary:hover {
  background: #000;
  color: var(--purple);
  border: 2px solid var(--purple);
  opacity: 1;
}

.btn-outline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  color: #F5F5F5;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 16px;
  letter-spacing: 0.8px;
  text-decoration: none;
  border: 2px solid var(--purple);
  border-radius: 40px;
  padding: 9px 18px;
  min-width: 130px;
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
}

.btn-outline:hover {
  background: var(--purple);
  color: #000;
}

/* Price/offer line that sits under a CTA. */
.offer-line {
  margin-top: var(--space-sm);
  font-size: var(--text-sm);
  color: var(--text-muted);
}

@media (max-width: 768px) {
  .btn-primary {
    width: 100%;
    min-width: unset;
  }
}

/* ============================================================
   5  SHARED COMPONENTS
   Used by more than one page.
   ============================================================ */

/* ============================================================
   PANEL — the one bordered content card. Page-agnostic frame for
   prose blocks, wherever a block wants a card around it.
   ============================================================ */
.panel {
  padding: 64px 72px;
  border: 1px solid var(--purple);
  border-radius: 50px;
  background: var(--card-bg);
  text-align: left;
}

/* Prose inside a panel — one treatment for every long-form block, so the
   markup carries no per-paragraph typography classes. */
.panel p              {
  font-size: var(--text-lg);
  line-height: 1.6;
  color: var(--text-muted);
}
.panel > :first-child { margin-top: 0; }
.panel p + p          { margin-top: 1.1em; }
.panel > h2           { margin: 1.7em 0 0.5em; }

/* Prose links in a panel paragraph. Matches the legal pages' treatment;
   without this a link falls back to the browser default, which is
   unreadable on the dark card. Scoped to <p> so it can't override the
   btn-* classes, which also sit inside panels. */
.panel p a {
  color: var(--text);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.2s;
}

.panel p a:hover {
  color: var(--lime);
}

@media (max-width: 768px) {
  .panel {
    padding: 40px 28px;
    border-radius: 32px;
  }
}

/* Footnote — small, muted text with a fixed 28px left indent. Self-contained
   (small size, muted colour, top spacing) so markup is just class="footnote". */
.footnote {
  margin-top: var(--space-md);
  margin-left: 28px;
  font-size: var(--text-sm);
  color: var(--text-muted);
}

/* ---- About page — no bespoke styling; uses .section + .panel + utilities ---- */

/* ============================================================
   DIAGRAM PLACEHOLDER — temporary frame standing in for a supplied
   diagram asset. Delete this rule once the real assets are dropped in.
   ============================================================ */
.diagram {
  margin: 40px 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 320px;
  padding: 32px;
  border: 1px dashed var(--purple);
  border-radius: 24px;
  background: rgba(132, 94, 238, 0.06);
  text-align: center;
}

/* A real diagram keeps the frame but swaps the dashed placeholder edge for
   a solid one, and drops the padding so the image fills it. overflow:hidden
   clips the image to the rounded corners. */
.diagram:has(img) {
  min-height: 0;
  padding: 0;
  overflow: hidden;
  border-style: solid;
  background: none;
}

/* Inset from the prose so the frame reads as an object rather than a band.
   Full width below 769px, where 75% of a narrow column would leave the
   diagram too small to read. */
@media (min-width: 769px) {
  .diagram:has(img) {
    max-width: 75%;
    margin-inline: auto;
  }
}

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

/* ============================================================
   6  PAGE SECTIONS
   ============================================================ */

/* ============================================================
   6.1  Landing page — index.html
   ============================================================ */

.promo-banner {
  background: var(--lime);
  color: #000;
  font-family: var(--font-display);
  font-weight: 500;
  line-height: 1.4;
  text-align: center;
  padding: 12px var(--margin);
}

@media (max-width: 600px) {
  .promo-banner { font-size: 14px; padding: 10px var(--margin); }
}

.hero {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: flex-start;
  gap: 32px;
  padding: 48px 0 120px var(--margin);
  max-width: 100%;
  overflow: visible;
}

.hero-content {
  flex: 0 0 556px;
  padding-top: 48px;
}

.hero-eyebrow {
  font-family: var(--font-display);
  font-weight: 700;
  color: var(--lime);
  letter-spacing: 0.8px;
  margin-bottom: 24px;
}

.hero-headline {
  font-family: var(--font-display);
  font-size: 46px;
  font-weight: 500;
  line-height: 1.25;
  margin-bottom: 32px;
  max-width: 556px;
}

.hero-body {
  font-size: 18px;
  line-height: 1.6;
  margin-bottom: 40px;
  max-width: 516px;
}

.hero-visual {
  position: absolute;
  top: -80px;
  right: 0;
  width: 50vw;
  max-width: 720px;
}

.hero-visual img {
  display: block;
  width: 100%;
  height: auto;
}

/* ============================================================
   HERO — mid-range fix (769–1439px)
   The hero is designed for ~1440px. OS/browser scaling (e.g. a
   200% laptop) can put the CSS viewport well below that, where the
   fixed 556px text column collides with the 50vw mockup and the
   46px headline reads oversized. Scale the hero fluidly across this
   band so the two-column layout holds without overlap.
   Untouched above 1440 (the approved design) and at/below 768
   (the mobile stack) — min-width:769 keeps this off mobile entirely.
   ============================================================ */
@media (min-width: 769px) and (max-width: 1439px) {
  .hero-content {
    flex: none;
    width: 40vw;
    /* was fixed 556px; scales with viewport */
    padding-top: 24px;
  }

  .hero-headline {
    font-size: clamp(30px, 3.4vw, 44px);
    /* was fixed 46px */
    max-width: 100%;
  }

  .hero-body {
    max-width: 100%;
  }

  .hero-visual {
    width: 44vw;
    /* base 50vw; bigger = less clearance from copy */
  }
}

/* Hero — hide image, stack content full width */
@media (max-width: 768px) {
  /* Hero – hide image, stack content full width */
  .hero {
    padding: 32px var(--margin) 80px;
    display: block;
  }

  .hero-visual {
    display: none;
  }

  .hero-content {
    flex: none;
    width: 100%;
    padding-top: 24px;
  }

  .hero-eyebrow {
    font-size: 20px;
  }

  .hero-headline {
    font-size: 38px;
    max-width: 100%;
  }

  .hero-body {
    font-size: 18px;
    max-width: 100%;
  }
}

/* ============================================================
   SECTION INTRO  (smaller, left-justified heading + body)
   Used by Product Architecture and How It Works
   ============================================================ */
.section-intro {
  max-width: 820px;
  margin-bottom: 56px;
}

.section-intro-title {
  font-family: var(--font-display);
  font-size: 32px;
  font-weight: 500;
  line-height: 1.25;
  margin-bottom: 24px;
}

.section-intro-body {
  font-size: 18px;
  line-height: 1.6;
  color: var(--text-muted);
}

.section-intro-body+.section-intro-body {
  margin-top: 20px;
}

@media (max-width: 768px) {
  .section-intro {
    margin-bottom: 40px;
  }

  .section-intro-title {
    font-size: 26px;
  }
}

/* ============================================================
   PRODUCT ARCHITECTURE – 2×2 CARD GRID
   ============================================================ */
.product-architecture {
  margin: 0;
  padding-top: 40px;
  padding-inline: var(--margin);
}

.cards-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
}

.card {
  border: 2px solid var(--purple);
  border-radius: 18px;
  overflow: hidden;
  background: var(--card-bg);
  position: relative;
}

.card-animation {
  position: relative;
  aspect-ratio: 484 / 299;
  overflow: hidden;
  opacity: 0.9;
}

.card-anim-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  display: block;
}

.card-text {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 20px 24px 28px;
  background: linear-gradient(to top, rgba(10, 1, 24, 0.95) 40%, transparent 100%);
}

.card-title {
  font-family: var(--font-display);
  font-size: 26px;
  font-weight: 500;
  margin-bottom: 8px;
  letter-spacing: -0.4px;
}

.card-desc {
  font-size: 17px;
  color: var(--text-muted);
  letter-spacing: -0.18px;
}

/* Cards — single column */
@media (max-width: 768px) {
  /* Product Architecture – single column */
  .cards-grid {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
   HOW IT WORKS – STEP LIST
   ============================================================ */
.how-it-works {
  margin: 0;
  padding-top: 40px;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.how-it-works .section-intro {
  text-align: left;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 80px;
}

/* Keep the chevron timeline in its original centered column while the
   intro above indents to the page --margin. */
.how-it-works .steps {
  width: 100%;
  max-width: 580px;
}

.steps {
  display: flex;
  flex-direction: column;
}

.step {
  display: flex;
  gap: 32px;
  align-items: stretch;
}

.step-icon-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  flex-shrink: 0;
}

.step-icon {
  width: 40px;
  height: auto;
  display: block;
  object-fit: contain;
}

.step-line {
  width: 2px;
  flex: 1;
  min-height: 80px;
  background: linear-gradient(180deg, var(--purple) 0%, rgba(132, 94, 238, 0) 100%);
}

.step-content {
  padding-bottom: 60px;
}

.step-last .step-content {
  padding-bottom: 0;
}

.step-title {
  font-size: 28px;
  font-weight: 500;
  line-height: 1.2;
  margin-bottom: 8px;
}

.step-title-accent {
  font-size: 28px;
  color: var(--lime);
}

.step-desc {
  font-size: 18px;
  color: var(--text-muted);
  line-height: 30px;
  max-width: 586px;
}

/* ============================================================
   How It Works intro — proportional side indent (~20% each side)
   60vw block centered = 20% of the viewport on each side, scaling
   with width. max-width caps the line length so it doesn't over-run
   on wide monitors. min-width:769 keeps it off mobile, where the
   block stays full width within the page padding.
   ============================================================ */
@media (min-width: 769px) {
  .how-it-works .section-intro {
    width: 60vw;
    max-width: 820px;
  }
}

@media (max-width: 768px) {
  /* How It Works */
  .how-it-works {
    max-width: 100%;
    padding-top: 40px;
  }

  .step-title {
    font-size: 24px;
  }

  .step-title-accent {
    font-size: 22px;
  }

  .step-desc {
    font-size: 18px;
    max-width: 100%;
  }
}

/* ============================================================
   FINAL CTA  (closing call to action before footer)
   ============================================================ */
.final-cta {
  max-width: var(--max-w);
  margin: 0 auto 100px auto;
  padding-top: 40px;
  text-align: center;
}

.final-cta-title {
  font-family: var(--font-display);
  font-size: 36px;
  font-weight: 500;
  line-height: 1.25;
  margin-bottom: 20px;
}

.final-cta-body {
  font-size: 18px;
  line-height: 1.6;
  color: var(--text-muted);
  max-width: 640px;
  margin: 0 auto 40px;
}

@media (max-width: 768px) {
  .final-cta-title {
    font-size: 28px;
  }
}

/* ---- Segment landing pages (small-business, …) -------------------
   Reuse the landing hero, .section and .final-cta with a lighter
   headline and one vertical rhythm.

   Spacing rule: every block carries its own TOP gap and no bottom
   gap, so each boundary is exactly one --section-gap and the two
   sides can never add up. It also stays correct if a page drops a
   block — no illustration just means the section supplies the gap. */
.page-hero .hero-headline {
  font-weight: 400;
}

.page-hero .section-intro-title,
.page-hero .final-cta-title {
  font-weight: 300;
}

.page-hero .hero {
  padding-bottom: 0;
}

.page-hero .diagram {
  margin-block: var(--section-gap) 0;
}

.page-hero .section {
  padding-top: var(--section-gap);
  padding-bottom: 0;
}

/* The intro block is the whole section here, so its own bottom margin
   would double up with the next block's top gap. */
.page-hero .section-intro {
  margin-bottom: 0;
}

/* Where the heading sits outside the intro block, the copy has to pick up
   .page-h2's inset itself, plus air under the heading. Matching on the
   adjacent .page-h2 keeps this off the pages that still nest their
   heading inside .section-intro. */
.page-hero .page-h2 + .section-intro {
  margin-inline: var(--inset);
  margin-top: var(--space-md);
}

.page-hero .final-cta {
  margin-bottom: var(--section-gap);
}

/* ============================================================
   6.2  Pricing — pricing.html
   ============================================================ */

/* ============================================================
   PRICING — full-width intro panel + 2×2 plan cards.
   Reuses tokens/utilities; .panel frames the intro, btn-* the CTAs.
   ============================================================ */
.pricing-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  margin-top: var(--space-xl);
}

.price-card {
  position: relative;               /* anchors the "Most popular" badge */
  display: flex;
  flex-direction: column;
  border: 1px solid var(--purple);
  border-radius: 28px;
  background: var(--card-bg);
  padding: 40px 40px 44px;
}

.price-card-featured {
  border-width: 2px;
  border-color: var(--lime);
  box-shadow: 0 8px 30px rgba(225, 247, 112, 0.10);
}

.price-badge {
  position: absolute;
  top: -13px;
  right: 32px;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #000;
  background: var(--lime);
  border-radius: 40px;
  padding: 6px 14px;
}

.price-tier {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  font-weight: 500;
  letter-spacing: -0.3px;
}

.price-amount {
  font-family: var(--font-display);
  font-size: var(--text-4xl);
  font-weight: 700;
  line-height: 1.1;
  margin-top: 14px;
}

.price-amount-contact { font-size: var(--text-3xl); }

.price-per {
  font-family: var(--font);
  font-size: var(--text-base);
  font-weight: 400;
  color: var(--text-muted);
}

.price-use {
  color: var(--text-muted);
  margin-top: 12px;
  min-height: 2.6em;                /* keeps feature lists aligned across the row */
}

.price-features {
  list-style: none;
  margin-top: 24px;
  padding-top: 22px;
  border-top: 1px solid rgba(132, 94, 238, 0.35);
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.price-features li {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  color: var(--text-muted);
}

.price-features li b {
  font-family: var(--font-display);
  font-weight: 700;
  color: var(--text);
  text-align: right;
}

.price-cta { margin-top: auto; padding-top: 32px; }

.price-card .btn-primary,
.price-card .btn-outline {
  width: 100%;
  min-width: 0;
}

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

  .price-card   { padding: 32px 28px; }
}

/* ============================================================
   6.3  Guides — guides.html, wizards.html
   ============================================================ */

/* ============================================================
   GUIDES — index grid of guide cards linking to each guide.
   Whole card is the link; hover lifts + switches edge to lime.
   ============================================================ */
.guide-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  margin-top: var(--space-xl);
}

.guide-card {
  display: block;
  border: 1px solid var(--purple);
  border-radius: 22px;
  background: var(--card-bg);
  padding: 32px 34px;
  text-decoration: none;
  color: inherit;
  transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
}

.guide-card:hover {
  border-color: var(--lime);
  transform: translateY(-3px);
  box-shadow: 0 10px 30px rgba(132, 94, 238, 0.15);
}

.guide-eyebrow {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--lime);
}

.guide-title {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  font-weight: 500;
  margin-top: 10px;
  letter-spacing: -0.3px;
}

.guide-desc {
  color: var(--text-muted);
  line-height: 1.6;
  margin-top: 10px;
}

.guide-more {
  display: inline-block;
  margin-top: 16px;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-sm);
  letter-spacing: 0.04em;
  color: var(--purple);
  transition: color 0.2s;
}

.guide-card:hover .guide-more { color: var(--lime); }

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

  .guide-card { padding: 28px; }
}

/* ============================================================
   6.4  Contact — contact.html
   ============================================================ */

.contact-info-list {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.contact-info-list li {
  display: flex;
  align-items: baseline;
  gap: 14px;
}

.cil-key {
  flex: 0 0 96px;
  font-size: 14px;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  color: var(--text-muted);
}

.cil-val {
  font-size: 20px;
  font-weight: 500;
  color: var(--text);
  text-decoration: none;
  transition: color 0.2s;
}

.cil-val:hover {
  color: var(--lime);
}

/* ============================================================
   6.5  Legal — cookie / dpa / legal / privacy / terms
   Typography hangs off .legal-body, and .legal-doc is the frame. No
   panel: the copy sits directly on the page background.
   ============================================================ */

/* Un-panelled document frame. .page-center centres its children, so the
   copy has to opt back out. Shares --inset with .page-text. */
.legal-doc {
  text-align: left;
  margin-inline: var(--inset);
}

/* Denser, quieter measure for long legal documents. */
.legal-body p,
.legal-body li {
  font-size: var(--text-base);
  line-height: 1.7;
  color: var(--text-muted);
  margin-bottom: 18px;
}

.legal-body p + p { margin-top: 0; }
.legal-body li    { margin-bottom: 8px; }
.legal-body p:last-child,
.legal-body li:last-child { margin-bottom: 0; }

/* Prose links — declared here rather than relying on .panel p a, so they
   survive once the panel comes off. */
.legal-body a {
  color: var(--text);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.2s;
}

.legal-body a:hover { color: var(--lime); }

/* Card header row: effective date (left) + PDF download (right). */
.legal-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 10px 24px;
  margin-bottom: 32px;
}

.legal-effective,
.legal-download {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: 0.6px;
  text-transform: uppercase;
}

.legal-download {
  color: var(--text-muted);
  text-decoration: none;
  white-space: nowrap;
  transition: color 0.2s;
}

.legal-download:hover { color: var(--lime); }

/* Hairline divider above each top-level section heading. */
.legal-body h2 {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 500;
  line-height: 1.3;
  margin-top: 32px;
  margin-bottom: 16px;
  padding-top: 24px;
  border-top: 1px solid rgba(132, 94, 238, 0.25);
}

.legal-body h3 {
  font-family: var(--font-display);
  font-size: 17px;
  font-weight: 500;
  line-height: 1.3;
  margin-top: 28px;
  margin-bottom: 12px;
}

.legal-body > h2:first-child,
.legal-body > h3:first-child { margin-top: 0; padding-top: 0; border-top: none; }

.legal-body ul { margin: 0 0 18px; padding-left: 22px; list-style: disc; }

/* Clause lists carry their own (a)/(b) markers — drop the bullet. */
.legal-body ul.legal-clauses { list-style: none; padding-left: 0; }

@media (max-width: 768px) {
  .legal-body h2 { font-size: 20px; margin-top: 28px; padding-top: 22px; }

  .legal-body h3 { font-size: 16px; }
}

/* ============================================================
   6.6  FAQ — faq.html
   ============================================================ */

/* ============================================================
   FAQ — native <details> accordion. No JS; exclusive-open via the
   shared name="faq" attribute. Questions auto-numbered per section
   with a CSS counter (no separators, no marker).
   ============================================================ */
.faq-list { margin-top: var(--space-xl); counter-reset: faq; }

.faq-q {
  list-style: none;
  cursor: pointer;
  counter-increment: faq;
  padding: 16px 4px;
  font-family: var(--font-display);
  font-size: var(--text-xl);
  font-weight: 500;
  transition: color 0.2s;
}

.faq-q::-webkit-details-marker { display: none; }

/* kills default triangle */
.faq-q::before { content: counter(faq) ". "; }

.faq-q:hover { color: var(--lime); }

.faq-a { padding: 0 4px 20px; max-width: 760px; }

.faq-a p {
  color: var(--text-muted);
  font-size: var(--text-lg);
  line-height: 1.6;
}

.faq-a p + p { margin-top: 1em; }

/* FAQ — section grouping + lists inside answers */
.faq-group {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  font-weight: 500;
  margin-top: 56px;
}

.faq-group + .faq-list { margin-top: 12px; }

.faq-a ul { margin-top: 0.8em; padding-left: 1.2em; }

.faq-a li {
  color: var(--text-muted);
  font-size: var(--text-lg);
  line-height: 1.6;
}

.faq-a li + li { margin-top: 0.3em; }

/* FAQ inside a .panel frame — override the panel's generic prose rhythm
   so section titles and lists keep their own spacing. */
.panel > .faq-group { margin: 48px 0 0; }

.panel > .faq-group:first-child { margin-top: 0; }

.panel > .faq-group + .faq-list { margin-top: 12px; }

/* ============================================================
   7  UTILITIES
   Atomic, page-agnostic helpers. Compose on any element, e.g.
   <h1 class="text-5xl font-display font-light text-center">.
   Declared last so a utility wins over a component rule of
   equal specificity. Only the steps the markup uses exist —
   add a step when a page needs it.
   ============================================================ */

/* ============================================================
   7.1  Text
   ============================================================ */

/* size */
.text-sm   { font-size: var(--text-sm); }

.text-2xl  { font-size: var(--text-2xl); }

.text-5xl  { font-size: var(--text-5xl); }

/* family */
.font-display { font-family: var(--font-display); }

/* weight */
.font-light  { font-weight: 300; }

.font-medium { font-weight: 500; }

.font-bold   { font-weight: 700; }

/* line-height */
/* colour */
.text-default { color: var(--text); }

.text-muted   { color: var(--text-muted); }

.text-accent  { color: var(--lime); }

.text-purple  { color: var(--purple); }

/* alignment */
.text-center { text-align: center; }

/* ============================================================
   7.2  Spacing
   ============================================================ */

.mt-sm { margin-top: var(--space-sm); }

.mt-md { margin-top: var(--space-md); }

.mt-lg { margin-top: var(--space-lg); }

.mt-xl { margin-top: var(--space-xl); }

/* ============================================================
   7.3  Layout
   ============================================================ */

.grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-lg);
}

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