/*
  shortcut.solutions — responsive heading ladder
  Added 2026-09-25 via site custom_css (site 4, theme 3). Theme files untouched.
  Why: theme 3 main.css sets fixed heading sizes with no responsive scaling —
  phones rendered desktop sizes (H1 41.6px, hero 48px, hero grows to 57.6px desktop).
  Breakpoints mirror theme 3's own: <=639 phones, <=1023 tablets, >=1024 desktop untouched.
  Rollback: clear custom_css on site 4 (one call).
*/
@media (max-width: 1023px) {
  .heading--h1,
  .hero-title { font-size: 2.25rem; line-height: 1.2; }
  .heading--h2 { font-size: 1.75rem; }
}
  /* REV-4C 2026-11-02: the old .site-header::before call row (generated content,
     not a real element, cannot be a link) was replaced by a real anchor
     <a class=mobile-call-row href=tel:+13148841575> rendered by theme 3
     templates/header.html; its styles live in theme 3 styles/mobile-nav.css. */
@media (max-width: 639px) {
  .heading--h1,
  .hero-title { font-size: 2rem; }
  .heading--h2 { font-size: 1.5rem; }
  .heading--h3 { font-size: 1.25rem; }
  .rich-text h3 { font-size: 1.2rem; }
  .hero-subtitle { font-size: 1.05rem; }
  /* Hero min-height caps — kill dead gradient space now that titles wrap less.
     Tiers track main.css 40/60/80vh proportionally. */
  .hero--sm { min-height: 34vh; }
  .hero--md { min-height: 44vh; }
  .hero--lg { min-height: 54vh; }
}

/*
  shortcut.solutions — article container width floor
  Added 2026-09-25 via site custom_css (site 4, theme 3). Theme files untouched.
  Spec (Mike): blog articles render at MINIMUM 1280px container width on desktop.
  Theme 3 serves collection entries (blog posts) in .container--narrow (640px).
  Scoped with :has(.entry-meta) so non-article narrow containers keep their
  640px measure (contact page heading + form both use container--narrow).
  Desktop threshold >=1024px matches the site's breakpoint convention.
  Rollback: remove this block from site custom_css.
*/
@media (min-width: 1024px) {
  .container--narrow:has(.entry-meta) { max-width: 1280px; }
}

/*
  shortcut.solutions — homepage blog promo card
  Added 2026-10-21 via site custom_css (site 4, theme 3). Theme files untouched.
  Spec (Mike notes, Oct 21): turn the blog band into a horizontal white card on a
  subtle band, image left ~40%, kicker label + meta line, h3-size headline,
  demoted text link (solid orange stays reserved for primary CTAs like Get Hosting),
  promo moved below the services/proof sections so only the hero owns the fold.
  Layout uses FLEXBOX on purpose: this stack's headless browser cannot verify CSS
  grid columns, so flex keeps the build verifiable. Theme files untouched.
  Hooks: section 9 > .container[width=wide] > .card.card--media.card--link.
  Contrast hardening (same spec): solid button text #ffffff -> #1a1b1f.
  #b35809 was 4.86:1 vs white (AA normal-text FAIL under WCAG 1.4.3);
  vs #1a1b1f it computes 5.78:1 = PASS with headroom. Body links kept #b35809.
  Rollback: remove the two blocks below from site custom_css + delete homepage
  section 9 (id promo-blog-section) from the page layout.
*/

/* 1. Horizontal card layout (desktop) */
@media (min-width: 1024px) {
  /* Target the promo container: the wide container inside a subtle band whose
     card carries card--media (only this card uses it on the homepage). */
  .section--bg-subtle > .container--wide > .card--media {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    gap: var(--space-lg);
    padding: var(--space-lg);
  }
  .section--bg-subtle > .container--wide > .card--media > img {
    flex: 0 0 40%;
    max-width: 40%;
    border-radius: var(--radius-md);
    object-fit: cover;
    align-self: center;
  }
  .section--bg-subtle > .container--wide > .card--media > .card-body {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 0;
  }
}

