/* ──────────────────────────────────────────────────────────────────────────
   handyman-print.css — BLOCK-157 T2e. The fridge card, printed from handyman.html.

   Source: /root/bp-block149-20260913T0642Z/ops/fridge-card-spec.md §5, the @media print
   block, verbatim where this page's DOM is the card's DOM. Every difference is named here:

   D1  The spec hides "[id^=t1-], [id^=t2-], #triage-route-fallback" (the outcome page and the
       share route's shell). This page has neither; instead it hides its own chrome: every
       child of .hm-wrap that is not #print-sheet (the promise, YOUR DETAILS, THE PHOTO, PRINT,
       YOUR DOOR LINK, WHAT IT DOES NOT DO, the page footer). The spec's own selector list is
       kept as written so a card element the spec hides is still hidden here.
   D2  .tc-print-footer is a SIBLING of the card inside #print-sheet, not a child of .tc-card,
       because the card's markup is rendered by triage-card.js and this page never copies it.
       The line is verbatim from emails/day1.html. On screen it is display:none (the page footer
       carries the line there); in print it shows and the page footer is hidden — one copy per
       medium.
   D3  #signature-slot keeps the spec's 12 mm strip while EMPTY (min-height:12mm; :empty {
       visibility:hidden } kept exactly, so a card with no name keeps the space and prints
       nothing in it) and takes its content's height when it holds the handyman's name, business
       and phone (one line at 8.5 pt, "name · business · phone", wrapping if long) — never
       height:12mm, which would clip.
   D4  .tc-versions is display:none in print. The spec's CSS styled it at 6.5pt mono, but the
       spec's §2 rule "Not on it: a model or config name" and BRAND V5 (engine terms only in the
       trace and JSON) outrank a size rule — the version stamp IS the config id and the model
       name, so it does not go on paper.
   D5  The dark page ground (#08090A) and the panel wrappers are reset to white/none in print;
       the spec's html,body rule already does the ground, the wrappers are this page's own.
   D6  The Letter fallback with crop marks (spec §7) is NOT built here. @page is 4in 6in; a
       printer that only has Letter prints the browser's own placement. Filed as a follow-on.
   D7  MEASURED 13 Sep 2026 (qa/handyman: print media, 346 x 538 px content box = 4 x 6 in minus
       the 5 mm margins at 96 dpi): the spec's sizes as written stacked to 701 px on a TODAY /
       plumber card and 690 px on an EMERGENCY card with both hazard lines — two pages. The
       spec's own grid already puts the link BESIDE the 25 mm QR (grid-template-columns: 25mm 1fr).
       So the card itself becomes that grid in print (grid-auto-flow: row dense — Chromium's
       sparse placement bumped the QR a row down and left an empty cell, measured): every child
       spans both columns except HOW SURE THIS IS, which sits in column 2 beside the QR in
       column 1; the link and the signature strip then run full width under them, so the strip
       is at the foot, full width, exactly where §2 draws it. Same zones, same order top to
       bottom, one page. The QR stays 25 mm, black on white. HOW SURE's band word and its
       sentence flow on one line joined by the em dash BRAND §3.4 writes ("Single read — the
       photo was read once…") instead of a word above a pill.
   D8  In print, WHAT IT IS prints the asset name only, one line, ellipsis — spec §2 "one line,
       ellipsis at 60 chars". The card's on-screen sub-line ("In the photo: …"), the engine's
       prose answers (.tc-prose) and the long plain-state paragraph (.tc-plain) are hidden on
       paper; the say-this line and the tier gloss carry the state. The hazard box and the
       criterion-1 line (.tc-hazard) are kept: they are the engine lines a fridge needs. The
       first row is selected as ".tc-row:not(.tc-row ~ .tc-row)" (no .tc-row before it), because
       production's card puts its config-fallback notice between .tc-head and the first row
       (measured 13 Sep: config_source.fallback_used = true, candidates_file_absent).
   D13 The card's own warning line (.tc-failed inside a rendered card — today the loud
       config-fallback notice "Treat it as a preview, not as a result") STAYS on paper: a card
       from a fallback config must not read like one from a measured config (BRAND V7). It
       prints as 6.5 pt text without its screen box.
   D9  HOW SURE THIS IS prints the band word and the caveat, not the legacy numeric range pill
       (.tc-band-range "stated in the 0.90-1.00 band" on a card with no agreement object) — spec
       §2 "never a number" and BRAND §3.4. On a card WITH an agreement object (#tcAgreement, what
       the door serves) the range is a sentence in words and stays. The empty plain-state row
       (.tc-row holding only .tc-plain) is hidden with its paragraph.
   D10 Row padding 1pt (spec 6pt), say-this line-height 1.2 with its UA <p> margin removed
       (spec 1.5, here 1.2), labels 7pt/1.0, caveat 7pt/1.3, hazard lines 8pt/1.2 printed as red-ink text
       without the screen box (border, padding and fill dropped — the words carry it, and on a
       mono printer the box was a grey block), the URGENCY label on the same line as the tier
       chip, column gap 2mm (spec 4mm), row padding 1pt. Sizes never go below the spec's floor
       (8 pt body, 10 pt say-this, 6.5 pt mono link and footer; the 7 pt label and caveat sizes
       are the spec's own label size). Measured on the EMERGENCY card with both hazard lines,
       the six-line landlord say-this, the FAST agreement block and the fallback notice: the
       tallest card the templates and production together can produce.
   D11 The spec's ".tc-row:first-of-type { border-top: 0 }" never matches (the card's first div
       is .tc-head, and :first-of-type counts element type), so here it is the first .tc-row by
       ".tc-row:not(.tc-row ~ .tc-row)" (see D8 for why not ".tc-head + .tc-row").
   D12 The signature rules carry #print-sheet so they outrank the page's inline screen styles,
       which are later in source order and would otherwise win at equal specificity.
   Not a difference: the QR is black on white, never recoloured; fonts are the system stacks;
   the say-this line is 10pt and the largest running text on the card.
   ────────────────────────────────────────────────────────────────────────── */
