/* ============================================================================
 * ARGUS LANDING — SHARED CHROME
 * Sprint: landing-unify, 2026-08-28.  Requires css/fonts.css + css/tokens.css.
 *
 * SCOPE CHANGED THIS SPRINT. Previously Group A only (the five legal/info
 * pages). Now linked by ALL NINE non-index pages:
 *   Group A  pricing · how-it-works · terms · privacy · disclaimer
 *   Group B  faq/ · about/ · blog/fact-checking-argus · blog/pentagon-pizza-indicator
 *
 * Group B was excluded in landing-consolidate because adopting this chrome grew
 * faq/ by 357px and "restyles every element, which is a redesign of pages whose
 * visual target is itself provisional". The target is no longer provisional —
 * it is the hero's system — so the reason for the exclusion has expired.
 *
 * What that measurement missed: Group B was not merely on a different chrome,
 * it was on a different FONT. Those four pages declared -apple-system directly
 * on body and loaded no webfont at all, so they had been rendering in the OS
 * UI font since 2026-08-03 while tokens.css said Inter. They are the reason the
 * landing read as two sites even on pages that shared a palette.
 *
 * index.html does NOT link this sheet — it carries its own layout (1180px
 * .wrap, the diagram, the section grid) and takes fonts.css + tokens.css only.
 * The type ramp, surfaces, nav and footer below are kept identical to index's
 * by using the same tokens, not by duplicating values.
 *
 * samples.html is OUT OF SCOPE (separate operator decision) and is unchanged.
 * ========================================================================= */

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

/* ── THE FRAME ─────────────────────────────────────────────────────────────
 * The hero's .page frame, applied site-wide: a max-width panel on --panel with
 * hairline sides, floating on --off-white. Before this sprint the frame stopped
 * dead at the first section below the hero, which is what made the landing look
 * like two documents glued together. It now runs the full height of every page.
 *
 * --off-white survives as the margin OUTSIDE the frame, not as a page surface.
 * On a viewport narrower than the frame there is no margin and the whole
 * screen is --panel, which is correct: the frame is a desktop affordance. */
html {
  background: var(--off-white);
  scroll-behavior: smooth;
}

body {
  font-family: var(--sans);
  font-size: var(--fs-body);
  font-weight: var(--fw-regular);
  background: var(--panel);
  color: var(--charcoal);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* iOS inflates text in narrow columns unless this is pinned. */
  -webkit-text-size-adjust: 100%;
  max-width: 1600px;
  margin: 0 auto;
  border-left: var(--hairline);
  border-right: var(--hairline);
  min-height: 100vh;
}

/* ── NAV — one nav, ten pages ──────────────────────────────────────────────
 * Adopted from index.html's hero nav. It replaces TWO different navs:
 *   Group A had a FIXED nav with an eye-icon SVG and a Playfair "Argus"
 *   Group B had bare green text links and no chrome at all
 * The fixed positioning goes with it — .container's 140px top padding existed
 * only to clear it, and is now 64px. A fixed bar on a 760px reading column
 * spends vertical space a legal page does not have. */
.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 22px var(--gutter);
  border-bottom: var(--hairline);
}
.nav-brand {
  display: flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
}
.nav-mark {
  width: 8px; height: 8px;
  background: var(--green-dark);
  display: inline-block;
  flex: 0 0 auto;
}
.nav-word {
  font-size: 13px;
  font-weight: var(--fw-semibold);
  /* 0.28em, not the 0.2em of --ls-label. See index.html's note at .nav-word:
     this is an identity decision. The wordmark was Playfair 900 24px on these
     five pages; the tracking is what replaces the serif's presence. Restoring a
     serif here reopens a decision rather than fixing an oversight. */
  letter-spacing: 0.28em;
  color: var(--charcoal);
}
.nav-links { display: flex; align-items: center; gap: 32px; }
/* :not(.btn-signin) is LOAD-BEARING — sprint landing-ctagreen, 2026-08-28.
 * `.nav-links a` is specificity (0,1,1); `.btn-signin` is (0,1,0). The broader
 * selector therefore won the `color` declaration regardless of file order, and
 * the Telegram control rendered --slate (#4A4A46) on its own dark fill:
 * 1.96:1, against a 4.5:1 AA floor, on every page. It was invisible and had
 * been since the nav was unified.
 *
 * Narrowed rather than out-shouted with a louder override, which is the same
 * repair `.alert-line span:last-child:not(.badge)` got for the identical
 * mistake: the rule is scoped to what it is FOR — the plain text links — so a
 * future control dropped into this nav inherits the fix instead of re-breaking.
 *
 * This is not cosmetic ordering. Repainting the button green WITHOUT this
 * change would have left slate text on #2D5A3D = 1.12:1, worse than the bug
 * it was meant to fix. */