/* 2. Card internals: kicker label, meta line, headline, excerpt, demoted link */
.section--bg-subtle > .container--wide > .card--media .card-body .rich-text p:first-child strong {
  display: block;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  color: var(--color-neutral-600);
  margin-bottom: 2px;
}
.section--bg-subtle > .container--wide > .card--media .card-title {
  font-size: 1.75rem; /* 28px */
  line-height: 1.25;
  margin: 0 0 var(--space-sm);
}
.section--bg-subtle > .container--wide > .card--media .rich-text p {
  color: var(--color-neutral-700);
  font-size: 1rem;
  margin: 0 0 var(--space-xs);
}
.section--bg-subtle > .container--wide > .card--media .card-footer {
  margin-top: var(--space-sm);
  font-weight: 600;
  font-size: 1rem;
}

/* 3. Mobile: image on top, natural stacking */
@media (max-width: 1023px) {
  .section--bg-subtle > .container--wide > .card--media > .card-body {
    padding: 0 var(--space-md) var(--space-md);
  }
}

/* 4. Solid-button text contrast (site-wide): white -> ink on primary buttons */
.btn--primary { color: #1a1b1f; }
/* --- Pull-quote treatment (2026-10-21) --------------------------------------
   Mike: prominent quote treatment on the HypecastCMS blog article.
   Scoped to entry-body blockquotes (blog articles only; homepage + pages
   untouched). Orange brand bar #f68121 (primary-500), Montserrat italic.
   -------------------------------------------------------------------------- */
.entry-content blockquote,
.rich-text blockquote {
  margin: var(--space-lg) 0;
  padding: var(--space-sm) var(--space-md);
  border-left: 6px solid var(--color-primary-500);
  background: var(--color-primary-50);
  border-radius: var(--radius-md);
}
.entry-content blockquote p,
.rich-text blockquote p {
  font-family: var(--font-heading);
  font-style: italic;
  font-weight: 600;
  font-size: 1.25rem;
  line-height: 1.45;
  color: var(--color-neutral-700);
  margin: 0;
}

/*
  shortcut.solutions — mobile header: Call Us row + hamburger alignment
  Added 2026-10-31 via site custom_css (site 4, theme 3). Task ss-mobile-header-v1.
  Theme/template files untouched. Scoped ENTIRELY to max-width: 639px (the site's
  phone breakpoint) — desktop and tablet rendering unchanged by construction.
  Spec (Mike, Telegram 2026-10-31 13:49Z):
  1. Hamburger sits on the SAME ROW as the logo in mobile (logo left, burger right).
     Root cause: 300px logo + 32px gap + 44px burger > ~343px row width at 375px
     viewport, and .site-header-inner flex-wraps. Fix: cap logo to 32px tall
     (240px wide, aspect preserved), gap 32->8px, no-shrink on brand + toggle.
     240+8+44 = 292px fits even a 360px viewport. Nav stays wrapping BELOW the
     row when the menu opens (flex-basis 100% still forces its own row).
  2. New row ABOVE the header, MOBILE ONLY, centered:
     "Call Us (314) 884-1575" — plain text per Mike's words, NOT a tel: link
     (tap-to-call offered separately). Rendered as .site-header::before
     generated content — zero HTML changes.
  Styling decisions (recorded for Mike to adjust):
  - Row background: var(--color-neutral-50) #eef0f2 — the theme's subtle-band
    token; separates the call row from the white header body, same neutral family.
  - Text: var(--color-neutral-900) #08090b on #eef0f2 = ~15:1 contrast (AAA).
  - 15px semibold (>=15px readability floor), site sans font, single space
    between "Call Us" and the number (HTML collapses Mike's double space).
  - Padding 10px 16px.
  Rollback: remove the block below from site custom_css (or clear custom_css).
*/
@media (max-width: 639px) {
  .site-header-inner { gap: var(--space-sm); }
  .site-brand { flex-shrink: 0; }
  .site-nav-toggle { flex-shrink: 0; margin-left: auto; }
  .site-logo { height: 32px; width: auto; }
}/*
  shortcut.solutions — web-development page (page 95, /web-development-st-louis)
  Added 2026-11-02 via site custom_css (site 4, theme 3). Theme files untouched.
  Spec (Mike, revision round 2): hero two-column with navy tile gradient +
  bigger buttons + trust row; card icons in orange; numbered process rail with
  equal-height cards; Novus feature block on the navy band with images last;
  quote form side panel with phone + price; slightly larger page headings.
  PAGE SCOPING: every rule below is gated on
  body:has(.form[action="/f/13"]) — form 13 (the page-95 quote form) renders
  only on this page site-wide (home has no form, contact uses /f/7, about
  uses /f/9), so none of these rules can touch other pages.
  Colors: navy tile gradient = the homepage hero gradient rgba(23,33,84,…)
  applied via the section's bgGradient prop (not CSS). Icons use the site's
  orange brand tokens (--color-primary-*). No teal token exists in this
  theme's palette — teal accent ships only if Mike adds tokens.
  Rollback: remove this block from site custom_css.
*/
body:has(.form[action="/f/13"]) .section--bg-strong > .container--wide > .grid.cols-md-2 {
  align-items: center;
}

/* Hero + Novus band buttons: larger tap targets on the navy bands */
body:has(.form[action="/f/13"]) .section--bg-strong .btn-row .btn {
  padding: 14px 30px;
  font-size: 1.05rem;
}

/* Feature icons on the "What we build" cards (orange brand) */
body:has(.form[action="/f/13"]) .card .card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: var(--color-primary-50);
  color: var(--color-primary-600);
  margin-bottom: var(--space-sm);
}
body:has(.form[action="/f/13"]) .card .card-icon svg {
  width: 26px;
  height: 26px;
}

