/* ============================================================================
   THE SHEET SET — the silo design language.  Approved Rev B, 2026-08-18.

   Every section of a silo page is a drawing SHEET: a title block, a text column
   set to a readable measure, and a companion rail beside it. The site already
   printed "SHT 05 · PLOTTERPRINTERS ANALYST DESK" above each band — a sheet
   number and title block, the most familiar object in the working life of the
   architects and engineers we sell to. This makes that device the system.

   Ground is drafting film, not white and not cream: a white sheet only reads as
   a sheet against something. One accent (drafting indigo) carries the page; the
   four category tints are deep and desaturated so they classify without
   shouting. Precision does the work colour used to — hairline rules, tabular
   figures, letterspaced micro-labels, a 2px radius.

   This file styles the markup the 41 silo pages ALREADY emit. It adds no
   classes of its own to existing content, so it can be enabled or reverted
   wholesale without touching a single page's HTML.
   ========================================================================== */

:root {
  --ss-film:#EDF0F4; --ss-sheet:#FFFFFF; --ss-sheet-2:#F7F9FB;
  --ss-ink:#0E1622; --ss-ink-soft:#3E4A5C; --ss-muted:#778394;
  --ss-rule:#C3CEDC; --ss-rule-soft:#DFE6EF;
  --ss-accent:#1B3A8C; --ss-keynote:#8A5A12;
  --ss-a:#1B3A8C; --ss-b:#0E6B62; --ss-c:#6B4FA8; --ss-d:#A8532B;
  --ss-frame:1200px; --ss-col:38rem; --ss-rail:20rem;
  --ss-disp:var(--wp--preset--font-family--display);
  --ss-body:var(--wp--preset--font-family--body);
  --ss-mono:var(--wp--preset--font-family--mono);
}

/* --- the page ground ---------------------------------------------------- */
body.page-template-page-silo { background:var(--ss-film); color:var(--ss-ink); }
body.page-template-page-silo .entry-content { font-family:var(--ss-body); }

/* --- the sheet ----------------------------------------------------------- */
.page-template-page-silo .pp-sb {
  padding-block:clamp(2.6rem,6vw,4.6rem);
  padding-inline:clamp(1.1rem,5vw,3.5rem);
  background:var(--ss-film);
}
.page-template-page-silo .pp-sb--tint { background:var(--ss-sheet); }
.page-template-page-silo .pp-sb > .pp-sb-in { max-width:var(--ss-frame); margin-inline:auto; }

/* Navy bands become sheets too — the ground stays light everywhere, which was
   the whole point of Rev B. Takeaways keep their emphasis through the rule and
   the numbering, not through an inverted background. */
.page-template-page-silo .pp-sb--navy,
.page-template-page-silo .pp-silo-takeaways { background:var(--ss-sheet); color:var(--ss-ink); }
.page-template-page-silo .pp-sb--navy h2 { color:var(--ss-ink); }

/* --- title block --------------------------------------------------------- */
/* The markup order inside .pp-tb varies (h2 first on some bands, the sheet
   number first on others), so this uses flex + order rather than a grid keyed to
   position: the label always sits ABOVE the title, both flush left, whatever
   order the band emitted. */
.page-template-page-silo .pp-tb {
  display:flex; flex-wrap:wrap; align-items:baseline; gap:0;
  border-bottom:1px solid var(--ss-ink); padding-bottom:.55rem; margin-bottom:2rem;
}
.page-template-page-silo .pp-tb > * { flex-basis:100%; }
.page-template-page-silo .pp-tb .pp-tb-no { order:-1; margin-bottom:.55rem; }
.page-template-page-silo .pp-tb::after { content:none; }   /* the old double rule */
.page-template-page-silo .pp-tb h2 {
  font-family:var(--ss-disp); font-weight:500; text-transform:uppercase;
  font-size:clamp(1.5rem,1.1rem+1.5vw,2.15rem); line-height:1; letter-spacing:.005em;
  color:var(--ss-ink); margin:0;
}
.page-template-page-silo .pp-tb-no {
  font-family:var(--ss-mono); font-size:.6rem; font-weight:500; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ss-muted); white-space:normal;
}