.nav-links a:not(.btn-signin) {
  font-size: 14px;
  color: var(--slate);
  text-decoration: none;
}
.nav-links a:not(.btn-signin):hover { color: var(--charcoal); }

/* ── THE FILLED BUTTON — one treatment, one declaration ───────────────────
 * Sprint landing-ctagreen, 2026-08-28. Was TWO declarations that disagreed:
 * `.btn-signin` filled --charcoal (hover #2a2e37) and `.cta` filled
 * --green-dark (hover a hardcoded #234a30). Same shape, same padding scale,
 * same radius, two different colours — so the nav control did not read as a
 * CTA and the two could drift further apart on any edit.
 *
 * Now one block. Both class names are kept because both are already in the
 * markup of eleven pages; consolidating the STYLE does not require renaming
 * anything, and a rename would have touched every page for no visual gain.
 *
 * Both are <a>, never <button>: they navigate.
 *
 * NOT folded in: index.html's `.badge` (the Argus AM BUY chip). It already
 * carries this exact colour pair through --green-dark, but it is a
 * non-interactive status chip at mono 10px / 3px 9px, not a control at 13px /
 * 9px 18px. Sharing the colour is right; sharing the metrics would inflate a
 * chip into a button. It follows the token, not this rule. */
.btn-signin,
.cta {
  display: inline-block;
  font-weight: var(--fw-medium);
  color: #fff;
  background: var(--green-dark);
  border: none;
  border-radius: var(--radius-control);
  text-decoration: none;
  cursor: pointer;
  transition: background 0.15s cubic-bezier(0.4, 0, 0.2, 1);
}
.btn-signin:hover,
.cta:hover { background: var(--green-hover); }

/* Scale, and ONE behavioural difference that must not be consolidated away.
 *
 * `white-space: nowrap` belongs to .btn-signin ALONE. It is a two-word control
 * in a flex nav that must not break across lines. `.cta` is an in-page button
 * whose label is a sentence on the blog posts ("Get free access -- Argus
 * tracks DOUGHCON automatically..."), and it MUST wrap.
 *
 * Folding nowrap into the shared block above — which is what the first version
 * of this consolidation did, inheriting it from .btn-signin — made that link
 * 462px wide and overflowed both blog posts by 111px and 71px at 375. The
 * pages had been at zero. Caught by measuring page height and overflow after
 * the change, not by reading the diff: the colours were right and the layout
 * was broken. A shared block must carry what the members SHARE, and nowrap was
 * never one of them. */
.btn-signin { font-size: 13px; padding: 9px 18px; white-space: nowrap; }
.cta        { font-size: 14px; padding: 13px 26px; margin-top: 32px; }

/* ── CONTENT COLUMN ───────────────────────────────────────────────────────
 * DRIFT RESOLVED (landing-consolidate, kept): 760px shared; pricing.html keeps
 * a 960px page-local override for its three-column rate table.
 * Top padding 140px -> 64px now that the nav is not fixed. */
.container {
  max-width: 760px;
  margin: 0 auto;
  padding: 64px var(--gutter) 80px;
}

/* ── SECTION EYEBROW — the identity carrier, see index.html ───────────────
 * Group A/B pages get the same eyebrow index uses, minus the numeral. The
 * green square is what distinguishes an eyebrow from every other mono label. */
.page-tag {
  display: flex;
  align-items: center;
  gap: 9px;
  font-family: var(--mono);
  font-size: var(--fs-label);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 12px;   /* the eyebrow binds tight to its heading — see index.html */
}
.page-tag::before {
  content: "";
  width: 8px; height: 8px;
  background: var(--green-dark);
  flex: 0 0 auto;
}

/* ── TYPE ─────────────────────────────────────────────────────────────────
 * Was: h1 Playfair 40px, h2 Playfair 22px. Both now Inter on the shared ramp.
 * h1 briefly shipped at a 34px cap and is back to 40 — --fs-display's cap now
 * matches these pages' ORIGINAL 40px exactly, so the legal/info titles land
 * where they always were. The reasoning that justified 34 ("Inter 600 at 34
 * carries the weight of Playfair 700 at 40") was directionally right about
 * weight and wrong about magnitude; see the measurement in tokens.css. */