/* Process rail: equal-height cards + CSS counters for the step numbers */
body:has(.form[action="/f/13"]) .grid.cols-lg-5 .card {
  display: flex;
  flex-direction: column;
}
body:has(.form[action="/f/13"]) .grid.cols-lg-5 .card .card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
}
body:has(.form[action="/f/13"]) .grid.cols-lg-5 {
  counter-reset: step;
}
body:has(.form[action="/f/13"]) .grid.cols-lg-5 .card .card-title::before {
  counter-increment: step;
  content: counter(step);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--color-primary-600);
  color: #ffffff;
  font-weight: 700;
  font-size: 0.95rem;
  margin-bottom: var(--space-sm);
}

/* Testimonials: equal-height cards, signature pinned to the bottom */
body:has(.form[action="/f/13"]) .grid.cols-lg-3 .card {
  display: flex;
  flex-direction: column;
}
body:has(.form[action="/f/13"]) .grid.cols-lg-3 .card .card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
}
body:has(.form[action="/f/13"]) .grid.cols-lg-3 .card .card-body p:last-child {
  margin-top: auto;
}

/* Novus band: readable body copy on the navy gradient */
body:has(.form[action="/f/13"]) .section--bg-strong .rich-text {
  color: #f2f4fb;
}

/* Slightly larger page headings (desktop only; the responsive ladder
   above already owns <=1023px) */
@media (min-width: 1024px) {
  body:has(.form[action="/f/13"]) .heading--h1 { font-size: 3rem; line-height: 1.15; }
  body:has(.form[action="/f/13"]) .heading--h2 { font-size: 2.25rem; }
}
/*
  sc-webdev-rev-3 (2026-11-02) — 3 fixes on the page-95 revision, scoped
  to body:has(.form[action="/f/13"]) like every rev-2 block:
  1. Hero eyebrow "Professional Web Services" in the hero button orange.
     rev-3b correction: the original :has(.slider) guard never matched —
     the hero grid has NO slider (right column is the reserved illustration
     slot). Replaced with :has(.heading--h1): only the hero grid contains
     the page H1, so it still discriminates the eyebrow from the form
     side-panel phone strong (S9 grid has no h1).
     Source: theme 3 main.css @media(min-width:900px)
     .btn--primary,.utility-cta{background:#b85b00} — the rule that paints
     "Start a Website Project" in this hero (narrow tiers paint
     --color-primary-600 #b35809; #b85b00 is the desktop value).
  2. Testimonial quote text: too light on white -> near-black.
     #17181a (between neutral-800 #0b0d0f and neutral-900 #08090b).
     Navy-band (bg-strong) copy untouched.
  Rollback: remove this block from site custom_css.
*/
body:has(.form[action="/f/13"]) .grid:has(.heading--h1) .stack > .rich-text:first-child > p:first-child > strong {
  color: #b85b00;
}

/* Testimonials: quote copy on white cards -> near-black for legibility.
   Only the long quote paragraph (first p); stars keep their gold,
   signature lines keep their current weight/color. */
body:has(.form[action="/f/13"]) .card .card-body .rich-text > p:first-child {
  color: #17181a;
}
/* ---- sc-webdev-rev-4 item 2: call button hover -> orange ----
   Scope: the hero call button is the ONLY cta_webdev_call on the site
   (data-track census: 0 on all live pages; 1 on draft 95 preview). */