/* --- the two-column body ------------------------------------------------- */
@media (min-width:900px) {
  /* A band that carries a figure, a callout or buyer cards becomes text +
     companion rail. Bands that carry a full-width rail or grid are left alone. */
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack),
  .page-template-page-silo .pp-sb-in:has(> .pp-cal),
  .page-template-page-silo .pp-sb-in:has(> .pp-companion) {
    display:grid;
    grid-template-columns:minmax(0,var(--ss-col)) minmax(0,var(--ss-rail));
    gap:clamp(1.6rem,5vw,4rem); align-items:start;
  }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-tb,
  .page-template-page-silo .pp-sb-in:has(> .pp-cal) > .pp-tb,
  .page-template-page-silo .pp-sb-in:has(> .pp-companion) > .pp-tb,
  .page-template-page-silo .pp-sb-in > .pp-byline { grid-column:1 / -1; }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-prose,
  .page-template-page-silo .pp-sb-in:has(> .pp-cal) > .pp-prose,
  .page-template-page-silo .pp-sb-in:has(> .pp-companion) > .pp-prose {
    grid-column:1; max-width:none;
  }
  .page-template-page-silo .pp-sb-in > .pp-figstack,
  .page-template-page-silo .pp-sb-in > .pp-cal,
  .page-template-page-silo .pp-sb-in > .pp-companion { grid-column:2; }
}

/* --- prose --------------------------------------------------------------- */
.page-template-page-silo .pp-prose { max-width:38rem; }
.page-template-page-silo .pp-prose p {
  margin:0 0 1.05rem; color:var(--ss-ink-soft); max-width:66ch; line-height:1.62;
}
.page-template-page-silo .pp-prose > p:first-of-type {
  font-size:1.1rem; line-height:1.55; color:var(--ss-ink); font-weight:300;
}
.page-template-page-silo .pp-prose strong { color:var(--ss-ink); font-weight:600; }
.page-template-page-silo .pp-prose a {
  color:var(--ss-accent); text-underline-offset:.2em; text-decoration-thickness:1px;
}
/* run-in definitions ("Best for CAD, 36-inch class. …") read as a list */
.page-template-page-silo .pp-prose p > strong:first-child {
  display:block; margin-bottom:.15rem; font-family:var(--ss-body); font-size:.96em;
}
.page-template-page-silo .pp-prose p:has(> strong:first-child) {
  border-left:1px solid var(--ss-rule); padding-left:1.1rem;
}

/* --- companion rail ------------------------------------------------------ */
.page-template-page-silo .pp-companion { position:sticky; top:1.5rem; border-top:1px solid var(--ss-ink); }
.pp-comp-h {
  display:flex; justify-content:space-between; gap:.6rem; padding:.6rem 0;
  border-bottom:1px solid var(--ss-rule-soft);
  font-family:var(--ss-mono); font-size:.6rem; font-weight:500; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ss-muted);
}
.pp-sched { width:100%; border-collapse:collapse; font-size:.85rem; }
.pp-sched td { padding:.55rem 0; border-bottom:1px solid var(--ss-rule-soft); color:var(--ss-ink-soft); }
.pp-sched td:last-child {
  font-family:var(--ss-mono); text-align:right; color:var(--ss-ink);
  font-variant-numeric:tabular-nums;
}
.pp-keyfig div {
  display:flex; align-items:baseline; justify-content:space-between; gap:.6rem;
  padding:.55rem 0; border-bottom:1px solid var(--ss-rule-soft);
}
.pp-keyfig b {
  font-family:var(--ss-mono); font-size:1.2rem; font-weight:500; color:var(--ss-accent);
  font-variant-numeric:tabular-nums;
}
.pp-keyfig span { font-size:.84rem; color:var(--ss-ink-soft); }
.pp-complinks a {
  display:block; padding:.55rem 0; border-bottom:1px solid var(--ss-rule-soft);
  color:var(--ss-ink); text-decoration:none; font-size:.87rem;
}
.pp-complinks a::after { content:"→"; float:right; color:var(--ss-accent); }
.pp-complinks a:hover { color:var(--ss-accent); }
.page-template-page-silo .pp-figstack figure { margin:0; }
.page-template-page-silo .pp-figstack img {
  width:100%; height:auto; display:block; border:1px solid var(--ss-rule);
}