h1 {
  font-size: var(--fs-display);
  font-weight: var(--fw-semibold);
  line-height: var(--lh-display);
  letter-spacing: var(--ls-display);
  margin-bottom: 12px;
}
h2 {
  font-size: var(--fs-heading);
  font-weight: var(--fw-semibold);
  line-height: 1.2;
  letter-spacing: var(--ls-title);
  margin-top: 48px;
  margin-bottom: 12px;
}
h3 {
  font-size: var(--fs-title);
  font-weight: var(--fw-semibold);
  line-height: 1.3;
  letter-spacing: var(--ls-title);
  margin-top: 32px;
  margin-bottom: 8px;
}

p { margin-bottom: 16px; }
a { color: var(--green-dark); }

/* 17px, which is what these pages served BEFORE landing-unify. Folding the
   page-local rules into this sheet quietly raised it to 18 — an unrequested
   change that compressed the h1:lede ratio to 1.78 at the clamp floor. Back to
   17: the lede is still visibly larger than the 16px body under it, and the
   heading above it clears 2.00. */
/* ONE lede treatment, three former spellings. `p.lede` (Group A), `.intro`
   (about/) and `.subtitle` (faq/) are the same element in three costumes: the
   standfirst under the page title. They were 17px, 17.6px and 16px before this
   sprint and briefly 18px after it, which is how about/ and faq/ ended up at a
   1.89 heading ratio while their siblings sat at 2.00. One rule, one value. */
p.lede,
.intro,
.subtitle {
  font-size: 17px;
  color: var(--slate);
  margin-bottom: 40px;
}

/* Raised block. Was #fff / white / 8px on four pages with a 3px green left
 * border on privacy only; now one treatment on --panel's card surface. */
.highlight {
  background: var(--off-white);
  border: var(--hairline);
  border-left: 3px solid var(--green-dark);
  border-radius: var(--radius-card);
  padding: 20px 24px;
  margin: 24px 0;
}
.highlight p:last-child { margin-bottom: 0; }

.last-updated {
  font-family: var(--mono);
  font-size: 13px;
  color: var(--muted);
  margin-bottom: 40px;
}

/* `.cta` moved up to the shared filled-button block (see .btn-signin, .cta).
   Its old declaration lived here with a hardcoded #234a30 hover; both are now
   the one rule and the --green-hover token. */

/* ── FOOTER — one footer, ten pages, sprint landing-unify ─────────────────
 * THE POINT OF THIS SPRINT. Nine pages existed and were reachable by nobody:
 * how-it-works, pricing, faq, about, terms, privacy, disclaimer and the two
 * blog posts. index.html's footer offered three links (Samples, Privacy,
 * Telegram) and its nav offered three anchors that resolved to nothing.
 *
 * Link form is EXTENSIONLESS (/pricing, not /pricing.html): nginx serves both
 * via `try_files $uri $uri/ $uri.html =404` in sites-available/default, and
 * extensionless is the form sitemap.xml already declares canonical. index's
 * old footer used /privacy.html, which worked but disagreed with the sitemap. */
.site-footer {
  border-top: var(--hairline);
  margin-top: var(--space-section);
  padding: 56px var(--gutter) 40px;
}
.site-footer-cols {
  max-width: 1180px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 40px;
}
.site-footer h4 {
  font-family: var(--mono);
  font-size: var(--fs-label);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-label);
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 14px;
}
.site-footer ul { list-style: none; }
.site-footer li { margin-bottom: 9px; }
.site-footer li a {
  font-size: 14px;
  color: var(--slate);
  text-decoration: none;
}
.site-footer li a:hover { color: var(--green-dark); }

.site-footer-base {
  max-width: 1180px;
  margin: 40px auto 0;
  padding-top: 24px;
  border-top: var(--hairline);
  display: flex;
  flex-wrap: wrap;
  gap: 8px 24px;
  justify-content: space-between;
  font-family: var(--mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
.site-footer-base a { color: var(--green-dark); text-decoration: none; }

@media (max-width: 760px) {
  .nav { padding: 16px 24px; gap: 16px; }
  .nav-links { gap: 18px; }
  .container { padding: 48px 24px 60px; }
  .site-footer { padding: 48px 24px 32px; }
  .site-footer-cols { grid-template-columns: 1fr; gap: 32px; }
  body { border-left: none; border-right: none; }
}

/* Below 480 the nav links collapse to the Telegram control ALONE, exactly as on
 * index.html. Three text links plus the control overflow a 375px viewport; the
 * control is the only one that has to survive.
 * :not(.btn-signin) is load-bearing — the control is an <a>, so a bare
 * `.nav-links a` hides it too and leaves the wordmark with no way to reach the
 * bot. index.html shipped exactly that bug for one build; see its comment. */
@media (max-width: 480px) {
  .nav-links a:not(.btn-signin) { display: none; }
}