body:has(.form[action="/f/13"]) a.btn--secondary[data-track="cta_webdev_call"]:hover {
  color: #b85b00;
}

/* ---- sc-webdev-rev-4 item 4: process card titles padding ----
   Scope: the How-a-project-works grid is the ONLY cols-lg-5 grid
   site-wide (tree census + live census 0 everywhere else). */
body:has(.form[action="/f/13"]) .grid.cols-lg-5 .card .card-title {
  padding-left: 10px;
}
/*
  shortcut.solutions — web-development page (page 95) side-panel phone tap-to-call.
  sc-webdev-rev-4c: the form-panel number is now wrapped in a real tel: anchor in
  the page tree. This rule keeps its inherited look (no underline, inherited color)
  and is gated on form 13 (page 95 only) like the rest of the page-95 block.
*/
body:has(.form[action="/f/13"]) .grid .stack .rich-text a[href^="tel:"]{
  text-decoration:none;
  color:inherit;
}

/*
  sc-webdev-rev-4c: mobile call row as a REAL anchor above the header.
  Replaces the removed .site-header::before generated-content row — pseudo-element
  content is not in the DOM and cannot be a link. Rendered by theme 3
  templates/header.html as <a class="mobile-call-row" href="tel:+13148841575">
  as the first node before <header class="site-header">. Mobile-only:
  display:none at all widths above 639px, so desktop/tablet are unchanged.
*/
a.mobile-call-row{ display:none; text-decoration:none; }
@media (max-width: 639px){
  a.mobile-call-row{
    display:block;
    text-align:center;
    font-family:var(--font-sans);
    font-size:15px;
    font-weight:600;
    color:var(--color-neutral-900);
    background:var(--color-neutral-50);
    padding:10px 16px;
  }
}

/* ---- sc-webdev-rev-5: testimonial signature names -> theme orange ----
   Scope: f13 body guard (form 13 renders only on page 95; home=none,
   contact=/f/7, about=/f/9 — re-censused live this pass). Signature line =
   the only card-body rich-text paragraph whose FIRST child is <strong>
   (census: strong total 5 on page 95 preview = 3 signatures + hero eyebrow
   + form-panel phone; the latter two are NOT inside .card). Quote copy
   (p:first-child, #17181a) and star .card-title untouched; role/company
   text keeps inherited color. */
body:has(.form[action="/f/13"]) .card .card-body .rich-text p:has(> strong:first-child) > strong {
  color: #b85b00;
}

/* REV-6 2026-11-02: testimonial star glyphs orange (#b85b00).
   Stars = plain U+2605 text inside h3.card-title on the 3 testimonial
   cards (byte-verified live). Discriminator = the rev-5 signature chain
   (card-body rich-text paragraph whose first child is <strong>) which
   matches ONLY the testimonial cards — service cards (Business websites,
   etc.) and process cards (Discovery..Launch) carry no strong-first
   paragraph, so their card-titles stay inherited ink. f13 body guard
   keeps the rule page-95-only. Signature names stay orange via the
   rev-5 rule (untouched). */
