/* plans-card.css: the "Plans" card. ONE copy, used by the homepage hero
   (index.html .intro-card) and the shared buy block (partials/buy-block.html,
   on /benchmark, /learn, /bakeoff and /how-to-redact). Moved out of index.html
   verbatim 2026-10-04; each var() carries a fallback so the card renders the
   same on the bake-off report, which has its own smaller token set. */
  /* ---- Intro mini-card: Buy CTA + the price line + quiet trial link ---- */
  .intro-card-eyebrow {
    /* MATCHES .card-pricing .plan-name (section 9) EXACTLY — display face,
       0.75rem, 700, 0.12em, uppercase, primary. That is this page's label
       style for a label INSIDE a pricing card. The section-level .eyebrow
       token in DESIGN.md (body face, 0.8125rem, 600, 0.06em) is a different
       component: it labels a section against the page ground, not a row inside
       a card. Keep this in lockstep with .plan-name. */
    font-family: var(--font-display, inherit);
    font-size: 0.75rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase;
    /* 0.5rem below it: the eyebrow labels the price line directly underneath,
       so it hugs it, but not so tightly that the two read as one run of text.
       Alignment is inherited from the card (left, like .card-pricing). */
    color: var(--color-primary-text, #2F6FD0); margin: 0 0 0.5rem; text-align: left;
  }
  /* .intro-card-plans → the price line, which sits BETWEEN the "Plans" eyebrow
     and the Buy button (rules live with the rest of .intro-card, below). The
     old .intro-tiers two-row list is gone: its amounts moved into that one
     line. ORDER (2026-08-06, owner): eyebrow → prices → button → trial link.
     With the button directly under the eyebrow, "PLANS" looked like it was
     labelling the button; the amounts are what it actually names. */

  .intro-card {
    position: relative;
    background: var(--bg-surface, #fff);
    border: 1px solid var(--border-subtle, rgba(0,0,0,0.08));
    border-radius: 18px;
    /* 8-PT GRID (DESIGN.md spacing scale). 32px top / 24px sides / 24px bottom:
       spacing.6 and spacing.5, mirroring how .card-pricing runs a heavier top
       than bottom (40/30/28 on a 390px card). The old 30px top was off-grid.
       Side padding 1.5rem (24px), trimmed from 1.75rem: the approved G2 mockup
       runs 20px sides on a 327px card, and every 1px of side padding costs 2px
       of card width. 24px splits the difference — it buys back 8px of width
       while staying close to the 1.875rem sides of the §9 pricing cards. */
    padding: 2rem 1.5rem 1.5rem;
    /* Same recipe as .card-pricing: float-strong, plus the warm 0.5px contact
       hairline in light mode (rule below). This card sits on the same cream
       ground as the section-9 pricing cards and should catch light the same
       way; --shadow-float alone made it sit flatter than they do. */
    box-shadow: var(--shadow-float-strong, 0 24px 48px -12px rgba(0,0,0,0.16));
    /* 324px = the approved-mockup width (see .intro-grid above for how that
       number was originally derived, and why the two-row price line no longer
       constrains it). max-width caps it below ~372px viewports so the fixed
       width can never force horizontal scroll on a phone — it just narrows, and
       the price rows still fit: the widest needs 196.8px against 222px of
       content box at a 320px viewport. */
    width: 324px;
    max-width: 100%;
    overflow: hidden;
    /* LEFT, matching .card-pricing in §9 (the page's other pricing surface):
       card copy left-aligns and only the full-width button and the trial link
       under it centre themselves. Was `center`, which centred the eyebrow and
       the price line against every other card on the page. */
    text-align: left;
    flex-shrink: 0;
  }
  /* Warm edge stroke (light only) — the identical recipe .card-pricing uses,
     so the two pricing surfaces on this page have the same edge. */
  [data-theme="light"] .intro-card {
    border: 1px solid rgba(98,93,75,0.175);
    box-shadow: var(--shadow-float-strong, 0 24px 48px -12px rgba(0,0,0,0.16)), 0 0.5px 0 rgba(98,93,75,0.195);
  }
  .intro-card .price {
    margin: 0 0 1.125rem;
    line-height: 1;
  }
  .intro-card .price-num {
    font-family: var(--font-display, inherit);
    font-size: 2.625rem;
    font-weight: 700;
    letter-spacing: -0.025em;
    color: var(--text-primary, #1A1C1E);
  }
  .intro-card .price-note {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--text-secondary, #55595F);
    margin-left: 0.4rem;
    letter-spacing: 0;
  }
  .intro-card .btn { width: 100%; }

  /* .intro-card-buy = the hero's own Buy CTA, and ONLY it. The class exists
     because this element can no longer be addressed as `[data-buy-trigger]`
     (it is a plain <a href="#pricing"> now) and MUST NOT be addressed as
     `.intro-card .btn-primary` either: the trial email-capture panel injects
     its own `.btn.btn-primary` submit button and download link INSIDE this same
     card, so that selector would silently capture them too (it did, in the
     first cut of this change: the open panel's own "Download Cover" submit
     button was being display:none'd by the "one question at a time" rule).
     line-height: normal is what makes an <a class="btn"> render the SAME PILL
     as a <button class="btn">. A <button> gets `line-height: normal` from the
     UA sheet (.btn never sets one); an <a> inherits the body's 1.6, i.e. 24px
     at this 15px size. When the hero CTA became an anchor that alone made it
     52px tall against the §9 "Buy Cover · $39" buttons' 45.5px — a 6.5px
     mismatch between two pills that are meant to read as siblings. Restating
     `normal` resolves it to the identical 17.5px.
     white-space: nowrap keeps the short label off a second line in this narrow
     card (it inherited this from the [data-buy-trigger] rule above). */
  .intro-card .intro-card-buy { line-height: normal; white-space: nowrap; }

  /* The price line: PURE DISCLOSURE. It states both plans and both amounts
     directly under the Buy button, so the button can never be read as a silent
     tier pick — and it is deliberately NOT a link.
     REDUNDANCY CALL (2026-08-06, same-day revision): it used to be an
     <a href="#pricing">, which was correct while the button opened a form in
     place — the line was then the card's only navigation, which is why it was
     given the link blue. Now that the BUTTON goes to #pricing, a second
     clickable element pointing at the SAME anchor, 10px below a full-width
     primary CTA, is one destination wearing two affordances: it adds a decision
     without adding a place to go, and it competes with the CTA for the click.
     So the button keeps the navigation and the line keeps the fact. The whole
     line is still the answer to "what does that cost?" — it just no longer
     pretends to be a second route.
     COLOUR follows from that: it is not a link, so it must not wear link blue.
     Back to --text-secondary (this is genuinely a caption now, which is what
     the blue was introduced to stop it looking like when it WAS the only
     navigation). The <strong> amounts take the ink override again: with the
     element no longer being one anchor, two-tone is not ambiguous, it is
     ordinary emphasis, and ink-on-grey puts the amounts where the eye lands.
     The "→" is GONE for the same reason — an arrow promises a navigation this
     element no longer performs. There is no :hover / :focus-visible styling
     either; a <p> must not react to the pointer like a control.
     LAYOUT: ordinary inline text, never flex — keep it that way. The original
     reason was that a flex row painted the hover underline as three stubs, and
     that reason retired with the link; the SECOND reason is why the rule
     stands: flex gaps plus flex item rounding inflated the same string from
     267px to 311px, which is what forced the card wider.
     ONE PLAN PER ROW, split by a bare <br>. The two plans used to share a row
     with a dimmed "·" between them (.icp-sep, plus a @media 349px rule that
     hid the dot at the exact width where it stopped fitting); BOTH are GONE.
     They went when the Personal row picked up its monthly equivalent: a
     restatement of a price belongs beside the price it restates, and a shared
     row had nowhere to put it that did not read as a caption for both plans.
     Giving each plan its own row also makes the "PLANS" eyebrow name an actual
     list. It costs one line of card height (191.7px → 210.6px) and it BUYS
     width: the widest row is now "Personal $99/yr · $8.25 a month" at 196.8px,
     against 274px of content box at 1440px and 222px at a 320px viewport, where
     the old shared row needed 251.8px and was the only reason the card had to
     be 324px wide. .icp-plan keeps white-space: nowrap, which is what
     guarantees a row never splits its own price off. */
  .intro-card .intro-card-plans {
    /* ORDINARY INLINE TEXT, not flex (2026-08-06 owner fix). A flex row put
       5.6px gaps between the runs, and a flex gap is not text — so the hover
       underline painted as THREE separate segments (one of them a stub under
       the lone "·"), and the gaps + flex item rounding inflated the line to
       311px when the same string laid out inline is 267px. Back to a plain
       block of inline text with real spaces: one continuous underline across
       the whole string, dot included, and the card can be narrow again. */
    display: block;
    text-align: left;
    /* Sits between the eyebrow that names it and the button that acts on it, so
       the eye reads "plans → these two → buy", then separately "or try it
       free". Margins are EXPLICIT on all sides: this is a <p>, and the
       page-level `p { margin: 0 0 1rem }` would otherwise stack a fresh 1rem
       under it and push the button down. 1rem (16px, spacing.4) — owner call,
       reduced from the 1.5rem .card-pricing uses before its Buy button. That
       gap is sized for a long feature list ending well above the CTA; here the
       price line is one row and belongs closer to the button that acts on it.
       0.5rem (8px, spacing.2) — owner call 2026-08-09, halved again from 1rem:
       the line and the button it explains should read as ONE unit, tighter than
       the eyebrow→price gap would suggest. (Margins between the eyebrow and this
       <p> collapse, so the gap ABOVE stays 0.5rem no matter what is set here —
       tightening below is what closes the distance to the button.) */
    margin: 0 0 0.5rem;
    color: var(--text-secondary, #55595F);
    font-size: 0.8125rem;
    line-height: 1.45;
  }
  .intro-card .intro-card-plans .icp-plan { white-space: nowrap; }
  .intro-card .intro-card-plans strong { font-weight: 700; color: var(--text-primary, #1A1C1E); }
  /* The monthly equivalent that trails the Personal row ("· $8.25 a month"). Dimmed
     to half a step below the rest of the line: it is a way of READING the $99,
     not a second price, and it must never compete with the annual figure the
     checkout actually charges. The amount itself is NOT in the source — the
     `.icp-mo` script near the bottom of this page derives it from the printed
     annual price, which is what keeps it mask-safe and drift-proof (see that
     script's comment for both reasons). Empty until that script runs, so it
     occupies no space and cannot leave a dangling separator if it never does. */
  .intro-card .intro-card-plans .icp-mo { opacity: 0.6; }
  /* Once the trial form is open, drop the price line — the form takes its
     place, and the card should ask one question at a time. (The trial link
     hides itself via the shared [data-download-trigger] rule in
     site-chrome.css; the Buy anchor is handled just below.) */
  .intro-card:has(.email-capture.is-open) .intro-card-plans { display: none; }
  /* The hero Buy CTA is an <a>, not a [data-buy-trigger], so site-chrome.css's
     shared "hide this card's CTAs while a form is open" rule no longer catches
     it. Keep the behaviour explicitly: with the trial form open the card asks
     exactly one question. Must target .intro-card-buy, NOT .btn-primary — the
     open panel's own submit/download buttons are .btn-primary inside this card.
     (See the .intro-card-buy rule above.) */
  .intro-card:has(.email-capture.is-open) .intro-card-buy { display: none; }
  /* No override: the trial link keeps the shared .trial-link margin-top of
     0.7rem, which is exactly what the section-9 cards use under their own Buy
     buttons. The old 1.05rem made this card's trial link sit further off its
     button than the identical link does downstairs. */
  @media (max-width: 760px) {
    .intro-card { margin: 0 auto; }
  }
