/* Shared styles for every omnicoda.com page (#815). Was inline in index.html. Bump ?v= in each page's <link>
   when this changes, or Cloudflare may serve the old copy. */
  :root {
    --bg: #0a0c12;
    --bg-2: #0f131c;
    --ink: #f3f1ea;
    --muted: #9aa1b2;
    --line: rgba(255,255,255,0.10);
    --accent: #e6b65c;       /* warm authoritative gold */
    --accent-soft: rgba(230,182,92,0.14);
    --radius: 14px;
  }

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

  html, body { height: 100%; }

  body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    background: var(--bg);
    color: var(--ink);
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
    position: relative;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
  }

  /* Background: converging lines (channels resolving into one point = the coda) */
  .bg-art {
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background:
      radial-gradient(1200px 700px at 50% 18%, rgba(230,182,92,0.10), transparent 60%),
      radial-gradient(900px 600px at 85% 90%, rgba(80,120,255,0.07), transparent 60%),
      linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 100%);
  }
  .bg-art svg { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.5; }

  /* The hero column stays narrow (880) for readable measure; capability chapters below use a wider
     container so screenshots have room to breathe. */
  .wrap {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: 880px;
    margin: 0 auto;
    padding: 32px 24px 0;
    display: flex;
    flex-direction: column;
  }

  /* Header */
  header { display: flex; align-items: center; justify-content: space-between; }
  .brand { display: flex; align-items: center; gap: 11px; }
  .brand .mark { height: 34px; width: auto; display: block; }
  .wordmark {
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: lowercase;
    font-size: 1.05rem;
    color: var(--ink);
  }
  .wordmark .dot { color: var(--accent); }
  .nav-note { font-size: 0.82rem; color: var(--muted); letter-spacing: 0.02em; }

  /* Hero */
  main {
    min-height: 66vh;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 56px 0;
  }

  .eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    align-self: flex-start;
    padding: 7px 14px;
    border: 1px solid var(--line);
    background: var(--accent-soft);
    border-radius: 999px;
    font-size: 0.78rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--accent);
    margin-bottom: 28px;
  }
  .eyebrow .pulse {
    width: 7px; height: 7px; border-radius: 50%;
    background: var(--accent);
    box-shadow: 0 0 0 0 rgba(230,182,92,0.6);
    animation: pulse 2.4s infinite;
  }
  @keyframes pulse {
    0% { box-shadow: 0 0 0 0 rgba(230,182,92,0.5); }
    70% { box-shadow: 0 0 0 9px rgba(230,182,92,0); }
    100% { box-shadow: 0 0 0 0 rgba(230,182,92,0); }
  }

  h1 {
    font-family: 'Fraunces', Georgia, serif;
    font-weight: 500;
    font-size: clamp(2.7rem, 7vw, 4.6rem);
    line-height: 1.02;
    letter-spacing: -0.01em;
    margin-bottom: 22px;
  }
  h1 .accent { color: var(--accent); font-style: italic; }

  .lede {
    font-size: clamp(1.05rem, 2.1vw, 1.28rem);
    color: var(--muted);
    max-width: 620px;
    margin-bottom: 38px;
  }
  .lede strong { color: var(--ink); font-weight: 600; }

  /* Form */
  form.invite {
    display: flex;
    gap: 10px;
    max-width: 480px;
    width: 100%;
    flex-wrap: wrap;
  }
  input[type="email"] {
    flex: 1 1 240px;
    padding: 15px 18px;
    border-radius: var(--radius);
    border: 1px solid var(--line);
    background: rgba(255,255,255,0.04);
    color: var(--ink);
    font-size: 1rem;
    font-family: inherit;
    outline: none;
    transition: border-color .2s, background .2s;
  }
  input[type="email"]::placeholder { color: #6b7283; }
  input[type="email"]:focus { border-color: var(--accent); background: rgba(255,255,255,0.06); }

  button {
    padding: 15px 24px;
    border-radius: var(--radius);
    border: none;
    background: var(--accent);
    color: #1a1305;
    font-weight: 600;
    font-size: 1rem;
    font-family: inherit;
    cursor: pointer;
    transition: transform .12s ease, filter .2s ease;
    white-space: nowrap;
  }
  button:hover { filter: brightness(1.06); }
  button:active { transform: translateY(1px); }

  .form-note { font-size: 0.82rem; color: #6b7283; margin-top: 12px; }

  .success {
    display: none;
    max-width: 480px;
    padding: 16px 18px;
    border: 1px solid rgba(230,182,92,0.4);
    background: var(--accent-soft);
    border-radius: var(--radius);
    color: var(--ink);
    font-size: 0.98rem;
  }
  .success .coda { height: 1.05em; width: auto; vertical-align: -0.18em; margin-left: 4px; }
  /* Success state is scoped to the signup block that was submitted, so the two capture points are independent. */
  .signup.submitted .success { display: block; }
  .signup.submitted form.invite, .signup.submitted .form-note { display: none; }

  /* Pillars */
  .pillars {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
    margin-top: 64px;
    padding-top: 36px;
    border-top: 1px solid var(--line);
  }
  .pillar h3 {
    font-size: 0.98rem;
    font-weight: 600;
    margin-bottom: 6px;
    color: var(--ink);
  }
  .pillar p { font-size: 0.88rem; color: var(--muted); }
  .pillar .mark { color: var(--accent); font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; display:block; margin-bottom: 10px; }

  /* ── Capability chapters ──────────────────────────────────────────────────────────────────────
     Wider container than the hero so screenshots have room. Each chapter = a labelled group; inside,
     a capability is either a `.cap` (text + screenshot, alternating sides) or a `.cap-card` (compact). */
  .chapters { position: relative; z-index: 1; max-width: 1080px; margin: 0 auto; padding: 0 24px; }
  .chapter { padding-top: 64px; }
  .chapter + .chapter { border-top: 1px solid var(--line); }
  .chapter-label {
    font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.14em;
    color: var(--accent); margin-bottom: 10px;
  }
  .chapter > h2 {
    font-family: 'Fraunces', Georgia, serif; font-weight: 500;
    font-size: clamp(1.6rem, 3.4vw, 2.15rem); line-height: 1.12;
    letter-spacing: -0.01em; margin-bottom: 10px;
  }
  .chapter-intro { font-size: 0.95rem; color: var(--muted); max-width: 640px; margin-bottom: 38px; }

  .cap { display: grid; grid-template-columns: 1fr 1fr; gap: 38px; align-items: center; }
  .cap + .cap { margin-top: 52px; }
  .cap.flip .cap-text { order: 2; }
  .cap h3 {
    font-family: 'Fraunces', Georgia, serif; font-weight: 500;
    font-size: clamp(1.2rem, 2.4vw, 1.5rem); line-height: 1.18; margin-bottom: 10px;
  }
  .cap p { font-size: 0.92rem; color: var(--muted); }

  /* Screenshot plate. The app UI is LIGHT and the page is dark, so a screenshot needs a frame + lift
     or it reads as a hole punched in the page. `.ph` is the placeholder shown until an image lands. */
  .shot {
    border: 1px solid rgba(255,255,255,0.14);
    border-radius: 12px;
    background: #0d1119;
    box-shadow: 0 18px 50px rgba(0,0,0,0.55);
    overflow: hidden;
  }
  .shot .bar {
    display: flex; align-items: center; gap: 6px;
    padding: 9px 12px; border-bottom: 1px solid rgba(255,255,255,0.10);
    background: rgba(255,255,255,0.03);
  }
  .shot .bar i { width: 9px; height: 9px; border-radius: 50%; background: rgba(255,255,255,0.16); display: block; }
  .shot img { display: block; width: 100%; height: auto; }

  /* Channel strip — a 3x3 of where the seller sells, sitting directly under the positioning so "every
     channel" is illustrated at the moment it's claimed. Monochrome on purpose: eight brand palettes at once
     would be the loudest thing on a page built from one gold accent, and would read as a logo wall bolted
     onto someone else's design. A muted ink sets the right register — the ecosystem we work across, not a
     certification badge. Names sit under each glyph for the marks people don't know on sight. */
  .channels { margin-top: 40px; max-width: 430px; }
  .chGrid {
    list-style: none;
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 22px 14px;
  }
  .chItem {
    display: flex; flex-direction: column; align-items: center; gap: 9px;
    text-align: center; color: #aab2c2;
    transition: color .2s ease;
  }
  .chItem:hover { color: var(--ink); }
  .chItem svg { width: 26px; height: 26px; fill: currentColor; display: block; }
  .chItem span { font-size: 0.76rem; color: #99a1b2; line-height: 1.25; }
  .chItem i { font-style: normal; color: var(--accent); }
  .chNote { margin-top: 20px; font-size: 0.72rem; color: #6b7283; line-height: 1.5; }
  .chNote i { font-style: normal; color: var(--accent); }
  @media (max-width: 640px) {
    .channels { max-width: none; }
    .chItem span { font-size: 0.72rem; }
  }

  /* Screenshot treatment. The app is data-dense: a whole screen scaled into this column is unreadable
     (13px UI text lands near 4px). So the plate carries a small sharp inset — a magnified slab of the
     screen — whose real job is to advertise that this thing is inspectable. Hover and it steps aside
     for a magnifier that follows the cursor at true 1:1; click for the full-resolution modal.
     Once the reader has hovered this shot ONCE, the inset has done its job and retires for good
     (`.seen`), leaving the plate clean. Gated on a real hover-capable fine pointer ONLY — an earlier
     version also required min-width 861px, which pointlessly disabled the magnifier on a narrow
     desktop window (the pointer media queries already exclude touch). Per-shot tuning:
       --shot  the image url (same file the <img> uses — one asset, no extra download)
       --zs    magnification of the idle inset (e.g. 250% frames ~40% of the width)
       --zx/zy which region it frames, as background-position percentages */
  .shot-body { position: relative; }

  /* Carousel dots. Top-LEFT: the expand button owns top-right and the idle inset owns the bottom.
     They double as manual controls, which is also what keeps auto-advancing content acceptable. */
  .shot-dots { position: absolute; top: 12px; left: 12px; display: none; gap: 6px; z-index: 2; }
  .shot-dots.show { display: flex; }
  .shot-dots button {
    width: 8px; height: 8px; padding: 0; border: none; border-radius: 50%;
    background: rgba(255,255,255,0.34); cursor: pointer;
    transition: background .2s ease, transform .2s ease;
  }
  .shot-dots button:hover { background: rgba(255,255,255,0.6); }
  .shot-dots button[aria-current="true"] { background: var(--accent); transform: scale(1.3); }
  .shot-dots button:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

  /* Diagram plate — same frame as a screenshot, but line art. Used where a screenshot cannot make the
     point: you can photograph a connected ERP, but not the ABSENCE of one. No lens/modal here — there
     is no detail to magnify, and inline SVG is already sharp at any size. */
  .diagram {
    border: 1px solid rgba(255,255,255,0.14);
    border-radius: 12px;
    background: linear-gradient(180deg, rgba(255,255,255,0.035), rgba(255,255,255,0.012));
    box-shadow: 0 18px 50px rgba(0,0,0,0.45);
    padding: 20px 18px;
  }
  .diagram svg { display: block; width: 100%; height: auto; }
  .diagram .ring   { fill: none; stroke: rgba(230,182,92,0.30); stroke-width: 1.2; }
  .diagram .spoke  { stroke: rgba(230,182,92,0.18); stroke-width: 1; }
  .diagram .node   { fill: var(--accent); }
  .diagram .lbl    { fill: #cbd2e0; font-family: 'Inter', sans-serif; font-size: 12.5px; letter-spacing: 0.06em; text-transform: uppercase; }
  .diagram .core   { fill: none; stroke: var(--accent); stroke-width: 1.2; }
  .diagram .flow   { fill: none; stroke: var(--accent); stroke-width: 1.4; }
  .diagram .erp    { fill: rgba(230,182,92,0.07); stroke: rgba(230,182,92,0.5); stroke-width: 1.2; }
  .diagram .erpTxt { fill: var(--accent); font-family: 'Fraunces', Georgia, serif; font-size: 30px; letter-spacing: 0.04em; }
  .diagram .brandLbl { fill: var(--accent); font-family: 'Fraunces', Georgia, serif; font-size: 21px; letter-spacing: 0.02em; }
  .diagram .note   { fill: #8e96a8; font-family: 'Inter', sans-serif; font-size: 11.5px; }
  .diagram .noteHi { fill: var(--accent); font-family: 'Inter', sans-serif; font-size: 11.5px; letter-spacing: 0.06em; text-transform: uppercase; }

  /* The diagram builds itself, because the build IS the argument: Omnicoda alone in the middle, running
     the whole loop; then it settles left as the ERP arrives beside it and the two-way link appears.
     It reverses and repeats, holding a beat at each end so both states can actually be read.
     `translate(182px,0)` is the offset that centres the ring within the -12..712 viewBox. */
  @keyframes dgSettle {
    0%, 18%   { transform: translate(182px, 0); }
    38%, 62%  { transform: translate(0, 0); }
    82%, 100% { transform: translate(182px, 0); }
  }
  @keyframes dgArrive {
    0%, 18%   { opacity: 0; transform: translate(26px, 0); }
    38%, 62%  { opacity: 1; transform: translate(0, 0); }
    82%, 100% { opacity: 0; transform: translate(26px, 0); }
  }
  @keyframes dgLink {
    0%, 20%   { opacity: 0; }
    40%, 60%  { opacity: 1; }
    80%, 100% { opacity: 0; }
  }
  .diagram .dgCore { animation: dgSettle 11s ease-in-out infinite; }
  .diagram .dgErp  { animation: dgArrive 11s ease-in-out infinite; }
  .diagram .dgLink { animation: dgLink   11s ease-in-out infinite; }

  /* Motion is decorative here — the assembled state carries the meaning on its own. */
  @media (prefers-reduced-motion: reduce) {
    .diagram .dgCore, .diagram .dgErp, .diagram .dgLink { animation: none; opacity: 1; transform: none; }
  }

  /* Expand affordance — always available (works on touch, unlike hover) and opens the full-resolution
     screenshot in a modal, which is the only place a data-dense screen is genuinely readable. */
  .shot-expand {
    position: absolute; top: 10px; right: 10px;
    width: 34px; height: 34px; padding: 0;
    display: flex; align-items: center; justify-content: center;
    border-radius: 9px; cursor: pointer;
    background: rgba(10,12,18,0.78);
    border: 1px solid rgba(255,255,255,0.22);
    color: #e8ebf2;
    transition: background .2s ease, color .2s ease, transform .2s ease;
  }
  .shot-expand:hover { background: var(--accent); color: #1a1305; transform: scale(1.06); }
  .shot-expand:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
  .shot-expand svg { width: 15px; height: 15px; display: block; }

  /* Full-resolution modal */
  .lightbox {
    position: fixed; inset: 0; z-index: 100;
    display: none; align-items: center; justify-content: center;
    padding: 30px;
    background: rgba(6,8,13,0.93);
    backdrop-filter: blur(6px);
  }
  .lightbox.open { display: flex; }
  .lightbox img {
    max-width: 100%; max-height: 100%; width: auto; height: auto;
    border-radius: 10px; border: 1px solid rgba(255,255,255,0.16);
    box-shadow: 0 30px 80px rgba(0,0,0,0.75);
  }
  .lightbox-close {
    position: absolute; top: 18px; right: 20px;
    width: 38px; height: 38px; padding: 0; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    border-radius: 10px; background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.2); color: var(--ink);
    font-size: 1.15rem; line-height: 1;
  }
  .lightbox-close:hover { background: var(--accent); color: #1a1305; }
  .lightbox-figure { display: flex; flex-direction: column; align-items: center; gap: 14px; max-height: 100%; min-height: 0; }
  .lightbox-figure img { min-height: 0; }
  .lightbox-cap { color: #b4bccb; font-size: 0.84rem; text-align: center; max-width: 760px; }

  /* Gallery strip — only rendered when a shot declares related images (data-shots). Lets one slot
     carry a whole sequence (pack → box → rates → buy → printed docs) without adding page sections. */
  .lightbox-strip { display: none; gap: 8px; flex-wrap: wrap; justify-content: center; max-width: 100%; }
  .lightbox-strip.show { display: flex; }
  .lightbox-strip button {
    width: 92px; height: 56px; padding: 0; overflow: hidden;
    border-radius: 7px; border: 1px solid rgba(255,255,255,0.22);
    background-color: #0d1119; background-size: cover; background-position: top center;
    cursor: pointer; opacity: 0.55; transition: opacity .2s ease, border-color .2s ease, transform .2s ease;
  }
  .lightbox-strip button:hover { opacity: 0.9; transform: translateY(-1px); }
  .lightbox-strip button[aria-current="true"] { opacity: 1; border-color: var(--accent); }
  .lightbox-strip button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
  @media (max-width: 640px) { .lightbox-strip button { width: 64px; height: 40px; } }

  /* Magnifier lens — follows the cursor and paints the source at its NATURAL size (1:1), so what you
     read inside the glass is true full resolution rather than an upscale. Deliberately large: at ~70%
     of the plate it shows a useful slab of the screen, not a peephole. Positioned in JS and clamped so
     it never hangs outside the plate. */
  .shot-zoom { display: none; }
  .shot-lens {
    display: none;
    position: absolute;
    width: 70%; height: 70%;
    background-image: var(--shot);
    background-repeat: no-repeat;
    border: 1px solid rgba(255,255,255,0.38);
    border-radius: 10px;
    box-shadow: 0 18px 44px rgba(0,0,0,0.72), inset 0 0 0 1px rgba(0,0,0,0.28);
    opacity: 0; pointer-events: none;
    transition: opacity .18s ease;
  }

  @media (hover: hover) and (pointer: fine) {
    .shot-body { cursor: zoom-in; }
    .shot-lens { display: block; }
    .shot:hover .shot-lens { opacity: 1; }

    .shot-zoom {
      display: block;
      position: absolute;
      left: 6%; right: 6%; bottom: 6%;
      height: 56%;
      background-image: var(--shot);
      background-size: var(--zs, 250%) auto;
      background-position: var(--zx, 20%) var(--zy, 40%);
      background-repeat: no-repeat;
      border: 1px solid rgba(255,255,255,0.28);
      border-radius: 10px;
      box-shadow: 0 22px 48px rgba(0,0,0,0.7);
      transition: opacity .35s ease, transform .35s ease;
    }
    /* Steps aside while the lens is up... */
    .shot:hover .shot-zoom, .shot:focus-within .shot-zoom { opacity: 0; transform: scale(0.985); }
    /* ...and never returns once this shot has been hovered. */
    .shot.seen .shot-zoom { display: none; }
  }

  @media (prefers-reduced-motion: reduce) {
    .shot-expand, .shot-lens, .shot-zoom { transition: none; }
  }

  .shot .ph {
    aspect-ratio: 16 / 10;
    display: flex; align-items: center; justify-content: center;
    color: #59637a; font-size: 0.8rem; text-align: center; padding: 22px; line-height: 1.5;
    background: repeating-linear-gradient(45deg, rgba(255,255,255,0.022) 0 10px, transparent 10px 20px);
  }

  /* Compact capabilities — standalone explanations that don't need a screenshot apiece. */
  .cap-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; }
  .cap-card { border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 18px; background: rgba(255,255,255,0.025); }
  .cap-card h3 { font-size: 1rem; font-weight: 600; margin-bottom: 6px; }
  .cap-card p { font-size: 0.86rem; color: var(--muted); }
  .cap-card .mark { color: var(--accent); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; display: block; margin-bottom: 9px; }

  /* Closing call-to-action (second capture point, after the scroll). */
  /* position/z-index are LOAD-BEARING: .bg-art is a fixed, full-viewport layer at z-index 0, and a
     positioned element paints above non-positioned content. Without this the whole CTA renders
     underneath the background art — present, clickable, and completely invisible. Every other
     top-level block (.wrap, .chapters, footer) carries the same pair for the same reason. */
  .closing { position: relative; z-index: 1; max-width: 1080px; margin: 64px auto 0; padding: 64px 24px 8px; border-top: 1px solid var(--line); text-align: center; }
  .closing h2 { font-family: 'Fraunces', Georgia, serif; font-weight: 500; font-size: clamp(1.6rem, 3.4vw, 2.15rem); line-height: 1.12; margin-bottom: 10px; }
  .closing > p { color: var(--muted); margin-bottom: 24px; }
  .closing .signup { display: flex; flex-direction: column; align-items: center; }
  .closing .contact { font-size: 0.9rem; color: var(--muted); margin-top: 28px; }
  .closing .contact a { color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--line); }
  .closing .contact a:hover, .closing .contact a:focus-visible { border-bottom-color: var(--ink); }

  /* ── #815: nav links, hero CTAs, pricing, contact form ──────────────────────────────────────────────── */
  .nav-links { display: flex; align-items: center; gap: 18px; font-size: 0.86rem; }
  .nav-links a { color: var(--muted); text-decoration: none; }
  .nav-links a:hover, .nav-links a:focus-visible { color: var(--ink); }
  .nav-links .nav-cta { color: #1a1305; background: var(--accent); padding: 8px 14px; border-radius: 10px; font-weight: 600; }
  .nav-links .nav-cta:hover, .nav-links .nav-cta:focus-visible { color: #1a1305; filter: brightness(1.06); }

  .cta-row { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
  .btn { display: inline-block; padding: 15px 24px; border-radius: var(--radius); font-weight: 600; font-size: 1rem;
         text-decoration: none; white-space: nowrap; transition: transform .12s ease, filter .2s ease, border-color .2s ease; }
  .btn:active { transform: translateY(1px); }
  .btn-primary { background: var(--accent); color: #1a1305; }
  .btn-primary:hover, .btn-primary:focus-visible { filter: brightness(1.06); }
  /* Secondary button: a real 2px outline so it reads as a button, filling with the accent on hover. */
  .btn-ghost { border: 2px solid rgba(255,255,255,0.32); background: rgba(255,255,255,0.04); color: var(--ink); }
  .btn-ghost:hover, .btn-ghost:focus-visible { border-color: var(--accent); background: var(--accent-soft); }
  .btn-ghost .sub { color: var(--muted); font-weight: 500; }
  /* Two-line button: a label over a quieter sub-line ("Watch it work" / "10 min video"). */
  .btn-stack { display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
               line-height: 1.15; padding-top: 8px; padding-bottom: 8px; }
  .btn-stack .sub { display: block; margin-top: 3px; font-size: 0.74rem; }

  .plans { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; align-items: stretch; }
  .plan { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--radius);
          padding: 22px 18px 18px; background: rgba(255,255,255,0.025); }
  .plan.featured { border-color: rgba(230,182,92,0.45); background: linear-gradient(180deg, rgba(230,182,92,0.08), rgba(255,255,255,0.02)); }
  .plan-name { font-family: 'Fraunces', Georgia, serif; font-size: 1.3rem; font-weight: 500; }
  .plan-tag { font-size: 0.82rem; color: var(--muted); margin-top: 3px; }
  .plan .price { margin-top: 16px; font-size: 2rem; font-weight: 600; letter-spacing: -0.02em; line-height: 1.1; }
  .plan .price small { font-size: 0.85rem; font-weight: 500; color: var(--muted); letter-spacing: 0; }
  .plan .price .from { display: block; font-size: 0.74rem; font-weight: 500; color: var(--muted); letter-spacing: 0.02em; margin-bottom: 4px; }
  /* Orders/month is THE scaling dimension, so it gets its own line, larger than the features below it. */
  .plan .orders { margin-top: 16px; padding: 12px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
                  font-size: 0.86rem; color: var(--muted); }
  .plan .orders b { font-size: 1.35rem; font-weight: 600; color: var(--ink); letter-spacing: -0.01em; margin-right: 4px;
                    font-variant-numeric: tabular-nums; }
  .plan .orders { min-height: 88px; display: flex; flex-direction: column; justify-content: center; }
  .plan .vol-cap { display: block; font-size: 0.74rem; color: var(--muted); margin-bottom: 6px; }
  .plan .vol-select { width: 100%; padding: 10px 36px 10px 12px; border-radius: 10px; border: 1px solid var(--line);
    background: rgba(255,255,255,0.04) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%239aa1b2' stroke-width='1.6'/%3E%3C/svg%3E") no-repeat right 12px center;
    color: var(--ink); font-family: inherit; font-size: 0.86rem; appearance: none; -webkit-appearance: none; cursor: pointer; }
  .plan .vol-select:focus { outline: none; border-color: var(--accent); }
  .plan .vol-select option { background: #0f131c; color: var(--ink); }
  /* Grouped features (Tempo, Symphony): a bold capability, then its specifics as dashed sub-points. */
  .plan .feat li.grp > b { color: var(--ink); font-weight: 600; }
  .plan .feat li.grp ul { list-style: none; margin: 3px 0 4px; }
  .plan .feat li.grp ul li { padding: 1px 0 1px 12px; font-size: 0.8rem; }
  .plan .feat li.grp ul li::before { content: "–"; left: 0; top: 0.1em; width: auto; height: auto; border-radius: 0; background: none; color: var(--muted); }
  .plan .feat .pill { margin-left: 4px; }
  .plan .feat { list-style: none; margin: 14px 0 18px; font-size: 0.85rem; color: var(--muted); flex: 1; }
  .plan .feat li { position: relative; padding: 4px 0 4px 16px; }
  .plan .feat li::before { content: ""; position: absolute; left: 2px; top: 0.92em; width: 5px; height: 5px; border-radius: 50%; background: var(--accent); }
  .plan .feat li.lead { padding-left: 0; color: var(--ink); font-weight: 500; }
  .plan .feat li.lead::before { display: none; }
  .plan .btn { text-align: center; padding: 12px 18px; font-size: 0.92rem; }
  sup { font-size: 0.7em; color: var(--accent); }


  .pill { display: inline-block; margin-left: 8px; padding: 2px 8px; border-radius: 999px; vertical-align: 1px;
          font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase;
          color: var(--accent); background: var(--accent-soft); border: 1px solid rgba(230,182,92,0.30); }
  .text-link { color: var(--accent); text-decoration: none; font-weight: 600; white-space: nowrap; }
  .text-link:hover, .text-link:focus-visible { text-decoration: underline; }
  .price-notes { margin-top: 18px; font-size: 0.78rem; color: #6b7283; max-width: 860px; }
  .price-notes p + p { margin-top: 4px; }

  form.contact-form { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; max-width: 560px; width: 100%; text-align: left; }
  form.contact-form .full, form.contact-form button { grid-column: 1 / -1; }
  form.contact-form input[type="text"], form.contact-form input[type="email"], form.contact-form select, form.contact-form textarea {
    width: 100%; padding: 13px 16px; border-radius: var(--radius); border: 1px solid var(--line);
    background: rgba(255,255,255,0.04); color: var(--ink); font-size: 0.95rem; font-family: inherit; outline: none;
    transition: border-color .2s, background .2s; }
  form.contact-form ::placeholder { color: #6b7283; }
  form.contact-form input:focus, form.contact-form select:focus, form.contact-form textarea:focus { border-color: var(--accent); background: rgba(255,255,255,0.06); }
  form.contact-form select { appearance: none; -webkit-appearance: none; padding-right: 40px; cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%239aa1b2' stroke-width='1.6'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right 16px center; }
  form.contact-form select option { background: #0f131c; color: var(--ink); }
  form.contact-form textarea { resize: vertical; min-height: 84px; }
  form.contact-form .check { display: flex; align-items: center; gap: 10px; font-size: 0.9rem; color: var(--muted); cursor: pointer; padding: 2px 2px; }
  form.contact-form .check input { width: 17px; height: 17px; accent-color: var(--accent); }
  .closing .btn { margin-top: 4px; }
  /* Contact dialog — same backdrop as the screenshot lightbox; scrolls on short screens. */
  .contact-modal { position: fixed; inset: 0; z-index: 100; display: none; align-items: flex-start; justify-content: center;
                   overflow-y: auto; padding: 6vh 16px 30px; background: rgba(6,8,13,0.88); backdrop-filter: blur(6px); }
  .contact-modal.open { display: flex; }
  .contact-panel { position: relative; width: 100%; max-width: 620px; margin: auto 0; padding: 34px 30px 26px; text-align: center;
                   background: var(--bg-2); border: 1px solid var(--line); border-radius: 18px; box-shadow: 0 30px 80px rgba(0,0,0,0.6); }
  .contact-panel h2 { font-family: 'Fraunces', Georgia, serif; font-weight: 500; font-size: clamp(1.4rem, 3vw, 1.8rem); line-height: 1.15; margin: 0 28px 8px; }
  .contact-panel .contact-sub { color: var(--muted); font-size: 0.92rem; margin-bottom: 20px; }
  .contact-panel .contact-close { top: 14px; right: 14px; }
  .contact-panel .signup { display: flex; flex-direction: column; align-items: center; }
  .contact-panel .intent-note { color: var(--accent); font-size: 0.88rem; margin: -8px 0 16px; }
  .contact-panel .contact { font-size: 0.86rem; color: var(--muted); margin-top: 18px; }
  .contact-panel .contact a { color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--line); }
  .contact-panel .contact a:hover, .contact-panel .contact a:focus-visible { border-bottom-color: var(--ink); }
  .contact-panel .contact-pricing { margin-top: 6px; }
  form.contact-form input[type="tel"] { width: 100%; padding: 13px 16px; border-radius: var(--radius); border: 1px solid var(--line);
    background: rgba(255,255,255,0.04); color: var(--ink); font-size: 0.95rem; font-family: inherit; outline: none; transition: border-color .2s, background .2s; }
  @media (max-width: 560px) { .contact-panel { padding: 30px 18px 22px; } }
  .success a { color: var(--accent); }

  @media (max-width: 960px) { .plans { grid-template-columns: 1fr; max-width: 560px; } }
  @media (max-width: 560px) { .plans { grid-template-columns: 1fr; } form.contact-form { grid-template-columns: 1fr; } .nav-links a.hide-sm { display: none; } }

  /* AI team — the named specialists. Card-framed so each reads as a "who", not a "what". */
  .team-head h2 {
    font-family: 'Fraunces', Georgia, serif;
    font-weight: 500;
    font-size: clamp(1.5rem, 3.2vw, 2rem);
    line-height: 1.15;
    letter-spacing: -0.01em;
    margin-bottom: 8px;
  }
  .team-head p { font-size: 0.94rem; color: var(--muted); max-width: 640px; margin-bottom: 26px; }
  .roster { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
  .agent {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 18px 16px;
    background: rgba(255,255,255,0.025);
  }
  .agent .avatar {
    width: 34px; height: 34px;
    border-radius: 50%;
    background: var(--accent-soft);
    border: 1px solid rgba(230,182,92,0.35);
    color: var(--accent);
    display: flex; align-items: center; justify-content: center;
    font-family: 'Fraunces', Georgia, serif;
    font-weight: 600; font-size: 1rem;
    margin-bottom: 12px;
  }
  .agent h3 { font-size: 1rem; font-weight: 600; margin-bottom: 1px; }
  .agent .role {
    font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em;
    color: var(--accent); margin-bottom: 9px;
  }
  .agent p { font-size: 0.86rem; color: var(--muted); }
  .team-note { font-size: 0.84rem; color: #6b7283; margin-top: 18px; max-width: 640px; }

  /* Footer */
  footer {
    position: relative;
    z-index: 1;
    border-top: 1px solid var(--line);
    padding: 22px 24px;
    text-align: center;
  }
  /* The privacy link sits inside the copyright line, so it must read as fine print, not as a call to
     action — the global `a` accent would make it the loudest thing in the footer. */
  .legal { color: var(--muted); text-decoration: none; }
  .legal:hover, .legal:focus-visible { color: var(--ink); text-decoration: underline; }
  footer .credit { color: var(--muted); font-size: 0.84rem; max-width: 640px; margin: 0 auto 6px; }
  footer .copy { color: #5a6072; font-size: 0.78rem; }

  /* Tablet: capability rows stop being side-by-side before the cards do. */
  @media (max-width: 860px) {
    .cap { grid-template-columns: 1fr; gap: 22px; }
    .cap.flip .cap-text { order: 0; } /* stacked → text always leads */
    .cap + .cap { margin-top: 40px; }
  }

  @media (max-width: 640px) {
    .pillars { grid-template-columns: 1fr; gap: 22px; }
    .roster { grid-template-columns: 1fr; gap: 14px; }
    .cap-grid { grid-template-columns: 1fr; }
    .chapter { padding-top: 48px; }
    main { padding: 32px 0; }
    .nav-note { display: none; }
  }

  /* ── Multi-page site (#815) ─────────────────────────────────────────────────────────────────────────────── */
  a.brand { text-decoration: none; color: inherit; }
  .nav-links a[aria-current="page"] { color: var(--ink); }
  .chapter > h1 {
    font-family: 'Fraunces', Georgia, serif; font-weight: 500;
    font-size: clamp(1.8rem, 3.8vw, 2.45rem); line-height: 1.12;
    letter-spacing: -0.01em; margin-bottom: 10px;
  }

