/* ═══════════════════════════════════════════════════════════════════════════
   ConFacts — homeowner's guide.

   NINE ENTRIES, in this site's palette.

   The layout follows DESIGN.md (2026-09-05): one card per check in the
   report's order, what-it-is beside what-good-looks-like and what-goes-wrong,
   then the pieces panel and a centred checklist. What it does NOT follow is the mockup's colour system, which was
   cool blue on #f9f9fd with a 12px radius and JetBrains Mono. This is warm
   paper, ink, IBM Plex, and the radii the rest of the product uses — the guide
   has to read as the same publication as the report.

   THE RULE THIS SHEET KEEPS
   ------------------------
   styles.css reserves colour for meaning: green verified, amber unconfirmed,
   red adverse. This page states no findings, so it uses NO semantic colour at
   all. The one exception is the verified/claimed pill pair under
   "Certifications", which exists to teach that vocabulary.

   That is the page's argument, not a preference. The content says repeatedly
   that one citation is not a verdict, that an RMO on several licences can be
   legitimate, that subcontractors are normal, that a new company is not a bad
   company. The mockup gave Cal/OSHA a red left border and a warning triangle
   directly above the sentence "one citation does not automatically make a
   contractor unsafe". The safety card here is styled exactly like every other
   card, and a test asserts it.
   ═══════════════════════════════════════════════════════════════════════════ */

