/* Site-wide v2 skin (2026-09-30): Plex type, drawing-paper colours, flat rectangular buttons (option B).
   Loaded last on every page; the homepage layout rules stay in home-v2.css.
   Fonts: IBM Plex Sans and Mono, self-hosted (SIL Open Font License, see /fonts/IBM-Plex-OFL.txt). */
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-400-normal.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-500-normal.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-600-normal.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-400-normal.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-500-normal.woff2) format('woff2')}

/* Page frame: warm drawing-paper background, Plex type, flat rectangular actions. */
body{--paper-v2:#f3f2ee;--paper-v2-2:#e9e7e1;--rule-v2:#cfccc3;--ink:#17201b;--muted:#4c5650;--dark:#141b17;--soft:var(--paper-v2-2);--line:var(--rule-v2);--mono:'IBM Plex Mono',ui-monospace,monospace;background:var(--paper-v2);font-family:'IBM Plex Sans',system-ui,sans-serif}
body .site-header{background:rgba(243,242,238,.97);border-bottom-color:var(--rule-v2)}
body :is(h1,h2,h3){font-family:'IBM Plex Sans',system-ui,sans-serif;font-weight:500;letter-spacing:-.025em}
body .button.button:not(.button-secondary),body .mobile-quote.mobile-quote{border-radius:0;background-image:none;box-shadow:none;font-weight:600}
body .button:not(.button-secondary)::before,body .button:not(.button-secondary)::after,body .mobile-quote::before,body .mobile-quote::after{display:none}
body .button:not(.button-secondary):not(.button-dark):hover{background-color:var(--accent-dark)}
body .button.button.button:not(.button-secondary):not(.button-small){padding-left:23px}
body .button.button.button-small{padding-left:18px;padding-right:18px}
body .site-header .mobile-quote.mobile-quote.mobile-quote{padding-left:18px;padding-right:18px}
@media(max-width:1100px){body .button.button.button-small{padding-left:12px;padding-right:12px}}
@media(max-width:850px){body .button.button.button.button:not(.button-secondary):not(.button-small){padding-left:17px;padding-right:17px}}
@media(max-width:600px){body .site-header .mobile-quote.mobile-quote.mobile-quote{padding-left:10px;padding-right:10px}}
body .button.button:not(.button-secondary):hover,body .button.button:not(.button-secondary):focus-visible{background-position:0 0}

/* Labels: monospace small caps everywhere, as on the homepage. */
body .eyebrow{text-transform:uppercase;font-family:var(--mono);font-weight:500;font-size:12px;letter-spacing:.08em;color:var(--muted)}

/* Landing-style pages in the v2 roll-out (production, mill-turn, Swiss-type, materials, quality, about, equipment):
   homepage scale and rhythm. Scoped by their hero classes so FAQ, cases, size, parts and guides keep their own layouts until their turn. */
body main:is(:has(.landing-hero-terms),:has(.production-hero)) .landing-hero figcaption{font-family:var(--mono);font-size:12px}
body main:is(:has(.landing-hero-terms),:has(.production-hero)) section.section:not(.project-cta){padding-top:96px;padding-bottom:96px}
body main:is(:has(.landing-hero-terms),:has(.production-hero)) section.section:not(.landing-quantity-compact) h2{font-size:var(--h2-v2);line-height:1.08;letter-spacing:-.03em}
@media(max-width:850px){body main:is(:has(.landing-hero-terms),:has(.production-hero)) section.section:not(.project-cta){padding-top:64px;padding-bottom:64px}}
/* Plex runs wider than the old face: let the hero term values wrap on narrow screens. */
@media(max-width:600px){body .landing-terms dd{white-space:normal}}
/* Narrow left column of the three-column specs block: smaller heading so it does not break inside a word. */
body main:is(:has(.landing-hero-terms),:has(.production-hero)) section.section.landing-specs-with-case>:first-child h2{font-size:clamp(28px,2.7vw,38px)}
body .factory-topic-nav{margin-top:14px}

/* Site-wide type scale (UX pass 2026-09-30): one h1 and one section-heading size on every page, matching the homepage.
   Presentation only; markup, copy and heading order are unchanged. */
body{--h1-v2:clamp(40px,4.1vw,64px);--h2-v2:clamp(32px,3.2vw,46px)}
body main:not(:has(.home-v2)) h1{font-size:var(--h1-v2);line-height:1.02;letter-spacing:-.035em}
/* Section headings on pages outside the landing group. Card titles, FAQ group labels, size figures and article subheads keep their sizes. */
body main:has(.landing-hero) section.section:not(.landing-quantity-compact) h2,
body main:has(.component-hero) section.section h2:not(.feature-title),
body main :is(.resource-callout,.size-price-note,.contact-page-heading) h2,
body main:has(.size-range-list) section.soft-section .two-column h2,
body main:has(.contact-layout) section.section .section-heading h2,
body .project-cta h2{font-size:var(--h2-v2);line-height:1.08;letter-spacing:-.03em}
/* Same rhythm for parts pages and the factory pages (about, equipment, quality). */
body main:is(:has(.landing-hero),:has(.component-hero)) section.section:not(.project-cta){padding-top:96px;padding-bottom:96px}
body .factory-detail-page{--detail-space:96px}
@media(max-width:850px){body main:is(:has(.landing-hero),:has(.component-hero)) section.section:not(.project-cta){padding-top:64px;padding-bottom:64px}body .factory-detail-page{--detail-space:64px}}
/* Closing quote band: v2 paper instead of the old green tint. */
body .project-cta{background:var(--paper-v2-2);border-top-color:var(--rule-v2)}
/* Short captions in mono, as on the homepage; long-form article captions stay in the text face. */
body main figcaption:not(.prose figcaption,.case-article figcaption){font-family:var(--mono);font-size:12px}
/* Long-form subheads: case studies match the guides (31px, 28px on phones); boxed call-outs and cards sit one step below section headings. */
body{--h3-v2:clamp(28px,2.6vw,38px)}
body .case-article .case-section>h2{font-size:31px;line-height:1.2;letter-spacing:-.035em}
body .case-inquiry h2,body .prose .article-checklist>h2,body .contact-layout .contact-card>h2{font-size:var(--h3-v2);line-height:1.1}
body .size-range-title h2{font-size:clamp(38px,3.75vw,54px)}
@media(max-width:600px){body .case-article .case-section>h2{font-size:28px}}
/* Links inside article paragraphs read as inline links, not stand-alone actions, so the line height stays even. */
body :is(.prose,.case-body) p>.text-link{display:inline;padding:0;border-bottom:0;font-size:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;background:none}
/* Headings wrap into even lines instead of stranding a single word on the last line. */
body main :is(h1,h2,h3){text-wrap:balance}
/* Footer certificates side by side; each keeps its 44px tap target. */
body .site-footer .footer-top>div>a.footer-certificate{display:inline-flex;align-items:center;margin:6px 22px 0 0}
/* Equipment tables fit a phone screen: all four columns visible, no sideways scrolling to find the model. */
@media(max-width:600px){body .inventory-table,body .factory-detail-page .inventory-table{min-width:0;font-size:13px}
body .inventory-table :is(th,td){padding:10px 4px;overflow-wrap:break-word}
body .inventory-table :is(th,td):first-child{padding-left:8px}
body .inventory-table :is(th,td):last-child{padding-right:6px;white-space:nowrap;text-align:right}
body .inventory-table thead th{font-size:10px;letter-spacing:0}
body .inventory-table tr>:nth-child(1){width:25%}body .inventory-table tr>:nth-child(2){width:23%}
body .inventory-table tr>:nth-child(3){width:34%}body .inventory-table tr>:nth-child(4){width:18%}
body .factory-scroll-hint{display:none}}
/* Two-column checklist tables fit the phone width instead of scrolling sideways. */
@media(max-width:600px){body .factory-table-scroll table{min-width:0;font-size:13px}body .factory-table-scroll :is(th,td){padding:10px 8px;overflow-wrap:break-word}}
/* Guides on phones: the 7% grid gap resolved against the whole article height (~290px blank under the contents list). */
@media(max-width:850px){body .article-layout{row-gap:32px}}

/* Live audit 2026-10-01 fixes (presentation only). */
/* Contrast (WCAG AA 4.5:1) on the v2 paper band: closing-band eyebrow and section feature numbers. */
body .project-cta .eyebrow{color:var(--muted)}
body .feature-number{color:var(--accent-dark)}
/* Tap targets of at least 44px on touch screens; visible size of the photo pins is unchanged. */
body .feature-pin::after{content:'';position:absolute;inset:-6px;border-radius:50%}
@media(max-width:850px){
body .filter-button{min-height:44px}
body .article-aside>a{display:flex;align-items:center;min-height:44px}
body .materials-records a{display:inline-flex;align-items:center;min-height:44px}
body .production-fact-link{display:inline-flex;align-items:center;min-height:44px}
body .factory-jumps>a{min-width:44px;justify-content:center}}
/* Phone text floor: information-bearing text at 12px or more; uppercase data labels at 11px. */
@media(max-width:600px){
body .breadcrumb,body .breadcrumb :is(a,span){font-size:12px}
body :is(.article-meta,.article-meta a,.article-meta time,.case-reviewer span){font-size:12px}
body :is(.landing-drawing-note,.family-drawing-note,.field-hint,.rfq-privacy,.rfq-privacy a,.rfq-file-tools span,.upload-zone small,.local-notice span,.local-notice strong){font-size:12px}
body :is(.case-process-label,.scope-chips span,.collection-meta span,.production-result-type,.production-result-context,.materials-index-title,.filter-button,.resource-number,.buyer-guide-time,.card-hint,.range-fit,.range-fit span,.family-feature span,.quote-contact p,.setup-amount,.setup-badge){font-size:12px}
body main tbody th,body .case-table :is(th,td){font-size:12px}
body main dt{font-size:11px}
body .factory-table-scroll thead th{font-size:11px}
body .factory-proof-card .factory-proof-photo figcaption{font-size:12px}
/* Higher-specificity originals: match their selectors so the floor applies. */
body .case-card-compact .case-process-label,body .case-process-label{font-size:12px!important}
body .rfq-form-card :is(.field-hint,.rfq-privacy,.rfq-privacy a,.upload-zone small,.rfq-file-tools span){font-size:12px}
body .family-action .family-drawing-note{font-size:12px}
body .case-hero .article-meta,body .article-meta{font-size:12px!important}
body #file-counter{font-size:12px}
body .landing-process-grid article>span,body .landing-feature-key li>span{font-size:12px}
body .unit-secondary .focus-inch{font-size:11px}
body .factory-table-scroll :is(th,td){padding:10px 6px}}
/* Decision table on part pages fits the phone width, as the equipment tables do. */
@media(max-width:600px){body .decision-table table{min-width:0;font-size:13px}body .decision-table :is(th,td){padding:10px 8px;overflow-wrap:break-word}}
/* Buyer-guide figures: two photos side by side, stacked on phones. */
.prose .guide-figures{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:24px 0 0}
.prose .guide-figures figure{margin:0}
.prose .guide-figures img{display:block;width:100%;height:auto}
.prose .guide-figures figcaption{margin-top:8px;font-size:13px;line-height:1.5;color:var(--muted)}
@media (max-width:600px){.prose .guide-figures{grid-template-columns:1fr}}
/* Reviewer byline: case studies and reviewed buyer guides. */
.case-reviewer{display:flex;align-items:center;gap:10px;margin-top:10px}
.case-reviewer .reviewer-avatar{display:block;width:40px;height:40px;object-fit:cover;border-radius:50%;flex:none}
