/* WarmLane — blog layer.
 *
 * Additive only. Loaded AFTER main.css on /blog/ pages. Every colour,
 * radius and font here resolves through the tokens already defined in
 * main.css :root — nothing is redefined, so a brand change in main.css
 * propagates here for free.
 */

/* ── Post header ─────────────────────────────────────────────────────────── */
.post-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .9rem;
  font-size: .8rem; color: var(--text-faint); margin-top: 1rem;
}
.post-meta time { color: var(--text-dim); }
.post-meta .dot { color: var(--line-2); }

/* ── GEO answer box ──────────────────────────────────────────────────────────
   The block AI answer engines lift verbatim. Kept to one tight paragraph of
   plain prose plus a short list — no nested markup, no images, so it survives
   HTML-to-text extraction cleanly. */
.answer-box {
  background: rgba(249,115,22,.06);
  border: 1px solid rgba(249,115,22,.30);
  border-left: 3px solid var(--ember);
  border-radius: var(--radius-lg);
  padding: 1.5rem 1.75rem;
  margin: 2rem 0;
}
.answer-box__label {
  font-size: .7rem; text-transform: uppercase; letter-spacing: .14em;
  font-weight: 700; color: var(--warm); margin-bottom: .6rem;
}
.answer-box p { color: var(--text-soft); line-height: 1.7; }
.answer-box p + p { margin-top: .75rem; }
.answer-box ul { margin: .85rem 0 0; padding-left: 1.1rem; }
.answer-box li { color: var(--text-soft); line-height: 1.7; margin-bottom: .35rem; }

/* ── Table of contents ───────────────────────────────────────────────────── */
.toc {
  background: var(--panel-2); border: 1px solid var(--line);
  border-radius: var(--radius-lg); padding: 1.25rem 1.5rem; margin: 2rem 0;
}
.toc h2 {
  font-size: .72rem; text-transform: uppercase; letter-spacing: .14em;
  font-weight: 700; color: var(--text-faint); margin-bottom: .75rem;
}
.toc ol { margin: 0; padding-left: 1.15rem; }
.toc li { margin-bottom: .4rem; font-size: .9rem; }
.toc a { color: var(--text-soft); text-decoration: none; }
.toc a:hover { color: var(--warm); text-decoration: underline; }

/* ── Article prose ───────────────────────────────────────────────────────── */
.prose { color: var(--text-soft); line-height: 1.75; }
.prose > * + * { margin-top: 1.15rem; }
.prose h2 {
  font-size: 1.6rem; line-height: 1.25; font-weight: 700; color: var(--text);
  margin-top: 3rem; scroll-margin-top: 5rem; letter-spacing: -.01em;
}
.prose h3 {
  font-size: 1.15rem; font-weight: 650; color: var(--text);
  margin-top: 2rem; scroll-margin-top: 5rem;
}
.prose p { font-size: 1rem; }
.prose strong { color: var(--text); font-weight: 650; }
.prose em { color: var(--text-soft); }
.prose a { color: var(--warm); text-decoration: underline; text-underline-offset: 2px; }
.prose a:hover { color: var(--ember); }

/* A button inside prose is a button, not a link.
   `.prose a` is (0,1,1) and `.btn` / `.btn--primary` are only (0,1,0), so the
   prose link rule wins on specificity and drags an underline — and the link
   colour — onto every CTA in an article. These selectors are (0,2,1) so they
   take the cascade back. Applies to the call-to-action blocks, which sit
   inside .prose on every post. */
