:root {
  --charcoal: #1E293B;
  --charcoal-soft: #475569;
  --slate: #64748B;
  --slate-faint: #94A3B8;
  --hairline: #E2E8F0;
  --panel: #F8FAFC;
  --copper: #B45309;
  --copper-deep: #9A3412;
  --money: #7C2D12;
  --divider-bg: #FDEEDF;
  --page-bg: #FFFFFF;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--page-bg);
  color: var(--charcoal);
  font-family: "Helvetica Neue", Arial, sans-serif;
  font-size: 15px;
  line-height: 1.45;
}

a { color: inherit; text-decoration: none; }

/* ---------- site header/footer ---------- */
.site-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem 1.5rem;
  border-bottom: 2px solid var(--charcoal);
  flex-wrap: wrap;
}
.brand { display: flex; flex-direction: column; flex-shrink: 0; }
.brand-logo {
  display: block;
  height: 40px;
  width: auto;
  max-width: 65vw;
}
.site-kicker {
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--slate);
}

.site-main {
  max-width: 60rem;
  margin: 0 auto;
  padding: 1.5rem 1.5rem 4rem;
}

.site-footer {
  padding: 1.25rem 1.5rem 2.5rem;
  text-align: center;
}
.site-footer p {
  margin: 0;
  font-size: .72rem;
  color: var(--slate-faint);
}

/* ---------- page heading / toolbar ---------- */
.page-toolbar {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: .9rem;
  margin-bottom: 1.75rem;
  padding-bottom: .85rem;
  border-bottom: 1px solid var(--hairline);
}
.page-heading, .index-heading { display: flex; flex-direction: column; }
.page-kicker {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--copper);
}
.page-heading h1, .index-heading h1 {
  margin: .15rem 0 0;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.9rem;
}

.filter-box {
  display: flex;
  align-items: center;
  gap: .6rem;
}
#filter-input {
  width: 15.5rem;
  max-width: 60vw;
  padding: .5rem .75rem;
  border: 1px solid var(--hairline);
  border-radius: 6px;
  font-size: .9rem;
  font-family: inherit;
  color: var(--charcoal);
  background: var(--panel);
}
#filter-input:focus {
  outline: 2px solid var(--copper);
  outline-offset: 1px;
}
.filter-count {
  font-size: .78rem;
  color: var(--slate);
  white-space: nowrap;
}
.filter-empty {
  margin: 2rem 0;
  text-align: center;
  color: var(--slate);
  font-size: .9rem;
}

/* ---------- concatenated section divider (category pages) ---------- */
.catalog-section { scroll-margin-top: 1rem; }
.section-divider {
  margin: 3.5rem 0 1.5rem;
  padding-top: 2.25rem;
  border-top: 3px solid var(--charcoal);
}
.catalog-section:first-of-type .section-divider {
  margin-top: 0;
  padding-top: 0;
  border-top: none;
}
.section-kicker {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--copper);
}
.section-divider h2 {
  margin: .2rem 0 0;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.55rem;
}

/* ---------- source-faithful labels ---------- */
.source-heading {
  margin: 0 0 1rem;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--charcoal);
}
.family-heading p.family-name-label {
  margin: 0 0 .15rem;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .3px;
  text-transform: uppercase;
  color: var(--slate);
}

/* Exact Excel master title: primary source-page hierarchy. */
.source-master-title {
  margin: 0 0 1.25rem;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.8rem;
  line-height: 1.2;
  font-weight: 700;
  color: var(--charcoal);
}

/* ---------- page-level note ---------- */
.section-note {
  margin: 0 0 1.5rem;
  padding: .75rem 1rem;
  border-left: 3px solid var(--copper);
  background: var(--panel);
  font-size: .85rem;
  font-weight: 600;
  color: var(--charcoal);
}

/* ---------- section/family-level source images (logos, product
   photos, diagrams) - responsive by construction: an img never exceeds
   its wrapper's width, so it can never force horizontal page overflow,
   and wraps to a new line on narrow viewports instead of scrolling. ---------- */
.section-images,
.family-images {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: flex-start;
  margin: 0 0 1.5rem;
}
.section-image,
.family-image {
  margin: 0;
  max-width: 100%;
}
.section-image img,
.family-image img {
  display: block;
  max-width: 240px;
  width: 100%;
  height: auto;
  object-fit: contain;
}
/* Product/diagram photos get a light frame; brand logos (transparent
   background) look better without one - flagged via a modifier class
   set per <img> from the data, not guessed from the filename. */
.section-image img:not(.logo-asset),
.family-image img:not(.logo-asset) {
  border: 1px solid var(--hairline);
  background: #fff;
}

/* ---------- intro / front matter ---------- */
.intro {
  margin-bottom: 2.25rem;
  padding-bottom: 1.75rem;
  border-bottom: 1px solid var(--hairline);
}
.intro-block { margin-bottom: 1rem; }
.intro-block:last-child { margin-bottom: 0; }
.intro-line {
  margin: 0 0 .3rem;
  font-size: .88rem;
  color: var(--charcoal-soft);
}
.intro-line:last-child { margin-bottom: 0; }
.intro-line strong {
  color: var(--charcoal);
  font-weight: 700;
}
.intro-line strong u {
  text-decoration-color: var(--copper);
}
/* A line that OPENS with a bold+underlined run reads as a heading or
   glossary term in the source (e.g. "SELECTING A VENTED SET", or
   "“F” Burner -" leading a definition). Style only that leading run, not
   the whole paragraph - a bold+underline run appearing later mid-sentence
   (e.g. an inline emphasis or a URL) is not a heading and must not pick up
   this treatment just because it shares a block with one. */
.intro-line > strong:first-child:has(> u) {
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.05rem;
  color: var(--copper-deep);
}
.intro-line > strong:first-child:has(> u) u {
  text-decoration-color: var(--copper);
}

/* ---------- family ---------- */
.family { margin-bottom: 2.5rem; }
.family-heading {
  margin-bottom: .75rem;
  padding-left: .7rem;
  border-left: 3px solid var(--copper);
}
.family-heading h2,
.family-heading h3 {
  margin: 0 0 .2rem;
  font-family: Georgia, "Times New Roman", serif;
  font-weight: 700;
  font-size: 1.2rem;
}
.family-heading p {
  margin: 0;
  max-width: 42rem;
  font-size: .88rem;
  color: var(--charcoal-soft);
}
.family-heading p.family-note {
  margin-top: .5rem;
  font-style: italic;
  color: var(--copper-deep);
}

/* ---------- price table ---------- */
.table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.price-table {
  width: 100%;
  min-width: 34rem;
  border-collapse: collapse;
  font-variant-numeric: tabular-nums;
}
.price-table thead th {
  position: sticky;
  top: 0;
  background: var(--charcoal);
  color: #fff;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .3px;
  text-transform: uppercase;
  padding: .55rem .7rem;
  text-align: left;
  white-space: nowrap;
}
.price-table th .col-sublabel {
  display: block;
  margin-top: .1rem;
  font-size: .65rem;
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
  color: #CBD5E1;
}
.price-table th.align-right, .price-table td.align-right { text-align: right; }
.price-table th.align-left, .price-table td.align-left { text-align: left; }

.price-table tbody td {
  padding: .5rem .7rem;
  border-bottom: 1px solid var(--hairline);
  font-size: .88rem;
  vertical-align: middle;
}
.price-table tbody tr:nth-child(even):not(.row-group-divider) td {
  background: var(--panel);
}
.price-table td.money {
  font-weight: 700;
  color: var(--money);
  white-space: nowrap;
}
.price-table td.col-item_number,
.price-table td.col-set_size,
.price-table td.col-certif,
.price-table td.col-ctns,
.price-table td.col-weight,
.price-table td.col-btu {
  white-space: nowrap;
}
.price-table td.align-left { font-weight: 600; }

.row-group-divider td {
  padding: .4rem .7rem;
  background: var(--divider-bg);
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
  font-size: .7rem;
  font-weight: 800;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--copper-deep);
}

.price-table tbody tr[hidden] { display: none; }

/* ---------- header search (compact, all pages) ---------- */
.header-search {
  position: relative;
  flex: 1 1 20rem;
  max-width: 26rem;
}
.header-search [data-search-input] {
  width: 100%;
  padding: .55rem .9rem;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  font-size: .88rem;
  font-family: inherit;
  color: var(--charcoal);
  background: var(--panel);
}
.header-search [data-search-input]:focus {
  outline: 2px solid var(--copper);
  outline-offset: 1px;
}
.header-search-results {
  position: absolute;
  top: calc(100% + .4rem);
  left: 0;
  right: 0;
  z-index: 20;
  max-height: 22rem;
  overflow-y: auto;
  background: var(--page-bg);
  border: 1px solid var(--hairline);
  border-radius: 10px;
  box-shadow: 0 10px 30px rgba(30, 41, 59, .15);
}

/* ---------- search results (shared: hero + header) ---------- */
.search-results-list {
  list-style: none;
  margin: 0;
  padding: .4rem;
}
.search-results-list li + li { margin-top: .15rem; }
.search-results-list a {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: .5rem;
  padding: .6rem .7rem;
  border-radius: 8px;
  transition: background .1s ease;
}
.search-results-list a:hover,
.search-results-list a:focus { background: var(--panel); }
.search-result-badge {
  flex: none;
  font-size: .62rem;
  font-weight: 800;
  letter-spacing: .4px;
  text-transform: uppercase;
  padding: .15rem .45rem;
  border-radius: 999px;
  background: var(--divider-bg);
  color: var(--copper-deep);
}
.search-result-badge-category { background: var(--charcoal); color: #fff; }
.search-result-label {
  font-weight: 700;
  color: var(--charcoal);
}
.search-result-sublabel {
  font-size: .82rem;
  color: var(--slate);
}
.search-result-price {
  margin-left: auto;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--money);
}
.search-empty {
  margin: 0;
  padding: 1rem;
  font-size: .88rem;
  color: var(--slate);
}