body:has(.form[action="/f/13"]) .card:has(.card-body .rich-text p > strong:first-child) .card-title {
  color: #b85b00;
}/*
  sc-webdev-rev-6b (2026-11-02) — testimonial company/role lines orange too.
  Mike: "The Testimonial stars should be orange and the name + company should
  both be orange at the bottom of the tesitmonials on web-dev page."
  Rev-6 painted the <strong> names only; the company line after <br> kept
  inherited ink. This paints the whole signature paragraph. The only
  p:has(> strong:first-child) inside .card on page 95 are the 3 signature
  paragraphs (S. Natoli / Bryan Brown / Josh V. — element-match proof in
  reports/sc-webdev-rev-6b.md). Eyebrow + phone strongs are outside .card.
*/
body:has(.form[action="/f/13"]) .card .card-body .rich-text p:has(> strong:first-child) { color:#b85b00; }
/*
  shortcut.solutions - hide bottom CTA section on desktop
  Added 2026-11-02 via site custom_css (site 4, theme 3). Theme files untouched.
  Task sc-webdev-hidecta-1. Operator consent in task (Mike, verbatim):
  "shortcut.solutions web-dev page, assign hypecast cms3 to hide the 'Ready to start your project?' section at the bottom in Desktop view."
  Change: hide the bottom "Ready to start your project?" band (navy gradient,
  section--bg-strong) on DESKTOP viewports only. Hide, not delete - the form
  and copy stay in the HTML; reversible by removing this block.
  Hook: the section is the only one containing the lead form (action="/f/13",
  unique site-wide: 1 hit on /web-development-st-louis/, 0 on home, contact,
  business-web-services, fully-managed-web-hosting-services,
  ada-compliance-services-in-st-louis - probed 2026-11-02).
  NB page 95 has THREE section--bg-strong bands (hero, testimonials, CTA) with
  identical classes and gradients - never target section--bg-strong bare.
  Breakpoint: min-width 1024px is the desktop gate theme 3 main.css itself uses.
  Tablet (<=1023px) and mobile keep today's rendering by construction.
  Rollback: remove this block from site custom_css (site_update custom_css).
*/
@media (min-width: 1024px) {
  .section--bg-strong:has(form[action="/f/13"]) { display: none; }
}
/* ============================================================
   Blog list card grid - /blog (site 4, shortcut.solutions)
   2026-11-03. Remap of external reference grid onto platform
   markup (.entry-list / .entry-list-item / .entry-meta /
   .entry-excerpt / .pagination - blog-index-only classes).
   Reference's h1~h2 catch-all selector intentionally dropped.
   Rollback: remove this block (full custom_css rewrite).
   ============================================================ */

/* H1 accent bar - only the h1 immediately preceding .entry-list */
.heading--h1:has(+ .entry-list)::after {
  content: '';
  display: block;
  width: 60px;
  height: 4px;
  margin-top: var(--space-sm);
  border-radius: var(--radius-pill);
  background: var(--color-primary-500);
}

/* Grid container: 3 / 2 / 1 columns, no media queries */
.entry-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--space-lg);
}

/* Card */
.entry-list-item {
  margin-bottom: 0;
  border: 1px solid var(--color-neutral-100);
  border-radius: var(--radius-md);
  background: var(--color-neutral-white);
  padding: calc(var(--space-lg) - var(--space-sm));
  display: flex;
  flex-direction: column;
  box-shadow: 0 4px 6px rgba(11, 13, 15, 0.02);
  position: relative;
}

/* Featured first post: full-width hero card */
.entry-list-item:first-child { grid-column: 1 / -1; }
.entry-list-item:first-child .entry-title {
  font-size: 1.7rem;
  line-height: 1.25;
}

/* Whole card becomes the title link's click target */
.entry-list-item .entry-title a { position: relative; z-index: 2; }
.entry-list-item .entry-title a::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
}

/* Title */
.entry-list-item .entry-title { font-size: 1.25rem; line-height: 1.35; }
.entry-list-item .entry-title a { outline-offset: 3px; }
.entry-list-item .entry-title a:focus-visible {
  outline: 2px solid var(--color-primary-500);
}

/* Date eyebrow (remap: time/.post-date -> .entry-meta) */
.entry-list-item .entry-meta {
  margin: 0 0 var(--space-sm);
  font-size: .8rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--color-primary-600);
}

/* Excerpt pins card bottoms evenly (flex-grow pattern) */
.entry-list-item .entry-excerpt { flex-grow: 1; }
.entry-list-item .entry-excerpt p {
  margin: 0;
  color: var(--color-neutral-600);
  font-size: .95rem;
}

/* Hover lift (motion-safe) */
@media (prefers-reduced-motion: no-preference) {
  .entry-list-item {
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  }
  .entry-list-item:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 20px rgba(11, 13, 15, 0.08);
    border-color: var(--color-neutral-300);
  }
  .entry-list-item:hover .entry-title a { color: var(--color-primary-700); }
}