/* --- keynote (the callout) ----------------------------------------------- */
.page-template-page-silo .pp-cal, .pp-keynote {
  border:0; border-left:2px solid var(--ss-keynote); background:none;
  padding:.2rem 0 .2rem 1.1rem; margin:1.6rem 0; max-width:66ch; border-radius:0;
}
.page-template-page-silo .pp-cal-h, .pp-keynote b {
  display:block; font-family:var(--ss-mono); font-size:.6rem; font-weight:500;
  letter-spacing:.18em; text-transform:uppercase; color:var(--ss-keynote); margin-bottom:.35rem;
}
.pp-keynote p { margin:0; font-size:.94rem; color:var(--ss-ink-soft); }

/* --- class cards (detail callouts) --------------------------------------- */
.page-template-page-silo .pp-buyers {
  display:grid; gap:1px; grid-template-columns:repeat(auto-fit,minmax(215px,1fr));
  margin-top:2rem; background:var(--ss-rule); border:1px solid var(--ss-rule);
}
.page-template-page-silo .pp-buyer {
  background:var(--ss-sheet); padding:1.15rem 1.1rem 1rem; position:relative;
  border:0; border-radius:0; box-shadow:none;
}
.page-template-page-silo .pp-buyer::before {
  content:""; position:absolute; left:0; right:0; top:0; height:2px; background:var(--ss-ac,var(--ss-a));
}
.page-template-page-silo .pp-buyers .pp-buyer:nth-child(1){--ss-ac:var(--ss-a);}
.page-template-page-silo .pp-buyers .pp-buyer:nth-child(2){--ss-ac:var(--ss-b);}
.page-template-page-silo .pp-buyers .pp-buyer:nth-child(3){--ss-ac:var(--ss-c);}
.page-template-page-silo .pp-buyers .pp-buyer:nth-child(4){--ss-ac:var(--ss-d);}
.page-template-page-silo .pp-buyer-chip {
  display:inline-block; background:none; padding:0; border-radius:0;
  font-family:var(--ss-mono); font-size:.58rem; font-weight:500; letter-spacing:.18em;
  text-transform:uppercase; color:var(--ss-ac);
}
.page-template-page-silo .pp-buyer h3 {
  font-family:var(--ss-body); font-size:1rem; font-weight:600; margin:.5rem 0 .35rem;
  text-transform:none; color:var(--ss-ink);
}
.page-template-page-silo .pp-buyer p { margin:0; font-size:.85rem; color:var(--ss-ink-soft); line-height:1.5; }

/* --- product rails ------------------------------------------------------- */
.page-template-page-silo .pp-pgrid-card {
  border:1px solid var(--ss-rule); border-radius:2px; background:var(--ss-sheet);
  box-shadow:none; transition:border-color .15s ease;
}
.page-template-page-silo .pp-pgrid-card:hover { border-color:var(--ss-accent); transform:none; }
.page-template-page-silo .pp-pgrid-name { font-family:var(--ss-body); font-weight:600; }
.page-template-page-silo .pp-pgrid-score,
.page-template-page-silo .pp-pgrid-price {
  font-family:var(--ss-mono); font-variant-numeric:tabular-nums;
}
.page-template-page-silo .pp-pgrid-score { color:var(--ss-accent); }

/* --- FAQ (schedule of questions) ----------------------------------------- */
.page-template-page-silo .pp-silo-faq {
  display:grid; gap:0; max-width:none; border-top:1px solid var(--ss-ink);
}
.page-template-page-silo .pp-silo-faq details {
  border:0; border-bottom:1px solid var(--ss-rule-soft); border-radius:0;
  background:none; box-shadow:none;
}
.page-template-page-silo .pp-silo-faq summary {
  display:flex; justify-content:space-between; align-items:baseline; gap:1rem;
  padding:.95rem 0; cursor:pointer; list-style:none;
  font-family:var(--ss-body); font-weight:600; color:var(--ss-ink);
}
.page-template-page-silo .pp-silo-faq summary::-webkit-details-marker { display:none; }
.page-template-page-silo .pp-silo-faq summary::after {
  content:"+"; font-family:var(--ss-mono); color:var(--ss-accent); font-weight:500;
}
.page-template-page-silo .pp-silo-faq details[open] summary::after { content:"−"; }
.page-template-page-silo .pp-silo-faq details[open] summary { border-bottom:0; }
.page-template-page-silo .pp-silo-faq p {
  margin:0; padding:0 0 1.1rem; max-width:66ch; color:var(--ss-ink-soft); font-size:.95rem;
}