/* ---------- home page: hero search ---------- */
.hero-search {
  padding: 3.5rem 0 2rem;
  text-align: center;
}
.hero-kicker {
  margin: 0;
  font-size: .8rem;
  font-weight: 700;
  letter-spacing: .8px;
  text-transform: uppercase;
  color: var(--copper);
}
.hero-title {
  margin: .5rem 0 0;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 2.3rem;
}
.p1-msrp-period {
  margin: .45rem auto 0;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.15rem;
  font-weight: 700;
}
.p1-effective,
.p1-usd {
  margin: .2rem auto 0;
  font-size: .9rem;
  color: var(--charcoal-soft);
  white-space: pre-wrap;
}
.hero-sub {
  margin: .6rem auto 0;
  max-width: 32rem;
  color: var(--charcoal-soft);
  font-size: 1rem;
}
.hero-search-box {
  position: relative;
  max-width: 34rem;
  margin: 1.75rem auto 0;
}
.hero-search-icon {
  position: absolute;
  left: 1.1rem;
  top: 50%;
  transform: translateY(-50%);
  width: 1.15rem;
  height: 1.15rem;
  color: var(--slate);
  pointer-events: none;
}
.hero-search-box [data-search-input] {
  width: 100%;
  padding: 1rem 1.1rem 1rem 3rem;
  border: 2px solid var(--charcoal);
  border-radius: 999px;
  font-size: 1.05rem;
  font-family: inherit;
  color: var(--charcoal);
  background: var(--page-bg);
  box-shadow: 0 6px 20px rgba(30, 41, 59, .08);
}
.hero-search-box [data-search-input]:focus {
  outline: none;
  border-color: var(--copper);
  box-shadow: 0 6px 24px rgba(180, 83, 9, .18);
}
.hero-search .search-results {
  max-width: 34rem;
  margin: 1rem auto 0;
  text-align: left;
  background: var(--page-bg);
  border: 1px solid var(--hairline);
  border-radius: 12px;
  box-shadow: 0 10px 30px rgba(30, 41, 59, .1);
}

.custom-work {
  max-width: 46rem;
  margin: 0 auto 3rem;
  padding: 1.25rem 1.4rem;
  border-left: 4px solid var(--copper);
  background: var(--panel);
}
.custom-work h2 {
  margin: 0 0 .65rem;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.25rem;
}
.custom-work p {
  margin: .35rem 0;
  font-size: .9rem;
}
.custom-work a {
  text-decoration: underline;
  overflow-wrap: anywhere;
}
.site-footer .p1-contact {
  max-width: 58rem;
  margin: 0 auto .35rem;
  color: var(--charcoal-soft);
  line-height: 1.6;
}
.site-footer .p1-quality {
  margin: 0 0 .65rem;
  font-family: Georgia, "Times New Roman", serif;
  font-size: .8rem;
  font-weight: 700;
  color: var(--charcoal);
}

/* ---------- home page: browse by category ---------- */
.browse-section {
  max-width: 56rem;
  margin: 0 auto;
  padding: 1.5rem 0 4rem;
  border-top: 1px solid var(--hairline);
}
.browse-lede {
  text-align: center;
  font-size: .85rem;
  font-weight: 700;
  letter-spacing: .4px;
  text-transform: uppercase;
  color: var(--slate);
  margin: 2rem 0 1.5rem;
}
.browse-columns {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 2.5rem;
}
.browse-column-title {
  margin: 0 0 .75rem;
  font-family: Georgia, "Times New Roman", serif;
  font-size: 1.1rem;
  padding-bottom: .5rem;
  border-bottom: 2px solid var(--charcoal);
}
.browse-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: .1rem;
}
.browse-list a {
  display: block;
  padding: .5rem .4rem;
  border-radius: 6px;
  font-size: .92rem;
  color: var(--charcoal-soft);
}
.browse-list a:hover {
  background: var(--panel);
  color: var(--charcoal);
}

@media (max-width: 30rem) {
  .site-header { padding: .85rem 1rem; }
  .brand-logo { height: 30px; }
  .site-main { padding: 1.1rem 1rem 3rem; }
  .page-toolbar { align-items: stretch; }
  #filter-input { width: 100%; max-width: none; }
  .header-search { order: 3; flex-basis: 100%; max-width: none; }
  .hero-title { font-size: 1.7rem; }
  .browse-columns { grid-template-columns: 1fr; gap: 1.5rem; }
}

/* Phase 5: explicit search scopes and readable source notes. */
.header-search label, .filter-box label, .hero-search-label {
  display: block;
  font-size: .82rem;
  font-weight: 700;
  margin-bottom: .35rem;
}
.filter-box { flex-wrap: wrap; width: 100%; }
.filter-box label { flex-basis: 100%; margin-bottom: 0; }
#filter-input { width: 23rem; max-width: 100%; }
.hero-search-label { margin-top: 1.25rem; }
.hero-search-box { margin-top: .4rem; }
.search-summary { margin: 0; padding: .8rem 1rem; color: var(--charcoal-soft); font-size: .85rem; }
.family-heading p.family-note { white-space: pre-line; overflow-wrap: anywhere; }
.intro-line, .custom-work, .p1-contact { overflow-wrap: anywhere; }

@media (max-width: 40rem) {
  .site-header { padding: .75rem 1rem; gap: .65rem; }
  .site-main { padding: 1rem .75rem 3rem; }
  .header-search { order: 3; flex-basis: 100%; max-width: none; }
  .header-search [data-search-input], #filter-input { font-size: 1rem; }
  .page-toolbar { margin-bottom: 1.1rem; gap: .65rem; }
  .page-heading h1, .index-heading h1 { font-size: 1.5rem; }
  .section-divider { margin: 2rem 0 1rem; padding-top: 1.25rem; }
  .section-divider h2 { font-size: 1.25rem; }
  .intro { margin-bottom: 1.25rem; padding-bottom: 1rem; }
  .family { margin-bottom: 1.6rem; }
  .family-heading { margin-bottom: .5rem; }
  .family-heading h2, .family-heading h3 { font-size: 1.05rem; }
  .hero-search { padding: .75rem 0 1.25rem; }
  .hero-title { font-size: 1.45rem; margin-top: .75rem; }
  .p1-msrp-period { font-size: 1rem; }
  .hero-sub { font-size: .9rem; margin-top: .4rem; }
  .hero-search-label { margin-top: .9rem; }
  .hero-search-box [data-search-input] { font-size: 1rem; padding: .8rem .7rem .8rem 2.4rem; }
  .hero-search-icon { left: .85rem; width: 1rem; }
  .browse-columns { grid-template-columns: 1fr; gap: 1.5rem; }
  .browse-list a { min-height: 44px; padding: .7rem .5rem; }
}


/* Phase 5 catalog hierarchy refinement: source sequence remains authoritative;
   presentation is deliberately restrained so headings, explanatory copy and
   pricing families read as one catalog rather than disconnected callout cards. */
.page-toolbar {
  margin-bottom: 1.25rem;
  padding-bottom: .75rem;
}
.page-heading h1, .index-heading h1 { font-size: 1.65rem; }
.catalog-section > .source-heading { margin-top: .25rem; }
.section-note {
  margin-bottom: 1rem;
  padding: .5rem .7rem;
  background: transparent;
  border-left-width: 2px;
  font-size: .82rem;
}
.intro {
  margin-bottom: 1.25rem;
  padding-bottom: 1rem;
  border-bottom: 0;
}
.intro-block { margin-bottom: .65rem; }
.intro-line { margin-bottom: .22rem; }
.family { margin-bottom: 1.8rem; }
.family-heading {
  padding-left: 0;
  padding-bottom: .45rem;
  border-left: 0;
  border-bottom: 1px solid var(--hairline);
}
.family-heading h2, .family-heading h3 { font-size: 1.1rem; }



.source-page-link, .source-url-link { color: var(--copper-deep); text-decoration: underline; text-underline-offset: 2px; }
.source-url-link { overflow-wrap: anywhere; }
.series-header .source-page-link, .series-header .source-url-link { color: inherit; }


/* Phase 5 visual correction after staging review: catalog typography, not cards.
   Source order/content remains untouched. */
.site-main { max-width: 72rem; }
.page-toolbar { gap: .55rem; margin-bottom: 1rem; padding-bottom: .65rem; }
.page-heading h1, .index-heading h1 { font-size: 1.48rem; line-height: 1.15; }
.filter-box label { font-size: .72rem; }
#filter-input { width: 19rem; padding: .4rem .6rem; font-size: .82rem; }

.catalog-section { margin: 0; }
.source-heading {
  margin: .7rem 0 .22rem;
  font-family: "Helvetica Neue", Arial, sans-serif;
  font-size: .92rem;
  line-height: 1.25;
  font-weight: 700;
}
.section-note {
  margin: .25rem 0 .55rem;
  padding: 0;
  border: 0;
  background: transparent;
  font-size: .84rem;
  font-weight: 600;
  line-height: 1.35;
}
.intro { margin: .25rem 0 .65rem; padding: 0; }
.intro-block { margin-bottom: .35rem; }
.intro-line { margin: 0 0 .14rem; font-size: .84rem; line-height: 1.35; }
.intro-line > strong:first-child:has(> u) {
  font-family: "Helvetica Neue", Arial, sans-serif;
  font-size: .9rem;
  color: var(--charcoal);
}
.family { margin: .65rem 0 1.15rem; }
.family-heading {
  margin: 0 0 .3rem;
  padding: 0;
  border: 0;
}
.family-heading h2, .family-heading h3 {
  margin: 0 0 .08rem;
  font-family: "Helvetica Neue", Arial, sans-serif;
  font-size: 1rem;
  line-height: 1.25;
}
.family-heading p { margin: .06rem 0; max-width: none; font-size: .82rem; line-height: 1.3; }
.family-heading p.family-note { margin-top: .15rem; }
.family-heading p.family-name-label { margin-bottom: .08rem; font-size: .67rem; }
.section-divider { margin: 1.7rem 0 .65rem; padding-top: .8rem; border-top-width: 2px; }
.section-divider h2 {
  margin-top: .08rem;
  font-family: "Helvetica Neue", Arial, sans-serif;
  font-size: 1.05rem;
}
.section-images, .family-images { margin: .35rem 0 .65rem; gap: .65rem; }
.price-table thead th { padding: .42rem .55rem; font-size: .68rem; }
.price-table tbody td { padding: .36rem .55rem; font-size: .82rem; }
.row-group-divider td { padding: .3rem .55rem; }

/* Do not turn warnings, qualifiers, or source headings into web callouts. */
.catalog-section > .section-note + .section-note,
.catalog-section > .source-heading + .section-note { margin-top: 0; }

@media (max-width: 40rem) {
  .page-heading h1, .index-heading h1 { font-size: 1.3rem; }
  .source-heading { font-size: .88rem; }
  .section-note, .intro-line { font-size: .8rem; }
  .family { margin-bottom: 1rem; }
  .family-heading h2, .family-heading h3 { font-size: .94rem; }
}




/* Phase 5 catalog redesign: desktop density and hierarchy.
   The approved LP-1026 source content/order remains unchanged. */