/* Pagination pills, 40px tap targets */
.pagination-item a,
.pagination-current {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  min-height: 40px;
  border-radius: var(--radius-md);
  font-weight: 600;
}
.pagination-item a {
  background: var(--color-neutral-white);
  border: 1px solid var(--color-neutral-200);
  color: var(--color-neutral-700);
}
.pagination-item a:hover {
  background: var(--color-primary-500);
  border-color: var(--color-primary-500);
  color: var(--color-neutral-white);
}
.pagination-current {
  background: var(--color-neutral-700);
  border-color: var(--color-neutral-700);
  color: var(--color-neutral-white);
}
/* ============================================================
   Article reading experience - single blog posts only
   (site 4, shortcut.solutions) 2026-11-03. Task scs-article-css-a1.
   Scope intent (Mike's brief): single posts = a main whose h1.heading--h1
   is immediately followed by p.entry-meta. Brief quoted the selector
   main:has(> h1.heading--h1 + p.entry-meta), but the served DOM nests the
   h1 four levels deep (main > section > .container--narrow > .stack > h1),
   so the child-combinator form matches nothing. Deviation recorded: the
   ">" is dropped (descendant adjacency), which matches ALL and ONLY single
   posts (probed 2026-11-03 on served HTML: 3 posts match; /blog,
   /web-development-st-louis/, /, /contact-us/, business-web-services and
   ada-compliance do NOT - none has the h1 + p.entry-meta adjacency).
   Same solution as the 2026-09-25 article container floor below.
   Rules are Mike's verbatim; S = main:has(h1.heading--h1 + p.entry-meta).
   Cascade notes (flagged, not altered - rules are as specified):
   - S .heading--h1 (specificity 0,2,2) outranks the responsive heading
     ladder's .heading--h1 (0,1,0) inside its max-width media queries, so
     on phones/tablets article H1s floor at 2.2rem (35.2px) vs the
     ladder's 2rem. Same shape for S h3 vs .rich-text h3 on phones
     (1.6rem vs 1.2rem).
   - S blockquote (0,1,3) loses to the 2026-10-21 pull-quote treatment
     (.entry-content/.rich-text blockquote, 0,2,0): posts with blockquotes
     keep the orange 6px-bar look; rule 9 only fills gaps elsewhere.
   Rollback: remove this block (full custom_css rewrite).
   ============================================================ */

/* 1. Article measure */
main:has(h1.heading--h1 + p.entry-meta) { max-width:680px; margin-inline:auto; }

/* 2. H1 */
main:has(h1.heading--h1 + p.entry-meta) .heading--h1 { font-size:clamp(2.2rem,4vw + 1rem,3.2rem); line-height:1.15; font-weight:800; letter-spacing:-0.04em; text-wrap:balance; }

/* 3. Date/meta eyebrow */
main:has(h1.heading--h1 + p.entry-meta) .heading--h1 + .entry-meta { font-size:.95rem; font-weight:500; text-transform:uppercase; letter-spacing:.06em; color:var(--color-neutral-600); margin-bottom:3rem; }

/* 4. H3 section breaks */
main:has(h1.heading--h1 + p.entry-meta) h3 { font-size:1.6rem; font-weight:700; letter-spacing:-0.02em; margin-top:3rem; padding-top:1.75rem; border-top:1px solid var(--color-neutral-200); }

/* 5. Body copy */
main:has(h1.heading--h1 + p.entry-meta) p { font-size:1.125rem; line-height:1.65; margin-bottom:1.5rem; text-wrap:pretty; }

/* 6. Lead-in strong */
main:has(h1.heading--h1 + p.entry-meta) p > strong:first-child { font-size:1.15em; font-weight:700; color:var(--color-neutral-900); }

/* 7. Figures */
main:has(h1.heading--h1 + p.entry-meta) img { width:100%; height:auto; display:block; margin:2.5rem 0; border-radius:6px; border:1px solid var(--color-neutral-200); box-shadow:0 4px 12px rgba(0,0,0,.03); }

/* 8. Tables */
main:has(h1.heading--h1 + p.entry-meta) table { width:100%; border-collapse:collapse; margin:2rem 0; }
main:has(h1.heading--h1 + p.entry-meta) th,
main:has(h1.heading--h1 + p.entry-meta) td { border:1px solid var(--color-neutral-200); padding:.65rem .85rem; text-align:left; }
main:has(h1.heading--h1 + p.entry-meta) th { background:var(--color-neutral-100); font-weight:600; }

/* 9. Blockquotes (see cascade note: pull-quote treatment wins where present) */
main:has(h1.heading--h1 + p.entry-meta) blockquote { border-left:3px solid var(--color-primary-500); padding-left:1.25rem; color:var(--color-neutral-700); margin:2rem 0; }

/* 10. Opt-in callout for future posts (add class .post-callout in the editor) */
main:has(h1.heading--h1 + p.entry-meta) .post-callout { background:var(--color-neutral-100); border-left:4px solid var(--color-neutral-900); padding:1.5rem; font-size:1.25rem; line-height:1.6; margin:3rem 0; }