.prose a.btn { text-decoration: none; }
.prose a.btn--primary,
.prose a.btn--primary:hover { color: #fff; }
.prose a.btn--ghost { color: var(--text-soft); }
.prose a.btn--ghost:hover { color: #fff; }
.prose a.btn--outline,
.prose a.btn--outline:hover { color: #fff; }
.prose ul, .prose ol { padding-left: 1.3rem; }
.prose li { margin-bottom: .55rem; }
.prose li::marker { color: var(--text-faint); }
.prose blockquote {
  border-left: 3px solid var(--line-2); padding-left: 1.25rem;
  color: var(--text-dim); font-style: italic;
}
.prose hr { border: 0; border-top: 1px solid var(--line); margin: 2.5rem 0; }

/* ── Post hero graphic ───────────────────────────────────────────────────────
   The generated SVG card. Fixed 1200×630 aspect via width/height attributes on
   the <img>, so the browser reserves the box before load and nothing shifts
   (CLS stays at zero). SVG stays sharp at any density with no srcset. */
.post-hero { margin: 2rem 0 0; }
.post-hero img {
  width: 100%; height: auto; display: block;
  border: 1px solid var(--line-2); border-radius: var(--radius-lg);
  background: var(--ink);
}

/* ── Card thumbnail on the hub ───────────────────────────────────────────── */
.post-card__thumb {
  width: calc(100% + 3rem); max-width: none;
  margin: -1.5rem -1.5rem 1.15rem; display: block;
  height: auto; aspect-ratio: 1200 / 630;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  border-bottom: 1px solid var(--line);
  background: var(--ink);
}

/* ── Figures / screenshots ───────────────────────────────────────────────── */
.figure { margin: 2rem 0; }
.figure img {
  width: 100%; height: auto; display: block;
  border: 1px solid var(--line-2); border-radius: var(--radius-lg);
  background: var(--panel);
}
.figure figcaption {
  font-size: .8rem; color: var(--text-faint); margin-top: .65rem;
  text-align: center; line-height: 1.6;
}

/* ── Source citation ─────────────────────────────────────────────────────────
   Every competitor price on this site carries one of these. Undated pricing
   claims about a named competitor are the fastest way to lose trust. */
.src {
  font-size: .78rem; color: var(--text-faint); line-height: 1.6;
  margin-top: .85rem; padding-left: .85rem; border-left: 2px solid var(--line-2);
}
.src a { color: var(--text-dim); text-decoration: underline; }
.src a:hover { color: var(--warm); }

/* ── Verdict / fair-play panel ───────────────────────────────────────────────
   Used for "when the competitor is the better choice". Conceding real ground
   is what makes the rest of the page believable — to readers and to LLMs. */
.verdict {
  background: var(--panel-2); border: 1px solid var(--line-2);
  border-radius: var(--radius-lg); padding: 1.5rem 1.75rem; margin: 2rem 0;
}
.verdict__label {
  font-size: .7rem; text-transform: uppercase; letter-spacing: .14em;
  font-weight: 700; color: var(--text-dim); margin-bottom: .6rem;
}

/* ── Click-to-call block ─────────────────────────────────────────────────────
   tel: is a dead CTA on desktop, so the number is always rendered as
   selectable text alongside the button. */
.call-cta {
  background: rgba(249,115,22,.06);
  border: 1px solid rgba(249,115,22,.30);
  border-radius: var(--radius-lg);
  padding: 1.75rem; margin: 2.5rem 0; text-align: center;
}
.call-cta h3 { font-size: 1.25rem; font-weight: 700; color: var(--text); margin-bottom: .5rem; }
.call-cta p { color: var(--text-dim); font-size: .92rem; max-width: 34rem; margin: 0 auto 1.15rem; line-height: 1.7; }
.call-cta__num {
  display: block; font-size: 1.5rem; font-weight: 800; color: var(--text);
  letter-spacing: .01em; margin-bottom: 1rem; font-variant-numeric: tabular-nums;
}
.call-cta__num a { color: inherit; text-decoration: none; }
.call-cta__actions { display: flex; flex-wrap: wrap; gap: .75rem; justify-content: center; }
.call-cta__note { font-size: .78rem; color: var(--text-faint); margin-top: .9rem; }

/* ── Blog index cards ────────────────────────────────────────────────────── */
.post-grid { display: grid; gap: 1.25rem; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); }
.post-card {
  display: flex; flex-direction: column;
  background: var(--panel-2); border: 1px solid var(--line);
  border-radius: var(--radius-lg); padding: 1.5rem;
  text-decoration: none; transition: border-color .15s, background .15s, transform .15s;
}
.post-card:hover { border-color: rgba(249,115,22,.35); background: var(--panel); transform: translateY(-2px); }
.post-card__kicker {
  font-size: .68rem; text-transform: uppercase; letter-spacing: .12em;
  font-weight: 700; color: var(--warm); margin-bottom: .6rem;
}
.post-card__title { font-size: 1.08rem; font-weight: 650; color: var(--text); line-height: 1.4; margin-bottom: .55rem; }
.post-card__desc { font-size: .875rem; color: var(--text-dim); line-height: 1.65; flex: 1; }
.post-card__more { font-size: .82rem; color: var(--warm); font-weight: 600; margin-top: 1rem; }

/* ── Related posts ───────────────────────────────────────────────────────── */
.related { display: grid; gap: .75rem; }
.related a {
  display: flex; justify-content: space-between; align-items: center; gap: 1rem;
  padding: .9rem 1.15rem; background: var(--panel-2); border: 1px solid var(--line);
  border-radius: var(--radius); color: var(--text-soft); text-decoration: none;
  font-size: .9rem; transition: border-color .15s, color .15s;
}
.related a:hover { border-color: rgba(249,115,22,.35); color: var(--text); }
.related a::after { content: "→"; color: var(--warm); flex-shrink: 0; }

/* ── Mobile ──────────────────────────────────────────────────────────────── */
@media (max-width: 640px) {
  .prose h2 { font-size: 1.35rem; margin-top: 2.25rem; }
  .answer-box, .call-cta, .verdict { padding: 1.25rem; }
  .call-cta__num { font-size: 1.25rem; }
  .call-cta__actions .btn { width: 100%; }
}