@media (min-width: 40.01rem) {
  body { font-size: 14px; line-height: 1.32; }
  .site-main { max-width: 68rem; padding: 1.15rem 1.35rem 2.5rem; }
  .page-toolbar {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: end;
    gap: 1rem;
    margin: 0 0 .8rem;
    padding: 0 0 .55rem;
    border-bottom: 1px solid var(--hairline);
  }
  .page-heading { margin: 0; }
  .eyebrow { margin-bottom: .12rem; font-size: .64rem; letter-spacing: .08em; }
  .page-heading h1, .index-heading h1 {
    margin: 0;
    font-family: "Helvetica Neue", Arial, sans-serif;
    font-size: 1.38rem;
    line-height: 1.08;
    font-weight: 700;
  }
  .filter-box { margin: 0; min-width: 17rem; }
  .filter-box label { margin-bottom: .15rem; font-size: .61rem; font-weight: 700; }
  #filter-input { width: 17rem; padding: .32rem .48rem; font-size: .76rem; }

  .catalog-section { margin: 0 0 .9rem; }
  .source-heading {
    margin: .82rem 0 .24rem;
    padding: 0 0 .16rem;
    border-bottom: 1px solid #cfd5da;
    font-size: .82rem;
    line-height: 1.2;
    letter-spacing: .015em;
    text-transform: uppercase;
  }
  .section-note { margin: .16rem 0 .4rem; font-size: .76rem; line-height: 1.28; }
  .intro { margin: .14rem 0 .48rem; }
  .intro-block { margin: 0 0 .28rem; }
  .intro-line { margin: 0 0 .08rem; font-size: .76rem; line-height: 1.28; }
  .intro-line > strong:first-child:has(> u) { font-size: .78rem; }

  .family { margin: .55rem 0 .9rem; }
  .family-heading { margin: 0 0 .22rem; }
  .family-heading h2, .family-heading h3 {
    margin: 0 0 .04rem;
    font-size: .88rem;
    line-height: 1.18;
  }
  .family-heading p { margin: .03rem 0; font-size: .73rem; line-height: 1.25; }
  .family-heading p.family-name-label { font-size: .58rem; }
  .family-fragment { margin: .28rem 0 .08rem; font-size: .75rem; font-weight: 700; }

  .table-scroll { margin: .2rem 0 .55rem; }
  .price-table thead th { padding: .28rem .4rem; font-size: .59rem; line-height: 1.15; }
  .price-table tbody td { padding: .25rem .4rem; font-size: .72rem; line-height: 1.2; }
  .row-group-divider td { padding: .22rem .4rem; font-size: .58rem; }

  .section-images, .family-images { margin: .28rem 0 .5rem; gap: .5rem; }
  .section-divider { margin: 1.15rem 0 .5rem; padding-top: .55rem; }
  .section-divider h2 { font-size: .92rem; }
}




/* Logs/Vented reference-page visual system: readable web catalog, not a
   compressed print facsimile. Source words/order/data remain untouched. */
.site-main { max-width: 74rem; }
.page-toolbar {
  grid-template-columns: minmax(0, 1fr) minmax(16rem, 21rem);
  padding-top: .35rem;
  padding-bottom: .85rem;
  margin-bottom: 1.35rem;
}
.page-heading h1, .index-heading h1 { font-size: 1.75rem; letter-spacing: -.015em; }
.eyebrow { font-size: .7rem; }
#filter-input { width: 100%; }

.catalog-section > .source-heading:first-child { margin-top: 0; }
.source-heading {
  margin: 1.25rem 0 .5rem;
  padding-bottom: .3rem;
  border-bottom: 2px solid var(--orange);
  font-size: .9rem;
}
.intro { max-width: 62rem; margin-bottom: 1rem; }
.intro-block { margin-bottom: .6rem; }
.intro-line { margin-bottom: .16rem; font-size: .86rem; line-height: 1.42; }
.section-note { max-width: 62rem; font-size: .84rem; line-height: 1.38; }

.family { margin: 1.45rem 0 2rem; }
.family-heading { margin-bottom: .55rem; }
.family-heading h2, .family-heading h3 {
  font-size: 1.18rem;
  line-height: 1.22;
  letter-spacing: -.01em;
}
.family-heading p { max-width: 58rem; font-size: .88rem; line-height: 1.4; }

.table-scroll {
  border: 1px solid #d7dde3;
  border-radius: .25rem;
  background: #fff;
}
.price-table { border-collapse: separate; border-spacing: 0; }
.price-table thead th {
  padding: .55rem .65rem;
  background: #243247;
  color: #fff;
  border-bottom: 0;
  font-size: .68rem;
  line-height: 1.15;
  letter-spacing: .025em;
}
.price-table tbody td {
  padding: .52rem .65rem;
  border-bottom: 1px solid #e2e6ea;
  font-size: .84rem;
  line-height: 1.28;
}
.price-table tbody tr:last-child td { border-bottom: 0; }
.price-table tbody tr:nth-child(even):not(.row-group-divider) td { background: #f7f8fa; }
.price-table tbody td:first-child,
.price-table tbody td:nth-child(2) { font-weight: 650; }
.price-table tbody td.money { font-weight: 750; }
.row-group-divider td {
  padding: .45rem .65rem;
  background: #fff2df !important;
  color: #9b4300;
  font-size: .7rem;
  letter-spacing: .04em;
}

@media (max-width: 40rem) {
  .site-main { padding: .9rem .9rem 2rem; }
  .page-toolbar { display: block; margin-bottom: 1rem; }
  .page-heading h1, .index-heading h1 { font-size: 1.55rem; }
  .filter-box { margin-top: .75rem; min-width: 0; }
  #filter-input { width: 100%; font-size: .9rem; }
  .source-heading { margin-top: 1rem; font-size: .88rem; }
  .intro, .section-note { max-width: none; }
  .intro-line { font-size: .9rem; line-height: 1.42; }
  .section-note { font-size: .88rem; line-height: 1.4; }
  .family { margin: 1.2rem 0 1.6rem; }
  .family-heading h2, .family-heading h3 { font-size: 1.2rem; }
  .family-heading p { font-size: .92rem; line-height: 1.4; }

}


/* Logs/Vented page-acceptance pass: comfortable manufacturer catalog.
   Presentation only; source data, wording, order and pricing are unchanged. */
@media (min-width: 40.01rem) {
  body { font-size: 15px; line-height: 1.45; }
  .site-main { max-width: 70rem; padding: 1.5rem 1.5rem 3.5rem; }
  .page-toolbar {
    grid-template-columns: minmax(0, 1fr) minmax(18rem, 21rem);
    align-items: end;
    gap: 2rem;
    margin-bottom: 1.5rem;
    padding: .15rem 0 1rem;
  }
  .page-heading h1, .index-heading h1 {
    font-size: 1.9rem;
    line-height: 1.12;
  }
  .filter-box label { font-size: .72rem; }
  #filter-input { padding: .55rem .7rem; font-size: .88rem; }

  .catalog-section { margin-bottom: 1.5rem; }
  .source-heading {
    margin: 1.45rem 0 .55rem;
    padding: 0 0 .35rem;
    border-bottom: 1px solid #cfd5da;
    font-size: .95rem;
    line-height: 1.3;
    letter-spacing: .025em;
  }
  .section-note {
    max-width: 60rem;
    margin: .35rem 0 .75rem;
    font-size: .88rem;
    line-height: 1.45;
  }
  .intro { max-width: 60rem; margin: .3rem 0 1rem; }
  .intro-block { margin-bottom: .7rem; }
  .intro-line { margin: 0 0 .22rem; font-size: .9rem; line-height: 1.48; }
  .intro-line > strong:first-child:has(> u) { font-size: .94rem; }

  .family { margin: 1.25rem 0 2rem; }
  .family-heading { margin: 0 0 .6rem; }
  .family-heading h2, .family-heading h3 {
    font-size: 1.2rem;
    line-height: 1.25;
  }
  .family-heading p { max-width: 58rem; font-size: .88rem; line-height: 1.42; }
  .family-heading p.family-name-label { font-size: .67rem; }
  .family-fragment { margin: .55rem 0 .2rem; font-size: .88rem; }

  .table-scroll { margin: .35rem 0 .8rem; }
  .price-table thead th { padding: .58rem .65rem; font-size: .7rem; }
  .price-table tbody td { padding: .52rem .65rem; font-size: .86rem; line-height: 1.3; }
  .row-group-divider td { padding: .45rem .65rem; font-size: .68rem; }

  .section-divider { margin: 2.5rem 0 1rem; padding-top: 1.15rem; }
  .section-divider h2 { font-size: 1.15rem; }
}

@media (max-width: 40rem) {
  body { font-size: 15px; }
  .site-main { padding: 1rem .9rem 2.5rem; }
  .page-toolbar { margin-bottom: 1.15rem; padding-bottom: .8rem; }
  .page-heading h1, .index-heading h1 { font-size: 1.5rem; line-height: 1.15; }
  .filter-box label { font-size: .72rem; }
  #filter-input { padding: .55rem .65rem; font-size: .95rem; }

  .source-heading { margin: 1.15rem 0 .45rem; font-size: .92rem; line-height: 1.3; }
  .section-note { margin: .3rem 0 .7rem; font-size: .88rem; line-height: 1.42; }
  .intro { margin: .25rem 0 .85rem; }
  .intro-block { margin-bottom: .55rem; }
  .intro-line { margin-bottom: .18rem; font-size: .91rem; line-height: 1.45; }

  .family { margin: 1.1rem 0 1.55rem; }
  .family-heading { margin-bottom: .45rem; }
  .family-heading h2, .family-heading h3 { font-size: 1.12rem; line-height: 1.25; }
  .family-heading p { font-size: .9rem; line-height: 1.4; }
}


/* P2 Logs source-faithful information design.
   User-approved treatment: Option 2 for SELECTING A VENTED SET and
   Option 3 for the real-pieces-of-wood construction/finish section.
   Only presentation changes; source runs, wording, links and sequence remain intact. */
.vented-selection-heading {
  max-width: 64rem;
  margin: .35rem 0 .55rem;
}
.vented-feature-title {
  margin: 0;
  padding: .72rem 1rem;
  border-left: 4px solid var(--copper-deep);
  border-radius: 0 6px 6px 0;
  background: var(--panel);
  font-size: 1.08rem;
  line-height: 1.25;
  font-weight: 800;
  color: var(--charcoal);
}


.vented-pathways {
  max-width: 64rem;
  margin: 0 0 1.45rem;
}
.vented-pathways-lede { margin: 0 0 .8rem; }
.vented-pathways-intro {
  margin: 0;
  font-size: .9rem;
  line-height: 1.45;
  color: var(--charcoal-soft);
}
.vented-pathways-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem;
}
.vented-path-card {
  overflow: hidden;
  border: 1px solid var(--hairline);
  border-radius: 8px;
  background: #fff;
}
.vented-path-header {
  padding: .8rem 1rem;
  border-bottom: 1px solid var(--hairline);
  background: var(--panel);
}
.vented-path-title {
  margin: 0;
  font-size: .96rem;
  line-height: 1.3;
  font-weight: 800;
  color: var(--copper-deep);
}
.vented-path-body {
  padding: .85rem 1rem .95rem;
}
/* Step lines: the source's own bold step label ("(1)", "(2a)", "(2b)" ...)
   stays bold inline text, as in Excel; no generated numbering is added. */