/* --- takeaways (numbered, on light) -------------------------------------- */
.page-template-page-silo .pp-silo-takeaways ul {
  list-style:none; margin:0; padding:0; counter-reset:tk;
  display:grid; gap:1px; grid-template-columns:repeat(auto-fit,minmax(255px,1fr));
  background:var(--ss-rule); border:1px solid var(--ss-rule);
}
.page-template-page-silo .pp-silo-takeaways li {
  counter-increment:tk; margin:0; padding:1.1rem 1.1rem 1.1rem 3rem; position:relative;
  background:var(--ss-sheet); border:0; color:var(--ss-ink-soft);
  font-size:.92rem; line-height:1.55;
}
.page-template-page-silo .pp-silo-takeaways li::before {
  content:counter(tk,decimal-leading-zero); position:absolute; left:1.1rem; top:1.1rem;
  font-family:var(--ss-mono); font-size:.7rem; font-weight:500; color:var(--ss-accent);
  font-variant-numeric:tabular-nums;
}

/* --- feature band --------------------------------------------------------
   The panel sits ON a photograph, so it is the one place in the Sheet Set where
   a flat opaque sheet is the wrong answer: it reads as a sticker taped over the
   image. Frosted glass instead — the photograph stays legible THROUGH the panel
   while the type sits on enough opacity to hold contrast. Light, not dark: this
   band carries buying copy, and the dark treatment we tried earlier reads as a
   showroom after hours.
   It also had NO padding at all, so the text ran to the panel's edges. */
.page-template-page-silo .pp-feature-panel {
  background:rgba(255,255,255,.80);
  -webkit-backdrop-filter:blur(20px) saturate(1.3);
  backdrop-filter:blur(20px) saturate(1.3);
  border:1px solid rgba(255,255,255,.62);
  border-radius:16px;
  padding:clamp(1.5rem,3vw,2.5rem);
  box-shadow:0 26px 64px -30px rgba(9,22,40,.6), inset 0 1px 0 rgba(255,255,255,.8);
  max-width:42rem;
}
/* Safari/Firefox without backdrop-filter get an opaque sheet rather than
   unreadable text over a photograph. */
@supports not ((backdrop-filter:blur(4px)) or (-webkit-backdrop-filter:blur(4px))) {
  .page-template-page-silo .pp-feature-panel { background:rgba(255,255,255,.95); }
}
/* The links were white — right against the old navy panel, invisible the moment
   the panel became a white sheet. This is the "white on white" report. */
.page-template-page-silo .pp-feature .pp-feature-panel .pp-prose a {
  color:var(--ss-accent); font-weight:500;
  text-decoration-color:rgba(27,58,140,.45); text-underline-offset:2px;
}
.page-template-page-silo .pp-feature .pp-feature-panel .pp-prose a:hover {
  text-decoration-color:var(--ss-accent);
}

/* --- CTA ----------------------------------------------------------------- */
.page-template-page-silo .pp-cta-band { background:var(--ss-sheet); border-top:1px solid var(--ss-ink); }

/* --- prose-only sheets, until the companion engine fills them -------------
   Superseded further down by a descendant-based version. The direct-child tests
   that used to live here are what capped the ranked rails at 736px. */
@media (min-width:900px) {
}

/* The schedule's value column is mono and right-aligned; at 20rem the longest
   values ("A0+ · banner") ran to the rail edge. Give the label column the
   flexibility instead of shrinking the number, which is the part being read. */
.pp-sched { table-layout:fixed; }
.pp-sched td:first-child { width:52%; padding-right:.6rem; }
.pp-sched td:last-child { font-size:.8rem; white-space:nowrap; }

/* ---------------------------------------------------------------------------
   PLATES.  A figure band was rendering a 287x161 thumbnail from a 1200px source
   beside an 879px column of prose — the image filled 18% of the column height
   and the rest read as a hole. A drawing set does not hang a stamp beside a
   paragraph; it gives the drawing a plate of its own. So the figure spans the
   full sheet under the title block, the prose sits below it at measure, and the
   rail beside the prose is freed for a data companion. Nothing is left empty.
   --------------------------------------------------------------------------- */
