/* ==============================================================================   BW FAMILY GUIDES — SHARED PRINT SYSTEM
   sprint-10 Track P4, from Track P3's audit and the operator's "Option A+" ruling.

   Linked from every family guide as
       <link rel="stylesheet" media="print" href="guide-print.css">
   The `media="print"` is load-bearing: it is the reason the SCREEN rendering of all
   nineteen guides is provably byte-for-byte unchanged. Never drop it, and never put a
   screen-affecting rule in this file.

   What this file owns
   -------------------
   1. Page geometry — real margins, plus the full-bleed cream page ground that makes those
      margins read as an inset on the text rather than a white frame round the sheet (§1,
      §2, operator 2026-08-03).
   2. A running FOOTER in the @page margin boxes: Martice's contact block and "Page X of Y".
      Chromium 148 supports @top- and @bottom- margin boxes with `counter(page)` and
      `counter(pages)` — Track P3's probe proved that directly. There is no running HEADER
      any more; s12 Track C removed both top boxes on the operator's ruling.
   3. The masthead: cream plate, contrast fix, and the restored Bonney Watson mark (§3).
   4. Widow/orphan control: break-inside:avoid on every callout and prose box.
   5. The print-suppression class for the operator's pricing rule.

   THERE IS NO COVER PAGE.  Sprint-11 Track D, on the operator's direction of 2026-08-02:
   "I don't like the idea of a cover page and I don't like any of the PDF versions right
   now." The s10 generated full-bleed cover is REVERSED — page 1 of every guide PDF is now
   content, opening under the guide's own masthead. What survives from s10 is the part he
   did not object to: the running footer, the real page margins, and the range-only pricing
   rule. Do not reintroduce a cover without a fresh operator ruling.

   `verify_guide_pages.mjs` still gates that, but the assertion is no longer "no page is
   full-bleed" — since s12 EVERY page is, because the cream ground is required to reach the
   paper edge. It is now two assertions: every page must carry a full-bleed CREAM ground,
   and nothing else on any page may be painted full-bleed. A navy plate or a photograph
   across the whole sheet still fails; so, now, does a page that quietly loses its bleed.

   The build script still injects a marked per-guide block, but since s12 it holds only the
   screen-side `.print-invite{display:none}` rule — the running-header title string it used
   to carry died with the header. Nothing in THIS file is guide-specific except the named
   overrides at the end.
   ===================================================================================== */

/* ── 1. PAGE GEOMETRY + RUNNING FOOTER ─────────────────────────────────────────────
   sprint-12 Track C, on the operator's ruling of 2026-08-03:

     "the margins are supposed to be stretched to the edge. we also do not need a header
      and the footer should just overlap with the cream not sit outside separately."

   THERE IS NO RUNNING HEADER. Both margin boxes at the top of the page are gone — the
   constant @top-right "Bonney Watson" that used to live here, and the per-guide @top-left
   title string that scripts/build_guide_print_system.mjs used to emit. The brand mark is
   back on the masthead instead (§3), which is where he asked for it.

   THE MARGINS ARE STILL REAL, AND THE CREAM STILL BLEEDS TO THE EDGE — because
   `background` ON THE @page RULE paints the whole SHEET, margins included, and Chromium
   implements it. That is the one mechanism that satisfies both of his sentences at once,
   and it took measuring four candidates to find (all four probed with real page.pdf output
   and rasterised corner pixels, s12 Track C):

     - `@page{margin:0}` + a background on <html>  — bleeds, but there are then no @page
       margin boxes at all, so the running footer he asked to KEEP has nowhere to render.
       This is the failure already documented in build_guide_pdfs.mjs.
     - `@page{margin:0}` + a `position:fixed` footer element — the element does repeat on
       every printed page (verified), but `counter(page)`/`counter(pages)` resolve to 0
       outside a margin box, so it prints a literal "Page 0 of 0".
     - real margins + a background on <html> — the ROOT background is clipped to the page
       CONTENT box in print, so the white frame survives. This is what shipped and what he
       complained about.
     - real margins + `@page{background}` — sheet painted corner to corner, margin boxes
       intact, counters correct. Chosen.

   The root background is kept as well, one layer under it: `@page{background}` is paged-
   media surface area that not every engine implements, and if a family hits Ctrl+P in
   something other than Chromium the content box should still come out cream rather than
   white. Our own PDFs are Chromium-only, so the belt is what ships and the braces are
   insurance.

   Top margin trimmed 0.50in -> 0.42in because nothing lives up there any more, and bottom
   0.55in -> 0.46in: the footer is 7.5pt, it needs about a quarter inch, and the rest was
   room reserved for a header box that no longer exists. That is where the vertical space
   for the restored masthead logo comes from, and it is why Outside Marker Rules came down
   from four printed pages to three. */
@page {
  size: letter;
  margin: 0.42in 0.5in 0.46in 0.5in;
  background: #f8f6f2;

  @bottom-left {
    content: "Martice Morrison \00b7  (206) 445-9794 \00b7  mmorrison@bonneywatson.com";
    font-family: 'Source Sans 3', sans-serif; font-size: 7.5pt; color: #6a7686;
  }
  @bottom-right {
    content: "Page " counter(page) " of " counter(pages);
    font-family: 'Source Sans 3', sans-serif; font-size: 7.5pt; color: #6a7686;
  }
}

/* There is no @page:first override any more, and since s12 there is no per-guide @page
   partial at all. With the cover gone, page 1 is content and carries the same margins and
   the same running furniture as every other page — which is the whole point of a running
   footer: Martice's name, phone and email are on the FIRST sheet a family reads, not only
   from page 2 onward. */