.g-body { background: #fdfcf9; }

.topbar .brand { text-decoration: none; color: inherit; }

#guide-main { max-width: 1120px; margin: 0 auto; padding: 0 20px; }

/* ── Hero: centred, like the mockup ─────────────────────────────────────── */
.g-hero {
  padding: 72px 0 40px; display: flex; flex-direction: column;
  align-items: center; text-align: center; gap: 20px;
}
.g-hero .cf-display { max-width: 18ch; }
/* The mockup put a blue-to-teal gradient on the second line. A gradient in a
   palette where colour means a finding would be the loudest thing on a page
   that states none — so the emphasis is weight and tone instead. */
.g-h1-soft { color: #5b6360; }
.g-hero-body { display: flex; flex-direction: column; gap: 14px; max-width: 62ch; }
.g-hero-body p { margin: 0; font-size: 17px; line-height: 28px; color: #434849; }
@media (max-width: 700px) { .g-hero { padding: 44px 0 28px; } }

/* ── Jump links ─────────────────────────────────────────────────────────── */
.g-jump {
  display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
  padding: 0 0 28px; border-bottom: 1px solid #e5e2da; margin-bottom: 32px;
}
.g-jump-links { display: flex; flex-wrap: wrap; gap: 6px; }
.g-jump a {
  font-size: 13px; line-height: 1; font-weight: 600; color: #434849;
  text-decoration: none; padding: 8px 11px; border-radius: 999px;
  background: #f4f3ef; border: 1px solid transparent; white-space: nowrap;
}
.g-jump a:hover { background: #eceae3; color: #091416; }
.g-jump a:focus-visible { outline: 2px solid #091416; outline-offset: 2px; }
/* The card currently being read. Ink and weight, never a colour. */
.g-jump a.is-current { background: #091416; color: #fff; }

/* ── The entries ─────────────────────────────────────────────────────────
   One card per check, in the report's order. Left: what it is, why it
   matters, what ConFacts checks. Right, on wash: what a GOOD record looks
   like (green rule), what goes wrong (red rule), and the one question to ask.

   THE RULE THIS SHEET NOW KEEPS
   Red is allowed on the what-goes-wrong block and nowhere else (DESIGN.md,
   2026-09-05: the guide shows the bad outcomes; the home page's refinement
   applies here too, so a good outcome sits beside every bad one). The safety
   entry's caveats are unchanged; its red block is the same block every entry
   has, not a special case. A test asserts both. */
.g-entries { display: grid; gap: 20px; }
.g-card, .g-panel, .g-checkcard {
  scroll-margin-top: 84px;
  background: #fff; border: 1px solid #e5e2da; border-radius: 6px;
  box-shadow: 0 1px 3px rgba(9,20,22,.04);
}
.g-entry { display: grid; grid-template-columns: 1.15fr 1fr; overflow: hidden; padding: 0; }
.g-entry-l { padding: 28px 30px 26px; border-right: 1px solid #efede6; }
.g-entry-r { padding: 28px 28px 26px; background: #fafaf7; display: flex; flex-direction: column; gap: 18px; }
.g-num { margin: 0 0 4px; font: 500 10.5px/14px var(--mono); letter-spacing: .1em; color: #9a9ea6; }
.g-entry .cf-h2 { font-size: 24px; line-height: 31px; margin-bottom: 16px; }
.g-k {
  margin: 20px 0 6px; font: 500 10px/14px var(--mono); letter-spacing: .1em;
  text-transform: uppercase; color: #717677;
}
.g-entry-l .g-k:first-of-type { margin-top: 0; }
.g-entry-r .g-k { margin-top: 0; }
.g-k-good { color: var(--green); }
.g-k-bad { color: var(--red); }
.g-entry-l p, .g-entry-r p { font-size: 16px; line-height: 26px; color: #434849; margin: 0 0 12px; }
.g-entry-l p:last-child { margin-bottom: 0; }
.g-entry-l b, .g-entry-r b { color: #091416; font-weight: 700; }
.g-checks { margin-top: 18px !important; padding-top: 12px; border-top: 1px solid #efede6; font: 500 12.5px/20px var(--mono) !important; color: #6b6f78 !important; }
.g-checks b { color: var(--green) !important; font-weight: 500 !important; }
.g-good, .g-bad { padding: 12px 16px; border-radius: 0 4px 4px 0; }
.g-good { background: #eef5f0; border-left: 3px solid var(--green); }
.g-bad { background: #f9ecea; border-left: 3px solid var(--red); }
.g-good p, .g-bad p { margin: 0; font-size: 15.5px; line-height: 25px; color: #091416; }
.g-askbox { margin-top: auto; }
.g-ask { padding-left: 14px; border-left: 2px solid #091416; font-size: 17px !important; line-height: 27px !important; font-weight: 600; color: #091416 !important; margin: 0 !important; }
@media (max-width: 900px) {
  .g-entry { grid-template-columns: 1fr; }
  .g-entry-l { border-right: 0; border-bottom: 1px solid #efede6; }
}
@media (max-width: 560px) { .g-entry-l, .g-entry-r { padding: 22px 20px; } .g-panel, .g-checkcard { padding: 24px 20px; } }
.g-panel, .g-checkcard { padding: 30px 28px; }

/* ── The full-width panel: how the pieces fit together ──────────────────── */
.g-panel { margin: 20px 0 0; }
.g-panel > .cf-h2 { margin-bottom: 20px; }
/* The PROSE is measure-limited; the grid of pieces is not. Constraining the
   whole panel body squeezed seven cards into three 156px columns inside a
   1080px card — a title and a sentence each, in a ribbon down the middle. */
.g-panel-body { max-width: none; }
.g-panel-body > p { max-width: 74ch; margin-left: auto; margin-right: auto; text-align: center; }
.g-panel-body p { font-size: 16px; line-height: 26px; color: #434849; margin: 0 0 12px; }
.g-panel-body b { color: #091416; font-weight: 700; }

/* ── The checklist card ─────────────────────────────────────────────────── */
.g-checkcard { margin: 20px 0 0; max-width: 760px; margin-left: auto; margin-right: auto; }
.g-checkcard > .cf-h2 { margin-bottom: 8px; }
.g-checkcard .g-card-body > p { text-align: center; color: #6b6f78; }

/* ── Lists ──────────────────────────────────────────────────────────────── */
.g-list { margin: 0 0 14px; padding: 0; list-style: none; display: grid; gap: 9px; }
.g-list li {
  position: relative; padding-left: 20px;
  font-size: 16.5px; line-height: 26px; color: #434849;
}
.g-list li::before {
  content: ""; position: absolute; left: 4px; top: 11px;
  width: 5px; height: 5px; border-radius: 50%; background: #b6b3aa;
}
/* The long question lists stay VISIBLE — they are the useful part. Length is
   controlled by column count, not by hiding them behind a disclosure. */
@media (min-width: 640px) {
  .g-list-2col { grid-template-columns: 1fr 1fr; column-gap: 28px; }
}

/* ── Quote: a sentence a contractor says out loud ───────────────────────── */
.g-quote {
  margin: 0 0 14px; padding: 14px 18px; background: #f4f3ef;
  border-left: 2px solid #d8d5cc; border-radius: 0 2px 2px 0;
  font-size: 17px; line-height: 27px; color: #091416; font-style: italic;
}

/* ── Emphasis line: the fair-minded caveats the content keeps making ────── */
.g-emph {
  font-weight: 600; color: #091416 !important;
}

/* ── Pull box: the takeaway at the end of a section ─────────────────────── */
.g-pull {
  margin: 24px 0 0; padding: 20px 22px; background: #fff;
  border: 1px solid #e5e2da; border-radius: 2px;
}
.g-pull p { margin: 0 0 8px; }
.g-pull p:last-child { margin-bottom: 0; }
.g-pull b { font-size: 17px; line-height: 27px; }
.g-pill-demo {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 14px !important; padding-top: 14px; border-top: 1px solid #eeece5;
}

/* ── Aside: a scope note, not a warning ────────────────────────────────── */
.g-aside {
  margin: 20px 0; padding: 16px 18px; background: #f4f3ef;
  border-radius: 2px;
}
.g-aside p:first-child { margin-bottom: 6px; }
.g-aside p:last-child { margin-bottom: 0; font-size: 15.5px; line-height: 25px; }

/* ── The seven pieces / the three ages: bento rhythm ────────────────────── */
.g-pieces {
  display: grid; grid-template-columns: 1fr; gap: 1px;
  background: #e5e2da; border: 1px solid #e5e2da; border-radius: 2px;
  overflow: hidden; margin: 24px 0;
}
@media (min-width: 620px) { .g-pieces { grid-template-columns: 1fr 1fr; } }
@media (min-width: 900px) { .g-pieces { grid-template-columns: 1fr 1fr 1fr; } }
@media (min-width: 620px) { .g-pieces-3 { grid-template-columns: 1fr 1fr 1fr; } }
/* Three columns is a VIEWPORT rule but the constraint is the CONTAINER: the
   three ages live inside a half-width card, so at 1440px they were three 156px
   columns of ragged two-word lines. Narrow cards stack them. */
.g-span-4 .g-pieces, .g-span-6 .g-pieces { grid-template-columns: 1fr !important; }
@media (min-width: 1100px) {
  .g-span-6 .g-pieces-3 { grid-template-columns: 1fr 1fr 1fr !important; }
}
/* Seven pieces in a three-column grid leaves two empty cells, and the grid's
   own background shows through them as a grey rectangle beside the last item —
   it reads as a card that failed to load. The seventh piece takes the last row
   instead. */
@media (min-width: 900px) {
  .g-pieces:not(.g-pieces-3) > :last-child:nth-child(7) { grid-column: 1 / -1; }
}
@media (min-width: 620px) and (max-width: 899px) {
  .g-pieces:not(.g-pieces-3) > :last-child:nth-child(odd) { grid-column: 1 / -1; }
}
.g-piece { background: #fff; padding: 22px 20px; display: flex; flex-direction: column; gap: 7px; }
.g-piece h3 { margin: 0 !important; font-size: 16px; line-height: 22px; }
.g-piece p { margin: 0; font-size: 15px; line-height: 23px; }

/* ── Badges a contractor displays ──────────────────────────────────────── */
.g-badges {
  list-style: none; margin: 0 0 14px; padding: 0;
  display: flex; flex-wrap: wrap; gap: 8px;
}
.g-badges li {
  font: 600 12.5px/1 var(--sans); color: #434849;
  background: #f4f3ef; border: 1px solid #e5e2da; border-radius: 2px;
  padding: 8px 12px;
}

/* ── The 10-point check ────────────────────────────────────────────────── */
.g-check {
  list-style: none; margin: 24px 0 0; padding: 0; counter-reset: chk;
  background: #fff; border: 1px solid #e5e2da; border-radius: 2px;
}
.g-check li { counter-increment: chk; border-top: 1px solid #f0eee7; }
.g-check li:first-child { border-top: none; }
.g-check label {
  display: flex; align-items: flex-start; gap: 13px; padding: 15px 18px;
  cursor: pointer;
}
.g-check label:hover { background: #fafaf7; }
.g-check input {
  appearance: none; -webkit-appearance: none; flex: none;
  width: 18px; height: 18px; margin: 3px 0 0;
  border: 1.5px solid #c9c5ba; border-radius: 3px; background: #fff;
  cursor: pointer; position: relative; transition: background .12s, border-color .12s;
}
.g-check input:hover { border-color: #091416; }
.g-check input:focus-visible { outline: 2px solid #091416; outline-offset: 2px; }
.g-check input:checked { background: #091416; border-color: #091416; }
.g-check input:checked::after {
  content: ""; position: absolute; left: 5px; top: 1px;
  width: 4px; height: 9px; border: solid #fff; border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.g-check span {
  font-size: 16px; line-height: 25px; color: #434849;
}
.g-check input:checked + span { color: #8d9199; }
.g-check input:checked + span b { color: #8d9199; }

/* ── Closing ───────────────────────────────────────────────────────────── */
.g-close {
  padding: 64px 0; max-width: 62ch; margin: 0 auto;
  display: flex; flex-direction: column; gap: 12px; align-items: center;
  text-align: center;
}
.g-close p { margin: 0; }
.g-close .cf-h2 { text-align: center; }
.g-close-kicker {
  font-size: 20px !important; line-height: 30px !important; font-weight: 700;
  color: #091416 !important; padding-top: 18px; margin-top: 8px !important;
  border-top: 1px solid #e5e2da; width: 100%;
}
.g-close .cf-run-link { margin-top: 16px; }

/* ── Footer ────────────────────────────────────────────────────────────── */
.g-foot { border-top: 1px solid #e5e2da; padding: 28px 0 48px; max-width: 78ch; margin: 0 auto; }
.g-foot p { font-size: 11.5px; line-height: 1.7; color: #9a9ea6; margin: 0; }
.g-copy { margin-top: 12px !important; }
.g-foot a { color: #717677; }

/* ── Print: the checklist is the part people take with them ────────────── */
@media print {
  .topbar, .g-jump, .cf-run-link { display: none !important; }
  .g-body { background: #fff; }
  .g-card, .g-entry { page-break-inside: avoid; }
  .g-check, .g-pieces, .g-pull { page-break-inside: avoid; }
}