@media (min-width:900px) {
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) {
    display:grid;
    grid-template-columns:minmax(0,1fr) var(--ss-rail);
    grid-template-areas:"tb tb" "byl byl" "plate plate" "prose rail";
    column-gap:clamp(1.6rem,5vw,4rem);
    row-gap:0;   /* empty rows must collapse, so vertical rhythm is margins */
  }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-tb       { grid-area:tb; }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-byline   { grid-area:byl; }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-figstack { grid-area:plate; margin-bottom:2.2rem; }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-prose    { grid-area:prose; max-width:none; }
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-companion{ grid-area:rail; }
}
.page-template-page-silo .pp-figstack { margin:0; }
.page-template-page-silo .pp-figstack figure { margin:0; }
.page-template-page-silo .pp-figstack img {
  width:100%; height:auto; display:block;
  /* Cap the height so a tall source cannot push the prose off the screen; the
     scenes are wide-framed, so a centred crop loses nothing that matters. */
  max-height:330px; object-fit:cover; object-position:center;
  border:1px solid var(--ss-rule); border-radius:2px;
}
.page-template-page-silo .pp-figstack figcaption {
  display:flex; gap:.8rem; align-items:baseline;
  margin-top:.55rem; padding-top:.5rem; border-top:1px solid var(--ss-rule-soft);
  font-family:var(--ss-mono); font-size:.62rem; letter-spacing:.14em;
  text-transform:uppercase; color:var(--ss-muted);
}
.page-template-page-silo .pp-figstack figcaption b { color:var(--ss-accent); font-weight:500; white-space:nowrap; }
.page-template-page-silo .pp-figstack figcaption span {
  text-transform:none; letter-spacing:.02em; font-size:.72rem; color:var(--ss-ink-soft);
}

/* Most figure bands wrap the prose and the figure in a .pp-figrow (66 of them),
   so the plate rules above — which required the figure to be a direct child of
   the band — never matched. `display:contents` dissolves that wrapper into the
   band's grid, letting the plate and the prose be placed independently without
   touching a single page's HTML. */
@media (min-width:900px) {
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) {
    display:grid;
    grid-template-columns:minmax(0,1fr) var(--ss-rail);
    grid-template-areas:"tb tb" "byl byl" "plate plate" "prose rail";
    column-gap:clamp(1.6rem,5vw,4rem); row-gap:0;
  }
  .page-template-page-silo .pp-figrow { display:contents; }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) > .pp-tb        { grid-area:tb; }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) > .pp-byline    { grid-area:byl; }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) .pp-figstack    { grid-area:plate; margin-bottom:2.2rem; }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) .pp-prose       { grid-area:prose; max-width:none; }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow) > .pp-companion { grid-area:rail; }
}

/* theme.css:1863-1865 hides these captions — written when a caption only ever
   repeated the alt text and read as noise. A plate caption now carries a number
   and says what the reader is looking at, so it earns its place.
   That rule is a THREE-selector group (.pp-figrow, .pp-figstack, .pp-silo-lede),
   each at 0-2-2. The override has to match the same shape per selector to
   outweigh it — a plain `.pp-figstack figcaption` is 0-2-1 and silently loses,
   which is why only the first plate on each page had a visible caption. */
.page-template-page-silo .pp-figrow figure:not(.pp-diagram) > figcaption,
.page-template-page-silo .pp-figstack figure:not(.pp-diagram) > figcaption,
.page-template-page-silo .pp-silo-lede figure:not(.pp-diagram) > figcaption { display:flex; }

/* The text column is now 1fr, so the prose itself has to hold the measure. */
.page-template-page-silo .pp-sb-in:has(.pp-figrow) .pp-prose,
.page-template-page-silo .pp-sb-in:has(> .pp-figstack) > .pp-prose { max-width:38rem; }

/* A figure band whose rail has no companion was rendering a full-width plate
   with 600px of prose and 600px of nothing beside it — the original defect,
   moved rather than fixed. When there is nothing to put in the rail, the sheet
   stops pretending to have one: the whole block narrows and centres, so the
   margins are symmetric and read as a deliberate plate-and-text page. */