@media print {

  /* ── 2. FULL-BLEED CREAM ───────────────────────────────────────────────────────
     Operator, 2026-08-03: "the margins are supposed to be stretched to the edge ... the
     footer should just overlap with the cream not sit outside separately." What shipped
     before this was a cream content block floating inside a white frame, with the running
     footer stranded in the white below it.

     The sheet-wide fill is `@page{background}` in §1 above; this is the second layer,
     covering the page CONTENT box, plus the cleanup that makes both of them visible.

     Every background BELOW the root must be transparent, or it repaints the content box in
     its own colour and the white frame comes back as a cream-on-offwhite frame instead.
     The eighteen `.doc-sheet` guides paint `--offwhite #f4f6f8` on body and cream on the
     sheet; vault-guide.html has no `.doc-sheet` and paints cream on body directly. Both
     are handled by zeroing body and .doc-sheet here and letting the root carry it.

     `.doc-sheet` also loses its 960px max-width, its rounded corners and its drop shadow:
     they are screen furniture for a page floating on a grey field, and on a full-bleed
     printed sheet a rounded corner and a shadow are exactly the "sitting outside
     separately" look he objected to.

     `print-color-adjust:exact` is required: without it a colour-managed printer drops the
     fill and the whole point of the change disappears on paper. */
  html {
    background: #f8f6f2 !important;
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body { background: transparent !important; }
  .doc-sheet {
    background: transparent !important;
    box-shadow: none !important; border-radius: 0 !important;
    max-width: none !important;
  }

  /* The guides' own print CSS fakes gutters, because it had no page margins to work
     with. Now that @page carries real margins those hacks would double up, so they are
     unwound here in one place rather than edited into nineteen files. */
  .doc-sheet { padding: 0 !important; margin: 0 !important;
               /* The screen rule is `.doc-sheet{min-height:100vh}` — it makes the cream
                  sheet reach the fold on a short page. Nothing in the guides' print CSS
                  ever reset it, which was harmless while the whole document was one flow
                  and became a shipped blank sheet once a full-page cover was added in
                  front: the sheet is forced to at least a full page, lands a hair past
                  the page boundary, and spills a page carrying nothing but the running
                  header and footer. scattering-guide.html printed exactly that. */
               min-height: 0 !important; }
  .cover { margin: 0 !important; }

  /* The standing block footer is now redundant and was actively harmful. It carries the
     address and phone — which is why the guides' own print CSS deliberately KEPT it, with
     a comment saying a downloaded PDF is often read away from the site. True, and now
     better served: the running footer puts Martice's name, phone and email at the foot of
     EVERY page instead of once at the very end. Meanwhile the block itself, being
     break-inside:avoid and taller than the slack left on the last page, was stranding
     itself onto a sheet of its own in eleven of the nineteen guides — measured at 0.6%
     to 2.8% ink, i.e. a blank page a family is asked to print. Hidden. */
  .doc-footer { display: none !important; }

  /* ── 3. MASTHEAD (cream treatment + contrast fix) ──────────────────────────────
     P3's audit: the navy masthead put a 55%-opacity white subtitle on navy — under
     4.5:1, and the first thing a family reads. The cream plate with navy type fixes it,
     and it is kept now that the cover is gone: it is the lighter, less ink-heavy opening
     for a document a family prints at home, and it is the treatment that was reviewed.

     THE LOGO IS BACK — operator, 2026-08-03: "It's missing all bonney watson logoes." The
     s11 decision to keep it hidden is REVERSED. `logo.svg` is white artwork for navy
     backgrounds and is invisible on this cream plate, so it is swapped print-only to the
     navy cut with `content:url("logo-navy.svg")`, which Chromium honours (and which
     build_guide_pdfs.mjs already waits on — see the `.cover-logo, .pc-photo` loop there).
     That mark IS the fleur: navy BONNEY WATSON wordmark either side of the orange
     fleur-de-lis in its ring, #466e86/#e84610 family, per GPL-April-2026.pdf.

     WHAT COST A SHEET OF PAPER IN S11 WAS THE STACK, NOT THE LOGO. It was restored as a
     block above the kicker, so its 15-16px plus margin pushed the whole document down and
     Glass-Front Niche went 3 pages to 4, Urn Gardens 1 to 2 — both operator-fixed counts.
     Here it is taken OUT of flow: absolutely positioned against the top-right of the
     masthead, opposite the title, in the space the running header used to occupy. Vertical
     cost is zero by construction, and the measured page counts are unchanged from before
     the restore (per-guide table in the s12 Track C report).
     `.cover` is already `position:relative` in all eighteen guides' own CSS; it is
     re-asserted here so the rule cannot be broken by a future condense-block edit. The
     kicker and h1 get right padding so a long title cannot run under the mark. */
  .cover {
    background: #f8f6f2 !important;
    border-bottom: 3px solid #2c445e;
    padding: 0 0 9px !important;
    position: relative !important;
  }
  .cover::before { display: none !important; }
  .cover-logo {
    display: block !important;
    content: url("logo-navy.svg");
    /* `right:3px`, not `right:0`. Flush against the content-box edge the mark's terminal
       "N" was clipped off in the PDF on some guides and survived on others, from
       sub-pixel rounding at the print clip — terramation-guide.html printed
       "BONNEY (fleur) WATSO" while cemetery-property-guide.html, with a measurably
       IDENTICAL layout box, printed cleanly. Found by rasterising at 300 dpi and looking,
       not by measuring the layout, which said both were fine. Three pixels of inset also
       reads better optically against the text column below. */
    position: absolute !important; right: 3px; top: 1px;
    height: 17px !important; width: auto !important;
    margin: 0 !important;
  }
  /* 17px of a 308.34 x 56.42 mark is 92.9px wide; 104px clears it with a gutter. */
  .cover-kicker, .cover h1 { padding-right: 104px; }
  .cover-kicker { color: #a5450a !important; }
  .cover h1 { color: #1e3a55 !important; }
  .cover-sub { color: #4a5765 !important; }   /* was rgba(255,255,255,.7) on navy */
  .cover-rule { background: #c8540a !important; }
  .cover-footer, .cover-stripe { display: none !important; }

  /* vault-guide.html is the one guide whose masthead is `.hero`, not `.cover`, and it was
     left out of the s10 cream treatment — it still printed a navy slab, now sitting inside
     a full-bleed cream page and looking like a mistake. Same treatment, same reasons: the
     contrast defect P3 flagged is here too (`.hero-sub` is rgba(255,255,255,.75) on navy,
     under 4.5:1), and it is the only way one logo rule can serve all nineteen guides.
     The selector matches the page's own `body:not(.modal-printing) .hero` specificity on
     purpose — that is how its existing print rules are written and `!important` alone does
     not beat them. The mark is centred here because this masthead is centred; it goes
     ABOVE the kicker rather than out of flow, and the 12px it costs is paid back by the
     padding trim, with the guide's page count unchanged (3). */
  /* THE `.hero` TREATMENT IS GONE — sprint-16 Track E, on the audit's Tier-3 instruction
     ("Uses .hero, not .cover ... Bring it in line"). Everything that used to stand here was
     a second, parallel copy of the `.cover` rules above, existing for exactly one guide:
     vault-guide.html painted its masthead cream, drew the brand mark as a `::before`
     because it had no <img> to swap, and recoloured four differently-spelled children.
     vault-guide.html now uses `.cover`, `.cover-logo`, `.cover-kicker`, `.cover-sub` and
     `.cover-rule` like the other eighteen, so the rules above serve it and this block has
     nothing left to do. The named override that hid `.hero-kicker` (its literal text was
     "Bonney Watson", which duplicated the mark once the mark existed) went with it: the
     guide's kicker now reads "BONNEY WATSON FAMILY GUIDE", which names the DOCUMENT, which
     is what the other eighteen kickers do and why they were never hidden.

     `verify_guide_pages.mjs`'s brand-mark gate kept a second code path to read that
     `::before` from computed style. It now measures a real <img class="cover-logo"> on all
     nineteen guides, by the same route, which is a stronger check than the one it replaces. */

  /* ── 3b. PHOTO-FIRST PRODUCT CARDS (sprint-11 Track D) ─────────────────────────
     One card = a PHOTO, a name, one or two plain sentences, and a price RANGE. The
     screen half of this component is injected into each adopting guide inside a marked
     BW:PHOTO-FIRST-CSS block; the print half lives here, once, so nineteen guides cannot
     drift into nineteen slightly different printed cards the way their condense blocks
     already did.

     The photo is the point of the component, so it does NOT shrink to a thumbnail in
     print — it goes to 16:9 (shorter than the screen's 4:3, because a printed page is
     the scarce thing) and keeps its full column width. Everything around it condenses.

     `print-color-adjust:exact` is on the card, not the image: without it the card's
     border and the hairline above the price drop out on a colour-managed printer, and
     the price ends up floating under the text with nothing tying it to the card. */
  .pf-grid { display: block; margin-bottom: 6px; }
  .pf-card {
    break-inside: avoid; page-break-inside: avoid;
    margin: 0 0 7px; border-radius: 6px;
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  .pf-photo { aspect-ratio: 16 / 9; }
  /* Block, not flex. On screen the body is a flex column so `margin-top:auto` pins the
     price to the bottom and cards in a row line up; in a printed COLUMN there is no row
     to line up with, and the same rule stretched the last card of a column and left an
     inch of white between its text and its price. */
  .pf-body { display: block; padding: 6px 8px 7px; }
  .pf-card h3 { font-size: 10.5pt; margin-bottom: 0; }
  .pf-kind { font-size: 6.5pt; margin-bottom: 3px; }
  .pf-card p { font-size: 8pt; line-height: 1.34; margin: 0 0 5px; }
  /* The price STACKS in print. Side by side it fits on screen at 480px of card, and it
     does not fit in a 3.3in print column: the label wrapped onto three lines and the
     range — the one figure the operator asked to be unmissable — was clipped mid-number
     against the column edge. Four of the six cards printed "$7,000–$48,00". Found by
     rasterising the PDF and reading it, not by any assertion. */
  .pf-price { display: block; margin-top: 0; padding-top: 4px; }
  .pf-price-label { display: block; font-size: 6pt; margin-bottom: 1px; }
  .pf-range { display: block; font-size: 11.5pt; }
  .pf-ask .pf-range { font-size: 8pt; font-style: italic; text-align: left; }
  /* The secondary full-range line, under a typical band. Operator, 2026-08-02: a span of
     $2,195-$82,500 is "a very wide price range" and must not lead on its own. So the band
     is the big figure and the full span is a quiet line beneath it — present, because a
     family who wants the extremes should find them, and small, because it is not the
     answer to "what does this cost". */
  .pf-full { display: block; font-size: 6.5pt; line-height: 1.3; margin-top: 2px; color: #5b6b7c;
             text-align: left; /* the screen block right-aligns it against the card edge; in the
                                  stacked print column that left the secondary line floating away
                                  from the band it belongs to */ }

  /* ── 4. WIDOW / ORPHAN CONTROL ────────────────────────────────────────────────
     P3's audit found callouts split across the page break in eight guides. The guides'
     own print CSS covered some boxes and not others; this covers every box class that
     exists across the nineteen. */
  .sidebar, .policy-box, .highlight-box, .callout, .note-box, .card, .option-card,
  .check-card, .decision-card, .feature-card, .compare-card, .benefit-card,
  .location-card, .size-card, .plan-card, .uv-card, .charge-list, .timeline-step,
  .faq, .answer, .cta, .band, .figure, .tsg-section, .price-table, .footnote,
  .benefit-row, .plan-row, .section-header, figure, table, tr,
  .pf-card, .print-invite,
  /* `.direct-panel` and its `.direct-option` cells — cremation-guide.html. The panel split
     across the page 1/2 break in the condensed cut and put "$3,535" and "$3,935" alone at
     the top of page 2 with their container labels left behind on page 1: two prices, in a
     document about prices, attached to nothing. Same class of defect as the clipped
     "$7,000–$48,00" noted above, and found the same way — by rasterising the PDF and
     looking at it. */
  .direct-panel, .direct-option {
    break-inside: avoid; page-break-inside: avoid;
  }
  h2, h3, h4, .section-kicker, .section-sub, .section-rule {
    break-after: avoid; page-break-after: avoid;
  }
  p { orphans: 2; widows: 2; }

  /* ── 5. LINKS PRINT AS PROSE ──────────────────────────────────────────────────
     P3's audit: underlined blue link text in a printed leave-behind reads as a defect,
     and the target is unreachable on paper. Anchors print as plain prose; where the URL
     itself matters the page carries it as visible text (`.url`), which stays. No QR
     encoder is vendored: the repo's vendoring precedent (scripts/vendor) is for
     libraries the app needs at runtime, and adding one for decoration on a leave-behind
     that already prints the operator's phone number in the footer of every page did not
     earn its place. Logged as an open question rather than decided silently. */
  a, a:link, a:visited { text-decoration: none !important; color: inherit !important; }

  /* ── 6. THE PRICING RULE ──────────────────────────────────────────────────────
     Operator, 2026-08-01: "we can keep price ranges just not very specific pricing so
     then they could ask me for an actual quote."  Exact per-item prices and itemized
     fee tables are removed from the PRINTED guide; ranges stay, and a warm invitation
     takes the table's place. Screen keeps everything — this whole file is media=print.

     `.print-suppress` is applied by the build script to the elements the rule names.
     `.print-invite` blocks are generated with a computed range, never a typed figure,
     and are verified by the range verifiers + verify_guide_pages.mjs. */
  .print-suppress,
  [data-print-suppress] { display: none !important; }

  .print-invite {
    display: block !important;
    border-left: 3px solid #c8540a;
    background: #f8f6f2;
    padding: 9px 12px;
    margin: 10px 0 12px;
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  /* Compact variant: used where the rule took only a table's fee rows, so the
     replacement must not cost more room than it saved. */
  .print-invite.pi-compact { padding: 5px 9px; margin: 5px 0 6px; }
  .print-invite.pi-compact p { font-size: 7.6pt; margin-top: 2px; }

  .print-invite .pi-range {
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 14pt; color: #1e3a55; display: block; margin-bottom: 2px;
  }
  .print-invite .pi-label {
    font-family: 'Source Sans 3', sans-serif; font-size: 7.5pt; font-weight: 700;
    letter-spacing: .13em; text-transform: uppercase; color: #a5450a;
  }


  /* Trailing-blank-page guards. Two separate causes, both found by rendering the tail of
     every guide and looking at it:
       - `html{height:100%}` in the guides' own print CSS, harmless when the cover was a
         band at the top of page 1 and not harmless once the cover is a full 100vh page:
         the two stack and push an empty sheet out the back. scattering-guide.html shipped
         a page 3 carrying nothing but the running header and footer.
       - a stray break-after on whatever happens to end the document. */
  html, body { height: auto !important; min-height: 0 !important; }
  .doc-sheet > *:last-child, body > *:last-child {
    break-after: auto !important; page-break-after: auto !important;
  }

  /* ── 7. GEOMETRY COMPENSATION ────────────────────────────────────────────────
     The guides' own print-condense rules were tuned when the page had NO margins and
     the sheet faked 0.4in gutters — an 7.7 x 11.0in live area. Real margins plus a
     running footer take that to 7.5 x 9.95in, about 12% less, and every guide gained a
     page or two purely from geometry. Rather than re-tune nineteen condense blocks by
     hand, the type is tightened here by roughly the same proportion. Measured, not
     guessed: page counts before and after are in the track report.
     Nothing drops below 7.6pt — these are read by grieving families, and the leading is
     kept at 1.3 so the smaller size does not also read as cramped. */
  .doc-sheet { column-gap: 13px; }
  body { font-size: 7.7pt; }
  .prose p, .prose li, .sidebar p, .sidebar li, .policy-box p, p { font-size: 7.7pt; line-height: 1.27; }
  /* A body paragraph written as a direct child of `.section-wrap` with its size HARD-CODED
     IN THE MARKUP — `<p style="font-size:14px">` — was missed by every rule above and by
     every guide's own condense block, because an inline style beats a stylesheet outright.
     Those paragraphs printed at their SCREEN size: 14px and 13.5px against the 7.7pt
     (10.3px) of the column beside them, so a third larger, and cremation-guide.html put two
     of them at the head of a section. The page reads as though the type changed size
     halfway down. Found by rasterising page 2 and looking at it; no assertion could have
     seen it, and the layout measurements said every box was fine.

     Scoped to `[style*="font-size"]` on purpose. `!important` is the only thing that beats
     an inline style, and a blanket `.section-wrap > p{...!important}` would also flatten a
     paragraph some future guide deliberately sizes another way. This targets exactly the
     defect — a screen pixel size leaking into print — and nothing else. Audited across all
     nineteen guides: six paragraphs match (four in cremation-guide.html, two in
     markers-guide.html), every one of them 13-14px, none smaller than the body size. */
  .section-wrap > p[style*="font-size"] { font-size: 7.7pt !important; line-height: 1.27 !important; }
  .section-wrap { padding-top: 2px; padding-bottom: 1px; }
  .section-wrap h2 { font-size: 11.5pt; }
  .section-sub { font-size: 7.6pt; margin-bottom: 3px; }
  .sidebar, .policy-box, .highlight-box, .card { padding: 6px 8px; margin-bottom: 5px; }

  .print-invite p {
    font-family: 'Source Sans 3', sans-serif; font-size: 8.5pt; line-height: 1.4;
    margin: 4px 0 0; color: #3a4453;
  }
}

/* ==============================================================================   PER-GUIDE OVERRIDES
   Kept at the end of the shared sheet, few and named, rather than hand-edited into the
   guides themselves — the guides' own print blocks are tuned to the OLD geometry and
   editing them by hand is how those blocks got to nineteen slightly-different copies of
   the same idea in the first place.
   ===================================================================================== */
@media print {
  /* (The named override that hid vault-guide.html's `.hero-kicker` was deleted in sprint-16
     Track E along with the rest of the `.hero` treatment — see §3. Its kicker was the
     literal string "Bonney Watson" and duplicated the brand mark; it now reads
     "BONNEY WATSON FAMILY GUIDE" like the other eighteen and needs no override.) */

  /* ── THE EIGHT-PAGE PHOTO-FIRST GUIDES (sprint-13 Track A) ────────────────────────
     Operator, 2026-08-03: "the crops on the granite niches guide cut off a lot of the
     photos. This guide can be longer if we can have better quality photos for each
     section. maybe a page per columbarium or nich section each." And, mid-sprint: "same
     with glass front niches as well."

     Two guides now print ONE PAGE PER LOCATION on an eight-page budget
     (verify_guide_pages.mjs PER_GUIDE_CAPS; every other guide is still six). The page
     breaks and the photo boxes live in each guide's own print block, because they are
     structural and belong next to the markup they act on. What CANNOT live there is TYPE
     SIZE: §7 above compensates the whole estate down to 7.7pt for a six-page budget, this
     sheet is linked AFTER every guide's own <style>, and `.prose p` in §7 has exactly the
     same specificity as `.prose p` in a guide. The guide loses every time. It lost
     silently the first time this was tried — the page-per-location layout came out at
     7.7pt with an inch and a half of white under each section, which is the worst of both
     designs.

     So the sizes are set HERE, keyed on `<body data-guide="...">`, where they are later in
     the cascade and more specific. Nothing else about these guides is special-cased.

     9pt with 1.4 leading, not 11pt: the photographs are the thing that got bigger, and a
     family reading a printed leave-behind should not have to hold it at arm's length
     either way. Measured page counts are in the s13 Track A report. */
  body[data-guide="granite-niches"],
  body[data-guide="glass-front-niches"] { font-size: 9pt; }
  body[data-guide="granite-niches"] :is(.prose p, .prose li, .sidebar p, .sidebar li, .plan-items p, p),
  body[data-guide="glass-front-niches"] :is(.prose p, .prose li, .sidebar p, .sidebar li, .plan-items p, p) {
    font-size: 9pt; line-height: 1.4;
  }
  body[data-guide="granite-niches"] :is(.footnote, .prose .footnote),
  body[data-guide="glass-front-niches"] :is(.footnote, .prose .footnote) {
    font-size: 8pt; line-height: 1.35; margin-top: 7px;
  }
  body[data-guide="granite-niches"] .section-wrap h2,
  body[data-guide="glass-front-niches"] .section-wrap h2 { font-size: 17pt; margin-bottom: 2px; }
  body[data-guide="granite-niches"] .section-sub,
  body[data-guide="glass-front-niches"] .section-sub { font-size: 10pt; margin-bottom: 7px; }
  body[data-guide="granite-niches"] .section-kicker,
  body[data-guide="glass-front-niches"] .section-kicker { font-size: 7.5pt; }
  body[data-guide="granite-niches"] .section-wrap,
  body[data-guide="glass-front-niches"] .section-wrap { padding-top: 4px; padding-bottom: 4px; }
  body[data-guide="granite-niches"] .plan-header h3,
  body[data-guide="glass-front-niches"] .plan-header h3 { font-size: 13pt; }
  body[data-guide="granite-niches"] .plan-price,
  body[data-guide="glass-front-niches"] .plan-price { font-size: 15pt; }
  body[data-guide="granite-niches"] .plan-header,
  body[data-guide="glass-front-niches"] .plan-header { padding: 9px 12px 7px; }
  body[data-guide="granite-niches"] .plan-items,
  body[data-guide="glass-front-niches"] .plan-items { padding: 0 12px 9px; }
  body[data-guide="granite-niches"] .price-table td,
  body[data-guide="glass-front-niches"] .price-table td { font-size: 8.5pt; padding: 4px 8px; }
  body[data-guide="granite-niches"] .price-table th,
  body[data-guide="glass-front-niches"] .price-table th { font-size: 8pt; padding: 5px 8px; }
  body[data-guide="granite-niches"] .price-table caption,
  body[data-guide="glass-front-niches"] .price-table caption { font-size: 7.5pt; }
  body[data-guide="granite-niches"] .sidebar,
  body[data-guide="glass-front-niches"] .sidebar { padding: 9px 12px; }

  /* vault-guide.html — `#all-pricing` carries page-break-before:always because it used to
     be two large price tables that deserved their own sheet. The pricing rule replaced
     them with two short invitations, so the forced break now buys a page that is 2.7% ink.
     Let it flow. (`#urn-vaults` keeps its break: seven vault cards still fill a page, and
     verify_guide_pages.mjs asserts they stay together.) */
  #all-pricing { break-before: auto !important; page-break-before: auto !important; }
}

/* ==============================================================================   8. THE CONDENSED FAMILY PDF  —  `?print=family`   (sprint-16 Track A)

   Operator's brief, quoted in docs/PDF_DEBRIEF.md: "the pdf versions are supposed to be
   condensed and easier to read so I can quickly email them to families." Nothing in the
   pipeline used to condense anything; it only shrank, and by s15 the type had been
   squeezed to 7.7pt (§7) with a two-column flow on top. This section is the other half of
   the answer: SELECT the content in markup, then put the type back up.

   HOW A GUIDE ADOPTS IT — three annotations and nothing else. No per-guide print CSS.

     <div class="section" data-pdf="keep">…</div>       stays, whole
     <div class="section" data-pdf="drop">…</div>       gone from the family PDF
     <div class="section" data-pdf="summary">           long version stays on the website,
       …full web content…                               short version is what prints
       <div class="pdf-summary">…40 words…</div>
     </div>

   The short version lives INSIDE the guide, next to the long one, so it cannot drift —
   the same anti-drift rule the repo applies everywhere else. `data-pdf` is inert in every
   other medium: on screen, in an ordinary Ctrl+P, and in the `?part=` PDFs.

   THE FULL-LENGTH PRINT STILL WORKS. A family who hits Ctrl+P on the web page gets the
   whole document, because nothing here applies without the query. That is the stated
   fallback, not an accident.

   `.pdf-summary{display:none}` for SCREEN is in the per-guide block that
   scripts/build_guide_print_system.mjs writes — this sheet is media=print and cannot say
   anything about screen. Same arrangement as `.print-invite`, for the same reason.
   ===================================================================================== */

/* ── 8a. SELECTION ─────────────────────────────────────────────────────────────────
   Exactly three rules. Everything else in §8 is type and geometry. */
[data-print-mode="family"] [data-pdf="drop"] { display: none !important; }
[data-print-mode="family"] [data-pdf="summary"] > *:not(.pdf-summary) { display: none !important; }
[data-print-mode="family"] .pdf-summary { display: block !important; }

@media print {

  /* ── 8b. TYPE AND GEOMETRY, ONCE, FOR EVERY GUIDE ────────────────────────────────
     | Body            | 10.5pt / 1.5                                 |
     | Columns         | ONE — the document-wide multicol off         |
     | Section heading | 25px Cormorant, navy #1e3a55                 |
     | Card sentence   | 12px                                         |
     | Photo           | 16:9, full column width                      |
     | Page            | letter, 0.42in 0.5in 0.46in — UNCHANGED (§1) |
     | Running footer  | unchanged — it works                         |

     Every selector here is prefixed with the mode attribute, so §7's estate-wide 7.7pt
     compensation is untouched for the guides that have not adopted yet. The prefix is
     also what wins the cascade: §7 sets `p{font-size:7.7pt}` and the guides' own condense
     blocks set `.section p{font-size:8pt}`, and an attribute selector on the root beats
     both without a single !important. */
  html[data-print-mode="family"] body { font-size: 10.5pt; line-height: 1.5; }
  [data-print-mode="family"] .section p,
  [data-print-mode="family"] .band p,
  [data-print-mode="family"] .note p,
  [data-print-mode="family"] .faq .answer p,
  [data-print-mode="family"] p { font-size: 10.5pt; line-height: 1.5; max-width: none; }
  /* LIST ITEMS TOO. §8b originally raised paragraphs only, and §7 sets `.prose li,
     .sidebar li{font-size:7.7pt}` for every other mode — so a guide whose content is a
     list (burial-guide's "who needs a certified copy", cremation-guide's "key things to
     know", every `.option-card`) printed its lists at 7.7pt inside a 10.5pt document.
     Measured at 10.27px on cremation-guide.html before this rule, which is 7.7pt exactly.
     The floor is a floor for prose, whatever element it is written in. */
  [data-print-mode="family"] .prose li,
  [data-print-mode="family"] .sidebar li,
  [data-print-mode="family"] .sidebar p,
  [data-print-mode="family"] .policy-box p,
  [data-print-mode="family"] li { font-size: 10pt; line-height: 1.4; }

  /* ONE COLUMN. The guides' condense blocks flow the whole sheet through
     `column-count:2`; the debrief's finding is that a two-column 8pt broadsheet is the
     visual language of a classified-ads page, not of a document about where someone will
     be buried, and that it scrambles the extracted reading order as well. */
  [data-print-mode="family"] .doc-sheet { column-count: 1 !important; column-gap: normal !important; }
  /* Turning the multicol OFF is not enough on its own. The guides mark their wide blocks
     `column-span:all` so that a table or a masthead spans both columns, and a spanner is
     still a spanner in a one-column multicol container: it splits the flow around itself
     and each fragment is a separate block the pager may break at. urn-gardens-guide.html
     measured 918px of content against a 972px page and still printed TWO, with the whole
     charges table pushed onto the second sheet, because `#rights` carries `span-all`. With
     one column there is nothing left to span, so the property is cancelled outright.
     (Same family of defect as the print-table spanner noted in the build log: a
     `column-span:all` after a break strands the page it leaves behind.) */
  /* Named four elements originally, which held for the guides converted in Tracks A and B
     and did NOT hold for markers-guide.html: it marks `.scale-guide`, `.tsg-print`,
     `.compare` and `.section table` `column-span:all` as well, none of which were on the
     list. The symptom on `?part=photos&print=family` was the documented one — a spanner
     fragments the flow around itself even in a ONE-column multicol, and the sheet came out
     three pages with the bottom two thirds of page 2 empty. Found by rasterising, not by
     any assertion.
     So it is cancelled universally rather than by name. That is not a blunt instrument
     here, it is the accurate statement: `column-count:1` is set two rules above, and in a
     single-column container there is by definition nothing for anything to span. A named
     list can only ever be as complete as the last guide someone checked. */
  [data-print-mode="family"] * { column-span: none !important; }

  /* Masthead: the same cream plate and navy mark as every other guide (§3), with the type
     back at a size a family reads rather than the condense block's 14pt/8pt. */
  [data-print-mode="family"] .cover h1 { font-size: 20pt; line-height: 1.1; margin-bottom: 4px; }
  [data-print-mode="family"] .cover-sub { font-size: 10.5pt; line-height: 1.35; font-style: italic; }
  [data-print-mode="family"] .cover-kicker { font-size: 8px; letter-spacing: .16em; margin-bottom: 4px; }
  [data-print-mode="family"] .cover-logo { height: 20px !important; }
  /* The orange rule under the subtitle duplicates the navy border §3 already draws under
     the whole plate, and in a two-page document that is a quarter inch of nothing. */
  [data-print-mode="family"] .cover-rule { display: none !important; }

  [data-print-mode="family"] .section { padding: 4px 0 2px; }
  [data-print-mode="family"] .section + .section { border-top: 0; }
  [data-print-mode="family"] .section h2 {
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 25px; font-weight: 600; color: #1e3a55; line-height: 1.15; margin: 0 0 2px;
  }
  [data-print-mode="family"] .section .sub { font-size: 10.5pt; margin: 0 0 4px; }
  [data-print-mode="family"] .section-label { font-size: 8pt; letter-spacing: .14em; margin: 0 0 5px; }
  [data-print-mode="family"] .rule { display: none !important; }

  /* ── 8c. THE ANSWER, UP FRONT ────────────────────────────────────────────────────
     Structure item 2: 40-60 words, the single fact the guide exists to convey, set beside
     a heading rather than under a "Section 1" label. */
  [data-print-mode="family"] .fam-answer {
    display: grid !important; grid-template-columns: 1.3in 1fr; gap: 0;
    margin: 7px 0 11px; break-inside: avoid;
  }
  [data-print-mode="family"] .fam-answer h2 {
    /* set beside the paragraph, not above it */
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 20pt; font-weight: 600; color: #a5450a; line-height: 1.05; margin: 0;
    padding-right: 14px;
  }
  [data-print-mode="family"] .fam-answer p {
    margin: 0; padding-left: 16px; border-left: 1px solid #ddd6c8;
  }

  /* ── 8d. THE CHOICES, AS PHOTOGRAPHS ─────────────────────────────────────────────
     §3b turns the card grid into a single printed column, which is right for a guide that
     runs six pages and wrong for one that runs two: five cards down one column is most of
     three pages. Two up, photo 16:9, full column width, never a thumbnail. */
  [data-print-mode="family"] .pf-grid {
    display: grid !important; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0 0 8px;
  }
  [data-print-mode="family"] .pf-card { margin: 0; }
  /* 16:9 and full column width, as §3b — the photograph is the point of the component and
     does not become a thumbnail here either. Everything else on the card was measured
     against the page-1 fold rather than chosen: two rows of 16:9 photographs under the
     masthead and the answer block come to 911px of a 955px live area, and the room for
     that came out of padding and leading, never out of the photograph or the body type. */
  [data-print-mode="family"] .pf-photo { aspect-ratio: 16 / 9; }
  [data-print-mode="family"] .pf-body { padding: 6px 10px 7px; }
  [data-print-mode="family"] .pf-card h3 { font-size: 13.5pt; margin-bottom: 1px; }
  [data-print-mode="family"] .pf-kind { font-size: 7pt; letter-spacing: .1em; margin-bottom: 4px; }
  /* 10pt. The debrief's geometry table said 12px (=9pt), which contradicts its own
     "never below 10pt" rule; the operator ruled for the rule (2026-08-04), so card
     sentences sit at the floor and the coming lock-in assertion can be written clean:
     no prose below 10pt, labels and kickers exempt as component convention. */
  [data-print-mode="family"] .pf-card p { font-size: 10pt; line-height: 1.4; margin: 0 0 6px; }
  [data-print-mode="family"] .pf-price { padding-top: 5px; }
  [data-print-mode="family"] .pf-price-label { font-size: 7pt; margin-bottom: 2px; }
  [data-print-mode="family"] .pf-range { font-size: 15pt; }
  [data-print-mode="family"] .pf-ask .pf-range { font-size: 11pt; }
  [data-print-mode="family"] .pf-full { font-size: 7.5pt; margin-top: 3px; }
  /* One card may run the full width with its photograph beside the text instead of above
     it — the band that carries the fifth property type without spending a second row on a
     card that would sit alone. `order` is used rather than moving the markup, because the
     SCREEN order of the cards is reviewed and must not change. */
  [data-print-mode="family"] .pf-fam-wide { max-height: 128px;
    grid-column: 1 / -1; order: 9;
    display: grid; grid-template-columns: 0.85fr 1.6fr;
  }
  [data-print-mode="family"] .pf-fam-wide .pf-photo { aspect-ratio: auto; height: 100%; }
  [data-print-mode="family"] .pf-fam-wide .pf-price {
    display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  }
  [data-print-mode="family"] .pf-fam-wide .pf-price-label { margin-bottom: 0; }
  [data-print-mode="family"] .pf-fam-wide .pf-body { padding: 6px 12px 7px; }

  /* ── 8e. WHAT ELSE YOU PAY FOR ───────────────────────────────────────────────────
     Structure item 4: the charges as a two-column name-and-half-sentence list. */
  [data-print-mode="family"] .costs { padding: 1px 16px; margin: 2px 0 7px; }
  [data-print-mode="family"] .charge-list { column-count: 2; column-gap: 26px; }
  /* The component has to stand up in a guide that has never used it. `.charge-list` came
     from the guides that carry it on SCREEN, and those guides' own stylesheets are what
     supply `list-style:none` and `strong{display:block}`. vault-guide.html borrowed it
     inside a `.pdf-summary` — print-only markup, so there is no screen CSS for it — and
     printed a bulleted list reading "Wilbert BronzePremium. Cast bronze outside...", with
     the item name run into its own description. Found by rasterising page 1 and reading it.
     Stated here so the component is self-sufficient wherever it is used; it is a no-op on
     the guides whose own CSS already says the same thing. */
  [data-print-mode="family"] .charge-list { list-style: none; padding-left: 0; margin-left: 0; }
  [data-print-mode="family"] .charge-list > li { list-style: none; }
  [data-print-mode="family"] .charge-list > li > strong { display: block; }
  [data-print-mode="family"] .charge-list li { padding: 1px 0; break-inside: avoid; }
  [data-print-mode="family"] .charge-list strong { font-size: 11pt; margin-bottom: 0; }
  [data-print-mode="family"] .charge-list span { font-size: 10pt; line-height: 1.25; }
  /* A guide may carry a family-only item at the end of the list; on screen it is hidden and
     the guide zeroes the hairline above it, because otherwise the rule sits under nothing.
     Here that item IS visible, so the hairline is the divider it was drawn as. */
  [data-print-mode="family"] .charge-list li:has(+ li.pdf-summary) { border-bottom: 1px solid #ddd6c8; }
  /* The guides set `.charge-list strong{display:block;font-family:display;font-size:19px}`
     to make the item NAME a line of its own. A `<strong>` used for emphasis inside the
     half-sentence matches that same selector, so on who-decides-guide.html the words
     "cannot be cancelled or substantially changed by your survivors" broke onto their own
     line in 19px Cormorant, mid-sentence. Found by rasterising the PDF and reading it.
     Emphasis inside the description stays inline and stays in the body face. */
  [data-print-mode="family"] .charge-list span strong {
    display: inline; font-family: inherit; font-size: inherit; line-height: inherit;
    margin: 0; font-weight: 700;
  }

  /* ── 8f. CALLOUTS AND QUESTIONS ────────────────────────────────────────────────── */
  [data-print-mode="family"] .band { padding: 6px 14px; margin: 2px 0 3px; }
  [data-print-mode="family"] .band h3 { font-size: 13pt; margin: 0 0 3px; }
  [data-print-mode="family"] .note { padding: 12px 16px; margin: 8px 0 10px; }
  [data-print-mode="family"] .note h3 { font-size: 15pt; margin: 0 0 5px; }
  [data-print-mode="family"] .faq { border-top: 0; margin-top: 0; }
  [data-print-mode="family"] .faq summary { font-size: 12.5pt; padding: 2px 0 1px; }
  [data-print-mode="family"] .faq .answer { padding: 0 0 3px; }

  /* ── 8g. THE NEXT STEP ───────────────────────────────────────────────────────────
     Structure item 6, and rule 4: every family PDF ends with Martice's name, phone and
     email and an invitation to ask for a real quote. The guides' `.cta` is a screen
     component with buttons and is display:none in print, so the printed close is its own
     block. It carries `.pdf-summary`, which is what keeps it off the website and out of
     the full-length print. */
  [data-print-mode="family"] .fam-next {
    border-top: 3px solid #2c445e; margin-top: 4px; padding-top: 5px; break-inside: avoid;
  }
  [data-print-mode="family"] .fam-next h2 {
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 20px; font-weight: 600; color: #1e3a55; margin: 0 0 4px;
  }
  [data-print-mode="family"] .fam-next p { margin: 0 0 4px; max-width: none; }
  [data-print-mode="family"] .fam-next .fam-sign { margin: 0; }

  /* ── 8h. THE SECOND SECTION VOCABULARY  —  `.section-wrap` ───────────────────────
     §8b above is written against `.section` / `.section-label` / `.sub` / `.rule`, which
     is the vocabulary cemetery-property-guide.html and who-decides-guide.html use. Five of
     the other Tier-1 guides were drafted earlier and against a DIFFERENT set of class
     names for the identical components: `.section-wrap` / `.section-kicker` /
     `.section-sub` / `.section-rule`. Nothing about them differs but the spelling.

     This is not per-guide CSS and it is not a new design. It is §8b's own type and
     geometry restated for the second spelling, so that a guide adopting `?print=family`
     gets the same 10.5pt one-column document whichever vocabulary it happens to be
     written in. Without it those five guides keep the 8pt headings their own
     `/* PRINT CONDENSE */` blocks set, and the body type is the only thing that rises —
     which reads worse than either state on its own.

     The right long-term fix is one vocabulary across all nineteen guides. That is a rename
     touching every guide's screen CSS, so it is not done here; when it happens, this block
     is what gets deleted. */
  [data-print-mode="family"] .section-wrap { padding: 2px 0 1px; }
  [data-print-mode="family"] .section-wrap + .section-wrap { border-top: 0; }
  [data-print-mode="family"] .section-wrap h2 {
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 25px; font-weight: 600; color: #1e3a55; line-height: 1.15; margin: 0 0 2px;
  }
  [data-print-mode="family"] .section-sub { font-size: 10.5pt; font-style: italic; margin: 0 0 4px; }
  [data-print-mode="family"] .section-kicker { font-size: 8pt; letter-spacing: .14em; margin: 0 0 5px; }
  [data-print-mode="family"] .section-rule { display: none !important; }
  /* `.prose` is the paragraph wrapper in that vocabulary; the guides cap it at 70ch and
     in one printed column that leaves a ragged right margin an inch short of the page. */
  [data-print-mode="family"] .prose p { font-size: 10.5pt; line-height: 1.5; max-width: none; margin: 0 0 6px; }

  /* ── 8i. NAMED OVERRIDES ──────────────────────────────────────────────────────────
     Components that exist in only one or two guides and could not be expressed by §8b-h.
     Each one states which guide asked for it and why. Keep this list short: the rule is
     that a guide adopts `?print=family` with markup annotations and NO print CSS of its
     own, and every entry here is a small dent in that. */

  /* `.fam-photos` — a PDF-only row of photographs with captions. The debrief's structure
     item 3 is "the choices, as photographs", and cemetery-property could satisfy it with
     the `.pf-card` component it already had on screen. The guides that do not carry that
     component would need it copied into their screen CSS to borrow it, which is dead CSS
     on the website and a screen-diff risk for no gain. This is the component for that
     case: it lives inside a `.pdf-summary`, so it is print-only by construction and needs
     no screen styling at all.
     Used by: cremation-or-burial-guide.html (where cremated remains can go),
              pre-planning-guide.html (the single photograph the audit asked for). */
  [data-print-mode="family"] .fam-photos {
    display: grid !important; grid-template-columns: repeat(4, 1fr); gap: 7px;
    margin: 2px 0 8px; break-inside: avoid;
  }
  [data-print-mode="family"] .fam-photos figure { margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .fam-photos img {
    display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
    border-radius: 6px; border: 1px solid #e6e1d7;
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  [data-print-mode="family"] .fam-photos figcaption {
    font-family: 'Source Sans 3', sans-serif; font-size: 8pt; font-weight: 600;
    letter-spacing: .04em; color: #1e3a55; margin-top: 3px; line-height: 1.25;
  }
  /* One photograph on its own runs wide rather than sitting in a quarter-width column. */
  [data-print-mode="family"] .fam-photos.fam-photos-one { grid-template-columns: 1fr; }
  [data-print-mode="family"] .fam-photos.fam-photos-one img { aspect-ratio: 21 / 9; }
  [data-print-mode="family"] .fam-photos.fam-photos-three { grid-template-columns: repeat(3, 1fr); }

  /* `.compare` — cremation-or-burial-guide.html. Its comparison table IS the document
     (audit, Tier 1) and it is the one component on that guide's first page, so it cannot
     stay at the 8pt its condense block sets while everything around it goes to 10.5pt.
     The row header column is the widest thing in the table and wraps badly if left to
     auto; fixing it at 26% keeps the two answer columns even. */
  [data-print-mode="family"] .compare { font-size: 10.5pt; margin: 2px 0 6px; }
  [data-print-mode="family"] .compare th,
  [data-print-mode="family"] .compare td { padding: 6px 9px; }
  [data-print-mode="family"] .compare thead th { font-size: 13pt; }
  [data-print-mode="family"] .compare thead th:first-child { font-size: 8pt; width: 26%; }
  [data-print-mode="family"] .compare tbody th { font-size: 10.5pt; }

  /* `.plan-card` — cremation-guide.html and direct-cremation.html. The priced plan is the
     answer those two documents exist to give, so the figure and the plan name come up to
     the family scale with them. */
  [data-print-mode="family"] .plan-card { margin: 0 0 7px; break-inside: avoid; }
  [data-print-mode="family"] .plan-header h3 { font-size: 13.5pt; line-height: 1.15; }
  [data-print-mode="family"] .plan-desc { font-size: 10pt; line-height: 1.35; }
  [data-print-mode="family"] .plan-price { font-size: 17pt; }
  [data-print-mode="family"] .plan-price-label { font-size: 7.5pt; }
  [data-print-mode="family"] .plan-row { font-size: 10pt; padding: 3px 0; }
  [data-print-mode="family"] .plan-items { padding: 6px 14px; }
  [data-print-mode="family"] .plan-footer { font-size: 9.5pt; padding: 6px 14px; }
  /* `.direct-panel` — cremation-guide.html. It is now `break-inside:avoid` (§3b), which is
     right — it was severing container labels from their prices — but an unbreakable 380px
     block will jump a whole page rather than straddle, and it took the guide to three. The
     panel is screen furniture at print scale: a 48px display figure, 32px of padding and
     four option cells with room for two lines each. At family scale it is a quarter the
     height and still the loudest thing on the page, which is what it is for. */
  /* `.section-photo` — direct-cremation.html. A single product photograph, capped at
     420px on screen, printed 480px tall in the one-column family cut and took half of
     page 2 for a picture of a cardboard tray. Capped by HEIGHT here, because the width cap
     it carries inline says nothing about how tall a portrait image gets. */
  [data-print-mode="family"] .section-photo { max-width: 2.6in !important; margin: 2px auto 5px !important; }
  [data-print-mode="family"] .section-photo img { max-height: 1.7in; object-fit: contain; }
  [data-print-mode="family"] .direct-panel { padding: 10px 16px 12px; margin: 4px 0 6px; }
  [data-print-mode="family"] .direct-panel h3 { font-size: 16pt; margin: 0 0 2px; }
  [data-print-mode="family"] .direct-panel .desc { font-size: 10pt; line-height: 1.35; margin: 0 0 4px; }
  [data-print-mode="family"] .direct-starting { font-size: 7.5pt; margin: 0; }
  [data-print-mode="family"] .direct-price { font-size: 24pt; line-height: 1.05; margin: 0 0 5px; }
  [data-print-mode="family"] .direct-grid { gap: 6px; }
  [data-print-mode="family"] .direct-option { padding: 5px 9px; }
  [data-print-mode="family"] .direct-option .opt-label { font-size: 9.5pt; line-height: 1.3; }
  [data-print-mode="family"] .direct-option .opt-price { font-size: 12pt; margin-top: 1px; }

  /* `.decision-card` / `.step-card` / `.benefit-row` — pre-planning-guide.html. Its three
     grids are the guide, and §3b's widow control is all the shared sheet says about them. */
  [data-print-mode="family"] .decision-grid {
    display: grid !important; grid-template-columns: 1fr 1fr; gap: 7px; margin: 2px 0 7px;
  }
  [data-print-mode="family"] .decision-card { padding: 7px 11px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .decision-card h4 { font-size: 12.5pt; margin: 0 0 1px; }
  [data-print-mode="family"] .decision-card p { font-size: 10pt; line-height: 1.35; margin: 0; }
  [data-print-mode="family"] .step-grid {
    display: grid !important; grid-template-columns: repeat(3, 1fr); gap: 7px; margin: 2px 0 7px;
  }
  [data-print-mode="family"] .step-card { padding: 8px 11px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .step-card h3 { font-size: 12.5pt; margin: 2px 0 2px; }
  [data-print-mode="family"] .step-card p { font-size: 10pt; line-height: 1.35; margin: 0; }
  [data-print-mode="family"] .step-num { font-size: 13pt; }
  [data-print-mode="family"] .benefit-list { margin: 0; }
  [data-print-mode="family"] .benefit-row { padding: 3px 0; break-inside: avoid; }
  [data-print-mode="family"] .benefit-row h4 { font-size: 12pt; margin: 0 0 1px; }
  [data-print-mode="family"] .benefit-row p { font-size: 10pt; line-height: 1.35; margin: 0; }
  [data-print-mode="family"] .highlight-box { padding: 8px 13px; margin: 3px 0 6px; break-inside: avoid; }
  [data-print-mode="family"] .highlight-box h3 { font-size: 13pt; margin: 0 0 3px; }
  [data-print-mode="family"] .highlight-box p { font-size: 10pt; line-height: 1.4; margin: 0 0 4px; }

  /* `.option-card` / `.timeline-step` / `.checklist` — burial-guide.html. Same shape of
     need: the components that carry "what to do when a death occurs" and "burial vs.
     entombment", which are the two things that guide is kept for. */
  [data-print-mode="family"] .option-grid {
    display: grid !important; grid-template-columns: 1fr 1fr; gap: 8px; margin: 2px 0 7px;
  }
  [data-print-mode="family"] .option-card { padding: 8px 12px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .option-card h3 { font-size: 13.5pt; margin: 0 0 2px; }
  [data-print-mode="family"] .option-card p,
  [data-print-mode="family"] .option-card li { font-size: 10pt; line-height: 1.35; }
  [data-print-mode="family"] .timeline-step { padding: 3px 0 3px 26px; margin: 0 0 4px; break-inside: avoid; }
  [data-print-mode="family"] .timeline-step h4 { font-size: 12pt; margin: 0 0 1px; }
  [data-print-mode="family"] .timeline-step p { font-size: 10pt; line-height: 1.35; margin: 0; }
  [data-print-mode="family"] .check-card { padding: 6px 10px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .check-card h4 { font-size: 11.5pt; margin: 0 0 1px; }
  [data-print-mode="family"] .check-card p { font-size: 10pt; line-height: 1.3; margin: 0; }

  /* urn-gardens-guide.html is the one guide whose requirement is ONE page (audit, Tier 1;
     asserted at ==1 in verify_guide_pages.mjs since sprint-08). It held that page at 7.7pt
     in a two-column flow; at 10.5pt in one column the same content runs to 1.16 pages.
     Content was cut first and did most of the work — the four individual bronze-memorial
     rows, which sit under a group row that already states their full range. These are the
     last 74px, and they come out of padding and leading only. Nothing here touches a type
     size that carries prose: the floor is still 10.5pt body and 10pt for anything smaller. */
  [data-print-mode="family"] .plan-header { padding: 7px 14px 4px; }
  /* The plan cards' body copy sits at the 10pt floor rather than the 10.5pt body size.
     These are card sentences, which §8d already puts at 10pt for `.pf-card`; this is the
     same decision for the same kind of component in the other vocabulary. */
  [data-print-mode="family"] .plan-items p { font-size: 10pt; line-height: 1.4; margin: 0; }
  [data-print-mode="family"] .factband { padding: 6px 14px; margin: 0 0 5px; }
  [data-print-mode="family"] .factband .fact-key { font-size: 12pt; }
  [data-print-mode="family"] .factband .fact-body { font-size: 10pt; line-height: 1.35; }
  [data-print-mode="family"] .ways { gap: 7px; margin: 0 0 5px; }
  /* The three placement options as a list rather than three cards - see the note in
     urn-gardens-guide.html. Structure item 4: name, half a sentence, and the fee. */
  [data-print-mode="family"] .fam-ways p { font-size: 10pt; line-height: 1.35; margin: 0 0 3px; }
  [data-print-mode="family"] .fam-ways b { color: #1e3a55; font-weight: 700; }
  [data-print-mode="family"] .way { break-inside: avoid; }
  [data-print-mode="family"] .way h3 { font-size: 11.5pt; padding: 2px 10px; }
  [data-print-mode="family"] .way-body { padding: 5px 10px; }
  [data-print-mode="family"] .way-body p { font-size: 10pt; line-height: 1.35; margin: 0 0 3px; }
  [data-print-mode="family"] .way-fee { font-size: 9pt; }
  [data-print-mode="family"] .banner img { max-height: 0.72in; object-fit: cover; }
  [data-print-mode="family"] .banner figcaption,
  [data-print-mode="family"] .figure figcaption { font-size: 8.5pt; margin-top: 2px; }
  [data-print-mode="family"] .price-table caption { font-size: 8pt; padding: 0 0 2px; }
  [data-print-mode="family"] .price-table th,
  [data-print-mode="family"] .price-table td { padding: 2px 8px; font-size: 10pt; }
  [data-print-mode="family"] .price-table .size-note { font-size: 9pt; }
  [data-print-mode="family"] .footnote { font-size: 9pt; line-height: 1.35; margin: 3px 0 0; }
  /* The generated pricing invitation (scripts/guide-price-rule.mjs) carries the range for
     any card whose own chip is suppressed, so on this sheet it IS the price. It keeps its
     figure at full size and gives back its generous screen padding. */
  [data-print-mode="family"] .print-invite { padding: 4px 0 3px 12px; margin: 2px 0 4px; }
  [data-print-mode="family"] .print-invite p { font-size: 10pt; line-height: 1.35; margin: 2px 0 0; }

  /* `#columbariums` — urn-placement-guide.html. This is the one guide whose job is to put
     SIX settings beside each other on one page (docs/PDF_AUDIT.md, Tier 2: "One page of
     photo cards with ranges, one page of the comparison"), and §8d's two-up grid cannot
     do it: six 16:9 cards two abreast is three rows of about 3.4in, which with the
     masthead and the answer block is a page and a third, and `.pf-card` is
     break-inside:avoid so the overflow jumps a whole sheet. Measured: 3 pages, two of
     them ending halfway.
     Three abreast is 2.35in of photograph — a third of the page width, still a photograph
     a family can judge a place from and nowhere near the thumbnail §8d rules out. Scoped
     to the section by ID rather than applied to `.pf-grid`, because the ground-burial
     grid below it holds exactly two cards and looks like a gap-toothed row at three. */
  [data-print-mode="family"] #columbariums .pf-grid { grid-template-columns: repeat(3, 1fr); }
  /* `.compare-table` — urn-placement-guide.html, and the other half of that Tier-2 row:
     "one page of the comparison". The guide's own condense block sets its cells to 7pt
     and its headers to 6.5pt for the six-page budget; that table IS the second page of
     the condensed document, so it comes up to the floor with everything else. It stays
     `table-layout:fixed` and `min-width:0` — check C of verify_table_alignment.mjs, added
     2026-08-04 after this exact table lost its whole Scattering column off the print
     column edge, and that check must stay green. */
  [data-print-mode="family"] .compare-table td { font-size: 10pt; line-height: 1.3; padding: 4px 5px; }
  [data-print-mode="family"] .compare-table th { font-size: 9pt; padding: 4px 5px; }
  [data-print-mode="family"] #columbariums .pf-card h3 { font-size: 12pt; }
  [data-print-mode="family"] #columbariums .pf-range { font-size: 13pt; }

  /* `.figure` / `.figure-pair` / `.pf-photo` — the five per-area photo guides
     (sprint-16 Track D: roac, mvc-niches, ecl, gomn, terrace-garden).

     Those five cap a printed photograph by HEIGHT and let the width follow from the
     photograph's own proportions — `max-height` + `width:auto` + `max-width:100%`, and no
     `object-fit` anywhere. That is s13's "a BOX, not a crop", written after the operator
     said "the crops on the granite niches guide cut off a lot of the photos", and it is
     why nothing on these pages loses an edge. NONE OF THAT CHANGES HERE. The only thing
     this block does is make the box smaller: same formula, same width:auto, still no
     object-fit, so a portrait photograph is still tall, a landscape one still wide, and
     both are still whole.

     Their own caps — 4.6in for a lone figure, 3.3in for a pair — were chosen for an
     EIGHT-page document. A 4.6in photograph plus its caption is half a Letter page, and
     `.figure` and `.pf-card` are both break-inside:avoid, so a block that does not fit in
     what is left of a page jumps the whole sheet rather than straddling. Measured on the
     first condensed ROAC build at the eight-page caps: five pages, three of them ending
     40% down. Content was not the problem and cutting more of it would not have helped.

     1.9in against a 3.4in card column is 16:9 — which is exactly the photograph the
     debrief specified for a family PDF (§8d, "16:9, full column width, never a
     thumbnail"), reached by the no-crop formula instead of by an aspect-ratio box.

     KEYED ON `<body data-guide="area-photo">`, and it has to be. The `.pf-photo` rules
     here are the OPPOSITE of §8d's: §8d boxes the photograph 16:9 and every other guide's
     `.pf-photo img` is `width:100%;height:100%;object-fit:cover`, which needs that box.
     Applied unscoped, `width:auto` here would take the box away from a cover-cropped
     image and collapse the card photo on urn-placement-guide.html and every other guide
     using the standard component. The five area guides are the ones that declare
     `.pf-photo{aspect-ratio:auto!important}` and crop nothing, and they are the only ones
     this block is written for. Same keying convention as §7b above. */
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure img { max-height: 2.9in; }
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure-pair img { max-height: 1.9in; }
  html[data-print-mode="family"] body[data-guide="area-photo"] .pf-photo img {
    max-height: 1.9in; width: auto; max-width: 100%; margin: 0 auto;
  }
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure { margin: 0 0 7px; }
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure-pair { margin-bottom: 7px; }
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure-pair figcaption,
  html[data-print-mode="family"] body[data-guide="area-photo"] .figure figcaption { font-size: 8.5pt; }
  /* The area guides' inline-range span is a Cormorant figure inside body copy; at 10.5pt
     body it keeps the emphasis it has on screen rather than inheriting down. */
  html[data-print-mode="family"] body[data-guide="area-photo"] .inline-range { font-size: 1.08em; }
  /* `.size-card` / `.rule-list` / `.note-box` / `.fee-table-wrap` — outside-marker-rules.html.
     The audit's instruction for this one is unlike every other Tier-3 row: "Rules document,
     keep it complete, just legible." So nothing here selects content away. These are the
     four components that carry the fees, the five rules and the permitted sizes, restated
     at family scale so all of it fits at 10.5pt instead of 7.7pt in two columns.
     The size cards go two up: four of them down a single column is most of two pages, and
     the cards are short lists rather than prose. */
  [data-print-mode="family"] .size-grid {
    display: grid !important; grid-template-columns: 1fr 1fr; gap: 8px; margin: 2px 0 6px;
  }
  [data-print-mode="family"] .size-card { padding: 7px 11px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .size-card h3 { font-size: 12.5pt; margin-bottom: 1px; }
  [data-print-mode="family"] .size-card .card-tag { font-size: 7pt; margin-bottom: 4px; }
  [data-print-mode="family"] .size-card li { padding: 2px 0; font-size: 10pt; }
  [data-print-mode="family"] .rule-list { margin: 2px 0 6px; }
  [data-print-mode="family"] .rule-list li { padding: 3px 0; break-inside: avoid; }
  [data-print-mode="family"] .rule-list li > div { font-size: 10pt; line-height: 1.35; }
  [data-print-mode="family"] .rule-icon { width: 17px; height: 17px; font-size: 8pt; }
  [data-print-mode="family"] .note-box { padding: 8px 12px; margin: 4px 0 6px; font-size: 10pt; line-height: 1.45; }
  [data-print-mode="family"] .fee-table-wrap { margin: 2px 0 5px; }
  [data-print-mode="family"] .policy-box { padding: 9px 13px; margin: 3px 0 6px; }
  [data-print-mode="family"] .policy-box h3 { font-size: 13pt; margin: 0 0 3px; }
  /* `.tier-card` — vault-guide.html. The three protection levels are the decision that guide
     exists to help with, and their descriptions printed at 7.5pt inside a 10.5pt document:
     the guide sets them with `body:not(.modal-printing) .tier-card p`, which is (0,3,1) and
     outranks anything §8 says at (0,2,0). Matched here at (1,4,2) so the floor holds.
     That selector spelling is deliberate and is the same trick §3 used to use for this
     guide's masthead — it has to out-specify the page's own print block, not merely come
     later in the cascade. The full-length Ctrl+P print keeps the guide's 7.5pt, because
     none of this applies without the query. */
  html[data-print-mode="family"] body:not(.modal-printing) .tier-card p {
    font-size: 10pt; line-height: 1.35;
  }
  html[data-print-mode="family"] body:not(.modal-printing) .tier-card h3 {
    font-size: 12pt; margin-bottom: 2px;
  }
  /* `.vault-intro-text` / `.vault-intro-callout` — vault-guide.html. "What Is a Burial
     Vault?" is the first thing on the page and the paragraph that explains the whole
     product, and it printed at 8pt inside a 10.5pt document: the guide sets it with
     `body:not(.modal-printing) .vault-intro-text p`, (0,3,2), which outranks §8. Matched at
     (1,4,3) for the same reason as `.tier-card` above. */
  html[data-print-mode="family"] body:not(.modal-printing) .vault-intro-text p,
  html[data-print-mode="family"] body:not(.modal-printing) .vault-intro-callout p,
  html[data-print-mode="family"] body:not(.modal-printing) .section-header p {
    font-size: 10.5pt; line-height: 1.45; margin-bottom: 5px;
  }
  /* Its masthead subtitle too: §8b puts `.cover-sub` at 10.5pt for every guide, and this
     one's own print block pins it to 9pt at a specificity §8b cannot reach. Now that the
     masthead is the shared `.cover`, it should read like the shared one. */
  html[data-print-mode="family"] body:not(.modal-printing) .cover-sub {
    font-size: 10.5pt; line-height: 1.35;
  }
  /* `.note-plain` — markers-guide.html, the price-effective-date footnote. Third of the
     three inline font-sizes moved to classes on that guide. */
  [data-print-mode="family"] .note-plain { font-size: 10pt; line-height: 1.35; }

  /* `.note-inline` — markers-guide.html. The two small italic notes under its etching price
     tables, moved out of style attributes and into a class in the same change (see the note
     in that guide). They are whole sentences of prose, so they sit at the floor. */
  [data-print-mode="family"] .note-inline { font-size: 10pt; line-height: 1.35; }

  /* outside-marker-rules.html keeps 24px of HORIZONTAL padding on `.section-wrap` that §8h
     does not clear, so its body copy printed a quarter inch inside its own masthead and
     running footer — measured at padding-left/right 24px here against 0px on the Track-B
     guides. Written as longhands and scoped through `.doc-sheet` so it cannot be partially
     overridden by a shorthand the way §8h evidently is on this one guide. The masthead and
     the text below it line up on the same left edge, which is the whole of the intent. */
  [data-print-mode="family"] .doc-sheet .section-wrap {
    padding-left: 0; padding-right: 0;
  }

  /* ── 8k. GENERATED SECTION NUMBERS  —  the cross-cutting defect ──────────────────
     docs/PDF_AUDIT.md, first item of "cross-cutting defects to fix once": "Section numbers
     are hard-coded markup — generate them or remove them, or every selection leaves a gap."
     And the debrief, finding 5: with `?part=sizes` dropping sections 5-7, the printed PDF
     ran **1, 2, 3, 4, 8**.

     They are generated here, from a CSS counter, and the reason that works is the one
     property the markup could never have: an element with `display:none` generates no box
     and DOES NOT INCREMENT A COUNTER. So the numbering follows whatever the selection
     actually left on the page, without this rule — or any future rule — needing to know
     which half was dropped. Verified by printing a probe page and reading the numbers out
     of the PDF with PyMuPDF rather than off getComputedStyle, which only ever hands back
     the unresolved `counter()` expression and would have "confirmed" a rule that painted
     nothing.

     SCOPED TO `[data-print-part]`, deliberately. That attribute is set only when a `?part=`
     query selects a half of a two-PDF guide, which today is markers-guide.html alone and is
     the only place the gap can appear. It is NOT extended to `?print=family`: the family
     cut replaces "Section 4" with a descriptive label ("What else is on the quote") in the
     guides Tracks A and B converted, and generating a number over the top of that would
     undo their work.

     The original text is zeroed rather than deleted because it is real markup on the
     website — this sheet is media=print and the screen must keep reading "SECTION 5". */
  html[data-print-part] .doc-sheet { counter-reset: bw-section; }
  html[data-print-part] :is(.section-wrap, .section) { counter-increment: bw-section; }
  html[data-print-part] :is(.section-kicker, .section-label) {
    font-size: 0 !important; letter-spacing: 0 !important;
  }
  html[data-print-part] :is(.section-kicker, .section-label)::before {
    content: "SECTION " counter(bw-section);
    font-size: 8pt; letter-spacing: .14em;
  }

  /* ── 8l. NO TABLE OF CONTENTS IN A SELECTED DOCUMENT ─────────────────────────────
     Audit, cross-cutting item 2: "`.contents` (In This Guide) still prints in `?part=` mode
     on markers-guide.html. Confirm it is hidden in every mode."

     Seventeen of the nineteen guides already hide `.contents` in their own print block. The
     marker guide deliberately does not, and that was the right call for the FULL-LENGTH
     print at the time: Martice, 2026-07-27, hiding it left page 1 as a thin cover band over
     ~88% white space. That reasoning does not survive selection. In a `?part=` build the
     contents list eight sections of which the document contains three or four, so it is not
     merely dead weight — it advertises pages that are not in the file.

     Hidden for BOTH selection modes and left alone for the plain Ctrl+P print, which is the
     one the operator ruled on. */
  html[data-print-part] .contents,
  [data-print-mode="family"] .contents { display: none !important; }

  /* ── 8j. THE PROFESSIONAL REFERENCE  —  LEGIBILITY WITHOUT A FAMILY CUT ──────────
     medicaid-professional-reference.html is the one guide in the audit marked "do not
     condense" (Tier 3): its audience is case workers and elder law attorneys, and the
     WAC/RCW citations ARE the product. So it gets NO `?print=family` cut, no `data-pdf`
     annotations, and no `.pdf-summary` anywhere. It gets exactly the two things the audit
     asked for and nothing else: the type up to the 10.5pt floor, and the document-wide
     two-column flow off.

     Keyed on `body[data-guide=...]` rather than on the mode attribute, because there is no
     mode here — this guide has one printed form and this is it. That is also the only
     spelling that WINS: §7 above compensates the whole estate to 7.7pt, this sheet is
     linked AFTER the guide's own <style>, and the guide's own condense block sets
     `.section p{font-size:8pt}` with the same specificity as §7's `p`. An attribute
     selector on <body> beats all three without an !important, which is the same mechanism
     §7's own note records for the two eight-page photo guides.

     THE PAGE COUNT GOES UP, AND THAT IS THE POINT. 8pt in two columns is what bought the
     old three pages. The honest measured count at 10.5pt in one column is recorded in
     PER_GUIDE_CAPS in verify_guide_pages.mjs; it was NOT shrunk back to fit a number.
     Rule 1 of the debrief cuts CONTENT to hold a page budget, and this is the one document
     whose content may not be cut, so the budget is what moves. */
  body[data-guide="medicaid-professional-reference"] { font-size: 10.5pt; line-height: 1.5; }
  body[data-guide="medicaid-professional-reference"] .doc-sheet {
    column-count: 1 !important; column-gap: normal !important;
  }
  /* As §8b: cancelling the multicol is not enough on its own. This guide marks its wide
     tables, the masthead, the contact block and the disclaimer `column-span:all`, and a
     spanner in a one-column multicol still fragments the flow around itself and gives the
     pager extra places to break. With one column there is nothing to span. */
  body[data-guide="medicaid-professional-reference"] :is(.doc-sheet > *, .cover, .contents,
    .doc-footer, .cta, .compare, .section table, .contact, .disclaimer) {
    column-span: none !important;
  }
  body[data-guide="medicaid-professional-reference"] :is(.section p, .card p, .band p,
    .note p, .callout p, .faq .answer p, .contact-in p, p) {
    font-size: 10.5pt; line-height: 1.5; max-width: none;
  }
  /* Lists, table cells and the citation chips sit at the 10pt floor, as §8b sets for every
     other guide: the floor is a floor for prose whatever element it is written in. The
     citations are the reason this document exists, so `.cite` and `code` come up with the
     rest rather than staying at 7.5pt beside 10.5pt body copy. */
  body[data-guide="medicaid-professional-reference"] :is(.charge-list span, .itemlist span,
    .sources li, li) { font-size: 10pt; line-height: 1.4; }
  body[data-guide="medicaid-professional-reference"] :is(.charge-list strong,
    .itemlist strong) { font-size: 11pt; }
  body[data-guide="medicaid-professional-reference"] :is(.compare, .section table) { font-size: 10pt; }
  body[data-guide="medicaid-professional-reference"] :is(.compare th, .compare td,
    .section th, .section td) { padding: 5px 8px; font-size: 10pt; }
  body[data-guide="medicaid-professional-reference"] :is(.compare thead th,
    .section thead th) { font-size: 11.5pt; }
  body[data-guide="medicaid-professional-reference"] :is(.compare thead th:first-child,
    .section thead th:first-child) { font-size: 8pt; }
  body[data-guide="medicaid-professional-reference"] .cite { font-size: 9.5pt; }
  body[data-guide="medicaid-professional-reference"] .sources .url { font-size: 8.5pt; }
  body[data-guide="medicaid-professional-reference"] .disclaimer p { font-size: 9pt; line-height: 1.45; }
  body[data-guide="medicaid-professional-reference"] .audience { font-size: 8.5pt; }
  /* Headings scale with the body rather than staying at the condense block's 12.5pt, which
     would leave a section title barely larger than its own paragraphs. */
  body[data-guide="medicaid-professional-reference"] .section h2 { font-size: 19pt; margin: 0 0 3px; }
  body[data-guide="medicaid-professional-reference"] .section .sub { font-size: 10.5pt; margin: 0 0 6px; }
  body[data-guide="medicaid-professional-reference"] .section-label { font-size: 8pt; }
  body[data-guide="medicaid-professional-reference"] :is(.section .subhead, .subhead) { font-size: 13pt; }
  body[data-guide="medicaid-professional-reference"] :is(.card h3, .note h3,
    .callout h3, .band h3) { font-size: 13pt; }
  body[data-guide="medicaid-professional-reference"] .faq summary { font-size: 12pt; }
  body[data-guide="medicaid-professional-reference"] .section { padding: 6px 0 4px; }

  /* `.ladder` — who-decides-guide.html. The legal authority order is ONE list (audit,
     Tier 1) and it is the reason that guide is emailed, so it is the one component on its
     first page and gets the room. */
  [data-print-mode="family"] .ladder { margin: 2px 0 7px; }
  [data-print-mode="family"] .ladder li { padding: 4px 0 4px 34px; margin: 0; break-inside: avoid; }
  [data-print-mode="family"] .ladder li strong { font-size: 12pt; }
  [data-print-mode="family"] .ladder li span,
  [data-print-mode="family"] .ladder li p { font-size: 10pt; line-height: 1.35; }
}

/* ==============================================================================   9. THE FULL PRINT  —  no `?print=` mode at all   (sprint-19 Track E)

   Operator, 2026-08-06: "The PDF versions of files on the family resources are different
   from the HTMLs which was the point. But when I print inside the HTML I want it to be the
   same as the HTML, not some reduced version. Just make sure the margins fit the whole
   page."

   WHAT HE WAS ACTUALLY SEEING. Not the ?print=family cut — the guides.html cards link
   straight to the guide HTML, and viewer.html is reached from exactly one card (the
   General Price List, a static vendor PDF). Measured before touching anything, with
   Chromium print emulation on the served tree:

     burial-guide.html            plain Ctrl+P   2pp   15/15 data-pdf="drop" sections VISIBLE
                                                       body 10.27px   two columns
     burial-guide.html            ?print=family  2pp    0/15 drop, 8/8 .pdf-summary
                                                       body 14px      one column
     cemetery-property-guide.html plain Ctrl+P   4pp   42/42 drop VISIBLE, body 10.27px, 2 col

   So the plain print already carried the WHOLE document. What it did not carry was the
   document's own type: §7 compensates the entire estate down to 7.7pt (10.27px) for a
   six-page budget, each guide's own condense block takes prose to 8pt and flows the sheet
   in TWO columns, while the screen values are 15px body / 15px prose / 34px h2 in ONE
   column (measured across all 26 guide pages; the vocabulary in §9b is those
   measurements). Half the type and twice the columns is exactly "some reduced version".

   THE RULE THIS SECTION ADDS. Print has three modes now, and only one of them condenses
   anything a family can see:

     (none)            FULL — the document at its own screen type, one column. This is
                              Ctrl+P from an open guide, which is the operator's path.
     ?print=family     the condensed family cut (§8). Unchanged.
     ?print=compact    the 7.7pt six-page squeeze — i.e. exactly what "no mode" used to
                              mean. It exists so the three PDFs that are BUILT from the
                              uncondensed page keep printing the bytes they printed before:
                              Granite Niches Guide, Glass-Front Niche Guide and Medicaid
                              Professional Reference. Their jobs in
                              scripts/build_guide_pdfs.mjs now say so out loud instead of
                              relying on the absence of a query, which is what makes this
                              change a no-op for those three.

   Downloads therefore stay condensed — all 25 built PDFs now carry an explicit mode — and
   the difference between the download and the printed page survives, deliberately.

   WHAT IS NOT RESTORED, AND WHY. Each of these is a standing operator ruling, not a
   reduction, so "the same as the HTML" stops at the document body:

     - The masthead. Punch-list item 20, 2026-07-27: "the header ... should be a lot
       smaller. it is fine in html format but on print or pdf it takes too much of a page
       up." Capped by scripts/verify_print_header.mjs. Untouched here.
     - The pricing rule (§6). Operator 2026-08-01: ranges print, itemized prices do not.
     - Nav, table of contents and .doc-footer stay hidden; the running footer in the @page
       margin boxes carries the contact block on every sheet instead.
     - Page geometry (§1) is untouched, which is the "margins fit the whole page" half of
       the request: real 0.42/0.5/0.46in margins with the cream painted corner to corner by
       @page{background}. The horizontal 48px section gutter the SCREEN uses is deliberately
       NOT restored — on paper the @page margin IS that gutter, and adding it inside would
       put a second margin inside the first and narrow the column.
     - Card GRIDS stay stacked (the guides' own `.grid{display:block}`). One card per full
       column width is a paper adaptation, not a reduction; flagged as an open question.

   SIZES ARE IN PX ON PURPOSE, against this file's pt convention. The requirement is "the
   same as the HTML", the screen values are px, and 15px is 11.25pt — writing the measured
   number keeps the rule checkable against a screen probe rather than against a conversion.
   ===================================================================================== */

@media print {

  /* ── 9a. FLOW: one column, like the screen ─────────────────────────────────────
     The sheet-wide two-column flow is the most visible way the printed page stopped being
     the page. Same two rules §8b needs, for the same reason — and the column-span sweep is
     the s16 finding that a `column-span:all` surviving into a one-column flow strands
     empty pages at a break. */
  html:not([data-print-mode]) .doc-sheet {
    column-count: 1 !important; column-gap: normal !important;
  }
  html:not([data-print-mode]) * { column-span: none !important; }

  /* ── 9b. TYPE: the measured screen scale ──────────────────────────────────────
     Every value below is what the SCREEN computes, counted across all 26 guide pages
     (s19 Track E probe). No !important is needed except where §7 already used one:
     `html:not([data-print-mode]) .section p` is (0,2,2) and beats both §7's bare `p` and
     a guide's own `.section p` outright. */
  html:not([data-print-mode]) body { font-size: 15px; line-height: 1.6; }

  html:not([data-print-mode]) :is(p, .section p, .prose p, .section-wrap p) {
    font-size: 15px; line-height: 1.65; max-width: none;
  }
  html:not([data-print-mode]) :is(.band p, .note p, .faq .answer p, .policy-box p) {
    font-size: 14.5px; line-height: 1.6;
  }
  html:not([data-print-mode]) :is(.card p, .option-card p, .check-card p, .sidebar p) {
    font-size: 14px; line-height: 1.55;
  }
  /* li is the one bimodal measurement: 13.5px in twelve guides, 15px in seven. 14px sits
     between them rather than picking a side and making the other seven wrong. */
  html:not([data-print-mode]) :is(li, .prose li, .sidebar li) {
    font-size: 14px; line-height: 1.5;
  }

  html:not([data-print-mode]) :is(.section h2, .section-wrap h2) {
    font-size: 34px; line-height: 1.2;
  }
  html:not([data-print-mode]) :is(.section .sub, .section-sub) { font-size: 16px; line-height: 1.6; }
  /* A general h3 floor. The screen values across the estate are 22px x6, 21px x5, 20px x5,
     26px x5, 24px x1, 18px x1 — no single number is right for all of them, and the named
     component rules below carry the ones that are worth being exact about. 21px is the
     middle of that spread and keeps every h3 ranked above the 15px body, which is what a
     guide with a dozen bespoke card classes actually needs from this rule. */
  html:not([data-print-mode]) h3 { font-size: 21px; line-height: 1.35; }
  html:not([data-print-mode]) .subhead { font-size: 22px; line-height: 1.35; }
  html:not([data-print-mode]) .section-label { font-size: 15px; }
  html:not([data-print-mode]) .section-kicker { font-size: 11px; }
  html:not([data-print-mode]) :is(.card h3, .band h3, .note h3) { font-size: 22px; line-height: 1.35; }
  html:not([data-print-mode]) .faq summary { font-size: 21px; line-height: 1.6; }
  html:not([data-print-mode]) .charge-list strong { font-size: 19px; line-height: 1.25; }
  html:not([data-print-mode]) .charge-list span { font-size: 14px; line-height: 1.5; }
  html:not([data-print-mode]) :is(.compare td, .compare th) { font-size: 14px; }
  html:not([data-print-mode]) :is(.price-table td, .price-table th) { font-size: 13.5px; }

  /* The photo-first card at its screen scale. The print half of the component (§3b) keeps
     its stacked price and 16:9 crop — those are paper adaptations, not reductions. */
  html:not([data-print-mode]) .pf-card h3 { font-size: 21px; line-height: 1.35; }
  html:not([data-print-mode]) .pf-card p { font-size: 13.5px; line-height: 1.55; }
  html:not([data-print-mode]) .pf-range { font-size: 20px; }
  html:not([data-print-mode]) .pf-ask .pf-range { font-size: 14px; }

  /* §7 uses !important here to beat an inline `style="font-size:14px"` on a bare
     paragraph. Beating an !important needs an !important; the value restored is the
     inline one those six paragraphs were written with. */
  html:not([data-print-mode]) .section-wrap > p[style*="font-size"] {
    font-size: 15px !important; line-height: 1.65 !important;
  }

  /* ── 9c. THE BOXES GET THEIR ROOM BACK ────────────────────────────────────────
     Restored type inside condense-block padding reads as cramped, which is its own kind of
     "not the HTML". Screen values, except the SECTION gutter: the screen's 48px/40px is
     vertical air for a continuous scroll, and on paper the page break and the section rule
     already separate sections, so it is taken at half. Sections keep zero horizontal
     padding — see the note above about the @page margin being the gutter. */
  html:not([data-print-mode]) :is(.section, .section-wrap) { padding: 24px 0 20px; }
  html:not([data-print-mode]) .card { padding: 22px 22px 20px; margin-bottom: 14px; }
  html:not([data-print-mode]) .band { padding: 26px 30px; margin: 18px 0 10px; }
  html:not([data-print-mode]) .note { padding: 22px 26px; margin: 18px 0 10px; }
  html:not([data-print-mode]) .sidebar { padding: 24px 22px; margin-bottom: 18px; }
  html:not([data-print-mode]) :is(.policy-box, .highlight-box) { padding: 28px 30px; margin-bottom: 20px; }

  /* ── 9d. NO INVERTED HEADINGS ─────────────────────────────────────────────────
     Restoring body type without restoring the headings BESIDE it is its own defect: a
     heading that outranks its paragraph on screen must not print smaller than it. An
     inversion probe over all 25 guide pages (screen rank vs full-print rank, every
     heading against its nearest sibling paragraph) found exactly two shapes, and these
     are they — everything else the vocabulary above already carries.

     Every one of them is the same shape wearing five different class names — a step or
     timeline block whose heading is body-sized bold (13.5-14.5px) over a 12.5-13.5px
     paragraph. §9b's generic 15px paragraph outranked the heading and turned the pair
     upside down. The rule is written STRUCTURALLY rather than by class, because that is
     what the five have in common and because a sixth component with the same shape should
     be covered the day it lands: a paragraph that is a SIBLING OF AN h4 is component text,
     not body prose, so it keeps its own scale. */
  html:not([data-print-mode]) h4 { font-size: 14.5px; line-height: 1.35; }
  /* `!important`, and not for emphasis. `:is()` takes the specificity of its MOST specific
     argument, so §9b's `:is(p, .section p, …)` is (0,2,2) for EVERY branch including the
     bare `p` — while this structural selector is only (0,1,3). Written without the
     `!important` the rule silently lost and the probe still reported the inversion, which
     is how the trap was found rather than reasoned about. */
  html:not([data-print-mode]) :is(h4 + p, h4 ~ p) {
    font-size: 13px !important; line-height: 1.5 !important;
  }
  html:not([data-print-mode]) :is(.policy-box h3, .highlight-box h3) { font-size: 20px; line-height: 1.35; }
}