@page { size: 4in 6in; margin: 5mm; }
@media print {
  html, body { background: #fff !important; color: #101828; }
  /* D1: this page's own chrome */
  body.hm .hm-wrap { max-width: none; margin: 0; padding: 0; }
  body.hm .hm-wrap > *:not(#print-sheet) { display: none !important; }
  body.hm #print-sheet { display: block !important; margin: 0; padding: 0; background: #fff; border: 0; }
  body.hm #handymanCardMount { display: block; }
  /* the spec's hide list, as written */
  .tc-capture:not(.tc-share), .tc-btn, .tc-roles, .tc-actions, .tc-field, .tc-input, .tc-consent, .tc-status,
  .tc-deferred, [id^="t1-"], [id^="t2-"], #triage-route-fallback { display: none !important; }
  /* D4, D8, D9 */
  .tc-versions, .tc-prose, .tc-plain, .tc-row:has(> .tc-plain), .tc-card > .tc-row:not(.tc-row ~ .tc-row) .tc-sub,
  .tc-row:not(#tcAgreement) .tc-band-range { display: none !important; }
  /* D13, extended in fix round 1 (R5): every notice the card can put above its rows — the config-fallback line,
     the rubric-mismatch line (both .tc-failed) and main's unsettled notice (.tc-unsettled, BLOCK-149) — prints as
     6.5 pt text without its screen box. Before this rule .tc-unsettled printed its 13.5 px screen panel (95 px). */
  #print-sheet .tc-card > .tc-failed, #print-sheet .tc-card > .tc-unsettled { font-size: 6.5pt; line-height: 1.15; margin: 0 0 1.5pt; padding: 0; border: 0; background: none; border-radius: 0; color: #93370D; }

  /* D7: the card is the grid */
  #print-sheet .tc-card { display: grid; grid-template-columns: 25mm 1fr; grid-auto-flow: row dense; column-gap: 2mm; row-gap: 0; align-items: start;
             max-width: none; width: 100%; margin: 0; border: 0; border-radius: 0; box-shadow: none; padding: 0;
             break-inside: avoid; font-size: 9pt; line-height: 1.35; background: #fff; color: #101828; }
  #print-sheet .tc-card > * { grid-column: 1 / -1; }
  .tc-head { margin-bottom: 1pt; }
  .tc-eyebrow { font-size: 8pt; letter-spacing: .09em; }
  .tc-tier { font-size: 12pt; font-weight: 900; letter-spacing: .04em; padding: 2pt 7pt; border-width: 1.5px; }
  .tc-label { font-size: 7pt; line-height: 1.0; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; color: #667085; margin-bottom: 0; }
  .tc-row:has(> .tc-tier) .tc-label { display: inline-block; vertical-align: middle; margin-right: 4pt; }
  .tc-row:has(> .tc-tier) .tc-tier { vertical-align: middle; }
  .tc-value { font-size: 11pt; line-height: 1.2; font-weight: 800; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .tc-sub { font-size: 8pt; line-height: 1.25; margin-top: 1pt; }
  .tc-hazard { font-size: 8pt; line-height: 1.2; margin-top: 1.5pt; padding: 0; border: 0; background: none; border-radius: 0; }
  .tc-say { font-size: 10pt; line-height: 1.2; margin: 1.5pt 0 0; padding: 2pt 4pt; border-radius: 4pt; }
  .tc-band { display: block; }
  .tc-band-word { font-size: 9pt; }
  #tcAgreement .tc-band-word::after { content: ' \2014 '; font-weight: 400; }                 /* the em dash of BRAND §3.4 */
  #tcAgreement .tc-band-range { display: inline; font-size: 7pt; line-height: 1.3; padding: 0; border: 0; background: none; border-radius: 0; }   /* words, not a pill (D9) */
  .tc-band-caveat { font-size: 7pt; line-height: 1.3; margin-top: 1pt; }
  .tc-row { padding: 1pt 0; border-top: 1px solid #e4e6ea; }
  .tc-card > .tc-row:not(.tc-row ~ .tc-row) { border-top: 0; }        /* D11 */
  /* HOW SURE THIS IS moves beside the QR: it is the row that precedes the actions / share block */
  #print-sheet .tc-card > .tc-row:has(+ .tc-actions), #print-sheet .tc-card > .tc-row:has(+ .tc-share) { grid-column: 2; }
  /* the share block dissolves into the grid: QR left across two rows, the link under HOW SURE */
  .tc-share { display: contents; }
  .tc-share .tc-capture-title { display: none; }
  .tc-share-body { display: contents; }
  #print-sheet .tc-qr { grid-column: 1; grid-row: span 1; width: 25mm; max-width: none; margin-top: 3pt; border: 0; padding: 0; border-radius: 0; }
  .tc-qr svg { width: 25mm; height: 25mm; }                     /* black on white: never recolour the modules */
  #print-sheet .tc-share-link { grid-column: 1 / -1; display: block; margin-top: 2pt; padding-top: 2pt; border-top: 1px solid #e4e6ea; min-width: 0; }
  .tc-link, .tc-versions { font-family: "SF Mono", "Cascadia Code", Consolas, "Roboto Mono", ui-monospace, monospace;
                           font-size: 6.5pt; word-break: break-all; color: #344054; margin: 0; }
  /* D3, D12: the strip at the foot */
  #print-sheet #signature-slot { grid-column: 1 / -1; display: block; margin-top: 0.5mm; padding-top: 1pt; border-top: 1px solid #e4e6ea; }
  #print-sheet #signature-slot:empty { visibility: hidden; min-height: 12mm; }              /* keeps the 12 mm space, shows nothing */
  /* D14 (fix round 1, R5): the signature is ONE line on paper. The phone never shrinks; the business shrinks first
     (flex-shrink 100), then the name, each with an ellipsis. Three lines of the longest inputs (60/60/24) were 49 px. */
  #print-sheet .hm-sig { display: flex; align-items: baseline; min-width: 0; overflow: hidden; white-space: nowrap;
                         margin-top: 0; padding-top: 0; border-top: 0; font-size: 8.5pt; line-height: 1.3; color: #101828; }
  #print-sheet .hm-sig > span { white-space: pre; }
  #print-sheet .hm-sig-name { flex: 0 1 auto; min-width: 3em; overflow: hidden; text-overflow: ellipsis; font-weight: 800; }
  #print-sheet .hm-sig-biz { flex: 0 100 auto; min-width: 2.5em; overflow: hidden; text-overflow: ellipsis; }
  #print-sheet .hm-sig-sep, #print-sheet .hm-sig-phone { flex: 0 0 auto; }
  #print-sheet .hm-sig-phone { font-family: "SF Mono", "Cascadia Code", Consolas, "Roboto Mono", ui-monospace, monospace; font-variant-numeric: tabular-nums; }
  /* D15 (fix round 1, R5): the labels run in. WHAT IT IS, URGENCY, WHICH TRADE and HOW SURE float left of their
     first line instead of taking a line of their own; the say-this label keeps its line (its box would run under a
     float). Line heights on the long text come down to 1.15; no size goes below D10's floors. */
  #print-sheet .tc-card > .tc-row > .tc-label { float: left; margin: 1pt 4pt 0 0; }
  #print-sheet .tc-card > .tc-row > #tcSayLabel { float: none; margin: 0; }
  #print-sheet .tc-card { line-height: 1.25; }
  #print-sheet .tc-card > .tc-row { padding: 0.75pt 0; }
  #print-sheet .tc-hazard { line-height: 1.15; }
  #print-sheet .tc-band { line-height: 1.15; }
  #print-sheet .tc-band-caveat { line-height: 1.15; }
  #print-sheet .tc-say { line-height: 1.15; padding: 1.5pt 4pt; }
  #print-sheet .tc-sub { line-height: 1.15; }
  #print-sheet .tc-value { line-height: 1.1; }
  #print-sheet .tc-tier { padding: 0.5pt 6pt; }
  /* D16 (fix round 2, F2): no card on the page, no card on paper. Until handyman.js marks body.hm-has-card (a card that
     rendered), the sheet prints ONE line saying where the card comes from, never the card's failure panel. */
  body.hm:not(.hm-has-card) #print-sheet > :not(.hm-print-empty) { display: none !important; }
  body.hm:not(.hm-has-card) #print-sheet > .hm-print-empty { display: block !important; margin: 0; font-size: 11pt; line-height: 1.3; color: #101828; }
  body.hm.hm-has-card #print-sheet > .hm-print-empty { display: none !important; }
  /* D2 */
  .tc-print-footer { display: block !important; font-size: 6.5pt; color: #667085; margin-top: 0.75mm; line-height: 1.15; }
  a { color: inherit; text-decoration: none; }
  a[href]::after { content: none; }                                    /* no browser-added URLs */
  * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }  /* tier chip background survives */
}