@media (min-width:900px) {
  .page-template-page-silo .pp-sb-in:has(.pp-figrow):not(:has(.pp-companion)),
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack):not(:has(.pp-companion)) {
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:"tb" "byl" "plate" "prose";
    max-width:48rem; margin-inline:auto;
  }
  .page-template-page-silo .pp-sb-in:has(.pp-figrow):not(:has(.pp-companion)) .pp-prose,
  .page-template-page-silo .pp-sb-in:has(> .pp-figstack):not(:has(.pp-companion)) > .pp-prose {
    max-width:none;
  }
}

/* ===========================================================================
   COVER SHEET.  The hero was still the one dark band on every silo page — the
   exact ground the brief rejected, and the first thing a buyer sees. It becomes
   the cover sheet of the set: white ground, drafting ink, the eyebrow as a sheet
   reference, and the hero stats as the sheet index across the foot, ruled rather
   than boxed.
   =========================================================================== */
.page-template-page-silo .pp-silo-hero,
.page-template-page-silo .pp-sb--grid {
  background:var(--ss-sheet); background-image:none; color:var(--ss-ink);
  border-bottom:1px solid var(--ss-rule);
  padding-block:clamp(3rem,7vw,5.5rem) clamp(2rem,4vw,3rem);
}
.page-template-page-silo .pp-silo-eyebrow {
  font-family:var(--ss-mono); font-size:.6rem; font-weight:500; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ss-accent); margin:0 0 1.1rem;
}
.page-template-page-silo .pp-silo-hero h1 {
  font-family:var(--ss-disp); font-weight:500; text-transform:uppercase;
  font-size:clamp(2.4rem,1.4rem+3.6vw,4.6rem); line-height:.94; letter-spacing:-.005em;
  color:var(--ss-ink); max-width:17ch; margin:0;
}
.page-template-page-silo .pp-silo-sub {
  color:var(--ss-ink-soft); font-weight:300; font-size:1.06rem;
  max-width:52ch; margin:1.4rem 0 0;
}
.page-template-page-silo .pp-hero-ctas { margin-top:1.8rem; display:flex; flex-wrap:wrap; gap:.7rem; }
.page-template-page-silo .pp-hero-ctas .pp-btn {
  background:var(--ss-accent); color:#fff; border:1px solid var(--ss-accent);
  border-radius:2px; font-family:var(--ss-body); font-weight:600; font-size:.92rem;
  padding:.7em 1.3em; box-shadow:none;
}
.page-template-page-silo .pp-hero-ctas .pp-btn--ghost {
  background:transparent; color:var(--ss-ink); border-color:var(--ss-rule);
}
.page-template-page-silo .pp-hero-ctas .pp-btn--ghost:hover { border-color:var(--ss-accent); color:var(--ss-accent); }
/* the sheet index */
.page-template-page-silo .pp-hero-stats {
  display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  margin-top:clamp(2.2rem,4vw,3.4rem); border-top:1px solid var(--ss-ink); gap:0;
}
.page-template-page-silo .pp-hero-stat {
  padding:.9rem 1rem .9rem 0; border-right:1px solid var(--ss-rule-soft); border-top:0;
}
.page-template-page-silo .pp-hero-stat:last-child { border-right:0; }
.page-template-page-silo .pp-hero-stat strong {
  display:block; font-family:var(--ss-mono); font-size:1.6rem; font-weight:500;
  line-height:1; letter-spacing:-.02em; color:var(--ss-ink); font-variant-numeric:tabular-nums;
}
.page-template-page-silo .pp-hero-stat span {
  display:block; margin-top:.45rem; font-family:var(--ss-mono); font-size:.58rem;
  letter-spacing:.18em; text-transform:uppercase; color:var(--ss-muted);
}

/* ---------------------------------------------------------------------------
   The narrow-band stopgap was testing for components as DIRECT children, so any
   band that nests them — the ranked rails nest .pp-pgrid inside a per-class
   group — was mistaken for prose-only and capped at 46rem. That is why the
   ranked sections rendered 736px wide with three columns and an orphaned fourth
   card. Every test is now descendant-based.
   --------------------------------------------------------------------------- */