.vented-path-step {
  margin: 0 0 .72rem;
  font-size: .86rem;
  line-height: 1.5;
  color: var(--ink);
}
.vented-path-step:last-child { margin-bottom: 0; }
.vented-path-step .source-page-link {
  font-weight: 700;
  color: var(--copper-deep);
}

.vented-clean-header {
  max-width: 64rem;
  margin: 1.15rem 0 .75rem;
  padding: .72rem 1rem;
  border-left: 4px solid var(--copper-deep);
  border-radius: 0 6px 6px 0;
  background: var(--panel);
}
.vented-clean-header-line {
  margin: 0;
  font-size: .88rem;
  line-height: 1.4;
  color: var(--charcoal-soft);
}
.vented-clean-header-line:first-child {
  margin-bottom: .18rem;
  font-size: 1.02rem;
  font-weight: 800;
  color: var(--charcoal);
}

.vented-quality-grid {
  max-width: 64rem;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .75rem;
  margin: 0 0 1rem;
}
.vented-quality-item {
  padding: .9rem 1rem;
  border: 1px solid var(--hairline);
  border-radius: 7px;
  background: var(--panel);
}
.vented-quality-line {
  margin: 0;
  font-size: .86rem;
  line-height: 1.45;
  color: var(--charcoal-soft);
}
.vented-quality-line strong {
  color: var(--charcoal);
  font-weight: 800;
}
.vented-quality-warranty {
  grid-column: 1 / -1;
  padding: .65rem .85rem;
  border-left: 3px solid var(--copper);
  background: #fffaf0;
}
.vented-quality-warranty .vented-quality-line {
  color: var(--copper-deep);
  font-size: .82rem;
  font-weight: 700;
}
.vented-quality-warranty u { text-decoration: none; }

@media (max-width: 40rem) {
  .vented-feature-title {
    padding: .65rem .75rem;
    font-size: 1rem;
  }
  .vented-pathways-grid,
  .vented-quality-grid {
    grid-template-columns: 1fr;
  }
  .vented-pathways { margin-bottom: 1.15rem; }
  .vented-pathways-intro { font-size: .9rem; }
  .vented-path-header { padding: .72rem .8rem; }
  .vented-path-body { padding: .75rem .8rem .85rem; }
  .vented-path-step { font-size: .88rem; }
  .vented-clean-header { padding: .65rem .75rem; }
  .vented-clean-header-line:first-child { font-size: .98rem; }
  .vented-quality-item { padding: .8rem .85rem; }
  .vented-quality-line { font-size: .88rem; }
  .vented-quality-warranty { grid-column: auto; }
}