@media (min-width:900px) {
  .page-template-page-silo .pp-sb-in:has(.pp-prose):not(:has(.pp-figstack)):not(:has(.pp-figrow)):not(:has(.pp-cal)):not(:has(.pp-companion)):not(:has(.pp-buyers)):not(:has(.pp-pgrid)):not(:has(.pp-silo-faq)):not(:has(.pp-silo-takeaways)):not(:has(ul)):not(:has(table)) {
    max-width:47rem; margin-inline:auto;
  }
}
/* auto-fit, so four cards share the row instead of leaving an orphan */
.page-template-page-silo .pp-pgrid:not(.pp-pgrid--carousel) {
  grid-template-columns:repeat(auto-fit,minmax(215px,1fr));
}

/* --- defects found by reading the page top to bottom ---------------------- */

/* 1. The feature panel's heading was still white — correct against the old navy
      panel, invisible now that the panel is a white sheet. */
.page-template-page-silo .pp-feature-panel h2 {
  color:var(--ss-ink); font-family:var(--ss-disp); font-weight:500;
  text-transform:uppercase; line-height:1;
}
.page-template-page-silo .pp-feature-panel .pp-tb-no { color:var(--ss-accent); }
.page-template-page-silo .pp-feature-panel .pp-prose p { color:var(--ss-ink-soft); }

/* 2. The takeaways grid drew its rules by showing a background through 1px
      gaps. With six cards in a four-column row that leaves two empty cells, and
      the reader sees a grey slab where cards ran out. Borders on the cards
      instead, so an incomplete row simply ends. */
.page-template-page-silo .pp-silo-takeaways ul {
  background:none; border:0; gap:1rem;
}
.page-template-page-silo .pp-silo-takeaways li {
  border:1px solid var(--ss-rule);
}

/* 3. A band whose only extra element is a short "keep exploring" list was being
      treated as a component band, so it kept the full 1200px and left a dead
      column beside 38rem of prose. A bare list is prose, not furniture. */
@media (min-width:900px) {
  /* The narrowing is for sheets that are genuinely just prose. A band holding an
     interactive tool — the supplies finder, the ask box, the size visualizer — is
     not prose, and capping it squeezed the front page's finder to 291px. Any band
     containing a form control is excluded. */
  .page-template-page-silo .pp-sb-in:has(.pp-prose):not(:has(.pp-figstack)):not(:has(.pp-figrow)):not(:has(.pp-cal)):not(:has(.pp-companion)):not(:has(.pp-buyers)):not(:has(.pp-pgrid)):not(:has(.pp-silo-faq)):not(:has(.pp-silo-takeaways)):not(:has(table)):not(:has(form)):not(:has(input)):not(:has(.pp-ask)):not(:has([class*="sfinder"])) {
    max-width:47rem; margin-inline:auto;
  }
}

/* 4. The shop band's heading is a title block like every other sheet head. */
.page-template-page-silo .pp-h3-shop-head {
  border-bottom:1px solid var(--ss-ink); padding-bottom:.55rem; margin-bottom:1.6rem;
  display:flex; flex-wrap:wrap; align-items:baseline; gap:.3rem 1rem;
}
.page-template-page-silo .pp-h3-shop-head h2 {
  font-family:var(--ss-disp); font-weight:500; text-transform:uppercase;
  font-size:clamp(1.5rem,1.1rem+1.5vw,2.15rem); line-height:1; color:var(--ss-ink);
}
.page-template-page-silo .pp-h3-shop-head p { color:var(--ss-ink-soft); font-size:.92rem; margin:0; }

/* Interactive tool bands (the size visualizer, the finder) were built to sit on
   a navy ground and set their own white type. Converting the ground to a sheet
   left that copy white-on-white — invisible on 19 pages. Any type inside a band
   the Sheet Set repainted takes the sheet's ink. */
.page-template-page-silo .pp-sb--navy .pp-planner-head p,
.page-template-page-silo .pp-sb--grid .pp-planner-head p,
.page-template-page-silo .pp-sb--navy .pp-planner-head h2,
.page-template-page-silo .pp-sb--grid .pp-planner-head h2 { color:var(--ss-ink-soft); }
.page-template-page-silo .pp-sb--navy .pp-planner-head h2,
.page-template-page-silo .pp-sb--grid .pp-planner-head h2 {
  color:var(--ss-ink); font-family:var(--ss-disp); font-weight:500; text-transform:uppercase;
}
.page-template-page-silo .pp-sb--navy .pp-tb-no,
.page-template-page-silo .pp-sb--grid .pp-tb-no { color:var(--ss-accent); }

/* ---------------------------------------------------------------------------
   ONE FRAME.  Bands were rendering at four different widths — 1310px on the
   front page's own sections, 1200px on sheets, 822px on the hero and 752px
   wherever the prose narrowing wrongly caught a band. Reading down the page the
   left edge moved four times. Every band now shares one frame and one left edge;
   the only intentional exception is a genuinely prose-only sheet, which centres
   its column (symmetric margins, not a hole).
   --------------------------------------------------------------------------- */
.page-template-page-silo .pp-sb-in,
.page-template-page-silo .pp-h3-sfinderband .pp-sb-in,
.page-template-page-silo .pp-h3-hero .pp-sb-in,
.page-template-page-silo .pp-h3-shopband .pp-sb-in {
  max-width:1200px; margin-inline:auto;
}
.page-template-page-silo .pp-h3-hero .pp-sb-in { padding-inline:0; }
.page-template-page-silo .pp-h3-hero-copy { max-width:none; }
.page-template-page-silo .pp-h3-hero-copy h1 { max-width:22ch; }
.page-template-page-silo .pp-h3-hero-sub { max-width:56ch; }

/* ---------------------------------------------------------------------------
   ADDITIVE — 2026-08-21, for /hp-vs-epson-plotters/ and /how-we-rate/, the two
   pages that had never been given the Sheet Set. Both introduce something no
   existing silo page carried, so both additions are NEW class names only: no
   selector below can change what the other 38 pages render.

   1. TABLES. sheet-set.css styled no table at all, because until now no silo
      page had one. theme.css's .pp-table already supplies the tinted header,
      hairline cells and the overflow-x container; these rules only repaint it
      in Sheet Set ink and — the part that matters — give the table a min-width
      so the wrapper genuinely SCROLLS on a phone instead of crushing three
      columns of prose into 90px each. Precedent: .pp-h3-cmp-table on the front
      page (theme.css:2026) does exactly this.
   2. .pp-keyfig--text. .pp-keyfig sets its value in 1.2rem mono because every
      existing use is a two-digit score. The "at a glance" rail on the HP/Epson
      page holds phrases ("Roll-fed; ANSI/ARCH sizes …"), which at that size
      wrapped to four ragged lines. The modifier sets those values as body text.
   --------------------------------------------------------------------------- */
.page-template-page-silo .pp-table {
  overflow-x:auto; -webkit-overflow-scrolling:touch;
  margin:0; max-width:100%;
}
.page-template-page-silo .pp-table > table {
  min-width:32rem; border-collapse:collapse; font-size:.9rem;
}
.page-template-page-silo .pp-table--compare > table { min-width:44rem; }
.page-template-page-silo .pp-table th,
.page-template-page-silo .pp-table td {
  border:1px solid var(--ss-rule-soft); padding:.7rem .85rem;
  color:var(--ss-ink-soft); line-height:1.5; vertical-align:top;
}
.page-template-page-silo .pp-table thead th {
  background:var(--ss-sheet-2); color:var(--ss-ink);
  font-family:var(--ss-mono); font-weight:500; font-size:.6rem;
  letter-spacing:.16em; text-transform:uppercase; white-space:nowrap;
}
.page-template-page-silo .pp-table tbody th {
  background:var(--ss-sheet-2); color:var(--ss-ink);
  font-family:var(--ss-body); font-weight:600; white-space:normal;
}
.page-template-page-silo .pp-table td:first-child { color:var(--ss-ink); font-weight:500; }
.page-template-page-silo .pp-table.is-style-stripes tbody tr:nth-child(odd) td {
  background:var(--ss-sheet-2);
}
.page-template-page-silo .pp-table strong { color:var(--ss-ink); }

.pp-keyfig--text b {
  font-family:var(--ss-body); font-size:.9rem; font-weight:600;
  color:var(--ss-ink); text-align:right; line-height:1.4;
}
.pp-keyfig--text div { align-items:flex-start; }
.pp-keyfig--text span { flex:0 0 8rem; }