/* LP-1026 logs-vented visual system — supplied HTML design authority, canonical content retained */
body{background:#f8fafc;color:#0f172a;line-height:1.5}
.site-header{background:#fff;border-bottom:1px solid #cbd5e1;box-shadow:0 1px 3px rgba(0,0,0,.05);padding:16px;gap:16px}
.site-main{max-width:1050px;margin:0 auto;padding:20px 16px}
.header-search input{background:#f1f5f9;border:1px solid #cbd5e1;border-radius:8px;padding:10px 14px;font-size:.9rem}
.page-toolbar{position:sticky;top:0;z-index:100;background:#fff;border-bottom:2px solid #9a2c16;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:12px 16px;margin:0 -16px 24px;display:flex;align-items:center;gap:18px}
.page-heading h1{color:#9a2c16;text-transform:uppercase;letter-spacing:.05em;font-size:1.35rem;margin:0}.page-kicker{color:#64748b;font-weight:600}.filter-box{margin-left:auto;max-width:520px;flex:1}.filter-box label{color:#9a2c16;text-transform:uppercase;font-size:.85rem;font-weight:700}.filter-box input{border:1px solid #cbd5e1;border-radius:6px;padding:8px 12px}
#p2_logs .vented-selection-heading,#p2_logs .vented-pathways,#p2_logs .vented-clean-header,#p2_logs .vented-quality-grid{max-width:none}
#p2_logs .vented-selection-heading{background:#fff;border:1px solid #cbd5e1;border-bottom:0;border-radius:12px 12px 0 0;padding:24px 24px 0;margin:0}
#p2_logs .vented-feature-title{background:none;border:0;border-bottom:2px solid #f8fafc;border-radius:0;padding:0 0 12px;margin:0;color:#9a2c16;font-size:1.3rem;text-transform:uppercase}
#p2_logs .vented-pathways{background:#fff;border-left:1px solid #cbd5e1;border-right:1px solid #cbd5e1;padding:12px 24px 0;margin:0}
#p2_logs .vented-pathways-lede{background:#f8fafc;border-left:4px solid #9a2c16;padding:10px 16px;border-radius:0 6px 6px 0;margin:0 0 20px}
#p2_logs .vented-pathways-intro{font-size:.925rem;color:#0f172a}
#p2_logs .vented-pathways-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-bottom:24px}
#p2_logs .vented-path-card{border:1px solid #cbd5e1;border-radius:8px;background:#fff}
#p2_logs .vented-path-header{background:#f8fafc;padding:12px 16px;border-bottom:1px solid #cbd5e1}
#p2_logs .vented-path-title{font-size:1rem;color:#7a2211;font-weight:700}
#p2_logs .vented-path-body{padding:16px}
#p2_logs .vented-clean-header{background:#fff;border-left:1px solid #cbd5e1;border-right:1px solid #cbd5e1;border-radius:0;padding:0 24px;margin:0}
#p2_logs .vented-clean-header-line{font-size:.95rem;color:#64748b;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:0;margin:0 0 12px}
#p2_logs .vented-quality-grid{background:#fff;border:1px solid #cbd5e1;border-top:0;border-radius:0 0 12px 12px;padding:0 24px 24px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 28px}
#p2_logs .vented-quality-item{background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;padding:12px}
#p2_logs .vented-quality-line{font-size:.85rem;color:#0f172a;line-height:1.5}
#p2_logs .vented-quality-warranty{grid-column:1/-1;background:#fff7ed;border:1px solid #fdba74;border-radius:6px;padding:10px 12px}
.family.series-card{background:#fff;border:1px solid #cbd5e1;border-radius:10px;margin-bottom:24px;overflow:hidden;box-shadow:0 2px 4px rgba(0,0,0,.03)}
.family.series-card .series-header{background:#1e293b;color:#fff;padding:16px;margin:0}
.family.series-card .series-header h3{color:#fff;margin:0 0 4px;font-size:1.2rem}.family.series-card .series-header p,.family.series-card .series-header .family-note{color:#cbd5e1;margin:.2rem 0;font-size:.875rem}
.family.series-card .table-scroll{margin:0;overflow:visible}.family.series-card .responsive-table{width:100%;border-collapse:collapse}.family.series-card .responsive-table th{background:#1e293b;color:#fff;font-size:.725rem;text-transform:uppercase;letter-spacing:.05em;padding:10px 12px;text-align:left;border-bottom:1px solid #cbd5e1}.family.series-card .responsive-table td{padding:10px 12px;font-size:.875rem;border-bottom:1px solid #cbd5e1}.family.series-card .responsive-table .row-group-divider td{background:#fff7ed;color:#c2410c;font-weight:700;font-size:.8rem;letter-spacing:.05em;border-top:1px solid #fdba74;border-bottom:1px solid #fdba74}.family.series-card .responsive-table td.money{font-weight:700;color:#9a2c16}
.site-footer{background:#fff;border-top:1px solid #cbd5e1;color:#64748b;text-align:center;padding:24px 16px;margin-top:40px;font-size:.85rem}
@media(max-width:680px){.site-main{padding:12px}.page-toolbar{margin:0 -12px 18px;padding:10px 12px;display:block}.filter-box{max-width:none;margin:8px 0 0}.page-heading h1{font-size:1.15rem}#p2_logs .vented-selection-heading{padding:18px 16px 0}#p2_logs .vented-pathways{padding:12px 16px 0}#p2_logs .vented-pathways-grid,#p2_logs .vented-quality-grid{grid-template-columns:1fr}#p2_logs .vented-clean-header{padding:0 16px}#p2_logs .vented-quality-grid{padding:0 16px 18px}}

[hidden]{display:none!important}

/* Vented selection steps: one step per row, label badge + text */
#p2_logs .vented-step-group{margin:0 0 14px}
#p2_logs .vented-step-group .vented-path-step{margin:0}

/* =====================================================================
   PRESENTATION SYSTEM (LP-1026 presentation layer)
   Two generic, source-driven systems replace the earlier page-specific and
   stacked mobile-table overrides. Markup carries the semantics (see
   presentation.py, templates/_info.html, templates/_family.html); no rule
   below targets a page id. Presentation only: no text is generated here.
   ===================================================================== */
:root {
  --ink: #0F172A;
  --ink-soft: #334155;
  --card-bg: #FFFFFF;
  --card-border: #CBD5E1;
  --card-line: #E2E8F0;
  --card-shadow: 0 1px 3px rgba(15, 23, 42, .06);
  --header-bg: #1E293B;          /* same charcoal as table + series headers */
  --header-ink: #FFFFFF;
  --header-ink-soft: #CBD5E1;
  --accent: var(--copper);
  --accent-ink: var(--copper-deep);
  --warn-bg: #FFF7ED;
  --warn-border: #FDBA74;
  --warn-accent: #C2410C;
  --price-bg: #FFF4E8;
}

/* ---------- 1. Product tables on phones: compact product cards ----------
   Desktop/tablet keep the table (>40rem). At phone width every row becomes a
   card, built from the same cells (nothing is duplicated or removed):
     data-role="id"    dark header bar (model / item number)
     data-role="lead"  the size column, moved to the right of that header
     data-role="body"  compact label/value rows; data-wide="true" columns get
                       a full-width stacked row; money cells get emphasis.
   Row-group rows (SINGLE FACE / DOUBLE FACE ...) become separator bars. */
@media (max-width: 40rem) {
  .family .table-scroll {
    margin: 0;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: transparent;
  }
  .family .responsive-table,
  .family .responsive-table tbody {
    display: block;
    width: 100%;
    min-width: 0;
  }
  .family .responsive-table colgroup { display: none; }
  /* column headers stay in the accessibility tree; each cell also carries its
     own label (data-label) as visible text */
  .family .responsive-table thead {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
  }

  .family .responsive-table tbody tr[data-filterable="true"] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    margin: 0 0 .8rem;
    overflow: hidden;
    border: 1px solid var(--card-border);
    border-radius: 8px;
    background: var(--card-bg);
    box-shadow: var(--card-shadow);
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td {
    display: flex;
    grid-column: 1 / -1;
    align-items: baseline;
    justify-content: space-between;
    gap: .9rem;
    min-width: 0;
    padding: .5rem .85rem;
    border: 0;
    border-top: 1px solid var(--card-line);
    background: transparent;
    color: var(--ink);
    font-size: .92rem;
    font-weight: 500;
    line-height: 1.3;
    text-align: right;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td::before {
    flex: none;
    max-width: 55%;
    color: var(--slate);
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .04em;
    line-height: 1.3;
    text-align: left;
    text-transform: uppercase;
    content: attr(data-label);
  }

  /* header bar: identifier (left) + size (right) */
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="id"],
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="lead"] {
    grid-row: 1;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    gap: .1rem;
    padding: .6rem .85rem;
    border-top: 0;
    background: var(--header-bg);
    color: var(--header-ink);
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="id"] {
    grid-column: 1;
    font-size: 1.12rem;
    font-weight: 800;
    letter-spacing: .01em;
    text-align: left;
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="lead"] {
    grid-column: 2;
    align-items: flex-end;
    font-size: 1rem;
    font-weight: 700;
    text-align: right;
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="id"]::before,
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="lead"]::before {
    max-width: none;
    color: var(--header-ink-soft);
    font-size: .66rem;
    font-weight: 600;
  }
  /* the header caption is the base column label only; the source column
     sublabel (e.g. "Single Face") stays on the desktop table header */
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="id"]::before {
    content: attr(data-caption);
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-role="lead"][data-empty]::before {
    visibility: hidden;
  }

  /* long fields (e.g. Use With Burner, dimensions): full-width, stacked */
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-wide="true"] {
    flex-direction: column;
    align-items: flex-start;
    gap: .15rem;
    background: var(--panel);
    text-align: left;
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td[data-wide="true"]::before {
    max-width: none;
  }

  /* price emphasis */
  .family .responsive-table tbody tr[data-filterable="true"] > td.money {
    background: var(--price-bg);
    color: var(--money);
    font-size: 1.12rem;
    font-weight: 800;
    white-space: normal;
  }
  .family .responsive-table tbody tr[data-filterable="true"] > td.money::before {
    color: var(--accent-ink);
  }

  /* SINGLE FACE / DOUBLE FACE ... separators */
  .family .responsive-table tr.row-group-divider {
    display: block;
    margin: 1.1rem 0 .65rem;
  }
  .family .responsive-table tr.row-group-divider:first-child { margin-top: .2rem; }
  .family .responsive-table tr.row-group-divider > td {
    display: block;
    padding: .5rem .85rem;
    border: 0;
    border-left: 4px solid var(--accent);
    border-radius: 0 6px 6px 0;
    color: var(--accent-ink);
    font-size: .74rem;
    font-weight: 800;
    letter-spacing: .06em;
    text-transform: uppercase;
  }
}

/* ---------- 2. Information components (source text boxes) ----------
   One vocabulary for every dense text box, chosen by presentation.intro_view()
   from the source's own formatting:
     .info-label     short bold line standing alone
     .info-notice    whole-paragraph bold emphasis; --warning for NOTE/Please Note
     .info-card      plain multi-line/long paragraph(s) or bullet list, contained
     .info-panel     bold+underline headings => .info-group sections
     .info-entries   bold+underline lead term + definition => .info-entry cards
   Shared parts: .info-heading/.info-subheading, .info-list (+ .list-marker),
   .info-rule (source dashed divider), .entry-title/.entry-sep. */
.info-label,
.info-notice,
.info-card,
.info-panel,
.info-entries { max-width: 62rem; }

:where(.info-card, .info-panel, .info-entry, .info-notice, .info-label) .intro-line {
  margin: 0;
  color: var(--ink-soft);
  font-size: .9rem;
  line-height: 1.5;
}
:where(.info-card, .info-panel, .info-entry, .info-notice) .intro-line strong { color: var(--ink); font-weight: 700; }
:where(.info-card, .info-panel, .info-entry) .intro-line + .intro-line { margin-top: .55rem; }

/* contained blocks */
.info-card,
.info-panel,
.info-entry {
  margin: .5rem 0 1rem;
  padding: .85rem 1.1rem;
  border: 1px solid var(--card-border);
  border-left: 4px solid var(--accent);
  border-radius: 8px;
  background: var(--card-bg);
  box-shadow: var(--card-shadow);
}
.info-entry { overflow: hidden; margin-bottom: .65rem; padding-top: 0; }

/* stand-alone label: a source heading textbox. The line keeps the body
   intro size (= source 10 pt); each run's .source-size em scales it to its
   own source point size. Alignment and underline are the source's own. */
.info-label { margin: 1.25rem 0 .55rem; }
.info-label .intro-line { color: var(--ink); font-weight: 700; line-height: 1.3; }
.info-label .intro-line u { text-decoration-color: currentColor; }
.info-label--ctr { text-align: center; }
.info-label--r { text-align: right; }

/* notices */
.info-notice {
  margin: .5rem 0 1rem;
  padding: .7rem 1rem;
  border: 1px solid var(--card-border);
  border-left: 4px solid var(--accent);
  border-radius: 6px;
  background: var(--panel);
}
.info-notice .intro-line { color: var(--ink); }
.info-notice .intro-line + .intro-line { margin-top: .4rem; }
.info-notice--warning {
  border-color: var(--warn-border);
  border-left-color: var(--warn-accent);
  background: var(--warn-bg);
}
.info-card .info-notice { margin: .55rem 0 0; }
.info-card .info-notice:first-child { margin-top: 0; }

/* sectioned panel */
.info-group + .info-group,
.info-group + .info-rule,
.info-rule + .info-group { margin-top: 1rem; }
.info-group + .info-group { padding-top: 1rem; border-top: 1px solid var(--card-line); }
.info-heading {
  margin: 0 0 .5rem;
  padding-bottom: .3rem;
  border-bottom: 2px solid var(--card-line);
  color: var(--ink);
  font-weight: 800;
}
.info-panel .info-heading,
.info-panel .info-heading strong { color: var(--ink); font-size: .95rem; line-height: 1.3; }
.info-heading u { text-decoration: none; }
.info-subheading,
.info-card .info-subheading,
.info-panel .info-subheading {
  margin: .8rem 0 .35rem;
  color: var(--accent-ink);
  font-size: .9rem;
  font-weight: 700;
}
.info-subheading:first-child { margin-top: 0; }
.info-subheading strong, .info-subheading u { color: inherit; text-decoration: none; }
.info-group > .info-text + .info-text { margin-top: .55rem; }

/* the source's own "-" / "•" lists: hanging indent, marker kept as text */
.info-list { margin: .3rem 0 .6rem; }
.info-list > .info-list-item {
  margin: 0 0 .4rem;
  padding-left: 1.3rem;
  text-indent: -1.3rem;
}
.info-list > .info-list-item:last-child { margin-bottom: 0; }
.list-marker {
  display: inline-block;
  width: 1.3rem;
  color: var(--accent-ink);
  font-weight: 800;
  text-indent: 0;
}

/* source dashed divider: keep the characters (a11y-hidden), draw a rule */
p.info-rule.intro-line {
  display: block;
  height: 0;
  margin: 1.1rem 0;
  border-top: 1px solid var(--card-border);
  font-size: 0;
  line-height: 0;
  overflow: hidden;
  color: transparent;
  user-select: none;
}

/* lead-term entries: charcoal title bar (as in series headers) + definition */
.entry-title {
  display: block;
  margin: 0 -1.1rem .65rem;
  padding: .5rem 1.1rem;
  background: var(--header-bg);
  color: var(--header-ink);
  font-size: .95rem;
  font-weight: 800;
  line-height: 1.3;
}
.info-entry .entry-title strong { color: var(--header-ink); font-weight: 800; }
.info-entry .entry-title u { text-decoration: none; }
.entry-sep { color: var(--slate-faint); font-weight: 600; }
.info-lede { margin: .5rem 0 .8rem; }
.info-lede .intro-line { color: var(--ink-soft); font-size: .9rem; line-height: 1.5; }

@media (max-width: 40rem) {
  .info-card,
  .info-panel,
  .info-entry { padding: .75rem .85rem; }
  .info-entry { padding-top: 0; }
  .entry-title { margin: 0 -.85rem .6rem; padding: .5rem .85rem; }
  .info-notice { padding: .65rem .85rem; }
  :where(.info-card, .info-panel, .info-entry, .info-notice, .info-label) .intro-line { font-size: .92rem; }
}

/* =====================================================================
   FIX/LP1026-FINAL-VISUAL-QA — presentation-only correction pass.
   Scope: header/logo prominence, one coordinated search system (global
   vs. page filter), nested/subordinate bullets reading as beneath their
   parent line, and a less-repetitive rhythm for long informational
   pages. Nothing below adds, removes, reorders or rewrites source text;
   every rule is generic (no page id / element id selectors) so it
   applies the same way everywhere the pattern occurs. ===================
   ===================================================================== */

/* ---- 1 & 5. header/logo: real presence, one balanced row, no hacks ---- */
.site-header {
  display: grid;
  grid-template-columns: auto minmax(14rem, 30rem) 1fr;
  grid-template-areas: "brand search kicker";
  align-items: center;
  column-gap: 1.75rem;
  row-gap: .6rem;
}
.site-header .brand { grid-area: brand; }
.site-header .header-search {
  grid-area: search;
  justify-self: stretch;
  width: auto;
  max-width: none;
  flex: none;
}
.site-header .site-kicker { grid-area: kicker; justify-self: end; text-align: right; }

.brand-logo { height: 58px; max-width: min(60vw, 21rem); }

@media (max-width: 40rem) {
  .site-header {
    grid-template-columns: auto 1fr;
    grid-template-areas: "brand kicker" "search search";
    align-items: center;
  }
  .site-header .header-search { justify-self: stretch; }
  .site-header .site-kicker { font-size: .68rem; }
  .brand-logo { height: 42px; max-width: 55vw; }
}

/* ---- 2. one search system: shared shape language, distinct scope ---- */
.header-search label,
.filter-box label {
  display: flex;
  align-items: center;
  gap: .35rem;
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .05em;
  text-transform: uppercase;
}
.header-search label { color: var(--copper-deep); }
.filter-box label { color: var(--slate); }
.header-search label::before,
.filter-box label::before {
  content: "";
  flex: none;
  width: .8rem;
  height: .8rem;
  background-repeat: no-repeat;
  background-size: contain;
}
.header-search label::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 21l-4.35-4.35M11 19a8 8 0 1 1 0-16 8 8 0 0 1 0 16z' fill='none' stroke='%239A3412' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E");
}
.filter-box label::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 5h16M7 12h10M10 19h4' fill='none' stroke='%2364748B' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E");
}
.header-search [data-search-input],
#filter-input {
  background-repeat: no-repeat;
  background-position: .85rem center;
  background-size: 1rem;
  padding-left: 2.3rem;
  box-sizing: border-box;
}
.header-search [data-search-input] {
  border-radius: 999px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M21 21l-4.35-4.35M11 19a8 8 0 1 1 0-16 8 8 0 0 1 0 16z' fill='none' stroke='%23B45309' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
}
#filter-input {
  border-radius: 8px;
  background-color: var(--panel);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 5h16l-6 7v6l-4 2v-8z' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* filter row: same alignment/rhythm as the header search, own colour */
@media (min-width: 40.01rem) {
  .page-toolbar {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
  }
  .filter-box {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: .3rem;
    width: 18rem;
    max-width: 24rem;
    min-width: 15rem;
  }
  .filter-box label { flex-basis: auto; margin-bottom: 0; }
  #filter-input { width: 100%; }
}
@media (max-width: 40rem) {
  .page-toolbar { display: flex; flex-direction: column; align-items: stretch; gap: .6rem; }
  .filter-box { display: flex; flex-direction: column; align-items: stretch; width: 100%; gap: .3rem; }
  .filter-box label { flex-basis: auto; margin-bottom: 0; }
  #filter-input { width: 100%; }
}

/* ---- 3. nested/subordinate bullets sit visibly beneath their parent ---- */
.info-list { margin: .35rem 0 .7rem 1.05rem; }

/* ---- 4. long informational pages: only notices/entries stay bold ---- */
.info-card { border-left-color: var(--card-border); box-shadow: none; }
.info-card .info-notice,
.info-card .info-entry { border-left-color: var(--accent); }

/* multi-line family notes (e.g. resources-index) keep the source's own
   line breaks (white-space: pre-line); give them room to read as a list */
.family-heading p.family-note { line-height: 1.7; }

/* =====================================================================
   FIX/LP1026-FINAL-VISUAL-QA — special-page follow-up (PR #8).
   Scope: the two pages that failed visual acceptance after the first
   pass. Generic, sitewide fixes only where the underlying issue is
   generic (the sparse-page footer); everything else is scoped to its
   own page classes so the already-accepted header/search/list/card
   systems are untouched. No source text is added, removed, reordered
   or reworded anywhere below.
   ===================================================================== */

/* ---- notes.html (and any other near-empty page): the footer anchors to
   the bottom of the viewport instead of floating partway down a mostly
   blank page. Pages taller than the viewport are visually unaffected
   (main already exceeds its flex-basis), so this is safe for every
   already-accepted page. No content is added. ---- */
html, body { height: 100%; }
body { display: flex; flex-direction: column; min-height: 100vh; }
/* a flex item with auto cross-axis margins (.site-main's own centering
   margin:auto) shrink-wraps instead of stretching - restate the width
   explicitly so every page keeps its existing max-width/centering. */
.site-main { flex: 1 0 auto; width: 100%; }
.site-footer { flex-shrink: 0; }

/* ---- personalized-sizing-form.html: the source form has no bold/
   underline emphasis to classify by, so it renders through the bespoke
   personalized_form() macro (_info.html) instead of the generic intro
   system. Presentation only - every source word/line/order/checkbox is
   unchanged; only containment, spacing and grouping are added. ---- */
.sizing-form-intro {
  margin: .5rem 0 1.25rem;
  padding: 1rem 1.25rem;
  border: 1px solid var(--card-border);
  border-left: 4px solid var(--accent);
  border-radius: 8px;
  background: var(--card-bg);
  box-shadow: var(--card-shadow);
  max-width: 40rem;
}
.sizing-form-title .intro-line { margin: 0 0 .5rem; font-size: 1rem; font-weight: 800; color: var(--ink); }
.sizing-form-lede .intro-line { margin: 0 0 .3rem; color: var(--ink-soft); font-size: .92rem; line-height: 1.5; }
.sizing-form-lede .intro-line:last-child { margin-bottom: 0; }

.sizing-form-card {
  margin: 0 0 1.25rem;
  padding: 1.1rem 1.25rem;
  border: 1px solid var(--card-border);
  border-radius: 8px;
  background: var(--card-bg);
  box-shadow: var(--card-shadow);
  max-width: 40rem;
}
.sizing-form-group + .sizing-form-group { margin-top: .9rem; padding-top: .9rem; border-top: 1px solid var(--card-line); }
.sizing-form-label .intro-line {
  margin: 0 0 .4rem;
  font-size: .78rem;
  font-weight: 800;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--accent-ink);
}
.sizing-form-field-line {
  margin: 0 0 .5rem;
  font-size: .92rem;
  line-height: 1.6;
  color: var(--ink);
}
.sizing-form-field-line:last-child { margin-bottom: 0; }

@media (max-width: 40rem) {
  .sizing-form-intro, .sizing-form-card { padding: .9rem 1rem; }
  .sizing-form-field-line { font-size: .95rem; }
}


/* =====================================================================
   FIX/LP1026-FINAL-VISUAL-QA — final navigation/search/list hierarchy.
   Presentation only. Source text/data/order remain untouched.
   ===================================================================== */

/* Global search is a header-level tool: warm, high-contrast container. */
.site-header .header-search {
  padding: .55rem .7rem .65rem;
  border: 2px solid var(--copper);
  border-radius: 12px;
  background: #fff8f2;
  box-shadow: 0 2px 8px rgba(120, 53, 15, .12);
}
.site-header .header-search label {
  margin: 0 0 .35rem;
  color: var(--copper-deep);
}
.site-header .header-search [data-search-input] {
  min-height: 2.65rem;
  border: 1px solid var(--copper);
  background-color: #fff;
}

/* Page filter belongs to the current category, not to the site header.
   Cool neutral panel + square control language keeps its scope distinct. */
.page-toolbar .filter-box {
  padding: .7rem .8rem;
  border: 1px solid var(--slate-faint);
  border-left: 4px solid var(--slate);
  border-radius: 8px;
  background: var(--panel);
}
.page-toolbar .filter-box label { color: var(--slate); }
.page-toolbar #filter-input {
  min-height: 2.65rem;
  border: 1px solid var(--slate-faint);
  border-radius: 6px;
  background-color: #fff;
}

/* Source-evidenced lists: a real hanging marker column plus visible
   subordinate indentation. Wrapped lines align with text, never markers. */
.info-list {
  margin-left: 1.5rem;
  padding-left: 0;
}
.info-list > .info-list-item {
  position: relative;
  margin-left: 0;
  padding-left: 1.55rem;
  text-indent: -1.55rem;
}
.info-list > .info-list-item .list-marker {
  width: 1.55rem;
  text-align: left;
}
/* Progressive indentation when source structure nests list-bearing groups. */
.info-group .info-list,
.info-entry .info-list { margin-left: 1.5rem; }
.info-group .info-group .info-list,
.info-entry .info-group .info-list { margin-left: 3rem; }
/* A wrapped source line that continues a list item (indented past the item
   in Excel) stays in that item's text column, with no marker and no gap. */
.info-list > .info-list-item:has(+ .info-list-continuation) { margin-bottom: 0; }
.info-list > .info-list-item.info-list-continuation { margin-top: 0; text-indent: 0; }
/* A list-introducing line Excel indents past its siblings sits one list
   step deeper (same step as the progressive list levels above); its list
   moves with it. */
.intro-line.src-depth-1 { margin-left: 1.5rem; }
.intro-line.src-depth-2 { margin-left: 3rem; }
.info-list.src-depth-1 { margin-left: 3rem; }
.info-list.src-depth-2 { margin-left: 4.5rem; }
/* A wrapped row of inline codes keeps its source leading spaces: the
   source's own space characters, drawn in the page font, not text content. */
.source-indent::before { content: attr(data-spaces); white-space: pre; }

/* Canonical publication previous/next navigation. */
.publication-nav {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 1rem;
  margin: 3rem 0 0;
  padding: 1.25rem 0 0;
  border-top: 2px solid var(--hairline);
}
.publication-nav-slot--next { text-align: right; }
.publication-nav-current {
  min-width: 7rem;
  text-align: center;
  font-size: .9rem;
  font-weight: 800;
  color: var(--charcoal);
}
.publication-nav-link {
  display: inline-flex;
  flex-direction: column;
  gap: .2rem;
  min-width: 12rem;
  max-width: 100%;
  padding: .8rem 1rem;
  border: 1px solid var(--hairline);
  border-radius: 8px;
  background: var(--panel);
  color: var(--charcoal);
  text-decoration: none;
}
.publication-nav-link:not(.is-disabled):hover,
.publication-nav-link:not(.is-disabled):focus {
  border-color: var(--copper);
  outline: none;
  box-shadow: 0 0 0 2px rgba(180, 83, 9, .12);
}
.publication-nav-direction {
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--copper-deep);
}
.publication-nav-title {
  font-size: .9rem;
  font-weight: 700;
  line-height: 1.3;
}
.publication-nav-link--next { align-items: flex-end; }
.publication-nav-link.is-disabled {
  opacity: .38;
  cursor: default;
}

@media (max-width: 40rem) {
  .site-header .header-search { padding: .6rem .7rem .7rem; }
  .page-toolbar .filter-box { box-sizing: border-box; width: 100%; }
  .info-list { margin-left: 1.15rem; }
  .info-group .info-group .info-list,
  .info-entry .info-group .info-list { margin-left: 2.3rem; }
  .intro-line.src-depth-1 { margin-left: 1.15rem; }
  .intro-line.src-depth-2 { margin-left: 2.3rem; }
  .info-list.src-depth-1 { margin-left: 2.3rem; }
  .info-list.src-depth-2 { margin-left: 3.45rem; }

  .publication-nav {
    grid-template-columns: 1fr;
    gap: .65rem;
    margin-top: 2rem;
  }
  .publication-nav-slot,
  .publication-nav-slot--next { text-align: left; }
  .publication-nav-link {
    box-sizing: border-box;
    width: 100%;
    min-width: 0;
    min-height: 3.5rem;
    justify-content: center;
  }
  .publication-nav-link--next { align-items: flex-start; }
}


/* Source-placed pictures (web projection of the Excel picture box): each
   image's width and left offset are its share of the printable page width,
   set inline from source geometry; a group stays on one top-aligned row in
   Excel's left-to-right order, so it scales with the container and cannot
   overflow. */
.family-images.source-placed,
.section-images.source-placed {
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-start;
  gap: 0;
  width: 100%;
  max-width: none;
}
.source-placed > .family-image,
.source-placed > .section-image {
  flex: none;
  max-width: none;
  margin-right: 0;
}
.source-placed > .family-image img,
.source-placed > .section-image img {
  width: 100%;
  max-width: none;
  height: auto;
}
/* A text box Excel sets beside the picture (P14 WARNING): width, gap and
   drop from the source boxes; outline from the box's own line; padding is
   DrawingML's default text inset (0.1in sides, 0.05in top/bottom). */
.source-placed > .source-companion { flex: none; padding: 3.6pt 7.2pt; font-size: .9rem; }
.source-companion > .intro { margin: 0; padding: 0; border-bottom: 0; }
/* the box never narrows below its own text measure (width set inline) */
.source-companion .intro-line { font-size: 1em; }


/* LP-1026 source-page navigation: one compact horizontal row. */
.publication-nav {
  display: flex !important;
  flex-flow: row nowrap !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 1rem !important;
  margin: 1.25rem 0 1.75rem !important;
  padding: .75rem 0 !important;
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
}
.publication-nav-slot {
  display: block !important;
  flex: 0 0 auto !important;
  width: auto !important;
  margin: 0 !important;
}
.publication-nav-slot--next {
  margin-left: auto !important;
  text-align: right !important;
}
.publication-nav-link {
  display: inline-block !important;
  width: auto !important;
  min-width: 0 !important;
  min-height: 0 !important;
  padding: .35rem 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  white-space: nowrap !important;
  font-weight: 700;
}
.publication-nav-link:not(.is-disabled):hover,
.publication-nav-link:not(.is-disabled):focus {
  box-shadow: none;
  color: var(--copper-deep);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.publication-nav-link.is-disabled { visibility: hidden; }

@media (max-width: 40rem) {
  .publication-nav {
    flex-flow: row nowrap !important;
    gap: .75rem !important;
    margin: 1rem 0 1.35rem !important;
  }
}


/* Final LP-1026 navigation lock: previous and next must share one row.
   Use two explicit columns so no inherited grid/mobile rule can stack them. */
.publication-nav {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
  grid-template-rows: auto !important;
  column-gap: 1rem !important;
  align-items: center !important;
}
.publication-nav-slot--previous {
  grid-column: 1 !important;
  grid-row: 1 !important;
  justify-self: start !important;
}
.publication-nav-slot--next {
  grid-column: 2 !important;
  grid-row: 1 !important;
  justify-self: end !important;
  margin-left: 0 !important;
  text-align: right !important;
}
@media (max-width: 40rem) {
  .publication-nav {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
    grid-template-rows: auto !important;
  }
}

/* ---------- Excel titles (apply_source_titles) ----------
   Each Excel master/section title renders once, in the body, at its source
   position. Size comes from the source run (inline em = pt / 10 against the
   10pt body line), weight/underline from the source run, alignment from
   the source cell or text-box paragraph. No case transform. */
.source-title { margin: 1.4rem 0 .6rem; }
.catalog-section:first-child > .source-title:first-child { margin-top: .4rem; }
.source-title-line { margin: 0; font-size: .9rem; color: var(--ink); line-height: 1.25; }
.source-title-line strong { color: inherit; font-weight: 700; }
.source-title-line u { text-decoration-color: currentColor; }
.source-title--ctr { text-align: center; }
.source-title--r { text-align: right; }

/* Notes Excel places between a table's title bar and its column headers,
   rendered inside the family before the table (apply_family_leads). A
   same-row label sits to the left of its note, as in the source. */
.family-lead { padding: .75rem 1rem .5rem; }
.family-lead-item { margin: 0 0 .6rem; }
.family-lead-item .intro, .family-lead-item .intro-block { margin: 0; padding: 0; border: 0; }
.family-lead-item--labelled { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 1rem; }
.family-lead-item--labelled .source-title { margin: 0; flex: 0 0 auto; }
.family-lead-item--labelled > :last-child { flex: 1 1 18rem; }
.family-lead :where(.intro, .intro-block, .info-notice, .info-card, .info-panel, .info-entries, .info-label) {
  margin: 0; padding: 0; border: 0; background: none; box-shadow: none;
}
.info-card > .source-title:first-child, .info-panel > .source-title:first-child,
.info-notice > .source-title:first-child, .info-entries > .source-title:first-child,
.intro-block > .source-title:first-child { margin: 0 0 .5rem; }

/* P2 bespoke titles ("SELECTING A VENTED SET", "LOGS FOR VENTED SETS" and
   its 10pt line): source size (inline em), bold/underline and alignment,
   no case transform - the source's own capitalisation is kept. */
#p2_logs .vented-feature-title, #p2_logs .vented-clean-header-line {
  font-size: .9rem; text-transform: none; letter-spacing: normal; color: var(--ink); line-height: 1.25;
}
#p2_logs .vented-feature-title u, #p2_logs .vented-clean-header-line u { text-decoration: underline; text-decoration-color: currentColor; }
#p2_logs .source-title--ctr { text-align: center; }

/* P2 pathway headings: Excel runs are bold+underlined, black; "– or --" is
   plain black text (no accent colour). */
#p2_logs .vented-path-title { color: var(--ink); font-weight: 400; }
#p2_logs .vented-path-title u { text-decoration: underline; text-decoration-color: currentColor; }

/* P2 "Selecting a vented set": one flowing column as in Excel (user decision
   2026-09-22) - lede line, pathway heading, its steps, "– or --" heading,
   its steps. No cards, panels, accent bar or side-by-side grid. */
#p2_logs .vented-pathways-grid { display: block; margin: 0 0 1rem; }
#p2_logs .vented-path-card { border: 0; border-radius: 0; background: none; box-shadow: none; margin: 0; }
#p2_logs .vented-path-header { background: none; border: 0; padding: 0; margin: .55rem 0 .15rem; }
#p2_logs .vented-path-body { padding: 0; }
#p2_logs .vented-pathways-lede { background: none; border: 0; border-radius: 0; padding: 0; margin: 0 0 .2rem; }
#p2_logs .vented-step-group { margin: 0 0 .15rem; }
/* P2 "LOGS FOR VENTED SETS" text: one centred column as in Excel (box
   paragraph algn="ctr"); lines flow in source order, no cards/grid. */
#p2_logs .vented-quality-grid { display: block; background: none; border: 0; padding: 0 0 .6rem; margin: 0; text-align: center; }
#p2_logs .vented-quality-item, #p2_logs .vented-quality-warranty {
  display: block; border: 0; border-radius: 0; background: none; box-shadow: none; padding: 0; margin: 0 0 .1rem; min-height: 0;
}
#p2_logs .vented-quality-line { margin: 0; text-align: center; color: var(--ink); }
/* P2 lower text block keeps the white page panel edges. */
#p2_logs .vented-quality-grid { background: #fff; border: 1px solid #cbd5e1; border-top: 0; border-radius: 0 0 12px 12px; padding: 0 24px 16px; }
#p2_logs .vented-quality-warranty u { text-decoration: underline; text-decoration-color: currentColor; }
/* P2 '"Single Face" = One Opening ...' is a borderless 11pt bold text box in
   Excel, not a notice. */
#p2_logs .info-notice { background: none; border: 0; box-shadow: none; padding: 0; margin: 1rem 0 .5rem; text-align: center; }
#p2_logs .info-notice .intro-line { font-size: 1.1em; color: var(--ink); }

/* ---------- P2 reading design (one column, Excel order and wording) ----------
   Comfortable measure, hanging-indent steps so each step label stands clear of
   its wrapped text, generous line height and spacing between the two
   pathways; source bold/underline/sizes unchanged. */
#p2_logs .vented-pathways { padding: 8px 24px 4px; }
#p2_logs .vented-pathways-lede,
#p2_logs .vented-pathways-grid { max-width: 46rem; margin-left: auto; margin-right: auto; }
#p2_logs .vented-pathways-intro { font-size: 1rem; line-height: 1.6; color: var(--ink); }
#p2_logs .vented-path-card + .vented-path-card { border-top: 1px solid #e2e8f0; margin-top: 1.1rem; padding-top: .9rem; }
#p2_logs .vented-path-header { margin: 1rem 0 .55rem; }
#p2_logs .vented-path-title { font-size: 1.05rem; }
#p2_logs .vented-step-group { margin: 0 0 .5rem; }
#p2_logs .vented-path-step { font-size: .95rem; line-height: 1.6; color: var(--ink); }
#p2_logs .vented-path-step .source-indent { display: none; }
#p2_logs .vented-quality-grid { padding: 4px 24px 22px; }
#p2_logs .vented-quality-item, #p2_logs .vented-quality-warranty { max-width: 44rem; margin: 0 auto .35rem; }
#p2_logs .vented-quality-line { font-size: .95rem; line-height: 1.65; }
#p2_logs .vented-quality-warranty { margin-top: .9rem; }
@media (max-width: 40rem) {
  #p2_logs .vented-pathways, #p2_logs .vented-quality-grid { padding-left: 14px; padding-right: 14px; }
  #p2_logs .vented-path-step { font-size: .92rem; }
}
/* the source-indented step (2b) is a sub-step: same hanging label, nested */
#p2_logs .vented-path-step:has(> .source-indent) { margin-left: 1.4em; }
/* Step label in its own fixed column: the label floats into the left gutter,
   so every step's text (and its wrapped lines) starts at the same x whatever
   the label width ("(1)", "(2a)", "(2b)"). */
/* P2 steps: label column + text column (grid), identical for every step. */
#p2_logs .vented-path-step { display: grid; grid-template-columns: 2.9em minmax(0, 1fr); padding-left: 0; text-indent: 0; }
#p2_logs .vented-path-step > .step-label { color: var(--copper-deep); }
#p2_logs .vented-path-step > .source-indent { display: none; }

/* ---------- Site-wide reading design (from P2, approved 2026-09-22) ----------
   Text passages outside the price tables: a comfortable centred measure,
   the P2 line height and size, and copper list/step markers in their own
   column (hanging indent above). Tables keep the full page width. Wording,
   order and source bold/underline/sizes are unchanged. */
.catalog-section > :is(.intro, .info-card, .info-panel, .info-entries, .info-notice,
                       .section-note, .info-label, .source-title, .source-heading) {
  max-width: 46rem; margin-left: auto; margin-right: auto;
}
:is(.info-card, .info-panel, .info-entries, .info-notice, .intro) .intro-line {
  font-size: .95rem; line-height: 1.6; color: var(--ink);
}
:is(.info-card, .info-panel, .info-entries, .info-notice, .intro) .intro-line + .intro-line { margin-top: .35rem; }
.info-list > .info-list-item .list-marker { color: var(--copper-deep); }
@media (max-width: 40rem) {
  :is(.info-card, .info-panel, .info-entries, .info-notice, .intro) .intro-line { font-size: .92rem; }
}

/* Source underline is content emphasis (Excel <u>): keep it on card
   headings, sub-headings and entry titles too (the rules above had removed it). */
.info-heading u, .info-subheading u, .info-entry .entry-title u, .vented-quality-warranty u {
  text-decoration: underline; text-decoration-color: currentColor;
}

/* Column headings follow their column's source alignment (numbers right,
   centred columns centred), so each value sits under its own heading. */
@media (min-width: 40.01rem) {
  .family.series-card .responsive-table th.align-right { text-align: right; }
  .family.series-card .responsive-table th.align-center { text-align: center; }
}
/* In-table source sub-header (P47-P51 "Black Chassis  Carton 2 of 2 …"):
   the source's own case, not the upper-cased group-label style. */
.family.series-card .responsive-table .row-group-divider td { text-transform: none; }

/* Source lines that continue the previous sentence flow in one paragraph
   (join_wrapped_lines); the space replaces Excel's line wrap. */
.intro-line.joins-next, .intro-line.joined { display: inline; margin: 0; }
.intro-line.joins-next::after { content: " "; }
.intro-line.joined:not(.joins-next)::after { content: ""; display: block; margin-bottom: .35rem; }
.u-gap { text-decoration: underline; text-decoration-color: currentColor; }
.info-list-flow > .info-flow-part { display: inline; margin: 0; }
.info-list-flow > .info-flow-part + .info-flow-part::before { content: " "; }
/* Source cell lines rendered as themselves (P72 contact list, 12pt source). */
.source-lines { max-width: 46rem; margin: .5rem auto 1rem; }
.source-lines .source-title { margin: 0 0 .25rem; }
.source-lines .source-title-line { line-height: 1.45; font-weight: 400; overflow-wrap: anywhere; }
.section-images.float-right { float: right; margin: 0 0 .5rem 1rem; }
.section-images.float-right .section-image { width: 100% !important; margin-left: 0 !important; }
.catalog-section::after { content: ""; display: block; clear: both; }

/* ---------- P71 Personalized Sizing Form, laid out as Excel ----------
   diagram | "Personalized Sizing Assistance" box on one row; the two form
   columns side by side (left column first); labels in source case. */
.catalog-section:has(> .sizing-form-card) { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1rem 1.25rem; align-items: start; }
.catalog-section:has(> .sizing-form-card) > * { grid-column: 1 / -1; }
.catalog-section:has(> .sizing-form-card) > .section-images { grid-column: 1; margin: 0; }
.catalog-section:has(> .sizing-form-card) > .section-images .section-image { width: 100% !important; margin: 0 !important; }
.catalog-section:has(> .sizing-form-card) > .sizing-form-intro, .catalog-section:has(> .sizing-form-card) > .intro:has(.sizing-form-intro) { grid-column: 2; align-self: center; }
.catalog-section:has(> .sizing-form-card) > .sizing-form-card { grid-column: auto; max-width: none; margin: 0; }
.catalog-section:has(> .sizing-form-card) .sizing-form-label .intro-line { font-size: .92rem; font-weight: 400; letter-spacing: normal; text-transform: none; color: var(--ink); }
@media (max-width: 40rem) {
  .catalog-section:has(> .sizing-form-card) { grid-template-columns: minmax(0, 1fr); }
  .catalog-section:has(> .sizing-form-card) > .section-images, .catalog-section:has(> .sizing-form-card) > .sizing-form-intro,
  .catalog-section:has(> .sizing-form-card) > .intro:has(.sizing-form-intro), .catalog-section:has(> .sizing-form-card) > .sizing-form-card { grid-column: 1; }
}

/* ---------- Tables never cut off (641px and wider) ----------
   Between phone cards and full desktop the tables tighten (padding, text
   size, wrapping headings) so every column fits; a table that still cannot
   fit scrolls sideways inside its card instead of being clipped. */
@media (min-width: 40.01rem) {
  .family.series-card .table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .family.series-card .responsive-table th { white-space: normal; }
}
@media (min-width: 40.01rem) and (max-width: 1100px) {
  .family.series-card .responsive-table th { padding: 8px 7px; font-size: .66rem; letter-spacing: .02em; }
  .family.series-card .responsive-table td { padding: 8px 7px; font-size: .8rem; }
}
/* A filled Excel title row: the source fill across the full width. */
.catalog-section > .source-title--filled { max-width: none; padding: .3rem .75rem; margin-top: 1.4rem; margin-bottom: .25rem; }
.catalog-section > .source-title--filled + .source-title { margin-top: .1rem; }

/* ---------- Excel text boxes (apply_box_styles) ----------
   The box's own outline and fill come inline from the source shape; the
   web's card chrome inside it (border, accent bar, shadow, panel colour)
   gives way to the source. Unoutlined boxes are plain text as in Excel. */
.catalog-section > .source-box { max-width: 46rem; margin: 0 auto 1rem; }
.catalog-section > .source-box--outlined { padding: .75rem 1rem; }
.source-box :is(.intro, .info-card, .info-panel, .info-entries, .info-notice, .info-label, .intro-block) {
  border: 0; border-left: 0; box-shadow: none; background: transparent; border-radius: 0;
  margin: 0; padding: 0; max-width: none;
}
.source-box--outlined :is(.info-card, .info-panel, .info-notice)::before { display: none; }
.source-box > .source-title:only-child, .source-box .source-title { margin: 0 0 .3rem; }
.source-box > .source-title:only-child { margin: 0; }
/* source spaces inside a filled title cell position its text (P60 A1) */
.source-title--spaces .source-title-line { white-space: pre-wrap; }
/* Inside an Excel text box a lead term is inline source text ("Name -
   description" on one line), not a dark card header. */
.source-box .info-entry { border: 0; border-left: 0; border-radius: 0; background: transparent; box-shadow: none; margin: 0 0 .55rem; padding: 0; overflow: visible; }
.source-box .entry-title { display: inline; margin: 0; padding: 0; background: none; color: inherit; font-size: inherit; font-weight: inherit; }
.source-box .info-entry .entry-title strong { color: inherit; font-weight: 700; }
.source-box .info-entry .entry-title u { text-decoration: underline; text-decoration-color: currentColor; }

/* ---------- Source bold/underline in tables and table headers ----------
   On desktop/tablet tables, weight comes from each cell's own source runs
   (strong = bold in Excel); prices keep the site's money style. Header
   lines built from their title cell's runs show the source underline. */
@media (min-width: 40.01rem) {
  .family.series-card .responsive-table td:has(> .source-runs) { font-weight: 400; }
  .family.series-card .responsive-table td:has(> .source-runs) strong { font-weight: 700; }
}
.family-heading .source-runs { font-weight: 400; }
.family-heading .source-runs strong { font-weight: 700; }
.family-heading .source-runs u, .responsive-table .source-runs u { text-decoration: underline; text-decoration-color: currentColor; }

/* ---------- Source case for table text ----------
   Column headings, their phone-card labels, in-table group labels, table
   name labels and source heading lines show Excel's own capitalisation
   ("Set Size", "Item #", "Double Face") - no case transform. */
.price-table thead th,
.family.series-card .responsive-table th,
.row-group-divider td,
.family .responsive-table tr.row-group-divider > td,
.family-heading p.family-name-label,
.catalog-section > .source-heading { text-transform: none; letter-spacing: normal; }
@media (max-width: 40rem) {
  .family .responsive-table tbody tr[data-filterable="true"] > td::before,
  .family .responsive-table td[data-caption]::before { text-transform: none; letter-spacing: normal; }
}
/* A line's own Excel paragraph alignment (text boxes). */
.intro-line.src-align-ctr, .info-flow-part.src-align-ctr { text-align: center; }
.intro-line.src-align-r { text-align: right; }
.info-list-flow:has(> .src-align-ctr) { text-align: center; }

/* Source rows printed with a table (not part of its title bar): plain lines
   between the table heading and its column headings, or below the table. */
.family-note-lines { padding: .55rem 1rem .45rem; background: #fff; }
.family-note-lines--after { padding-top: .6rem; }
.family-note-line { margin: 0 0 .2rem; font-size: .86rem; line-height: 1.4; color: var(--ink); white-space: pre-wrap; }
.family-note-line strong { font-weight: 700; }
.family-note-line u { text-decoration: underline; text-decoration-color: currentColor; }
.family-note-line.source-title--ctr { text-align: center; }
@media (max-width: 40rem) { .family-note-line { white-space: normal; padding-left: 0 !important; } }
/* an empty source row between table rows (apply_blank_row_gaps) */
.price-table tr.row-gap td { height: 1.1rem; padding: 0 !important; background: var(--page-bg, #fff) !important; border-left: 0; border-right: 0; }
@media (max-width: 40rem) { .family .responsive-table tr.row-gap { display: block; height: .6rem; } .family .responsive-table tr.row-gap td { display: none; } }
/* Tables Excel prints side by side (apply_side_by_side_tables). */
@media (min-width: 1024px) {
  .family-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1rem; align-items: start; }
  .family-pair > .family { margin-bottom: 1rem; }
}
@media (min-width: 1024px) {
  .family-pair .family-note-line { white-space: pre-wrap; }
  .family-pair .responsive-table th, .family-pair .responsive-table td { padding: 8px 8px; }
  .family-pair .table-scroll { overflow-x: auto; }
}
/* a half-width paired table uses its own width (no 34rem minimum) */
@media (min-width: 1024px) { .family-pair .price-table { min-width: 0; } }
.family-pair-lines .family-note-lines { background: none; padding: .2rem 0 .4rem; }
/* a line keeping the Excel box's own phrase spacing */
.intro-line.src-spaces, .info-flow-part.src-spaces { white-space: pre-wrap; }
.family-note-line.source-title--r { text-align: right; }
/* a text box and a table Excel places side by side (SOURCE_BOX_BESIDE_TABLE) */
@media (min-width: 1024px) {
  .source-beside { display: grid; align-items: start; margin: 0 0 1rem; }
  .source-beside > * { max-width: none !important; margin: 0 !important; min-width: 0; }
  .source-beside .price-table { min-width: 0; }
}
/* in-table subsection bar from its source cell (apply_subsection_bars) */
.family.series-card .responsive-table tr.source-bar td,
.family .responsive-table tr.row-group-divider.source-bar > td { color: var(--ink); letter-spacing: normal; border-top: 1px solid #cbd5e1; border-bottom: 1px solid #cbd5e1; }
.price-table tr.row-group-divider.source-bar td { background: var(--bar-fill) !important; }
@media (max-width: 40rem) { .family .responsive-table tr.row-group-divider.source-bar > td { border-left: 0; box-shadow: none; } }
