/* ==========================================================================
   UI CONSISTENCY LAYER — deliberately loaded LAST (after styles.css).
   Purpose: pin same-level components to the shared design tokens defined in
   globals.css ("SINGLE TOKEN SOURCE" :root block). This is the single place
   that arbitrates between the two legacy stylesheets (globals.css and the
   synced static styles.css); do NOT scatter new page-level overrides.

   Token map:
     --control-h-xs 34  compact header CTA
     --control-h-sm 38  card / list-row CTAs
     --control-h-md 40  default + hero CTAs
     --control-h-lg 44  primary form/hero buttons
     --input-h      44  toolbar/list filter inputs + selects
     --field-h      46  form field inputs + selects
     --radius-control  4   buttons/inputs
     --radius-card     6   card surfaces
     --text-h1          platform hero page title (~44px @1440)
     --text-h1-detail   detail page title (~36px @1440)
     --text-h1-display  display/archive hero title (56px cap)
   ========================================================================== */

/* ---- Buttons: one radius, one height per tier ---------------------------- */
.btn,
.ui-btn {
  border-radius: var(--radius-control) !important;
}

.btn {
  min-height: var(--control-h-lg) !important;
}

.ui-btn {
  height: var(--control-h-md) !important;
}

.ui-btn--sm {
  height: var(--control-h-sm) !important;
}

.header-cta {
  height: var(--control-h-xs) !important;
  border-radius: var(--radius-control) !important;
}

/* ---- Inputs / selects: visually equal height inside a row ----------------- */
.products-toolbar-field input,
.products-toolbar-field select,
.results-toolbar-controls select,
.results-toolbar-controls input,
.companies-hero-filter-card input,
.companies-hero-filter-card select,
.finder-input-group input[type='search'] {
  height: var(--input-h);
  min-height: var(--input-h) !important;
  border-radius: var(--radius-control) !important;
}

.rfq-field input,
.rfq-field select,
.resource-field input,
.resource-field select,
[data-slot='input'],
[data-slot='select-trigger'] {
  height: var(--field-h);
  min-height: var(--field-h) !important;
  border-radius: var(--radius-control) !important;
}

/* Textareas keep natural multi-row height; only radius is normalized. */
.rfq-field textarea,
.resource-field textarea,
[data-slot='textarea'] {
  border-radius: var(--radius-control) !important;
}

/* ---- Cards: one radius ---------------------------------------------------- */
.ui-card,
.product-card,
.company-card,
.company-guide-card,
.category-card,
.insight-card,
.search-result-card,
.companies-boost-card,
.companies-hero-filter-card,
.tech-hub-card,
.tech-detail-card,
.company-facts-card,
.product-command-panel,
.companies-match,
.tech-hub-hero-panel,
.tech-hub-tool-card,
.ui-summary-tile,
.cta-panel,
.partners-hero-panel,
.conversion-card,
.media-card {
  border-radius: var(--radius-card) !important;
}

/* ---- Page titles: one scale per tier -------------------------------------- */
/* Tier 1 — platform / directory hero H1 */
.platform-hero__copy h1,
.command-main h1,
.product-command-copy h1,
.companies-page .companies-hero-content h1,
.insights-hero-title,
.page-hero-minimal h1,
.tech-hub-hero-inner h1,
.glossary-header h1 {
  font-size: var(--text-h1) !important;
  font-weight: 600 !important;
  line-height: 1.08 !important;
}

/* Tier 2 — detail page H1 (product / company / article) */
.product-detail h1,
.company-detail h1,
.company-detail-copy h1,
.prose h1,
.payload-richtext .prose h1 {
  font-size: var(--text-h1-detail) !important;
  font-weight: 600 !important;
  line-height: 1.12 !important;
}

/* Tier 3 — display hero (partners) */
.partners-page .partners-hero-main .low-impact-hero .payload-richtext h1,
.partners-page .partners-hero-main .low-impact-hero .payload-richtext h2,
.partners-page .low-impact-hero .payload-richtext h1 {
  font-size: var(--text-h1-display) !important;
  line-height: 1 !important;
}

/* The static homepage stylesheet uses white gradients for several panels.
   Keep their surfaces and text in the same palette when dark mode is active. */
:root[data-theme='dark'] .home-command .command-side,
:root[data-theme='dark'] .home-command .command-hero-metrics,
:root[data-theme='dark'] .section-directory:not(.section-company-atlas) .container,
:root[data-theme='dark'] .section-topic-map .container,
:root[data-theme='dark'] .section-company-atlas .container,
:root[data-theme='dark'] .section-editorial .container {
  border-color: #334155;
  background: #1e293b;
  color: #e2e8f0;
}

:root[data-theme='dark'] .home-command .command-hero-metrics {
  background: #26364c;
}

:root[data-theme='dark'] .home-command .metric-grid {
  border-color: #40536b;
  background: #1e293b;
}

:root[data-theme='dark'] .home-command .command-visual-badge {
  border-color: #64748b;
  background: rgba(15, 23, 42, 0.92);
}

:root[data-theme='dark'] .home-command .command-visual-badge strong {
  color: #f8fafc;
}

:root[data-theme='dark'] .home-command .command-visual-badge span {
  color: #cbd5e1;
}

:root[data-theme='dark'] .home-command .search-tabs button.is-active {
  background: #334155;
  color: #f8fafc;
}

:root[data-theme='dark'] .home-command .search-shell {
  background: #f8fafc;
}

:root[data-theme='dark'] .home-command .search-shell input {
  color: #0b1f33;
}

:root[data-theme='dark'] .home-command .command-actions .btn-secondary {
  border-color: #64748b;
  background: #334155;
  color: #f1f5f9;
}

:root[data-theme='dark'] .home-cert-strip .cert-grid a {
  border-color: #475569;
  background: #1e293b;
  color: #bfdbfe;
}

:root[data-theme='dark'] :is(
  .section-directory,
  .section-topic-map,
  .section-editorial,
  .section-company-atlas,
  .section-conversion
) {
  background: #0f172a;
}

:root[data-theme='dark'] .section-alt {
  background: #172235;
}

:root[data-theme='dark'] :is(
  .home-directory-matrix a,
  .cluster-grid article,
  .atlas-region-grid a,
  .atlas-role-grid a,
  .section-topic-map .topic-map-home a,
  .section-editorial .media-card
) {
  border-color: #40536b;
  background: #26364c;
  color: #f1f5f9;
}

:root[data-theme='dark'] :is(
  .home-directory-matrix a,
  .cluster-grid article,
  .atlas-region-grid a,
  .atlas-role-grid a,
  .section-topic-map .topic-map-home a,
  .section-editorial .media-card
):hover {
  border-color: #60a5fa;
  background: #30445c;
}

:root[data-theme='dark'] .section-topic-map .topic-map-home a span {
  color: #b6c4d5;
}

:root[data-theme='dark'] :is(
  .cluster-grid a,
  .section-editorial .media-card a,
  .section-company-atlas .supplier-rail a
) {
  color: #93c5fd;
}

:root[data-theme='dark'] :is(
  .home-command .side-actions a,
  .section-directory .text-link,
  .section-topic-map .text-link,
  .section-company-atlas .text-link,
  .section-editorial .text-link
) {
  color: #93c5fd;
}

:root[data-theme='dark'] .section-company-atlas .supplier-rail a {
  border-color: #475569;
  background: #334155;
}

.home-command .search-shell input[type='search']::placeholder {
  color: #64748b;
  opacity: 1;
}

.insights-category-grid .category-card--upcoming {
  border-style: dashed;
  cursor: default;
}

/* IVDmap design system: shared visual primitives and page rhythm. */
:root[data-theme='dark'] {
  --color-primary-900: #0d2035;
  --color-primary-700: #76b5f4;
  --bg-page: #0f172a;
  --bg-surface: #1e293b;
  --bg-subtle: #172235;
  --bg-dark: #0d2035;
  --text-primary: #f1f5f9;
  --text-secondary: #cbd5e1;
  --text-muted: #b2c1d1;
  --border-default: #40536b;
  --border-subtle: #334155;
}

body .container { width: min(var(--container-max), calc(100% - 3rem)); }

.section { padding-block: var(--space-section-lg); }

.ui-kicker,
.eyebrow,
.ds-section-header__eyebrow,
.ds-hero__eyebrow {
  min-height: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--color-primary-700);
  font-size: var(--fs-sm);
  font-weight: 700;
  letter-spacing: 0.055em;
  line-height: 1.4;
}

.badge,
.ui-chip,
.query-chip,
.active-filter-chip { border-radius: 999px; }

.ui-btn,
.btn,
[data-slot='button'] {
  min-height: var(--button-height) !important;
  height: auto;
  border-radius: var(--radius-control) !important;
  font-size: 1rem;
  box-shadow: none !important;
  transition: color 160ms ease, background-color 160ms ease, border-color 160ms ease;
}
.ui-btn--sm { min-height: 38px !important; }
.ui-btn-primary,
.btn-primary {
  border-color: var(--color-primary-700);
  background: var(--color-primary-700);
  color: #fff;
}
.ui-btn-primary:hover,
.btn-primary:hover { background: var(--color-primary-900); border-color: var(--color-primary-900); }
.ui-btn-secondary,
.btn-secondary,
.btn-outline {
  border-color: var(--color-primary-700);
  background: var(--bg-surface);
  color: var(--color-primary-700);
}
.ui-btn-secondary:hover,
.btn-secondary:hover,
.btn-outline:hover { background: var(--bg-subtle); }

:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar) :is(input, select, textarea),
[data-slot='input'],
[data-slot='select-trigger'],
[data-slot='textarea'] {
  border-color: var(--border-default);
  border-radius: var(--radius-control) !important;
  background: var(--bg-surface);
  color: var(--text-primary);
  box-shadow: none;
}
:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar) :is(input, select),
[data-slot='input'],
[data-slot='select-trigger'] { min-height: 44px !important; }

:is(.ui-card, .product-card, .company-card, .category-card, .insight-card, .search-result-card, .tech-hub-card, .tech-hub-tool-card, .tech-detail-card, .resource-pack-card, .media-card) {
  border-color: var(--border-default);
  border-radius: var(--radius-card) !important;
  box-shadow: none !important;
  transition: border-color 160ms ease, background-color 160ms ease;
}
:is(.ui-card--hover, .product-card, .company-card, .category-card, .insight-card, .search-result-card, .tech-hub-card, .tech-hub-tool-card, .tech-detail-card, .resource-pack-card, .media-card):hover {
  transform: none;
  border-color: var(--color-primary-700);
  box-shadow: none !important;
}

.ds-section-header { display: flex; justify-content: space-between; align-items: end; gap: 2rem; margin-bottom: 1.75rem; }
.ds-section-header h2 { margin: 0.45rem 0 0; color: var(--text-primary); font-size: clamp(1.75rem, 2.5vw, 2.25rem); font-weight: 740; line-height: 1.18; }
.ds-section-header__description { max-width: 42rem; margin: 0.65rem 0 0; color: var(--text-secondary); font-size: 1rem; line-height: 1.6; }
.ds-section-header__action a { color: var(--color-primary-700); font-weight: 650; }
.ds-section-header__action a:hover { text-decoration: underline; }

.ds-hero { padding-block: var(--space-section-md); background: var(--bg-subtle); }
.ds-hero__grid { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); align-items: center; gap: 3rem; }
.ds-hero__grid:not(:has(.ds-hero__visual)) { grid-template-columns: minmax(0, 1fr); }
.ds-hero__copy h1 { max-width: 16ch; margin: 0.75rem 0 1rem; color: var(--text-primary); font-size: clamp(2.375rem, 4vw, 3.5rem); font-weight: 760; line-height: 1.1; }
.ds-hero__lead { max-width: 44rem; color: var(--text-secondary); font-size: 1.125rem; line-height: 1.6; }
.ds-hero__visual img { display: block; width: 100%; height: auto; border-radius: var(--radius-lg); object-fit: cover; }
.ds-hero__actions { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 1.75rem; }
.ds-hero--dark { background: var(--color-primary-900); }
.ds-hero--dark :is(h1, .ds-hero__eyebrow, .ds-hero__lead) { color: #fff; }
.ds-hero--dark .ds-hero__lead { color: #d9e8f7; }
.ds-hero--directory { padding-block: var(--space-section-sm); }
.ds-hero--conversion .ds-hero__visual { border: 1px solid var(--border-default); border-radius: var(--radius-lg); background: var(--bg-surface); }

.site-header__row2 { background: var(--color-primary-900); }
.site-header__nav-link { font-size: var(--fs-base); }
.site-header__search-form { border-radius: var(--radius-control); }
.site-header .header-cta { min-height: var(--button-height) !important; border-radius: var(--radius-control) !important; }
.site-footer { margin-top: 0; padding-top: 3.5rem; background: var(--color-primary-900); }
.footer-grid { grid-template-columns: minmax(13rem, 1.4fr) repeat(4, minmax(0, 1fr)); gap: clamp(1.5rem, 3vw, 3rem); }
.footer-grid h3 { font-size: 1.5rem; }
.footer-grid p { max-width: 20rem; font-size: var(--fs-base); line-height: 1.6; }
.footer-grid a { font-size: var(--fs-base); }
.footer-grid a { overflow-wrap: anywhere; }

/* Editorial content uses rules instead of a white card around every item. */
.technologies-page .tech-hub-grid,
.insights-page .insights-category-grid,
.insights-page .insights-topic-grid { gap: 0 1.5rem; }
.technologies-page .tech-hub-grid .tech-hub-card,
.insights-page .insights-category-grid .category-card,
.insights-page .insights-topic-grid .tech-detail-nested-card {
  border: 0;
  border-top: 1px solid var(--border-default);
  border-radius: 0 !important;
  background: transparent;
  box-shadow: none !important;
}
.technologies-page .tech-hub-grid .tech-hub-card:hover,
.insights-page .insights-category-grid .category-card:hover,
.insights-page .insights-topic-grid .tech-detail-nested-card:hover { border-color: var(--color-primary-700); background: transparent; }
.insights-page .insights-hero-stats { display: none; }
.insights-page .insights-hero-aside .insights-hero-kicker,
.insights-page .insights-aside-funnel { display: none; }

/* Search presents controls and results without an instructional hero card. */
.search-page .platform-hero { padding-block: var(--space-section-sm) 1.5rem; }
.search-page .platform-hero__grid { display: block; }
.search-page .platform-hero__copy h1 { max-width: none; }
.search-page .platform-hero__panel { display: none; }
.search-page > .section { padding-top: 1rem; }

/* Home: the search input and submit control lead the hero. */
.home-command .command-main-visual { border-radius: var(--radius-lg); box-shadow: none; }
.home-command .command-main-visual::after { background: linear-gradient(180deg, transparent, rgba(5, 33, 67, 0.08)); }
.home-command .command-main h1 { font-size: clamp(2.375rem, 4vw, 3.5rem); }
.home-command .command-grid { grid-template-columns: 1fr; }
.home-command .command-main-hero { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.home-command .search-scope-label { margin-top: 1.75rem; color: var(--text-primary); font-size: 1.125rem; font-weight: 700; }
.home-command .search-chips a { border: 0; border-radius: 0; background: transparent; color: var(--color-primary-700); font-size: var(--fs-md); }
.home-command .command-side { border-color: var(--border-subtle); }
.home-command .command-side .command-hero-metrics { box-shadow: none; }

.resources-page .resource-layout { align-items: start; }
.resources-page > .section:first-of-type { padding-top: var(--space-section-sm); }
.resources-page .resource-pack-access {
  margin-top: auto;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--color-primary-700);
  font: inherit;
  font-weight: 700;
  text-align: start;
  cursor: pointer;
}
.resources-page .resource-pack-access:hover { text-decoration: underline; }
.resources-page .resource-access-section:not(.is-open) .resource-feed-grid { display: block; }
.resources-page .resource-access-section:not(.is-open) .resource-feed-list { max-width: 56rem; }
.resources-page .resource-policy-box { box-shadow: none; }
.resources-page .resource-request-form { scroll-margin-top: 7rem; }
.directory-filter-shell { min-width: 0; }
.directory-filter-trigger,
.directory-filter-panel-header,
.directory-filter-backdrop { display: none; }

.case-studies-simple { display: block; }
.case-studies-page .case-studies-cms-hero { padding-block: var(--space-section-sm) 1rem; }
.case-studies-page .case-studies-cms-hero + .section { padding-top: var(--space-section-sm); }
.case-studies-list-title { margin: 0 0 1.75rem; color: var(--text-primary); font-size: clamp(1.75rem, 2.5vw, 2.25rem); font-weight: 600; line-height: var(--leading-tight); }
.case-studies-simple .case-studies-results-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.5rem; }
.case-studies-simple .company-card { display: flex; flex-direction: column; }
.case-studies-simple .company-card .result-actions { margin-top: auto; }

/* Consistent feedback surfaces across directories and route boundaries. */
.empty-state,
.search-empty-state,
.frontend-feedback {
  max-width: 100%;
  margin-top: 1rem;
  padding: clamp(1.5rem, 3vw, 2.5rem);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-card);
  background: var(--bg-subtle);
  color: var(--text-primary);
  text-align: left;
  box-shadow: none;
}
.empty-state h2,
.search-empty-state h2,
.frontend-feedback h1 { margin: 0 0 .75rem; color: var(--text-primary); font-size: clamp(1.5rem, 2.2vw, 2rem); line-height: 1.2; }
.empty-state p,
.search-empty-state p,
.frontend-feedback p:not(.eyebrow) { max-width: 40rem; margin: 0 0 1.25rem; color: var(--text-secondary); font-size: 1rem; line-height: 1.6; }
.frontend-feedback { max-width: 48rem; margin-inline: auto; }
.frontend-loading { background: var(--bg-page); }
.frontend-loading__copy,
.frontend-loading__panel { border-color: var(--border-default); border-radius: var(--radius-card); background: var(--bg-subtle); box-shadow: none; }
.frontend-loading__panel div { border-radius: var(--radius-control); }
@media (prefers-reduced-motion: reduce) {
  .frontend-loading__copy .ui-kicker svg,
  .frontend-loading__bars span,
  .frontend-loading__panel div { animation: none; }
}

/* Error states read at a glance: the status wash + an oxblood title, the
   eyebrow bar flips from steel to status red. Success/warning have no public
   consumer yet; their tokens are defined for future states. */
.frontend-feedback--error {
  border-color: color-mix(in srgb, var(--status-error) 32%, var(--doc-rule));
  background: var(--status-error-wash);
}
.frontend-feedback--error h1 {
  color: var(--status-error);
}
.frontend-feedback--error .eyebrow {
  border-left-color: var(--status-error);
  color: var(--status-error);
}

/* Invalid form fields announce themselves once the user has typed into them
   (progressive enhancement — no JS required). */
:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar)
  :is(input, select, textarea):user-invalid {
  border-color: var(--status-error);
}

@media (max-width: 1100px) {
  .ds-hero__grid { grid-template-columns: 1fr; gap: 1.5rem; }
  .footer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .case-studies-simple .case-studies-results-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  body .container { width: min(var(--container-max), calc(100% - 2rem)); }
  .section { padding-block: var(--space-section-sm); }
  .ds-section-header { display: block; }
  .ds-section-header__action { margin-top: 0.75rem; }
  .ds-hero { padding-block: var(--space-section-sm); }
  .home-command .command-main-hero { display: block; }
  .home-command .command-main-visual {
    display: block;
    min-height: 170px;
    height: 170px;
    margin-top: var(--sp-4);
  }
  .home-command .command-main-visual img {
    min-height: 170px;
    object-position: center 44%;
  }
  .buyers-guide-page .cta-banner__actions { display: flex; flex-wrap: wrap; max-width: 100%; }
  .buyers-guide-page .cta-banner__actions > * { min-width: 0; max-width: 100%; }
  .directory-filter-shell { position: relative; margin-bottom: 1rem; }
  .directory-filter-trigger { display: inline-flex; align-items: center; gap: .5rem; min-height: var(--button-height); padding: .5rem .875rem; border: 1px solid var(--color-primary-700); border-radius: var(--radius-control); background: var(--bg-surface); color: var(--color-primary-700); font: inherit; font-weight: 700; }
  .directory-filter-backdrop { display: block; position: fixed; z-index: var(--z-overlay); inset: 0; width: 100%; height: 100%; border: 0; background: rgba(5, 25, 45, .55); }
  .directory-filter-panel { display: none; position: fixed; z-index: var(--z-panel); inset: 0 0 0 auto; width: min(92vw, 24rem); overflow-y: auto; padding: 1rem; background: var(--bg-page); box-shadow: var(--elev-overlay); }
  .directory-filter-shell[data-open='true'] .directory-filter-panel { display: block; }
  .directory-filter-panel-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; color: var(--text-primary); font-size: 1.125rem; }
  .directory-filter-panel-header button { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: 1px solid var(--border-default); border-radius: var(--radius-control); background: var(--bg-surface); color: var(--text-primary); }
  .directory-filter-panel .finder-sidebar { display: block; width: 100%; margin: 0; }
  .resources-page .vault-filter { display: flex; align-items: center; gap: .5rem; overflow-x: auto; padding: .25rem 0 .75rem; border: 0; border-radius: 0; background: transparent; box-shadow: none; }
  .resources-page .vault-filter h2, .resources-page .vault-filter a { flex: 0 0 auto; margin: 0; }
  .resources-page .vault-filter h2 { margin-right: .5rem; font-size: var(--fs-base); }
  .resources-page .vault-filter a { padding: .45rem .75rem; border: 1px solid var(--border-default); border-radius: 999px; background: var(--bg-surface); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .footer-grid > :first-child { grid-column: 1 / -1; }
  .case-studies-simple .case-studies-results-grid { grid-template-columns: 1fr; }
}

/* ==========================================================================
   CALIBRATION DOCUMENT THEME (direction A, 2026-10)
   --------------------------------------------------------------------------
   Visual direction: the platform reads like a validated clinical reference
   document. Paper ground, ink text, hairline rules that separate rows, steel
   reserved for interaction, amber reserved for watch/live semantics, IBM Plex
   Sans/Mono, tabular figures, near-rectangular controls.

   This block is appended AFTER every layer above (globals.css, synced
   styles.css, and the consistency layer) so this file stays the single
   arbitration point. The synced styles.css is never edited directly; its
   glass/gradient treatments are superseded here.
   ========================================================================== */

/* ---- 0. Theme tokens ------------------------------------------------------ */
/* The --doc-* token definitions (light + carbon dark) moved to globals.css
   ("SINGLE TOKEN SOURCE" :root and the [data-theme='dark'] block) — globals.css
   is now the single token source for both themes. This file keeps ONLY the
   re-pointing of the synced styles.css namespace: styles.css defines
   --brand/--line/--bg/--panel etc. on its own :root, so those must be
   overridden here, after it. */

:root[data-theme='dark'] {
  /* Carbon-paper variant: re-point the styles.css namespace. */
  --brand: #8fb4d4;
  --brand-strong: #b8d2e6;
  --accent: #7ea3c4;
  --ink: #e4e9ed;
  --ink-strong: #f1f5f9;
  --muted: #9daab4;
  --line: #333c44;
  --bg: #14181d;
  --bg-soft: #1a2026;
  --panel: #1a2026;
  --panel-alt: #20272e;
}

/* The synced stylesheet scopes brighter brand values on the homepage body. */
body.page-home {
  --brand: var(--doc-steel);
  --brand-strong: var(--doc-steel-deep);
  --accent: var(--doc-steel-light);
}

/* ---- 1. Base type, figures, focus ---------------------------------------- */
body {
  background: var(--doc-paper);
  color: var(--doc-ink);
  font-family: var(--doc-sans);
  font-feature-settings: 'tnum' 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body::selection {
  background: #d8e5ef;
  color: #1c2b36;
}
:root[data-theme='dark'] body::selection {
  background: #2c3a46;
  color: #e4e9ed;
}

/* The legacy sheets hardcode unloaded families (Manrope / Source Sans 3);
   normalise every heading and emphasis run to the document face. */
body :is(h1, h2, h3, h4, h5, h6, strong, b) {
  font-family: var(--doc-sans) !important;
}

h1, h2, h3 { letter-spacing: -0.012em; }

:is(a, button, input, select, textarea):focus-visible {
  outline: 2px solid var(--doc-steel);
  outline-offset: 2px;
}

input::placeholder,
textarea::placeholder {
  color: var(--doc-muted);
  opacity: 1;
}

/* ---- 2. Controls: near-rectangular, ink-filled primary ------------------- */
/* Button variants are !important-arbitrated: page-scoped rules in the legacy
   sheets must not be able to repaint a primary/secondary variant. */
.btn,
.ui-btn {
  border-radius: var(--radius-control) !important;
  font-weight: 600;
}

.ui-btn-primary,
.btn-primary {
  background: var(--doc-btn-bg) !important;
  border-color: var(--doc-btn-bg) !important;
  color: var(--doc-btn-fg) !important;
}
.ui-btn-primary:hover,
.btn-primary:hover {
  background: var(--doc-btn-bg-hover) !important;
  border-color: var(--doc-btn-bg-hover) !important;
  color: var(--doc-btn-fg) !important;
}

.ui-btn-secondary,
.btn-secondary,
.btn-outline {
  background: transparent !important;
  border: 1px solid var(--doc-ink-2) !important;
  color: var(--doc-ink) !important;
}
.ui-btn-secondary:hover,
.btn-secondary:hover,
.btn-outline:hover {
  background: var(--doc-steel-wash) !important;
  border-color: var(--doc-ink) !important;
  color: var(--doc-ink) !important;
}

:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar) :is(input, select, textarea),
[data-slot='input'],
[data-slot='select-trigger'],
[data-slot='textarea'] {
  background: var(--doc-surface);
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink);
}
:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar) :is(input, select):focus,
[data-slot='input']:focus,
[data-slot='select-trigger']:focus {
  border-color: var(--doc-steel);
  box-shadow: var(--doc-focus);
  outline: none;
}

/* ---- 3. Section labels & headings ---------------------------------------- */
/* Eyebrows stop being ALL-CAPS chrome: a 3px steel rule marks a real
   section label, sentence case, in the muted document voice. */
.ui-kicker,
.eyebrow,
.ds-section-header__eyebrow,
.ds-hero__eyebrow {
  padding: 0.08rem 0 0.08rem 0.7rem;
  border: 0;
  border-left: 3px solid var(--doc-steel);
  border-radius: 0;
  background: transparent;
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  font-weight: 600;
  letter-spacing: 0.01em;
  line-height: var(--leading-snug);
  text-transform: none;
}

.section-heading h2 {
  font-size: var(--text-h2);
  font-weight: 600;
  line-height: var(--leading-tight);
  letter-spacing: -0.012em;
  color: var(--doc-ink);
}
.section-description {
  color: var(--doc-muted);
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
}
.ds-section-header h2 { font-weight: 600; color: var(--doc-ink); }
.ds-section-header__description { color: var(--doc-muted); }
.ds-section-header__action a,
.text-link {
  color: var(--doc-steel);
  font-family: var(--doc-sans);
  font-weight: 600;
}
.ds-section-header__action a:hover,
.text-link:hover {
  color: var(--doc-steel-deep);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

/* Document headings carry weight 600, not synthesised 740-780. */
.platform-hero__copy h1,
.command-main h1,
.product-command-copy h1,
.companies-page .companies-hero-content h1,
.insights-hero-title,
.page-hero-minimal h1,
.tech-hub-hero-inner h1,
.glossary-header h1,
.ds-hero__copy h1 {
  font-weight: 600 !important;
  letter-spacing: -0.018em !important;
}

/* ---- 4. Directory cards: flat hairline surfaces --------------------------- */
:is(.ui-card, .product-card, .company-card, .company-guide-card, .category-card, .insight-card, .search-result-card, .companies-boost-card, .companies-hero-filter-card, .tech-hub-card, .tech-detail-card, .company-facts-card, .product-command-panel, .companies-match, .tech-hub-hero-panel, .tech-hub-tool-card, .ui-summary-tile, .cta-panel, .partners-hero-panel, .resource-pack-card) {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card) !important;
  background: var(--doc-surface);
  box-shadow: none !important;
}
:is(.ui-card--hover, .product-card, .company-card, .category-card, .insight-card, .search-result-card, .tech-hub-card, .tech-hub-tool-card, .tech-detail-card, .resource-pack-card):hover {
  border-color: var(--doc-rule-strong);
  background: var(--doc-surface);
  box-shadow: none !important;
}

/* ---- 5. Homepage rhythm: one paper ground, hairline section rules --------- */
body.page-home main > .section {
  padding-block: clamp(3.25rem, 4.5vw, 4.75rem);
  background: transparent;
}
body.page-home main > .section ~ .section {
  border-top: 1px solid var(--doc-rule);
}
body.page-home :is(
  .section-directory:not(.section-categories):not(.section-company-atlas),
  .section-company-atlas,
  .section-workflow,
  .section-topic-map,
  .section-live-feed,
  .section-editorial
) > .container {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
}
:root[data-theme='dark'] .page-home :is(
  .section-directory:not(.section-categories):not(.section-company-atlas),
  .section-company-atlas,
  .section-workflow,
  .section-topic-map,
  .section-live-feed,
  .section-editorial
) > .container,
:root[data-theme='dark'] .page-home .section-alt {
  background: transparent;
}
:root[data-theme='dark'] .page-home :is(.home-directory-matrix a, .cluster-grid article, .atlas-region-grid a, .atlas-role-grid a, .section-topic-map .topic-map-home a, .section-editorial .media-card) {
  border-color: var(--doc-rule);
  background: var(--doc-surface);
  color: var(--doc-ink);
}
:root[data-theme='dark'] .page-home :is(.home-directory-matrix a, .cluster-grid article, .atlas-region-grid a, .atlas-role-grid a, .section-topic-map .topic-map-home a, .section-editorial .media-card):hover {
  border-color: var(--doc-rule-strong);
  background: var(--doc-steel-wash);
}
:root[data-theme='dark'] .page-home :is(.cluster-grid a, .section-editorial .media-card a, .section-company-atlas .supplier-rail a),
:root[data-theme='dark'] .page-home :is(.home-command .side-actions a, .section-directory .text-link, .section-topic-map .text-link, .section-company-atlas .text-link, .section-editorial .text-link) {
  color: var(--doc-steel);
}
:root[data-theme='dark'] .page-home .section-topic-map .topic-map-home a span {
  color: var(--doc-muted);
}

/* ---- 6. Hero: requisition-form search over a specimen photograph --------- */
.home-command {
  padding-block: clamp(2.5rem, 4vw, 4rem) clamp(1.75rem, 3vw, 2.75rem);
  background: transparent;
}
.command-grid { border-radius: 0; }
.command-main {
  background: transparent;
  border: 0;
  box-shadow: none;
  padding: 0;
}
.command-main::before { display: none; }
.command-main-copy h1 {
  max-width: 15ch;
  margin: 0.55rem 0 0.4rem;
  font-size: clamp(2.35rem, 1.9rem + 2.1vw, 3.35rem);
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: -0.018em;
  color: var(--doc-ink);
}
.command-subtitle {
  max-width: 52ch;
  color: var(--doc-ink-2);
  font-size: 1.0625rem;
  line-height: 1.6;
}
.search-scope-label {
  margin: 1.9rem 0 0;
  color: var(--doc-ink);
  font-size: var(--fs-base);
  font-weight: 600;
}
.search-tabs {
  margin-top: 0.4rem;
  gap: 0.25rem;
  border-bottom: 1px solid var(--doc-rule);
}
.search-tabs button {
  padding: 0.4rem 0.7rem;
  border-radius: 3px 3px 0 0;
  font-family: var(--doc-sans);
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-muted);
}
.search-tabs button.is-active {
  background: transparent;
  color: var(--doc-ink);
  box-shadow: inset 0 -2px 0 var(--doc-steel);
}
.search-tabs button:hover { color: var(--doc-ink); }
:root[data-theme='dark'] .home-command .search-tabs button.is-active {
  background: transparent;
  color: var(--doc-ink);
}

.search-shell {
  margin-top: 0.55rem;
  max-width: 46rem;
  border: 1px solid var(--doc-rule-strong);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  box-shadow: none;
}
.search-shell:focus-within {
  border-color: var(--doc-steel);
  box-shadow: var(--doc-focus);
  transform: none;
}
.search-shell input {
  min-height: 52px;
  font-size: 1rem;
  color: var(--doc-ink);
}
.search-shell input[type='search']::placeholder { color: var(--doc-muted); }
.search-shell button {
  min-width: 108px;
  background: var(--doc-btn-bg);
  font-family: var(--doc-sans);
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-btn-fg);
}
.search-shell button:hover { background: var(--doc-btn-bg-hover); }
:root[data-theme='dark'] .home-command .search-shell { background: var(--doc-surface); }
:root[data-theme='dark'] .home-command .search-shell input { color: var(--doc-ink); }

.search-chips {
  margin-top: 0.6rem;
  gap: 0.35rem 1rem;
}
.search-chips a {
  padding: 0.05rem 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--doc-steel);
}
.search-chips a:hover,
.search-chips a:focus-visible {
  background: transparent;
  color: var(--doc-steel-deep);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

.command-actions {
  margin-top: 1.2rem;
  gap: 0.6rem;
}
.command-actions .btn { border-radius: var(--radius-control) !important; }
.command-actions .btn-primary {
  padding: 0.72rem 1.25rem;
  box-shadow: none;
  background: var(--doc-btn-bg);
  border-color: var(--doc-btn-bg);
}
.command-actions .btn-primary:hover { background: var(--doc-btn-bg-hover); }
.command-actions .btn-secondary {
  border: 1px solid var(--doc-ink-2);
  background: transparent;
  color: var(--doc-ink);
}
.command-actions .btn-secondary:hover {
  background: var(--doc-steel-wash);
  border-color: var(--doc-ink);
}
:root[data-theme='dark'] .home-command .command-actions .btn-secondary {
  border-color: var(--doc-rule-strong);
  background: transparent;
  color: var(--doc-ink);
}

/* Specimen photograph: framed by a registration inset, with a
   requisition-card caption instead of a floating glass badge. */
.home-command .command-main-visual {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-paper-alt);
  box-shadow: none;
}
.home-command .command-main-visual::before {
  content: '';
  position: absolute;
  inset: 10px;
  z-index: 1;
  border: 1px solid rgba(28, 43, 54, 0.22);
  border-radius: 2px;
  pointer-events: none;
}
.home-command .command-main-visual img {
  filter: none;
}
.home-command .command-main-visual::after {
  background: rgba(28, 43, 54, 0.05);
}
.home-command .command-visual-badge {
  z-index: 2;
  max-width: min(82%, 16rem);
  padding: 0.7rem 0.85rem;
  border: 1px solid var(--doc-rule);
  border-left: 3px solid var(--doc-steel);
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.94);
  box-shadow: none;
}
.home-command .command-visual-badge strong {
  font-family: var(--doc-sans);
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-ink);
}
.home-command .command-visual-badge span {
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  letter-spacing: 0.02em;
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .home-command .command-visual-badge {
  border-color: var(--doc-rule-strong);
  background: rgba(20, 24, 29, 0.92);
}
:root[data-theme='dark'] .home-command .command-visual-badge strong { color: var(--doc-ink); }
:root[data-theme='dark'] .home-command .command-visual-badge span { color: var(--doc-ink-2); }

/* ---- 7. Certification strip: a document colophon line -------------------- */
.cert-grid {
  padding: 0.55rem 0;
  gap: 0 0;
}
.cert-label {
  margin-right: 1.25rem;
  padding-left: 0.7rem;
  border-left: 3px solid var(--doc-rule-strong);
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: none;
  color: var(--doc-muted);
}
.cert-grid a {
  padding: 0.05rem 0 0.05rem 1.1rem;
  border: 0;
  border-left: 1px solid var(--doc-rule);
  border-radius: 0;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: var(--fs-xs);
  font-weight: 500;
  color: var(--doc-ink-2);
}
.cert-grid a:hover,
.cert-grid a:focus-visible {
  color: var(--doc-steel);
  background: transparent;
}
:root[data-theme='dark'] .home-cert-strip .cert-grid a {
  border-color: var(--doc-rule);
  background: transparent;
  color: var(--doc-ink-2);
}

/* ---- 8. Directory matrix & clusters: reference tables -------------------- */
.home-browse-heading {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(220px, 0.58fr);
  align-items: center;
  gap: var(--sp-6);
}
.home-browse-heading > div:first-child {
  min-width: 0;
}
.home-browse-photo {
  height: clamp(150px, 16vw, 210px);
  overflow: hidden;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-paper-alt);
}
.home-browse-photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 55%;
}
@media (max-width: 767px) {
  .home-browse-heading {
    grid-template-columns: 1fr;
    gap: var(--sp-4);
  }
  .home-browse-photo {
    height: clamp(160px, 45vw, 230px);
  }
}

.home-directory-matrix {
  gap: 1px;
  background: var(--doc-rule);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  overflow: hidden;
}
.home-directory-matrix a {
  padding: 1.05rem 1.15rem;
  border: 0;
  border-radius: 0;
  background: var(--doc-surface);
  box-shadow: none;
  transform: none;
}
.home-directory-matrix a::before { display: none; }
.home-directory-matrix a:hover,
.home-directory-matrix a:focus-visible {
  background: var(--doc-steel-wash);
  border-color: transparent;
  box-shadow: none;
  transform: none;
}
.home-directory-matrix strong {
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.home-directory-matrix a:hover strong { color: var(--doc-steel-deep); }
.home-directory-matrix span {
  margin-top: 0.22rem;
  font-size: var(--fs-sm);
  line-height: 1.45;
  color: var(--doc-muted);
}

.browse-subhead {
  margin: 2rem 0 1.05rem;
  padding-top: 1.05rem;
  border-top: 1px solid var(--doc-rule);
}
.browse-subhead strong {
  font-size: 1.0625rem;
  font-weight: 600;
  color: var(--doc-ink);
}
.browse-subhead p { font-size: var(--fs-md); color: var(--doc-muted); }

.cluster-grid { gap: 1.25rem; }
.cluster-grid article {
  padding: 0.95rem 0.15rem 0;
  border: 0;
  border-top: 2px solid var(--doc-rule-strong);
  border-radius: 0;
  background: transparent !important;
  box-shadow: none;
  transform: none;
}
.cluster-grid article:hover,
.cluster-grid article:focus-visible {
  border-top-color: var(--doc-steel);
  background: transparent !important;
  box-shadow: none;
  transform: none;
}
.cluster-grid h3 {
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.cluster-grid p { font-size: var(--fs-sm); color: var(--doc-muted); }
.cluster-grid a {
  color: var(--doc-steel);
  font-size: var(--fs-sm);
  font-weight: 600;
}
.cluster-grid a:hover { color: var(--doc-steel-deep); text-decoration: underline; }

/* ---- 9. Workflow: a numbered document procedure --------------------------- */
body.page-home .section-workflow .section-heading h2 { color: var(--doc-ink); }
body.page-home .section-workflow .eyebrow {
  background: transparent;
  border: 0;
  border-left: 3px solid var(--doc-steel);
  border-radius: 0;
  color: var(--doc-ink-2);
}
.workflow-strip {
  gap: 0;
  border-top: 2px solid var(--doc-rule-strong);
}
.workflow-strip::before { display: none; }
.workflow-strip > .workflow-step {
  position: relative;
  z-index: 1;
  padding: 1.1rem 1.15rem 0.9rem;
  border: 0;
  border-left: 1px solid var(--doc-rule);
  border-radius: 0;
  background: transparent;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: none;
  transform: none;
}
.workflow-strip > .workflow-step:hover,
.workflow-strip > .workflow-step:focus-visible {
  background: var(--doc-steel-wash);
  border-color: var(--doc-rule);
  box-shadow: none;
  transform: none;
}
.workflow-strip span {
  width: auto;
  height: auto;
  margin-bottom: 0.45rem;
  border-radius: 0;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: 1.125rem;
  font-weight: 500;
  color: var(--doc-steel);
}
.workflow-step small {
  margin-bottom: 0.3rem;
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  font-weight: 500;
  letter-spacing: 0.03em;
  text-transform: none;
  color: var(--doc-muted);
}
.workflow-strip h3 {
  margin-bottom: 0.2rem;
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.workflow-strip p {
  font-size: var(--fs-sm);
  line-height: 1.5;
  color: var(--doc-ink-2);
}
.workflow-step.is-emphasis {
  background: transparent;
  border-left: 2px solid var(--doc-steel);
  box-shadow: none;
}
.workflow-step.is-terminal {
  background: transparent;
  border-left: 2px solid var(--doc-ink-2);
  box-shadow: none;
}
.workflow-step.is-terminal small,
.workflow-step.is-terminal p { color: var(--doc-muted); }
.workflow-step.is-terminal h3 { color: var(--doc-ink); }
.workflow-step.is-terminal span { background: transparent; }

/* ---- 10. Topic map: assay-channel codes in monospace ---------------------- */
.topic-map-home {
  gap: 1px;
  background: var(--doc-rule);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  overflow: hidden;
}
.topic-map-home a {
  padding: 1.05rem 1.1rem;
  border: 0;
  border-radius: 0;
  background: var(--doc-surface) !important;
  box-shadow: none;
  transform: none;
}
.topic-map-home a:hover,
.topic-map-home a:focus-visible {
  background: var(--doc-steel-wash) !important;
  border-color: transparent;
  box-shadow: none;
  transform: none;
}
.topic-icon {
  min-width: 38px;
  width: auto;
  height: auto;
  margin-bottom: 0.55rem;
  padding: 0.18rem 0.45rem;
  border: 1px solid var(--doc-rule-strong);
  border-radius: 3px;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: var(--fs-xs);
  font-style: normal;
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--doc-steel);
}
.topic-map-home strong {
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.topic-map-home a.size-lg strong { font-size: 1.0625rem; }
.topic-map-home span {
  font-size: var(--fs-sm);
  line-height: 1.45;
  color: var(--doc-muted);
}

/* ---- 11. Company atlas ----------------------------------------------------- */
.company-atlas-home {
  align-items: stretch;
  gap: var(--sp-7);
}
.atlas-details {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.atlas-role-section {
  margin-top: var(--sp-7);
}
.atlas-region-grid {
  gap: 1px;
  background: var(--doc-rule);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  overflow: hidden;
}
.atlas-region-grid a {
  display: grid;
  align-content: center;
  gap: var(--sp-1);
  padding: 1rem 1.1rem;
  border: 0;
  border-radius: 0;
  background: var(--doc-surface);
  box-shadow: none;
  transform: none;
}
.atlas-region-grid a:hover,
.atlas-region-grid a:focus-visible {
  background: var(--doc-steel-wash);
  border-color: transparent;
  box-shadow: none;
  transform: none;
}
.atlas-region-grid strong {
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.atlas-region-grid span {
  margin-top: 0;
  font-size: var(--fs-sm);
  color: var(--doc-muted);
}

.atlas-visual {
  position: relative;
  align-self: stretch;
  min-height: 400px;
  overflow: hidden;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
}
.atlas-visual img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  filter: none;
}
.atlas-visual-copy {
  position: absolute;
  inset: auto 0 0;
  display: grid;
  gap: var(--sp-1);
  padding: var(--sp-4);
  border: 1px solid var(--doc-rule);
  border-left: 3px solid var(--doc-steel);
  border-radius: 3px;
  background: rgba(255, 255, 255, 0.94);
}
@media (max-width: 900px) {
  .company-atlas-home {
    grid-template-columns: minmax(0, 1fr);
  }
  .atlas-visual {
    min-height: clamp(240px, 52vw, 380px);
  }
}
:root[data-theme='dark'] .atlas-visual-copy {
  border-color: var(--doc-rule-strong);
  background: rgba(20, 24, 29, 0.92);
}
.atlas-visual-copy span {
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  letter-spacing: 0.02em;
  color: var(--doc-ink-2);
}
.atlas-visual-copy strong {
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-ink);
}

.atlas-role-grid {
  gap: 0;
  border-top: 2px solid var(--doc-rule-strong);
}
.atlas-role-grid a {
  padding: 0.72rem 0.2rem;
  border: 0;
  border-bottom: 1px solid var(--doc-rule);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  transform: none;
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-ink);
}
.atlas-role-grid a:hover,
.atlas-role-grid a:focus-visible {
  background: transparent;
  color: var(--doc-steel);
  box-shadow: none;
  transform: none;
}

.supplier-rail {
  margin-top: 1.15rem;
  padding-top: 0.85rem;
  border-top: 1px solid var(--doc-rule);
  gap: 0.4rem 1rem;
}
.supplier-rail span {
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  letter-spacing: 0.02em;
  color: var(--doc-muted);
}
.supplier-rail a {
  padding: 0.05rem 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--doc-steel);
}
.supplier-rail a:hover,
.supplier-rail a:focus-visible {
  background: transparent;
  color: var(--doc-steel-deep);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}
:root[data-theme='dark'] .section-company-atlas .supplier-rail a {
  border: 0;
  background: transparent;
}

/* ---- 12. Live feed: instrumented log lines --------------------------------- */
.live-feed-grid { gap: 2.25rem; }
.live-feed-grid article {
  padding: 0.95rem 0 0;
  border: 0;
  border-top: 2px solid var(--doc-rule-strong);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.live-feed-grid h3 {
  margin-bottom: 0.4rem;
  font-size: var(--fs-base);
  font-weight: 600;
  color: var(--doc-ink);
}
.live-feed-grid h3::after {
  padding: 0.08rem 0.4rem;
  border: 1px solid var(--doc-steel);
  border-radius: 3px;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: none;
  color: var(--doc-steel);
}
.live-feed-grid li { border-top: 1px solid var(--doc-rule); }
.feed-time {
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: none;
  color: var(--doc-muted);
}
.feed-state {
  padding: 0.05rem 0.35rem;
  border: 1px solid var(--doc-rule-strong);
  border-radius: 3px;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  text-transform: none;
  color: var(--doc-muted);
}
.feed-item.is-live .feed-state {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
  color: var(--doc-steel);
}
.feed-item.is-watch .feed-state {
  border-color: var(--doc-amber);
  background: var(--doc-amber-wash);
  color: var(--doc-amber);
}
.live-feed-grid li a {
  font-size: var(--fs-md);
  font-weight: 500;
  color: var(--doc-ink);
}
.live-feed-grid li a:hover {
  color: var(--doc-steel);
  text-decoration: underline;
  text-underline-offset: 0.16em;
}

/* ---- 13. Media updates: numbered-documentary figures ----------------------- */
.media-column-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--doc-ink);
}
.media-card {
  grid-template-columns: 160px minmax(0, 1fr);
  min-height: 150px;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  box-shadow: none;
  transform: none;
}
.media-card-featured {
  grid-template-columns: 160px minmax(0, 1fr);
  background: var(--doc-surface);
  border-left: 1px solid var(--doc-rule);
  box-shadow: none;
}
.media-card:hover,
.media-card:focus-within {
  border-color: var(--doc-rule-strong);
  box-shadow: none;
  transform: none;
}
.media-card img {
  display: block;
  width: 160px;
  height: 150px;
  min-height: 0;
  border-radius: 0;
  object-fit: cover;
  object-position: center;
  filter: none;
}
@media (max-width: 900px) {
  .media-update-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
@media (max-width: 600px) {
  .section-editorial .media-card,
  .section-editorial .media-card-featured {
    grid-template-columns: minmax(0, 1fr);
    min-height: 0;
  }
  .section-editorial .media-card img {
    width: 100%;
    height: 180px;
  }
}
.media-tag {
  width: auto;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--doc-steel);
}
.media-card h4 {
  font-size: var(--fs-base);
  font-weight: 600;
  line-height: 1.3;
  color: var(--doc-ink);
}
.media-card p { font-size: var(--fs-sm); color: var(--doc-muted); }
.media-card a {
  color: var(--doc-steel);
  font-size: var(--fs-sm);
  font-weight: 600;
}
.media-card a:hover { color: var(--doc-steel-deep); text-decoration: underline; }

/* ---- 14. Conversion: one clear primary action and a compact route index ---- */
.page-home .section-conversion {
  border-top: 1px solid var(--doc-rule);
  background: color-mix(in srgb, var(--doc-steel-wash) 48%, var(--doc-paper));
}
.page-home .home-conversion-zone {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
  align-items: center;
  gap: clamp(2rem, 5vw, 5rem);
  padding: var(--sp-7) 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  color: var(--doc-ink);
}
.conversion-head::before {
  content: '';
  display: block;
  width: 2.75rem;
  height: 4px;
  margin-bottom: var(--sp-6);
  background: #248bc0;
}
.page-home .conversion-head h2 {
  max-width: 13ch;
  margin: 0 0 var(--sp-4);
  color: var(--doc-ink);
  font-size: clamp(2rem, 3vw, 2.75rem);
  line-height: 1.12;
  font-weight: 600;
}
.page-home .conversion-head p {
  max-width: 36ch;
  margin: 0;
  color: var(--doc-ink-2);
  font-size: var(--fs-base);
  line-height: 1.65;
}
.conversion-actions {
  min-width: 0;
}
.conversion-action-copy {
  display: grid;
  gap: var(--sp-2);
  min-width: 0;
}
.conversion-main-action {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-6);
  min-height: 130px;
  padding: var(--sp-6);
  border-left: 4px solid #36a7d5;
  border-radius: var(--radius-control);
  background: #174d70;
  color: #fff;
  text-decoration: none;
}
.conversion-main-action:hover,
.conversion-main-action:focus-visible {
  background: #1c5e86;
}
.conversion-main-action strong {
  color: #fff;
  font-size: clamp(1.25rem, 2vw, 1.6rem);
  line-height: 1.25;
}
.conversion-main-action .conversion-action-copy > span {
  color: #d6e8f1;
  font-size: var(--fs-md);
}
.conversion-main-action svg {
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  stroke-width: 1.6;
}
.conversion-supporting-actions {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin-top: var(--sp-4);
  border-block: 1px solid var(--doc-rule-strong);
}
.conversion-supporting-actions a {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-2);
  min-width: 0;
  min-height: 96px;
  padding: var(--sp-4);
  color: var(--doc-ink);
  text-decoration: none;
}
.conversion-supporting-actions a + a {
  border-left: 1px solid var(--doc-rule);
}
.conversion-supporting-actions a:hover,
.conversion-supporting-actions a:focus-visible {
  background: var(--doc-steel-wash);
}
.conversion-supporting-actions strong {
  color: var(--doc-ink);
  font-size: var(--fs-md);
  line-height: 1.35;
}
.conversion-supporting-actions .conversion-action-copy > span {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: 1.4;
}
.conversion-supporting-actions svg {
  flex: 0 0 auto;
  width: 17px;
  height: 17px;
  color: var(--doc-steel);
  stroke-width: 1.75;
}
.conversion-main-action:focus-visible,
.conversion-supporting-actions a:focus-visible {
  outline: 3px solid var(--doc-steel);
  outline-offset: 3px;
}
@media (max-width: 900px) {
  .page-home .home-conversion-zone {
    grid-template-columns: 1fr;
    gap: var(--sp-6);
  }
  .page-home .conversion-head h2,
  .page-home .conversion-head p {
    max-width: 42ch;
  }
}
@media (max-width: 680px) {
  .page-home .home-conversion-zone {
    padding: var(--sp-6) 0;
  }
  .conversion-supporting-actions {
    grid-template-columns: 1fr;
  }
  .conversion-supporting-actions a {
    min-height: 72px;
  }
  .conversion-supporting-actions a + a {
    border-left: 0;
    border-top: 1px solid var(--doc-rule);
  }
}

/* ---- 15. Header & footer alignment ------------------------------------------ */
.site-header__row2 { background: var(--doc-header); }
.site-header__nav-link.is-active { border-bottom-color: #9db9ce; }
.site-header__nav-link::after { background: #9db9ce; }
.site-header .utility-link,
.theme-toggle {
  background: var(--doc-surface);
  border-color: var(--doc-rule);
  color: var(--doc-ink);
}

/* ---- 16. Motion restraint ----------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .home-directory-matrix a,
  .cluster-grid article,
  .topic-map-home a,
  .atlas-region-grid a,
  .workflow-strip > .workflow-step,
  .media-card,
  .media-card img,
  .search-chips a,
  .cert-grid a {
    transition: none;
  }
}

/* ---- 17. Legacy page overrides reconciled ---------------------------------- */
/* The products-discovery hero block in globals.css hardcodes display weights,
   a gradient CTA and pale surfaces; bring it into the document language. */
.products-discovery-page .product-command-copy h1 {
  color: var(--doc-ink);
  font-weight: 600 !important;
  letter-spacing: -0.018em !important;
}
body.page-products .btn-primary {
  background: var(--doc-btn-bg);
  border-color: var(--doc-btn-bg);
  color: var(--doc-btn-fg);
}
body.page-products .btn-primary:hover {
  background: var(--doc-btn-bg-hover);
  border-color: var(--doc-btn-bg-hover);
}
body.page-products .product-result {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card) !important;
  background: var(--doc-surface);
  box-shadow: none !important;
}
body.page-products .product-result:hover,
body.page-products .product-result:focus-within {
  border-color: var(--doc-rule-strong);
  box-shadow: none !important;
  transform: none;
}

:root[data-theme='dark'] .products-discovery-page .product-command-copy h1 {
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] .products-discovery-page .product-command-copy p:not(.eyebrow) {
  color: var(--doc-ink-2) !important;
}
:root[data-theme='dark'] .products-discovery-page .product-command-panel {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
}
:root[data-theme='dark'] .products-discovery-page .product-command-panel h2 {
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] .products-discovery-page .product-command-panel p:not(.eyebrow) {
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .products-discovery-page .product-command-helper {
  background: var(--doc-steel-wash) !important;
  color: var(--doc-ink-2) !important;
}
:root[data-theme='dark'] .products-discovery-page .product-command-helper svg,
:root[data-theme='dark'] .products-discovery-page .product-command-copy::before {
  color: var(--doc-steel);
}
:root[data-theme='dark'] .products-discovery-page .query-chip {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule-strong) !important;
  color: var(--doc-ink-2) !important;
}
:root[data-theme='dark'] .products-discovery-page .query-chip:hover,
:root[data-theme='dark'] .products-discovery-page .query-chip.is-selected {
  background: var(--doc-steel-wash) !important;
  border-color: var(--doc-steel) !important;
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] body.page-products .product-stat-row div {
  background: var(--doc-surface);
  border-color: var(--doc-rule);
}
:root[data-theme='dark'] body.page-products .product-stat-row strong {
  color: var(--doc-steel);
}

/* Hero photo wash: carbon tint in dark mode; label chip becomes a document
   eyebrow in both themes. */
:root[data-theme='dark'] .products-discovery-page .product-command-copy::after {
  background:
    linear-gradient(90deg, rgba(20, 24, 29, 0.97) 0%, rgba(20, 24, 29, 0.88) 37%, rgba(20, 24, 29, 0.35) 70%),
    linear-gradient(180deg, rgba(20, 24, 29, 0), rgba(20, 24, 29, 0.3)),
    url('/assets/generated/products.webp') right center / cover no-repeat;
  opacity: 1;
}
.products-discovery-page .product-command-copy .eyebrow {
  min-height: 0;
  padding: 0.08rem 0 0.08rem 0.7rem;
  border: 0;
  border-left: 3px solid var(--doc-steel);
  border-radius: 0;
  background: transparent;
  color: var(--doc-ink-2);
  font-weight: 600;
}
:root[data-theme='dark'] .products-discovery-page .product-command-copy .eyebrow {
  color: var(--doc-ink-2);
}
.products-discovery-page .product-hero-search {
  border-color: var(--doc-rule-strong);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
}
.products-discovery-page .product-hero-search button {
  border-radius: var(--radius-control);
  background: var(--doc-btn-bg);
  color: var(--doc-btn-fg);
  font-weight: 600;
}
.products-discovery-page .product-hero-search button:hover {
  background: var(--doc-btn-bg-hover);
}
:root[data-theme='dark'] .products-discovery-page .product-hero-search input {
  color: var(--doc-ink);
}
:root[data-theme='dark'] .products-discovery-page .product-hero-search svg {
  color: var(--doc-ink-2);
}

/* ---- 18. Shared interior components reconciled (full-site dark sweep) ------ */
/* Interior heroes keep pill-shaped kicker chips from the legacy sheets; the
   document language uses the left-bar label everywhere. */
:is(.platform-hero__copy, .tech-hub-hero-copy, .companies-hero-content, .insights-hero-aside) .ui-kicker,
.platform-hero__copy .eyebrow {
  padding: 0.08rem 0 0.08rem 0.7rem !important;
  border: 0 !important;
  border-left: 3px solid var(--doc-steel) !important;
  border-radius: 0 !important;
  background: transparent !important;
  color: var(--doc-ink-2) !important;
}

/* Assay-code chips on topic maps keep one treatment on every page. */
.topic-map-home a em.topic-icon,
.topic-map-home .topic-icon {
  padding: 0.18rem 0.45rem;
  background: transparent !important;
  border: 1px solid var(--doc-rule-strong) !important;
  border-radius: 3px !important;
  color: var(--doc-steel) !important;
  font-family: var(--doc-mono);
  font-weight: 500;
}

:root[data-theme='dark'] :is(.hero-visual__motif-panel--primary, .hero-visual__motif-panel--secondary) {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule-strong);
}
:root[data-theme='dark'] .hero-visual__motif-grid span {
  background: var(--doc-steel-wash) !important;
}
:root[data-theme='dark'] :is(.tech-hub-hero-copy, .platform-hero__copy, .glossary-header, .companies-hero-content) h1 {
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] .payload-richtext :is(h1, h2, h3) {
  color: var(--doc-ink);
}
:root[data-theme='dark'] .tech-hub-answer-block {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .tech-hub-actions .ui-btn-secondary {
  background: transparent !important;
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink);
}
:root[data-theme='dark'] .active-filter-row a.ui-chip,
:root[data-theme='dark'] .query-chip,
:root[data-theme='dark'] .chip-grid a {
  color: var(--doc-steel);
}
:root[data-theme='dark'] .topic-map-home a small {
  color: var(--doc-ink-2) !important;
}

/* Result-card action links and side panels keep legacy hardcoded blues. */
:is(.result-actions a, .result-text-link) {
  color: var(--doc-steel);
}
:root[data-theme='dark'] :is(.result-actions a, .result-text-link) {
  color: var(--doc-steel) !important;
}
:root[data-theme='dark'] .tech-hub-actions .ui-btn-secondary {
  color: var(--doc-ink) !important;
  border-color: var(--doc-rule-strong) !important;
  background: transparent !important;
}
:root[data-theme='dark'] :is(.partners-hero-panel, .tech-hub-hero-panel, .hero-copy-point, .hero-visual__stack .hero-visual__chip) {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
  color: var(--doc-ink-2);
}
/* Companies hero panels hardcode light grounds with !important in
   globals.css (.companies-hero-main gradient, .companies-match-card /
   .companies-hero-filter-card white) while the dark text-flip rules below
   lighten their copy → light-on-light. Flip the grounds to match the
   partners/tech-hub panel treatment. */
:root[data-theme='dark'] :is(.companies-hero-main, .companies-match-card, .companies-hero-filter-card) {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule) !important;
  box-shadow: none !important;
}
:root[data-theme='dark'] .companies-hero-filter-card label span {
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .companies-boost-card :is(strong, p) {
  color: var(--doc-ink-2);
}
/* Same ghost-panel treatment the partners page got (2026-10-03): companies
   sidebar filter groups keep the hardcoded rgba(255,255,255,.72) ground on
   the flipped-dark aside → white blocks with light text. */
:root[data-theme='dark'] .companies-page .filter-group {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] .companies-page .filter-group a > span:last-child {
  background: var(--doc-paper-alt);
  color: var(--doc-muted);
  border: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] :is(.partners-hero-panel, .tech-hub-hero-panel, .ui-card--padded) :is(h2, h3) {
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] :is(.partners-hero-panel, .tech-hub-hero-panel, .ui-card--padded) :is(p, small, span, li) {
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] :is(.ui-summary-tile, .partners-hero-ad__card, .seo-evidence-item) {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] :is(.ui-summary-tile, .partners-hero-ad__card, .seo-evidence-item) :is(h2, h3, h4, strong) {
  color: var(--doc-ink);
}
:root[data-theme='dark'] :is(.tech-hub-panel-card, .seo-audience-label) {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
}
:root[data-theme='dark'] .tech-hub-panel-card :is(strong, span) {
  color: var(--doc-ink);
}
:root[data-theme='dark'] :is(.partners-hero-metrics > div, .partners-hero-paths span) {
  background: var(--doc-steel-wash) !important;
  border-color: var(--doc-rule);
  color: var(--doc-ink-2);
}

/* ---- 19. UX launch audit fixes (2026-10-03) ------------------------------ */

/* F-C1: body.page-products carries a light-only local token set (--p-*) in
   the synced stylesheet; nothing flipped it for dark mode, leaving the detail
   H1 at #102A43 on carbon (~1.3:1). Re-point the whole set to the document
   tokens so all 8 --p-text consumers flip at once. */
:root[data-theme='dark'] body.page-products {
  --p-bg: var(--doc-paper);
  --p-surface-soft: var(--doc-paper-alt);
  --p-surface: var(--doc-surface);
  --p-text: var(--doc-ink);
  --p-text-muted: var(--doc-muted);
  --p-brand: var(--doc-steel);
  --p-brand-hover: var(--doc-steel-deep);
  --p-accent: var(--doc-steel);
  --p-accent-soft: var(--doc-steel-wash);
  --p-border: var(--doc-rule);
  --p-success-soft: #1f2a24;
  --p-success-text: #8fd0ac;
  --p-shadow-sm: none;
  --p-shadow-md: none;
}

/* F-C2: header language links resolved foreground at 70% alpha — below WCAG
   AA on both themes. Secondary ink clears 4.5:1 on paper and carbon. */
.site-header .language-switcher a {
  color: var(--doc-ink-2);
}
.site-header .language-switcher a:hover {
  color: var(--doc-ink);
}

/* F-M6 companion + F-注1: the synced sheet sets `scroll-behavior: smooth` on
   html; Next.js asks authors to opt in explicitly (console warning on every
   SPA navigation). Smooth scrolling is off; anchors stay instant. */
html {
  scroll-behavior: auto;
}

/* F-H6: hamburger hit area below the 48px touch minimum; expand the button,
   keep the visual icon size. */
.site-header__mobile-toggle {
  min-width: 48px;
  min-height: 48px;
}

/* ===== [组B] companies/[slug] 逐页精修 (2026-10-03) ===== */
/* Scope: every rule below is prefixed with .company-detail-page so the
   shared .product-detail-section / .seo-evidence-chain styles used by
   products/[slug] and other routes stay untouched. */

/* B1. H1: company names are proper nouns — the 12ch hero cap splits legal
   names mid-word ("Shenzhen New Industries Biomedical…"). Cap wider. */
.company-detail-page .company-detail-copy h1 {
  max-width: 24ch;
  color: var(--doc-ink);
}

/* B2. Header rhythm: room between copy and the facts panel; chips detach
   from the summary; header keeps the section rule distance consistent. */
.company-detail-page .company-detail-header {
  gap: var(--sp-5);
  align-items: start;
}
.company-detail-page .company-chip-row {
  margin-top: var(--sp-3);
}

/* B3. Facts panel: one flat document panel — white face, hairline, 6px
   radius, no shadow, no banner sliver (::before corner bar leftover). */
.company-detail-page .company-facts-card {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  box-shadow: none !important;
  align-self: start;
  position: static;
  overflow: visible;
}
.company-detail-page .company-facts-card::before {
  content: none;
}
.company-detail-page .company-facts-card h2 {
  font-weight: 600;
  color: var(--doc-ink);
}
/* Facts read as a colophon table: label left, value right, hairline rows. */
.company-detail-page .company-facts-card .detail-list {
  gap: 0;
}
.company-detail-page .company-facts-card .detail-list > div {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--sp-3);
  padding: var(--sp-2) 0;
  border-bottom: 1px solid var(--doc-rule);
}
.company-detail-page .company-facts-card .detail-list > div:first-child {
  padding-top: 0;
}
.company-detail-page .company-facts-card .detail-list > div:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}
.company-detail-page .company-facts-card .detail-list dt {
  color: var(--doc-muted);
  flex-shrink: 0;
}
.company-detail-page .company-facts-card .detail-list dd {
  margin: 0;
  color: var(--doc-ink);
  text-align: right;
  min-width: 0;
}
.company-detail-page .company-facts-card .hero-cta-group {
  margin-top: var(--sp-4);
}

/* B4. Section rhythm: hairline document rules between profile sections;
   one heading scale for bare and split section h2. */
.company-detail-page .company-detail-section-block {
  margin-bottom: 0;
}
.company-detail-page .company-detail-section-block + .company-detail-section-block {
  border-top: 1px solid var(--doc-rule);
  margin-top: var(--sp-5);
  padding-top: var(--sp-5);
}
.company-detail-page .company-detail-section-block > h2 {
  font-size: var(--text-h2);
  font-weight: 600;
  color: var(--doc-ink);
  margin-bottom: var(--sp-3);
}
.company-detail-page .section-heading.split {
  margin-bottom: var(--sp-4);
}

/* B5. Taxonomy groups: flatten the three bordered boxes inside the profile
   section (card-in-card) — label + chips columns under a hairline. */
.company-detail-page .company-taxonomy-grid {
  margin-top: var(--sp-4);
  padding-top: var(--sp-4);
  border-top: 1px solid var(--doc-rule);
  gap: var(--sp-3) var(--sp-5);
}
.company-detail-page .company-taxonomy-grid .product-detail-section {
  background: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none !important;
  padding: 0;
  min-width: 0;
}
.company-detail-page .company-taxonomy-grid .product-detail-section h3 {
  text-transform: none;
  letter-spacing: 0.01em;
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--doc-muted);
  margin-bottom: var(--sp-2);
}
.company-detail-page .company-taxonomy-grid .company-tag-list {
  gap: var(--sp-1) var(--sp-2);
}

/* B6. Chips: non-interactive metadata reads as paper, not brand blue; both
   themes via tokens (the legacy rules hardcode white mixes). */
.company-detail-page .company-tag-list span {
  background: var(--doc-paper-alt);
  border: 1px solid var(--doc-rule);
  color: var(--doc-ink-2);
  border-radius: 999px;
  padding: 0.2rem 0.6rem;
  font-size: var(--fs-xs);
  font-weight: 600;
  line-height: var(--leading-snug);
}
.company-detail-page .badge-company {
  background: var(--doc-steel-wash);
  border: 1px solid transparent;
  color: var(--doc-steel-deep);
  border-radius: 999px;
}
.company-detail-page .badge-muted {
  background: var(--doc-paper-alt);
  border: 1px solid var(--doc-rule);
  color: var(--doc-ink-2);
  border-radius: 999px;
}

/* B7. Review & references panel: flat card at full column width (the shared
   component also carries .container, which double-insets it here), then
   readable evidence grid. */
.company-detail-page .ivd-seo-panel-stack .seo-evidence-chain,
.company-detail-page .ivd-seo-panel-stack .seo-answer-block {
  width: 100%;
  margin-inline: 0;
  margin-bottom: 0;
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  box-shadow: none !important;
  padding: var(--sp-4);
}
.company-detail-page .ivd-seo-panel-stack .seo-evidence-chain {
  margin-top: var(--sp-4);
}
.company-detail-page .seo-evidence-chain h2,
.company-detail-page .seo-answer-block h2 {
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-ink);
}
.company-detail-page .seo-evidence-grid {
  gap: var(--sp-3) var(--sp-4);
}
.company-detail-page .seo-evidence-grid strong {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
}
.company-detail-page .seo-evidence-grid p {
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  margin: 0;
}
.company-detail-page .seo-reference-list strong {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
}
.company-detail-page .seo-reference-list a {
  color: var(--doc-steel);
}

/* B8. Linked-product and buyer-guide cards: one Content-card recipe —
   white face + 1px hairline + 6px radius, no shadow, no gradient tail,
   hover darkens the border only (globals lift/gradient retired here). */
.company-detail-page .company-linked-product,
.company-detail-page .company-guide-card {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  box-shadow: none !important;
  padding: var(--sp-4);
  transition: border-color 160ms ease;
  position: static;
  overflow: visible;
}
.company-detail-page .company-linked-product::after,
.company-detail-page .company-guide-card::after {
  content: none;
}
.company-detail-page .company-linked-product:hover,
.company-detail-page .company-linked-product:focus-within,
.company-detail-page .company-guide-card:hover,
.company-detail-page .company-guide-card:focus-within {
  transform: none;
  box-shadow: none !important;
  border-color: var(--doc-rule-strong);
}
.company-detail-page .company-linked-product h3,
.company-detail-page .company-guide-card h3 {
  font-size: var(--text-h4);
  font-weight: 600;
  color: var(--doc-ink);
  margin: 0 0 var(--sp-1);
}
.company-detail-page .company-linked-product h3 a,
.company-detail-page .company-guide-card h3 a {
  color: var(--doc-ink);
}
.company-detail-page .company-linked-product h3 a:hover,
.company-detail-page .company-guide-card h3 a:hover {
  color: var(--doc-steel-deep);
}
.company-detail-page .company-linked-product > p {
  margin: 0;
  font-size: var(--fs-sm);
  line-height: var(--leading-snug);
  color: var(--doc-muted);
}
.company-detail-page .company-linked-product > p + p {
  margin-top: var(--sp-2);
  color: var(--doc-ink-2);
  line-height: var(--leading-normal);
}
.company-detail-page .company-guide-card > p {
  margin: 0;
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}
.company-detail-page .company-linked-products,
.company-detail-page .company-guide-grid {
  gap: var(--sp-4);
}

/* B9. CTA reach: primary/secondary actions become full-width thumb targets
   on phones; the facts panel stacks under the copy as before. */
@media (max-width: 767px) {
  .company-detail-page .hero-cta-group .btn {
    flex: 1 1 100%;
  }
  .company-detail-page .company-detail-header {
    gap: var(--sp-4);
  }
  .company-detail-page .company-taxonomy-grid {
    gap: var(--sp-3);
  }
}

/* ===== [组A] products/[slug] 逐页精修 (2026-10-03) =====
   Scope: /products/[slug] only. Every rule is namespaced under
   .product-detail-page so shared classes (.detail-list, .badge,
   .cta-actions, seo-* panels) keep their global behavior elsewhere.
   Direction: calibration document — paper/ink tokens, hairline rules,
   one primary action (Request Quote) per view. */

/* ---- Breadcrumb: quiet document trail, long product names truncate ----- */
.product-detail-page .breadcrumb {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-sm);
  color: var(--doc-muted);
  margin-bottom: var(--sp-6);
}

.product-detail-page .breadcrumb a {
  color: var(--doc-muted);
  text-decoration: none;
  white-space: nowrap;
}

.product-detail-page .breadcrumb a:hover {
  color: var(--doc-steel);
  text-decoration: underline;
}

.product-detail-page .breadcrumb span:first-of-type {
  color: var(--doc-rule-strong);
}

.product-detail-page .breadcrumb span:last-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- Header: chips, H1 tier detail, manufacturer line ------------------- */
.product-detail-page .product-detail .product-header {
  margin-bottom: var(--sp-6);
  padding-bottom: var(--sp-5);
  border-bottom: 1px solid var(--doc-rule);
}

.product-detail-page .product-detail .product-meta-top {
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
}

.product-detail-page .product-detail .product-category,
.product-detail-page .product-detail .product-platform {
  display: inline-flex;
  align-items: center;
  padding: var(--sp-1) var(--sp-3);
  border: 1px solid var(--doc-rule);
  border-radius: 999px;
  background: var(--doc-surface);
  color: var(--doc-ink-2);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.01em;
}

.product-detail-page .product-detail h1 {
  color: var(--doc-ink);
  overflow-wrap: break-word;
  text-wrap: balance;
  margin-bottom: var(--sp-2);
}

.product-detail-page .product-detail .product-manufacturer {
  margin-top: var(--sp-2);
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-muted);
}

.product-detail-page .product-detail .product-manufacturer strong {
  font-weight: 600;
  color: var(--doc-ink);
}

.product-detail-page .product-detail .product-manufacturer a {
  color: var(--doc-steel);
  text-decoration: none;
}

.product-detail-page .product-detail .product-manufacturer a:hover {
  text-decoration: underline;
}

/* ---- Detail layout: main column + inquiry rail ---------------------------
   Source order = rail first, so on mobile the quote CTA sits directly
   under the H1 (evaluation starts from an actionable entry); on >=1024px
   the rail is placed to the right and sticks below the site header. */
.product-detail-page .product-detail-layout {
  display: grid;
  gap: var(--sp-6);
  align-items: start;
}

.product-detail-page .product-detail-main,
.product-detail-page .product-inquiry-rail {
  min-width: 0;
}

@media (min-width: 1024px) {
  .product-detail-page .product-detail-layout {
    grid-template-columns: minmax(0, 1fr) 324px;
    gap: var(--sp-7);
  }

  .product-detail-page .product-detail-main {
    grid-column: 1;
    grid-row: 1;
  }

  .product-detail-page .product-inquiry-rail {
    grid-column: 2;
    grid-row: 1;
    position: sticky;
    top: calc(64px + 46px + var(--sp-4)); /* site header row1+row2 + breathing */
  }
}

/* ---- Inquiry card (询价卡): one primary action, quiet cross-links ------- */
.product-detail-page .inquiry-card {
  display: grid;
  gap: var(--sp-3);
  padding: var(--sp-5);
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
}

.product-detail-page .inquiry-card__cta {
  width: 100%;
  justify-content: center;
  text-align: center;
}

.product-detail-page .inquiry-card__links:not(:empty) {
  display: grid;
  gap: var(--sp-2);
  padding-top: var(--sp-3);
  border-top: 1px solid var(--doc-rule);
}

.product-detail-page .inquiry-card__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--doc-steel);
  text-decoration: none;
}

.product-detail-page .inquiry-card__link:hover {
  color: var(--doc-steel-deep);
  text-decoration: underline;
}

.product-detail-page .inquiry-card__link span {
  flex-shrink: 0;
}

/* ---- Prose sections: module-title H2 + relaxed body --------------------- */
.product-detail-page .product-section {
  margin-bottom: var(--sp-6);
}

.product-detail-page .product-section h2 {
  font-size: var(--text-h3);
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
  margin-bottom: var(--sp-4);
}

.product-detail-page .product-section > p {
  max-width: 68ch;
  font-size: 1rem;
  line-height: var(--leading-relaxed);
  color: var(--doc-ink-2);
}

/* ---- Spec grid: content cards, hairline spec rows ----------------------- */
.product-detail-page .product-details-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 350px), 1fr));
  gap: var(--sp-5);
  align-items: start;
  margin-bottom: var(--sp-6);
}

.product-detail-page .product-detail-section {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  padding: var(--sp-5);
  min-width: 0;
}

.product-detail-page .product-detail-section h3 {
  font-size: var(--fs-md);
  font-weight: 600;
  line-height: var(--leading-snug);
  text-transform: none;
  letter-spacing: normal;
  color: var(--doc-ink);
  margin-bottom: var(--sp-4);
  padding-left: var(--sp-3);
  border-left: 3px solid var(--doc-steel);
}

.product-detail-page .detail-list {
  display: grid;
  grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
  gap: 0;
  column-gap: var(--sp-3);
}

.product-detail-page .detail-list dt {
  padding: var(--sp-2) 0;
  border-bottom: 1px solid var(--doc-rule);
  font-size: var(--fs-xs);
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0.02em;
  color: var(--doc-muted);
}

.product-detail-page .detail-list dd {
  margin: 0;
  padding-block: var(--sp-2);
  border-bottom: 1px solid var(--doc-rule);
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-ink);
  font-variant-numeric: tabular-nums;
  overflow-wrap: break-word;
}

.product-detail-page .detail-list dd:last-of-type {
  border-bottom: 0;
}

.product-detail-page .detail-list dt:last-of-type {
  border-bottom: 0;
}

.product-detail-page .product-detail-section > p {
  margin: 0;
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
  color: var(--doc-muted);
}

/* Regulatory chips: flat document badges, amber/steel semantics untouched */
.product-detail-page .regulatory-badges {
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
}

.product-detail-page .badge-regulatory {
  background: var(--doc-surface);
  color: var(--doc-ink-2);
  border: 1px solid var(--doc-rule-strong);
}

/* ---- Buyer notes: steel wash guidance panel ----------------------------- */
.product-detail-page .buyer-notes {
  background: var(--doc-steel-wash);
  border: 1px solid color-mix(in srgb, var(--doc-steel) 22%, var(--doc-rule));
  border-radius: var(--radius-card);
  padding: var(--sp-5);
}

.product-detail-page .buyer-notes h2 {
  margin-bottom: var(--sp-3);
}

.product-detail-page .buyer-notes p {
  max-width: 68ch;
  font-size: 1rem;
  line-height: var(--leading-relaxed);
  color: var(--doc-ink-2);
}

/* ---- Key features: hairline document rows ------------------------------- */
.product-detail-page .key-features-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0;
}

.product-detail-page .key-features-list li {
  margin: 0;
  padding: var(--sp-3) 0;
  border-top: 1px solid var(--doc-rule);
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
  overflow-wrap: break-word;
}

.product-detail-page .key-features-list li:first-child {
  padding-top: 0;
  border-top: 0;
}

/* ---- Related test guides: compact secondary chips (38 tier, below CTA) -- */
.product-detail-page .product-section .cta-actions {
  gap: var(--sp-2);
}

.product-detail-page .product-section .cta-actions .btn {
  min-height: var(--control-h-sm) !important;
  padding-inline: var(--sp-4);
  font-size: var(--fs-sm);
}

/* ---- SEO evidence panels: flat cards aligned to the article column ------ */
.product-detail-page .ivd-seo-panel-stack {
  display: grid;
  gap: var(--sp-4);
  margin-bottom: var(--sp-6);
}

.product-detail-page .ivd-seo-panel-stack .container {
  width: auto;
  max-width: none;
  margin-inline: 0;
  margin-bottom: 0;
  padding-inline: 0;
}

.product-detail-page .ivd-seo-panel-stack .seo-answer-block,
.product-detail-page .ivd-seo-panel-stack .seo-evidence-chain {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
  padding: var(--sp-5);
}

.product-detail-page .ivd-seo-panel-stack .seo-answer-block h2,
.product-detail-page .ivd-seo-panel-stack .seo-evidence-chain h2 {
  font-size: var(--text-h3);
  font-weight: 600;
  color: var(--doc-ink);
}

.product-detail-page .ivd-seo-panel-stack .seo-evidence-grid {
  gap: var(--sp-4);
}

.product-detail-page .ivd-seo-panel-stack .seo-evidence-grid strong,
.product-detail-page .ivd-seo-panel-stack .seo-reference-list strong {
  text-transform: none;
  letter-spacing: normal;
  font-size: var(--fs-xs);
  font-weight: 600;
  color: var(--doc-muted);
}

.product-detail-page .ivd-seo-panel-stack .seo-evidence-grid p {
  font-size: var(--fs-sm);
  color: var(--doc-ink-2);
}

.product-detail-page .ivd-seo-panel-stack .seo-answer-summary {
  font-size: 1rem;
  line-height: var(--leading-relaxed);
  color: var(--doc-ink-2);
}

/* ---- Footer action row: bottom-of-page conversion, one primary ---------- */
.product-detail-page .product-footer-links {
  gap: var(--sp-3);
  margin-top: var(--sp-7);
  padding-top: var(--sp-5);
  border-top: 1px solid var(--doc-rule);
}

/* Mobile: full-width, thumb-reachable action stack; >=640px back to inline */
.product-detail-page .product-footer-links .btn {
  flex: 1 1 100%;
  justify-content: center;
}

@media (min-width: 640px) {
  .product-detail-page .product-footer-links .btn {
    flex: 0 0 auto;
  }
}

/* B10. Unify split section h2s with the bare section h2 on --text-h2. */
.company-detail-page .section-heading.split h2 {
  font-size: var(--text-h2);
  color: var(--doc-ink);
}

/* ---- 19. Dark hero & control arbitration (UX audit 2026-10-03, P0 batch) --
   Sources: .ux-audit/secondary-pages-review.md P0-1/2/3/8.
   a) globals.css "light island" flips (§P3-R2 + §9052) assume image-backed
      light hero surfaces, but in dark mode the hero COPY column sits on the
      carbon page ground — flipped light inks compute 1.2:1. Re-point those
      containers to the carbon document values (globals.css :root[data-theme]
      block is the source of these literals).
   b) The §2/§3 button repaints assume paper ground; on the dark gradient
      insights hero and on card CTAs they leave ink-on-navy / steel-on-paper. */

/* a1) Hero copy columns: carbon tokens in dark. Selectors mirror the globals
       flip block (minus partners, whose light panel is intentional and OK).
       !important is required: dev-mode Next injects the bundled globals.css
       after this <link>, so source-order ties resolve against this file. */
:root[data-theme='dark'] :is(
  .technologies-page .tech-hub-hero-inner,
  .topics-hub-page .platform-hero__copy,
  .topics-hub-page .platform-hero__panel,
  .buyers-guide-page .platform-hero__copy,
  .buyers-guide-page .platform-hero__panel
) {
  --doc-paper: #14181d !important;
  --doc-paper-alt: #1a2026 !important;
  --doc-surface: #1a2026 !important;
  --doc-ink: #e4e9ed !important;
  --doc-ink-lift: #ffffff !important;
  --doc-ink-2: #a7b4bd !important;
  --doc-muted: #9daab4 !important;
  --doc-rule: #333c44 !important;
  --doc-rule-strong: #47535c !important;
  --doc-steel: #8fb4d4 !important;
  --doc-steel-wash: #232e38 !important;
  --doc-btn-bg: #e4e9ed !important;
  --doc-btn-bg-hover: #ffffff !important;
  --doc-btn-fg: #14181d !important;
  color: var(--doc-ink) !important;
}

/* a2) Product detail header: title/manufacturer line + category chips.
       Light-mode chip palette (#cbd5e1 bg) never flips for dark. */
:root[data-theme='dark'] .product-detail :is(h1, .product-manufacturer) {
  color: #e4e9ed !important;
}
:root[data-theme='dark'] .product-meta-top :is(.product-category, .product-platform) {
  background: #232e38 !important;
  border-color: #47535c !important;
  color: #a7b4bd !important;
}

/* b1) Card CTAs: primary buttons flip to a paper fill in dark — the label
       must flip with it (steel-light text on paper is 1.78:1). */
:root[data-theme='dark'] a.result-cta.ui-btn-primary,
:root[data-theme='dark'] .result-actions a.result-cta.ui-btn-primary,
:root[data-theme='dark'] .ui-btn.ui-btn-primary {
  color: #14181d !important;
}

/* b2) Insights hero keeps its navy gradient in both themes; both CTAs need
       on-dark variants there regardless of the ambient theme. */
.insights-hero-actions .insights-hero-secondary,
.insights-hero-actions .insights-hero-secondary:hover {
  color: #ffffff !important;
  border-color: rgba(255, 255, 255, 0.34) !important;
  background: rgba(255, 255, 255, 0.08) !important;
}
.insights-hero-actions .insights-hero-secondary:hover {
  background: rgba(255, 255, 255, 0.16) !important;
}
.insights-hero-actions .ui-btn-primary {
  border-color: rgba(255, 255, 255, 0.34) !important;
}

/* c) /tests directory title: .section-heading only styles h2 — the h1 fell
       back to 16px body copy. Align with the other knowledge directories. */
.knowledge-directory-intro .section-heading h1 {
  font-size: clamp(2rem, 3.2vw, 2.75rem);
  font-weight: 600;
  line-height: var(--leading-tight, 1.2);
  letter-spacing: -0.01em;
}

/* ===== [组C] insights 详情+分页 逐页精修 (2026-10-03) ===== */
/* Scope: /insights/[slug] article template (PostHero rewrite + prose measure)
   and /insights/page/[n] archive-band alignment. Consumes document tokens
   only; no new colors, radii, shadows or breakpoints. */

/* ---- C1. Article hero: light document hero, cover image optional ---------
   The legacy hero reserved min-h-[80vh] under the sticky header and set white
   copy on a bottom gradient, so imageless posts rendered invisible text in an
   empty dark well. All ten live posts are imageless today. The rewrite in
   src/heros/PostHero renders a paper-ground header block; these rules only
   typeset it (eyebrow mirrors the section-header steel-bar pattern). */
.insight-article-hero {
  background: var(--doc-paper);
  color: var(--doc-ink);
  border-bottom: 1px solid var(--doc-rule);
  padding-block: var(--sp-6);
}

.insight-article-hero__eyebrow {
  margin: 0 0 var(--sp-4);
  padding: 0.08rem 0 0.08rem 0.7rem;
  border-left: 3px solid var(--doc-steel);
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  font-weight: 600;
  letter-spacing: 0.01em;
  line-height: var(--leading-snug);
  text-transform: none;
}

.insight-article-hero__title {
  margin: 0 0 var(--sp-4);
  max-width: 56rem;
  color: var(--doc-ink);
  /* Detail-page H1 tier; beats the legacy text-3xl/5xl/6xl utilities. */
  font-size: var(--text-h1-detail) !important;
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.018em;
  overflow-wrap: break-word;
}

.insight-article-hero__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  column-gap: var(--sp-2);
  row-gap: var(--sp-1);
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  line-height: var(--leading-snug);
}

.insight-article-hero__meta time {
  color: var(--doc-ink);
  font-variant-numeric: tabular-nums;
}

.insight-article-hero__meta-item + .insight-article-hero__meta-item::before {
  content: '·';
  margin-right: var(--sp-2);
  color: var(--doc-rule-strong);
}

.insight-article-hero__media {
  margin: var(--sp-5) 0 0;
  max-width: 60rem;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  overflow: hidden;
}

.insight-article-hero__image {
  display: block;
  width: 100%;
  height: auto;
}

@media (max-width: 760px) {
  .insight-article-hero {
    padding-block: var(--sp-5);
  }
  .insight-article-hero__title {
    overflow-wrap: anywhere;
  }
}

/* ---- C2. Article body: one measure, relaxed prose ------------------------
   The body div carries .payload-richtext too, so the two-class selector wins
   over the generic 48.75rem rule and the mobile 100% override below it. */
.insight-article-body.payload-richtext {
  max-width: 43.75rem !important; /* ~70ch at 17px — under the 80-char cap */
  margin-inline: 0;
  padding-block: var(--sp-5) var(--sp-2);
  color: var(--doc-ink);
  font-size: 1.0625rem;
  line-height: var(--leading-relaxed);
}

.insight-article-body :is(h2, h3, h4) {
  color: var(--doc-ink);
  letter-spacing: -0.012em;
  line-height: var(--leading-tight);
}

.insight-article-body h2 {
  font-size: var(--text-h2) !important;
  margin-top: var(--sp-6);
  margin-bottom: var(--sp-3);
}

.insight-article-body h3 {
  font-size: var(--text-h3) !important;
  line-height: var(--leading-snug);
  margin-top: var(--sp-5);
  margin-bottom: var(--sp-2);
}

.insight-article-body a {
  color: var(--doc-steel);
  font-weight: 600;
}

.insight-article-body :is(ul, ol) {
  padding-left: 1.4em;
}

.insight-article-body li {
  margin-block: var(--sp-1);
}

.insight-article-body li::marker {
  color: var(--doc-muted);
}

.insight-article-body blockquote {
  margin-block: var(--sp-4);
  padding: var(--sp-3) var(--sp-4);
  border-left: 3px solid var(--doc-steel);
  border-radius: 0 var(--radius-card) var(--radius-card) 0;
  background: var(--doc-surface);
  color: var(--doc-ink-2);
}

.insight-article-body :is(img, figure) {
  margin-block: var(--sp-5);
}

.insight-article-body img {
  width: 100%;
  height: auto;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
}

.insight-article-body figcaption {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
  padding-top: var(--sp-2);
}

/* Tables keep the global overflow-x scroll; frame it as a document panel. */
.insight-article-body table {
  border-radius: var(--radius-card);
  border-color: var(--doc-rule);
}

/* ---- C3. Closing blocks: related content, then one restrained action row -- */
.insight-article-related {
  margin-top: var(--sp-7);
}

.insight-article-subheading {
  margin: 0 0 var(--sp-4);
  padding-top: var(--sp-5);
  border-top: 1px solid var(--doc-rule);
  color: var(--doc-ink);
  font-size: var(--text-h3);
  font-weight: 600;
  line-height: var(--leading-tight);
  letter-spacing: -0.012em;
}

/* RelatedPosts wraps itself in lg:container; nested inside the page container
   that pinches the card grid twice. Full-bleed within the article container. */
.insight-article-related .lg\:container {
  max-width: 100%;
  margin-inline: 0;
  padding-inline: 0;
}

.insight-article-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-3) var(--sp-4);
  margin-top: var(--sp-7);
  padding-top: var(--sp-5);
  border-top: 1px solid var(--doc-rule);
}

/* ---- C4. Paginated archive /insights/page/[n]: same hero band as /insights -- */
.insights-hero--archive .insights-hero-title {
  max-width: 60rem;
}

.insights-archive-range {
  margin-top: var(--sp-3);
  color: rgba(255, 255, 255, 0.72);
  font-size: var(--fs-sm);
  font-weight: 500;
  line-height: var(--leading-normal);
  font-variant-numeric: tabular-nums;
}

/* Pagination controls: 40px hit targets, muted disabled edges. */
.insights-page nav[aria-label='pagination'] button {
  min-height: 40px;
  min-width: 40px;
}

.insights-page nav[aria-label='pagination'] button:disabled {
  color: var(--doc-muted);
  opacity: 0.6;
}

/* ===== [组D] 表单页精修 (2026-10-03) =====
   Scope: /request-quote + /partners/apply (RfqForm) and /resources
   (ResourceRequestForm). The .rfq-* / .resource-* / .vault-* classes only
   occur inside these two form components, so class-level targeting is
   page-scoped in practice; .partners-apply-page rules are page-scoped.
   Consumes existing tokens only; no new tokens, colors or shadows. */

/* ---- 1. Required marker, legend, field hint -------------------------------- */
.rfq-required {
  margin-left: var(--sp-1);
  color: var(--status-error);
  font-weight: 600;
}
.rfq-field-hint {
  display: block;
  color: var(--doc-muted);
  font-size: var(--fs-xs);
  font-weight: 400;
  line-height: var(--leading-snug);
}

/* ---- 2. Validation states ---------------------------------------------------
   The forms run noValidate, so the browser never paints :user-invalid on a
   failed submit. RfqForm mirrors its checkValidity() pass onto
   .rfq-field.is-invalid (and aria-invalid) so the "highlighted below" copy is
   true on the very first attempt; :user-invalid keeps covering typed errors. */
.rfq-field.is-invalid :is(input, select, textarea) {
  border-color: var(--status-error) !important;
  background: var(--status-error-wash);
}
.rfq-field.is-invalid > span:first-child {
  color: var(--status-error);
}
:is(.rfq-field, .resource-field, .finder-sidebar, .company-filter-sidebar, .results-toolbar)
  :is(input, select, textarea):user-invalid {
  border-color: var(--status-error) !important;
  background: var(--status-error-wash);
}

/* ---- 3. Form surfaces: flat hairline document panels ------------------------
   The legacy sheet gives these glass gradients, 13-14px radii and soft
   shadows (light-mode brand-blue borders). Flatten to Content-card spec. */
:is(.rfq-form, .rfq-summary, .resource-request-form, .resource-policy-box, .vault-filter, .evidence-chain) {
  border: 1px solid var(--doc-rule) !important;
  border-radius: var(--radius-card) !important;
  background: var(--doc-surface) !important;
  box-shadow: none !important;
}
:is(.vault-pack-grid article, .resource-feed-list li) {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
  transition: border-color 160ms ease;
}
.vault-pack-grid article:hover {
  border-color: var(--doc-rule-strong);
  box-shadow: none;
  transform: none;
}
.vault-pack-grid article.is-selected {
  border-color: var(--doc-steel) !important;
  background: var(--doc-steel-wash);
  box-shadow: none !important;
}
.vault-pack-grid article.is-selected .resource-pack-access {
  color: var(--doc-steel);
}
.vault-pack-grid h3 {
  color: var(--doc-ink);
}
.vault-pack-grid p {
  color: var(--doc-muted);
}
.resources-page .vault-filter a {
  border: 1px solid var(--doc-rule);
  background: var(--doc-surface);
  color: var(--doc-ink-2);
  border-radius: var(--radius-control);
  text-decoration: none;
}
.resources-page .vault-filter a:hover {
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink);
}
.resources-page .vault-filter a.is-selected {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
  color: var(--doc-ink);
  font-weight: 600;
}
.resources-page .resource-pack-access {
  color: var(--doc-steel);
}
.resources-page .resource-pack-access:hover {
  color: var(--doc-steel-deep);
  text-decoration: underline;
}
:root[data-theme='dark'] .resources-page .resource-pack-access:hover {
  color: var(--doc-steel);
}
.resource-feed-list li span {
  color: var(--doc-muted);
}
.resource-feed-list li span + span {
  color: var(--doc-ink);
}

/* ---- 4. RFQ summary rail ------------------------------------------------------ */
.rfq-summary h2 {
  color: var(--doc-ink);
  font-size: var(--text-h3);
}
.rfq-summary ul {
  margin: 0;
  color: var(--doc-ink-2);
  font-size: var(--fs-md);
  line-height: var(--leading-relaxed);
}
.rfq-summary ul li::marker {
  color: var(--doc-steel);
}
.rfq-conversion-box {
  padding: var(--sp-4);
  border: 1px solid var(--doc-rule) !important;
  border-left: 3px solid var(--doc-steel) !important;
  border-radius: var(--radius-card) !important;
  background: var(--doc-surface) !important;
}
.rfq-conversion-box strong {
  color: var(--doc-ink);
}
.rfq-conversion-box p {
  margin: var(--sp-1) 0 0;
  color: var(--doc-muted);
  font-size: var(--fs-md);
  line-height: var(--leading-normal);
}

/* ---- 5. Step labels: document voice ------------------------------------------- */
.rfq-step > span {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-transform: none;
}
.rfq-step h3 {
  color: var(--doc-ink);
}
.rfq-audience-hint,
.rfq-personal-note {
  color: var(--doc-muted);
}
.rfq-personal-note {
  border-color: var(--doc-rule);
  background: var(--doc-paper);
}
.rfq-field.is-selected {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
}
.rfq-consent {
  color: var(--doc-ink-2);
}
.rfq-consent input[type='checkbox'] {
  accent-color: var(--doc-steel);
}

/* ---- 6. Status regions: one token-based voice for base/success/error ---------- */
.rfq-form-status,
.resource-request-status {
  border-color: var(--doc-rule) !important;
  background: var(--doc-surface) !important;
  color: var(--doc-ink-2) !important;
}
.rfq-form-status.is-error,
.resource-request-status.is-error {
  border-color: color-mix(in srgb, var(--status-error) 35%, transparent) !important;
  background: var(--status-error-wash) !important;
  color: var(--status-error) !important;
}
.rfq-form-status.is-success,
.resource-request-status.is-success {
  border-color: color-mix(in srgb, var(--doc-steel) 35%, transparent) !important;
  background: var(--doc-steel-wash) !important;
  color: var(--doc-ink) !important;
}
.resource-request-status a {
  color: var(--doc-steel);
  font-weight: 600;
  text-underline-offset: 0.18em;
}

/* ---- 7. Actions: one primary, 44px, left-aligned inside forms ------------------ */
:is(.rfq-form, .resource-request-form) :is(.btn-primary, .ui-btn-primary) {
  min-height: var(--control-h-lg);
}
.rfq-form .cta-actions {
  justify-content: flex-start;
}
.rfq-form .cta-actions .btn-secondary,
.rfq-form .cta-actions .ui-btn-secondary {
  min-height: var(--control-h-lg);
}

/* ---- 8. Native select/multi-select usability ------------------------------------ */
:is(.rfq-field, .resource-field) select[multiple] {
  height: auto !important;
  min-height: calc(var(--field-h) * 2 + var(--sp-2)) !important;
  padding: var(--sp-1) var(--sp-2);
}
:is(.rfq-field, .resource-field) select[multiple] option {
  padding: var(--sp-1) var(--sp-2);
  color: var(--doc-ink);
}
:is(.rfq-field, .resource-field) select[multiple] option:checked {
  background: var(--doc-steel-wash);
}

/* ---- 9. /partners/apply: document-voice hero ------------------------------------ */
.partners-apply-page .breadcrumb {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  margin-bottom: var(--sp-6);
}
.partners-apply-page .breadcrumb a {
  color: var(--doc-muted);
  text-decoration: none;
}
.partners-apply-page .breadcrumb a:hover {
  color: var(--doc-steel);
  text-decoration: underline;
}
.partners-apply-page .breadcrumb span:first-of-type {
  color: var(--doc-rule-strong);
}
.partners-apply-page h1 {
  color: var(--doc-ink);
  font-size: var(--text-h1) !important;
  line-height: var(--leading-tight);
}
.partners-apply-page .eyebrow {
  margin-bottom: var(--sp-3);
}

/* ---- 10. Mobile (≤640): 1rem inputs beat iOS focus zoom; full-width actions ------ */
@media (max-width: 640px) {
  :is(.rfq-field, .resource-field) :is(input, select, textarea) {
    font-size: 1rem;
  }
  :is(.rfq-form, .rfq-summary, .resource-request-form, .resource-policy-box) {
    padding: var(--sp-4) var(--sp-3);
  }
  .resource-request-form .btn-primary {
    width: 100%;
  }
  .rfq-form .cta-actions {
    gap: var(--sp-2);
  }
  .rfq-form .cta-actions > * {
    flex: 1 1 100%;
  }
}

/* ---- [组D] continuation: preserve the ≤767px filter-pill pattern ------------- */
@media (max-width: 767px) {
  .resources-page .vault-filter a {
    border-radius: 999px;
    white-space: nowrap;
  }
}

/* ---- [组D] cascade fixes ------------------------------------------------------
   1) The legacy sheet styles `.rfq-field span` at (0,1,1) — the required mark
      and field hint need (0,2,0) to win.
   2) The ≤767px pill strip keeps its transparent, borderless layout even
      though the flattening block above uses !important on .vault-filter. */
:is(.rfq-field, .resource-field) .rfq-required {
  color: var(--status-error);
}
:is(.rfq-field, .resource-field) .rfq-field-hint {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
  font-weight: 400;
}
@media (max-width: 767px) {
  .resources-page .vault-filter {
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
  }
}

/* ===== [组F] glossary/indicators/case-studies/partners 详情精修 (2026-10-03) ===== */
/* Scope: /glossary/[slug], /indicators/[slug], /case-studies/[slug], /partners/[slug]
   only. Every rule is namespaced under the four page <main> classes, so shared
   classes (.company-detail, .breadcrumb, .detail-list, .btn, .badge) keep their
   global behavior elsewhere — including the companies/[slug] rules from 组B.
   Direction: calibration document — reference-entry templates with a readable
   measure (<80ch), module-title headings, hairline section rules, tabular
   outcome figures, one primary action per template. */

/* ---- F1. Breadcrumb: quiet document trail; long titles truncate ----------- */
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .breadcrumb {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-sm);
  color: var(--doc-muted);
  margin-bottom: var(--sp-5);
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .breadcrumb a {
  color: var(--doc-muted);
  text-decoration: none;
  white-space: nowrap;
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .breadcrumb a:hover {
  color: var(--doc-steel);
  text-decoration: underline;
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .breadcrumb span:first-of-type {
  color: var(--doc-rule-strong);
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .breadcrumb span:last-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- F2. Header: document rule under the title block, balanced H1 --------- */
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-detail-header {
  margin-bottom: var(--sp-6);
  padding-bottom: var(--sp-5);
  border-bottom: 1px solid var(--doc-rule);
  gap: var(--sp-5);
  align-items: start;
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-detail-copy h1 {
  color: var(--doc-ink);
  overflow-wrap: break-word;
  text-wrap: balance;
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-detail-copy > p {
  max-width: 68ch;
  overflow-wrap: break-word;
}
:is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-chip-row {
  margin-top: var(--sp-3);
}

/* ---- F3. Section headings: module-title scale per template genre ----------
   Reference entries (glossary/indicator) use the 20px module title; the
   narrative case study uses the section-heading scale like insights articles. */
:is(.glossary-detail-page, .indicator-detail-page) :is(.glossary-section, .indicator-section) h2 {
  font-size: var(--text-h3) !important;
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
}
.case-study-detail-page .case-section h2 {
  font-size: var(--text-h2) !important;
  font-weight: 600;
  line-height: var(--leading-tight);
  color: var(--doc-ink);
}

/* ---- F4. Measure: prose stays under the 80-character cap ------------------ */
:is(.glossary-section, .indicator-section, .indicator-disclaimer, .case-section) p {
  max-width: 68ch;
  overflow-wrap: break-word;
}
.case-study-detail-page .case-study-body .payload-richtext {
  max-width: 43.75rem !important; /* ~70ch — matches the insights article measure */
  margin-inline: 0;
  line-height: var(--leading-relaxed);
}
.case-study-detail-page .case-study-body :is(ul, ol) {
  padding-left: 1.4em;
}
.case-study-detail-page .case-study-body li {
  max-width: 66ch;
  line-height: var(--leading-relaxed);
}
.case-study-detail-page .case-study-body li::marker {
  color: var(--doc-muted);
}
.case-study-detail-page .case-study-body a {
  color: var(--doc-steel);
  font-weight: 600;
}

/* ---- F5. Indicator disclaimer: the page's hard boundary reads first -------
   Steel-wash guidance panel (the buyer-notes recipe from 组A), document tokens
   in both themes; replaces the raw theme-elevation background. */
.indicator-detail-page .indicator-disclaimer {
  background: var(--doc-steel-wash);
  border: 1px solid color-mix(in srgb, var(--doc-steel) 22%, var(--doc-rule)) !important;
  border-radius: var(--radius-lg) !important;
  padding: var(--sp-4) !important;
}
.indicator-detail-page .indicator-disclaimer strong {
  display: block;
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--doc-ink);
}

/* ---- F6. Case-study outcomes: data rows with tabular figures -------------- */
.case-study-detail-page .case-outcome-list {
  gap: 0 var(--sp-6);
}
.case-study-detail-page .case-outcome-list > div {
  padding: var(--sp-3) 0;
  border-bottom: 1px solid var(--doc-rule);
}
.case-study-detail-page .case-outcome-list dt {
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--doc-muted);
}
.case-study-detail-page .case-outcome-list dd {
  margin-top: var(--sp-1);
  font-size: var(--text-h4);
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
  font-variant-numeric: tabular-nums;
  overflow-wrap: break-word;
}

/* ---- F7. Case-study CTA: the one primary action after the narrative ------- */
.case-study-detail-page .case-study-cta p {
  color: var(--doc-muted);
}

/* ---- F8. Partner headline: logo lockup beside the name -------------------- */
.partner-detail-page .partner-detail-headline {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
}
.partner-detail-page .partner-detail-headline h1 {
  margin: 0;
}
.partner-detail-page .partner-detail-logo {
  flex-shrink: 0;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  object-fit: contain;
}

/* ---- F9. Partner facts card: mirror the 组B companies recipe --------------- */
.partner-detail-page .company-facts-card {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  box-shadow: none !important;
  align-self: start;
  position: static;
  overflow: visible;
}
.partner-detail-page .company-facts-card::before {
  content: none;
}
.partner-detail-page .company-facts-card h2 {
  font-weight: 600;
  color: var(--doc-ink);
}
.partner-detail-page .company-facts-card .detail-list {
  gap: 0;
}
.partner-detail-page .company-facts-card .detail-list > div {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--sp-3);
  padding: var(--sp-2) 0;
  border-bottom: 1px solid var(--doc-rule);
}
.partner-detail-page .company-facts-card .detail-list > div:first-child {
  padding-top: 0;
}
.partner-detail-page .company-facts-card .detail-list > div:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}
.partner-detail-page .company-facts-card .detail-list dt {
  color: var(--doc-muted);
  flex-shrink: 0;
}
.partner-detail-page .company-facts-card .detail-list dd {
  margin: 0;
  color: var(--doc-ink);
  text-align: right;
  min-width: 0;
  overflow-wrap: anywhere;
}
.partner-detail-page .company-facts-card .hero-cta-group {
  display: grid;
  gap: var(--sp-2);
  margin-top: var(--sp-4);
}

/* ---- F10. Partner overview/tags/related sections -------------------------- */
.partner-detail-page .partner-overview h2 {
  font-size: var(--text-h3) !important;
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
}
.partner-detail-page .partner-overview p {
  max-width: 68ch;
  line-height: var(--leading-relaxed);
  color: var(--doc-ink-2);
  overflow-wrap: break-word;
}
.partner-detail-page :is(.partner-section) :is(h2, h3) {
  font-size: var(--text-h3) !important;
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
}
.partner-detail-page .partner-section p {
  max-width: 68ch;
}

/* ---- F11. Phones: full-width actions, stacked header, wrapped titles ------ */
@media (max-width: 767px) {
  :is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-detail-header {
    gap: var(--sp-4);
  }
  :is(.glossary-detail-page, .indicator-detail-page, .case-study-detail-page, .partner-detail-page) .company-detail-copy h1 {
    overflow-wrap: anywhere;
  }
  .partner-detail-page .company-facts-card .hero-cta-group .btn {
    flex: 1 1 100%;
  }
  .case-study-detail-page .case-study-cta .btn {
    width: 100%;
    justify-content: center;
  }
}

/* ===== [组E] technologies/tools/tests 详情精修 (2026-10-03) ===== */

/* ---- E1. Tech/Tool detail hero: document-language calibration -------------
   One template serves /technologies/[slug] and /tools/[slug]. Drop the drop
   shadow, consume the detail H1 token, align breadcrumb + metadata with the
   doc language, and flatten the sidebar wrapper (it wrapped an inner card). */
.tech-detail-page .tech-detail-header {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
  padding: var(--sp-5);
}
@media (min-width: 900px) {
  .tech-detail-page .tech-detail-header {
    padding: var(--sp-6);
  }
}
.tech-detail-page .tech-detail-breadcrumb {
  font-size: var(--fs-sm);
  color: var(--doc-muted);
}
.tech-detail-page .tech-detail-breadcrumb a {
  color: var(--doc-muted);
}
.tech-detail-page .tech-detail-breadcrumb a:hover {
  color: var(--doc-steel);
}
.tech-detail-page .tech-detail-title {
  font-size: var(--text-h1-detail);
  font-weight: 600;
  line-height: var(--leading-tight);
  color: var(--doc-ink);
}
.tech-detail-page .tech-detail-subtitle {
  font-size: var(--text-lead);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}
.tech-detail-page .tech-detail-actions {
  margin-top: var(--sp-5);
}
.tech-detail-page .tech-detail-sidebar {
  border: 0;
  background: transparent;
  padding: 0;
}
.tech-detail-page .tech-detail-sidebar dl {
  margin: var(--sp-4) 0 0;
  padding-top: var(--sp-4);
  border-top: 1px solid var(--doc-rule);
}
.tech-detail-page .tech-detail-sidebar dt {
  font-size: var(--fs-xs);
  font-weight: 600;
  color: var(--doc-muted);
}
.tech-detail-page .tech-detail-sidebar dd {
  margin: var(--sp-1) 0 var(--sp-3);
  font-size: var(--fs-sm);
  color: var(--doc-ink-2);
}
.tech-detail-page .tech-detail-sidebar dd:last-child {
  margin-bottom: 0;
}

/* ---- E2. SEO panels (Key takeaways / Review and references / FAQ) ---------
   The shared IvdSeoPanel sections carry .container, which double-insets them
   inside the page container and centers them on an 832px answer column while
   the FAQ heading sits at the far left. Pin everything to the article column
   as flat cards (same precedent as product/company detail). */
.tech-detail-page .ivd-seo-panel-stack {
  display: grid;
  gap: var(--sp-4);
  margin-bottom: var(--sp-6);
}
.tech-detail-page .ivd-seo-panel-stack .container {
  width: auto;
  max-width: none;
  margin-inline: 0;
  margin-bottom: 0;
  padding-inline: 0;
}
.tech-detail-page .ivd-seo-panel-stack .seo-answer-block,
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-chain {
  max-width: none;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
  padding: var(--sp-5);
}
.tech-detail-page .ivd-seo-panel-stack .seo-answer-block h2,
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-chain h2,
.tech-detail-page .ivd-seo-panel-stack .seo-faq-list h2 {
  font-size: var(--text-h3);
  font-weight: 600;
  color: var(--doc-ink);
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-list h2 {
  margin-top: var(--sp-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-answer-summary {
  font-size: 1rem;
  line-height: var(--leading-relaxed);
  color: var(--doc-ink-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-answer-points {
  margin-top: var(--sp-3);
}
.tech-detail-page .ivd-seo-panel-stack .seo-answer-points li {
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-audience {
  margin-top: var(--sp-4);
  font-size: var(--fs-sm);
  color: var(--doc-muted);
}
.tech-detail-page .ivd-seo-panel-stack .seo-audience-label {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
  font-weight: 600;
}
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-grid {
  gap: var(--sp-3) var(--sp-4);
}
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-item {
  border: 0;
  background: transparent;
  border-radius: 0;
  padding: 0;
  box-shadow: none;
}
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-grid strong,
.tech-detail-page .ivd-seo-panel-stack .seo-reference-list strong {
  text-transform: none;
  letter-spacing: normal;
  font-size: var(--fs-xs);
  font-weight: 600;
  color: var(--doc-muted);
}
.tech-detail-page .ivd-seo-panel-stack .seo-evidence-grid p {
  margin: 0;
  font-size: var(--fs-sm);
  color: var(--doc-ink-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-reference-list {
  margin-top: var(--sp-4);
  padding-top: var(--sp-4);
  border-top: 1px solid var(--doc-rule);
}
.tech-detail-page .ivd-seo-panel-stack .seo-reference-list ul {
  margin-top: var(--sp-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-reference-list li {
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-list {
  margin-bottom: 0;
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-grid {
  gap: var(--sp-3);
  margin-top: var(--sp-4);
}
@media (min-width: 900px) {
  .tech-detail-page .ivd-seo-panel-stack .seo-faq-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-card {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  padding: var(--sp-4);
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-card h3 {
  font-size: var(--fs-base);
  font-weight: 600;
  line-height: var(--leading-snug);
  color: var(--doc-ink);
}
.tech-detail-page .ivd-seo-panel-stack .seo-faq-card p {
  margin-top: var(--sp-2);
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}

/* ---- E3. Article sections: type scale + left-aligned prose column -------- */
.tech-detail-page .tech-detail-content {
  margin-top: var(--sp-7);
  gap: var(--sp-7);
}
.tech-detail-page .tech-detail-content h2 {
  font-size: var(--text-h2);
  font-weight: 600;
  line-height: var(--leading-tight);
  color: var(--doc-ink);
}
.tech-detail-page .tech-detail-prose {
  margin-top: var(--sp-3);
}
.tech-detail-page .tech-detail-prose .payload-richtext {
  margin-left: 0;
  margin-right: auto;
}

/* ---- E4. Content cards (workflow steps / factors / scenarios) ------------- */
.tech-detail-page .tech-detail-card {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  box-shadow: none;
  padding: var(--sp-5);
}
.tech-detail-page .tech-detail-card h3,
.tech-detail-page .tech-detail-card dt {
  font-size: var(--text-h4);
  font-weight: 600;
  color: var(--doc-ink);
}
.tech-detail-page .tech-detail-card p,
.tech-detail-page .tech-detail-card dd {
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}
.tech-detail-page .tech-detail-grid-2 {
  margin-top: var(--sp-5);
  gap: var(--sp-4);
}

/* ---- E5. Comparison matrix: caption joins the table, doc-rule frame ------- */
.tech-detail-page .tech-detail-caption {
  border: 0;
  background: transparent;
  border-radius: 0;
  padding: 0;
  margin: 0 0 var(--sp-2);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.tech-detail-page .tech-detail-table-wrap {
  margin-top: var(--sp-3);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
}
.tech-detail-page .tech-detail-table-wrap th {
  background: transparent;
  border-bottom: 1px solid var(--doc-rule-strong);
  color: var(--doc-muted);
  font-size: var(--fs-xs);
  letter-spacing: 0.04em;
}
.tech-detail-page .tech-detail-table-wrap td {
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
}
@media (max-width: 640px) {
  .tech-detail-page .tech-detail-table-wrap th,
  .tech-detail-page .tech-detail-table-wrap td {
    padding: var(--sp-2) var(--sp-3);
  }
}

/* ---- E6. Compliance note -------------------------------------------------- */
.tech-detail-page .tech-detail-compliance {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--ui-surface-2);
  padding: var(--sp-5);
}
.tech-detail-page .tech-detail-compliance .ui-kicker {
  margin-bottom: var(--sp-2);
}
.tech-detail-page .tech-detail-compliance p {
  font-size: var(--fs-base);
  line-height: var(--leading-normal);
  color: var(--doc-ink-2);
}

/* ---- E7. Related evaluation paths: flatten group cards --------------------
   The outer group card wrapped nested link cards (card-in-card-in-card); the
   group title becomes a plain module label and the nested cards carry the
   single hairline boundary. */
.tech-detail-page .tech-detail-related-grid {
  margin-top: var(--sp-5);
  gap: var(--sp-5);
}
.tech-detail-page .tech-detail-related-card {
  border: 0;
  background: transparent;
  padding: 0;
  box-shadow: none;
}
.tech-detail-page .tech-detail-related-card h3 {
  font-size: var(--text-h4);
  font-weight: 600;
  color: var(--doc-ink);
  margin-bottom: 0;
}
.tech-detail-page .tech-detail-nested-card {
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  padding: var(--sp-4);
  margin-top: var(--sp-3);
  box-shadow: none;
}
.tech-detail-page .tech-detail-nested-card h4 {
  font-size: var(--fs-base);
}
.tech-detail-page .tech-detail-nested-card h4 a:hover {
  color: var(--doc-steel);
}
.tech-detail-page .tech-detail-nested-card p {
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
}

/* ---- E8. Test detail (/tests/[slug]) --------------------------------------
   The page reuses .company-detail markup, whose h1 rules are the platform
   hero tier (max-width 12ch, clamp to 3.4rem, weight 800) — calibrate to the
   detail tier. Long external reference links must wrap, not overflow. */
.test-detail-page .company-detail-copy h1 {
  max-width: 24ch;
  font-size: var(--text-h1-detail);
  font-weight: 600;
  letter-spacing: normal;
  line-height: var(--leading-tight);
  color: var(--doc-ink);
}
.test-detail-page .company-detail-copy h1 + p {
  margin-top: var(--sp-3);
}
.test-detail-page .company-detail-header .eyebrow {
  margin-bottom: var(--sp-2);
}
.test-detail-page .company-chip-row {
  margin-top: var(--sp-3);
}
.test-detail-page .test-detail a {
  overflow-wrap: anywhere;
}
.test-detail-page .test-detail h2 {
  color: var(--doc-ink);
}

/* Test guides: a restrained clinical reference sheet with a specimen panel. */
.test-detail-page .test-guide-section {
  padding-top: var(--sp-6);
  padding-bottom: var(--sp-8);
}
.test-detail-page .breadcrumb {
  margin-bottom: var(--sp-5);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.test-detail-page .breadcrumb a {
  color: var(--doc-steel);
  font-weight: 600;
}
.test-detail-page .breadcrumb span:last-child {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.test-guide-hero {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 18rem;
  align-items: center;
  min-height: 18rem;
  overflow: hidden;
  padding: var(--sp-8);
  border-radius: var(--radius-card);
  background: #1c2b36;
  color: #f3f7f9;
}
.test-guide-hero-copy {
  position: relative;
  z-index: 1;
  max-width: 49rem;
}
.test-guide-hero .eyebrow {
  margin: 0 0 var(--sp-4);
  color: #a9c9df;
}
.test-guide-hero h1 {
  max-width: 23ch;
  margin: 0;
  color: #f3f7f9;
  font-size: clamp(2rem, 3.2vw, 3.25rem);
  font-weight: 600;
  line-height: 1.14;
  letter-spacing: -0.035em;
  text-wrap: balance;
}
.test-guide-summary {
  max-width: 57ch;
  margin-top: var(--sp-4);
  color: #c6d5df;
  font-size: var(--text-lead);
  line-height: var(--leading-snug);
}
.test-guide-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2) var(--sp-5);
  margin-top: var(--sp-6);
  color: #bfd0da;
  font-size: var(--fs-sm);
}
.test-guide-meta span + span {
  padding-inline-start: var(--sp-5);
  border-inline-start: 1px solid #526471;
}
.test-guide-hero-mark {
  position: relative;
  width: 15rem;
  height: 15rem;
  justify-self: center;
  border: 1px solid rgba(169, 201, 223, .32);
  border-radius: 50%;
  background: radial-gradient(circle, rgba(169, 201, 223, .14) 0 12%, transparent 12.5% 33%, rgba(169, 201, 223, .14) 33.5% 34%, transparent 34.5% 66%, rgba(169, 201, 223, .16) 66.5% 67%, transparent 67.5%);
}
.test-guide-hero-mark::before,
.test-guide-hero-mark::after {
  content: '';
  position: absolute;
  width: .75rem;
  height: .75rem;
  border-radius: 50%;
  background: #9bbbd1;
  box-shadow: 0 0 0 6px rgba(155, 187, 209, .12);
}
.test-guide-hero-mark::before { top: 22%; left: 18%; }
.test-guide-hero-mark::after { right: 15%; bottom: 25%; }
.test-guide-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.7fr) minmax(17rem, 1fr);
  gap: clamp(2rem, 6vw, 6rem);
  align-items: start;
  padding-block: var(--sp-8);
}
.test-guide-reading { max-width: 45rem; }
.test-guide-content-section + .test-guide-content-section {
  margin-top: var(--sp-7);
  padding-top: var(--sp-7);
  border-top: 1px solid var(--doc-rule);
}
.test-guide-content-section h2,
.test-guide-related h2,
.test-guide-products h2 {
  margin: 0 0 var(--sp-3);
  color: var(--doc-ink);
  font-size: var(--text-h2);
  font-weight: 600;
  line-height: var(--leading-tight);
  letter-spacing: -.02em;
}
.test-guide-content-section p {
  margin: 0;
  color: var(--doc-ink-2);
  font-size: 1rem;
  line-height: var(--leading-relaxed);
}
.test-guide-content-section .test-guide-care-note {
  margin-top: var(--sp-5);
  padding-inline-start: var(--sp-4);
  border-inline-start: 3px solid var(--doc-rule-strong);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.test-guide-aliases {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin: 0;
  padding: 0;
  list-style: none;
}
.test-guide-aliases li {
  padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
}
.test-guide-facts {
  padding: var(--sp-5);
  border: 1px solid var(--doc-rule);
  border-top: 3px solid var(--doc-steel);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
}
.test-guide-facts h2 {
  margin: 0;
  color: var(--doc-ink);
  font-size: var(--text-h3);
  font-weight: 600;
}
.test-guide-fact-group {
  margin-top: var(--sp-5);
  padding-top: var(--sp-4);
  border-top: 1px solid var(--doc-rule);
}
.test-guide-fact-group h3 {
  margin: 0 0 var(--sp-3);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  font-weight: 600;
}
.test-guide-fact-group ul {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin: 0;
  padding: 0;
  list-style: none;
}
.test-guide-fact-group li {
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--radius-control);
  background: var(--doc-steel-wash);
  color: var(--doc-steel-deep);
  font-size: var(--fs-sm);
  line-height: var(--leading-snug);
}
.test-guide-products {
  margin-top: var(--sp-2);
  padding: var(--sp-7);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
}
.test-guide-products > p,
.test-guide-products .test-guide-product-row p {
  max-width: 68ch;
  color: var(--doc-ink-2);
  line-height: var(--leading-normal);
}
.test-guide-products > p:last-child { margin-top: var(--sp-5); }
.test-guide-product-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  padding: var(--sp-4) 0;
  border-bottom: 1px solid var(--doc-rule);
}
.test-guide-related {
  max-width: 50rem;
  margin-top: var(--sp-8);
  padding-top: var(--sp-6);
  border-top: 1px solid var(--doc-rule);
}
.test-guide-related ul { margin-top: var(--sp-4); }
.test-guide-related li { line-height: var(--leading-normal); }
.test-guide-references h2 { font-size: var(--text-h3); }
.test-guide-references li { color: var(--doc-muted); font-size: var(--fs-sm); }
.test-guide a { overflow-wrap: anywhere; }
@media (max-width: 767px) {
  .test-detail-page .test-guide-section { padding-top: var(--sp-4); }
  .test-guide-hero {
    display: block;
    min-height: 0;
    padding: var(--sp-6) var(--sp-5);
  }
  .test-guide-hero h1 { font-size: clamp(1.9rem, 8vw, 2.5rem); }
  .test-guide-hero-mark {
    position: absolute;
    right: -6rem;
    bottom: -7rem;
    opacity: .45;
  }
  .test-guide-layout { grid-template-columns: 1fr; gap: var(--sp-7); padding-block: var(--sp-7); }
  .test-guide-facts { grid-row: 1; }
  .test-guide-products { padding: var(--sp-5); }
}
/* .text-link is inline-flex + nowrap (arrow-link pattern); long editorial
   titles (e.g. WHO reference links) must be allowed to wrap. */
.test-detail-page .test-detail a.text-link {
  white-space: normal;
}
/* [组E] follow-up: the tests template now renders .test-guide markup (the
   earlier .test-detail selectors no longer match) — long .text-link titles
   (e.g. WHO reference links) must still wrap instead of overflowing. */
.test-detail-page a.text-link {
  white-space: normal;
}
/* [组E] follow-up: the single implicit column of .tech-detail-content is
   sized by its widest item (wide comparison matrices) and pushes past the
   390px viewport; let items shrink so .tech-detail-table-wrap scrolls. */
.tech-detail-page .tech-detail-content > * {
  min-width: 0;
}

/* ---- 20. Second fix batch (UX audit follow-up: list-page H1 tiers, compare
       assembly UI, mobile tables, 404 recovery, glossary filter) ------------- */

/* a) Directory pages converge on one H1 tier: --text-h1 (≈44px @1440), weight
       600. Case-studies rendered detail-scale (36px) and indicators rendered
       56px (audit companies-F8/F7). Partners intentionally keeps the display
       tier (§ "Tier 3" above) — that split is a documented decision. */
:is(.case-studies-page, .indicator-list-page) h1 {
  font-size: var(--text-h1) !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em;
}

/* b) Single-column grids must not let one wide child stretch the document past
       the viewport (audit knowledge-F5: tech detail tables at 375px). */
.tech-detail-content > * {
  min-width: 0;
}
.payload-richtext {
  overflow-wrap: break-word;
}

/* c) Compare: sticky field column so horizontal scrolling keeps row labels,
       plus the add/remove product picker (CompareProductPicker). */
.compare-table th[scope='row'],
.compare-table thead th:first-child {
  position: sticky;
  left: 0;
  background: var(--doc-surface);
  z-index: 2;
  border-right: 1px solid var(--doc-rule);
}
.compare-table thead th:first-child {
  z-index: 3;
}
.compare-picker {
  margin: 0 0 var(--sp-5);
}
.compare-picker-controls {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3);
  align-items: center;
}
.compare-picker-controls > input {
  flex: 1 1 240px;
  min-height: 40px;
  padding: 0 var(--sp-3);
  border: 1px solid var(--doc-rule-strong);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink);
  font: inherit;
}
.compare-picker-current {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
}
.compare-picker-chip {
  cursor: pointer;
}
.compare-picker-list {
  display: grid;
  gap: 1px;
  margin: var(--sp-3) 0 0;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-rule);
  overflow: hidden;
  list-style: none;
  padding: 0;
}
.compare-picker-list button {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--sp-3);
  width: 100%;
  padding: var(--sp-2) var(--sp-3);
  border: 0;
  background: var(--doc-surface);
  color: var(--doc-ink);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.compare-picker-list button:hover {
  background: var(--doc-steel-wash);
}
.compare-picker-list button span {
  color: var(--doc-muted);
  font-size: var(--fs-xs);
}
.compare-picker-empty {
  margin: var(--sp-2) 0 0;
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.compare-autopair-note {
  margin: var(--sp-2) 0 0;
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
/* Swipe affordance for wide comparison tables on small screens. */
.compare-page .table-wrapper {
  position: relative;
}
@media (max-width: 640px) {
  .compare-page .table-wrapper::after {
    content: 'swipe →';
    position: sticky;
    right: 0;
    top: 0;
    float: right;
    padding: 2px 8px;
    font-family: var(--doc-mono);
    font-size: var(--fs-2xs);
    color: var(--doc-muted);
    background: color-mix(in srgb, var(--doc-surface) 82%, transparent);
    border-left: 1px solid var(--doc-rule);
    border-bottom: 1px solid var(--doc-rule);
    border-radius: 0 0 0 var(--radius-control);
    pointer-events: none;
  }
}

/* d) 404 recovery page: document-style panel, search, quick links. */
.not-found-panel {
  max-width: 760px;
  padding: var(--sp-8) 0 var(--sp-10);
}
.not-found-panel .not-found-title {
  font-size: var(--text-h1);
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--doc-ink);
  margin: var(--sp-2) 0 var(--sp-3);
}
.not-found-lead {
  color: var(--doc-ink-2);
  max-width: 58ch;
  margin: 0 0 var(--sp-5);
}
.not-found-search {
  display: flex;
  gap: var(--sp-2);
  margin-bottom: var(--sp-5);
}
.not-found-search input {
  flex: 1 1 auto;
  min-height: 44px;
  padding: 0 var(--sp-3);
  border: 1px solid var(--doc-rule-strong);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink);
  font: inherit;
}
.not-found-links {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-5);
}
.not-found-link {
  display: grid;
  gap: 2px;
  padding: var(--sp-4);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
  text-decoration: none;
}
.not-found-link:hover {
  border-color: var(--doc-rule-strong);
}
.not-found-link strong {
  color: var(--doc-ink);
}
.not-found-link span {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.not-found-alt {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}

/* e) Glossary in-page search + category chips. */
.glossary-filter-bar {
  display: flex;
  gap: var(--sp-2);
  margin: 0 0 var(--sp-3);
}
.glossary-filter-bar input {
  flex: 1 1 auto;
  min-height: 44px;
  padding: 0 var(--sp-3);
  border: 1px solid var(--doc-rule-strong);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink);
  font: inherit;
}
.glossary-category-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin: 0 0 var(--sp-2);
}
.glossary-category-row .ui-chip.is-active {
  border-color: var(--doc-ink);
  color: var(--doc-ink);
  font-weight: 650;
}
.glossary-filter-result {
  margin: 0 0 var(--sp-4);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}

/* f) Detail-page polish: article breadcrumb spacing, company hero CTA. */
.insight-article-hero__breadcrumb {
  margin-bottom: var(--sp-4);
}
.company-detail-copy-cta {
  margin-top: var(--sp-5);
}
/* ===== [组G] search/compare/404/error/法律页精修 (2026-10-03) ===== */

/* --- /search: result cards read as entries in a validated index ---------- */
/* Legacy gradient surfaces survive in the synced styles.css; restore the flat
   document card (white surface + hairline, no shadow, no lift). */
.search-page .search-result-card {
  border-color: var(--doc-rule) !important;
  background: var(--doc-surface) !important;
  box-shadow: none !important;
}
.search-page .search-result-card:hover {
  transform: none;
  border-color: var(--doc-rule-strong) !important;
  box-shadow: none !important;
}
.search-page .search-result-card h3 {
  font-size: 1.06rem;
  line-height: var(--leading-snug);
}
.search-page .search-result-card h3 a {
  color: var(--doc-ink);
}
.search-page .search-result-card h3 a:hover {
  color: var(--doc-steel);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}
.search-page .search-result-card > p:not(.search-result-type) {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: var(--leading-normal);
}
/* Type label (Product / Company / Glossary Term …) as a small steel badge so
   the result type scans before the title. */
.search-page .search-result-type {
  display: inline-flex;
  align-items: center;
  width: fit-content;
  margin: 0 0 var(--sp-2);
  padding: 2px var(--sp-2);
  border: 1px solid color-mix(in srgb, var(--doc-steel) 28%, var(--doc-rule));
  border-radius: var(--radius-control);
  background: var(--doc-steel-wash);
  color: var(--doc-steel-deep);
  font-family: var(--doc-mono);
  font-size: var(--fs-2xs);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
:root[data-theme='dark'] .search-page .search-result-type {
  border-color: color-mix(in srgb, var(--doc-steel) 32%, var(--doc-rule));
  background: color-mix(in srgb, var(--doc-steel) 14%, transparent);
  color: var(--doc-steel);
}
.search-page .search-result-tags span {
  border: 1px solid var(--doc-rule);
  border-radius: 999px;
  background: transparent;
  color: var(--doc-muted);
  font-size: var(--fs-2xs);
}
.search-page .results-toolbar > div > p strong {
  color: var(--doc-ink);
}
.search-page .results-toolbar > div > p {
  color: var(--doc-muted);
}

/* Type filter chips: the × marks the selected chip as removable (the chip
   itself navigates back to the unfiltered query). */
.search-page .active-filter-row .ui-chip .ui-chip-remove {
  margin-left: 2px;
  flex: 0 0 auto;
}
.search-page .active-filter-row .ui-chip.is-selected {
  border-color: var(--doc-ink);
  color: var(--doc-ink);
}

/* Mobile: the ten-chip type rail scrolls on one line instead of wrapping into
   a tall block above the results. Suggestion chips (empty/no-result states)
   keep wrapping — they are few and must all be visible. */
@media (max-width: 767px) {
  .search-page .search-toolbar .active-filter-row {
    flex-wrap: nowrap;
    overflow-x: auto;
    padding-bottom: var(--sp-1);
    scrollbar-width: thin;
    -webkit-overflow-scrolling: touch;
  }
  .search-page .search-toolbar .active-filter-row .ui-chip {
    flex: 0 0 auto;
    white-space: nowrap;
  }
  .search-page .search-result-card {
    padding: var(--sp-4);
  }
}

/* --- /compare: sticky column header + quiet missing values --------------- */
/* Desktop: the table fits the container, so release the horizontal scroll
   wrapper and let the column header stick below the 64px site header. */
@media (min-width: 768px) {
  .compare-page .table-wrapper {
    overflow: visible;
  }
  .compare-page .compare-table thead th {
    position: sticky;
    top: 64px;
    z-index: 4;
    background: var(--doc-surface);
    border-bottom: 1px solid var(--doc-rule-strong);
    color: var(--doc-ink);
    font-size: var(--fs-sm);
  }
  .compare-page .compare-table thead th:first-child {
    z-index: 5;
  }
}
.compare-page .compare-table tbody th {
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  font-weight: 600;
}
.compare-page .compare-table tbody td {
  color: var(--doc-ink);
}
.compare-page .compare-value-missing {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.compare-page .compare-table tbody tr:hover th,
.compare-page .compare-table tbody tr:hover td {
  background: var(--doc-steel-wash);
}
:root[data-theme='dark'] .compare-page .compare-table tbody tr:hover th,
:root[data-theme='dark'] .compare-page .compare-table tbody tr:hover td {
  background: color-mix(in srgb, var(--doc-steel) 10%, transparent);
}
.compare-page .compare-table .btn.btn-secondary {
  min-height: 34px;
  font-size: var(--fs-sm);
}

/* --- 404: home recovery link under the search box ------------------------ */
.not-found-page .not-found-search {
  margin-bottom: var(--sp-3);
}
.not-found-page .not-found-home {
  margin: 0 0 var(--sp-5);
}

/* --- runtime error: retry + home share one action row -------------------- */
.frontend-feedback__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-4);
}
.frontend-feedback .frontend-feedback__actions ~ p,
.frontend-feedback p:last-of-type {
  margin-bottom: 0;
}

/* --- legal pages (disclaimer / terms-of-use / privacy-policy /
       regulatory-notice): plain contract documents ------------------------- */
/* Visible breadcrumb sits where the hero margin used to start. Keep the
   .container auto margins — the shorthand `margin: 0 0 …` zeroed them and
   glued the breadcrumb to the viewport edge. */
.legal-page .legal-breadcrumb {
  margin-block: 0 var(--sp-4);
}
.legal-page .low-impact-hero {
  margin-top: 0;
}
/* Contract copy is a document, not a feature panel: drop the decorative hero
   visual and let the title column span the full measure. */
.legal-page .low-impact-hero__visual {
  display: none;
}
@media (min-width: 960px) {
  .legal-page .low-impact-hero {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* Keep prose under ~80 characters and left-aligned in the document flow. */
.legal-page .payload-richtext {
  max-width: 42rem !important;
  margin-inline: 0;
}
.legal-page .payload-richtext li {
  line-height: var(--leading-relaxed);
}
/* SEO panels answer the contract copy: same 42rem measure, same left edge —
   the inner sections carry .container (auto-centered) so reset them inside
   the document column. The stack is a direct child of the full-bleed
   article, so anchor it to the container left edge (max=1200px) — a bare
   margin-inline:0 left it glued to the viewport edge, 72px left of the
   document column. */
.legal-page .ivd-seo-panel-stack {
  max-width: 42rem;
  margin-left: max(1rem, calc((100% - var(--container-max, 1280px)) / 2));
  margin-right: 1rem;
}
.legal-page .ivd-seo-panel-stack > .container {
  width: auto;
  max-width: none;
  margin-inline: 0;
  padding-inline: 0;
}
.legal-page .seo-answer-block,
.legal-page .seo-evidence-chain,
.legal-page .seo-faq-card {
  max-width: none;
  margin-inline: 0;
}

/* ===== [组H] 一级页密度巡检 (2026-10-03) ===== */

/* H1. 亮面 hero 卡内部对比度（暗色）。
   背景：globals.css §9052 把 topics/buyers/technologies 的 hero 面板列为
   「图像背板卡保持亮面」的刻意设计，但面板背板是字面白色渐变（非 token），
   暗色下保持亮面；而 §19 a1 又把这些容器的 doc token 钉成碳纸值 ——
   亮墨落在亮卡上 = ghost 标题/正文（约 1.1:1）。设计裁决为「保持亮面本体、
   只修内部对比」，故此处以同一选择器、同文件后置、!important 把内部 token
   翻回亮色文档值（镜像 globals §9052 + 遗留 ink 命名空间）。muted 一律用
   硬亮值：var(--text-muted) 在暗色作用域解析为浅灰 #9daab4，不能继承。
   /partners 的亮面卡 a1 未触及，无需在此翻回；见 H3。 */
:root[data-theme='dark'] :is(
  .technologies-page .tech-hub-hero-inner,
  .topics-hub-page .platform-hero__copy,
  .topics-hub-page .platform-hero__panel,
  .buyers-guide-page .platform-hero__copy,
  .buyers-guide-page .platform-hero__panel
) {
  --background: #ffffff !important;
  --foreground: #1f2933 !important;
  --muted-foreground: #5e6e77 !important;
  --card: #ffffff !important;
  --border: #dce1e5 !important;
  --ui-border: #dce1e5 !important;
  --ui-surface: #ffffff !important;
  --ui-surface-2: #f8fbfd !important;
  --surface-panel: #ffffff !important;
  --surface-bg-soft: #edf3f8 !important;
  --line-color: #d6e0e8 !important;
  --text-primary: #1f2933 !important;
  --text-secondary: #46545e !important;
  --text-muted: #5e6e77 !important;
  --ink: #1f2933 !important;
  --ink-strong: #0b1f33 !important;
  --ink-muted: #5e6e77 !important;
  --brand: #245e8d !important;
  --brand-strong: #1b486e !important;
  --color-primary: #245e8d !important;
  --color-primary-strong: #1b486e !important;
  --color-primary-light: #4e7fa6 !important;
  --doc-paper: #fafbfc !important;
  --doc-paper-alt: #f3f5f7 !important;
  --doc-surface: #ffffff !important;
  --doc-ink: #1c2b36 !important;
  --doc-ink-lift: #2e4250 !important;
  --doc-ink-2: #46545e !important;
  --doc-muted: #5e6e77 !important;
  --doc-rule: #dce1e5 !important;
  --doc-rule-strong: #c3cbd1 !important;
  --doc-steel: #245e8d !important;
  --doc-steel-deep: #1b486e !important;
  --doc-steel-light: #4e7fa6 !important;
  --doc-steel-wash: #eef4f9 !important;
  --doc-btn-bg: #1c2b36 !important;
  --doc-btn-bg-hover: #2e4250 !important;
  --doc-btn-fg: #ffffff !important;
  color: var(--doc-ink) !important;
}

/* H2. 暗色亮面卡内的摘要瓦片：token 翻回亮色后，§18 钉的
   var(--doc-surface) 解析为纯白，与亮卡面同色（无层次）。改用纸灰内嵌面。 */
:root[data-theme='dark'] :is(
  .topics-hub-page .platform-hero__panel,
  .buyers-guide-page .platform-hero__panel,
  .technologies-page .tech-hub-hero-inner
) .ui-summary-tile {
  background: var(--doc-paper-alt) !important;
  border-color: var(--doc-rule);
}

/* H3. /partners 底部 SEO 卡组（review §七.5 实证可读性问题）。
   母卡（.seo-answer-block/.seo-evidence-chain）背板同样是字面白色渐变，
   暗色下保持亮面，但内部 h2/正文消费根作用域的暗色 ink → ghost 标题；
   AUTHOR/REVIEWER 瓦片被 §18 钉成 var(--doc-surface) 碳纸色 →
   亮母卡上贴暗瓦片 = 明度倒挂。整个 .partners-hero-seo 翻回亮色文档值，
   瓦片改纸灰内嵌面（先于 §18 的 !important，靠后置 + 更高特异性取胜）。 */
:root[data-theme='dark'] .partners-page .partners-hero-seo {
  --background: #ffffff !important;
  --foreground: #1f2933 !important;
  --muted-foreground: #5e6e77 !important;
  --card: #ffffff !important;
  --border: #dce1e5 !important;
  --ui-border: #dce1e5 !important;
  --ui-surface: #ffffff !important;
  --ui-surface-2: #f8fbfd !important;
  --surface-panel: #ffffff !important;
  --surface-bg-soft: #edf3f8 !important;
  --line-color: #d6e0e8 !important;
  --text-primary: #1f2933 !important;
  --text-secondary: #46545e !important;
  --text-muted: #5e6e77 !important;
  --ink: #1f2933 !important;
  --ink-strong: #0b1f33 !important;
  --ink-muted: #5e6e77 !important;
  --brand: #245e8d !important;
  --brand-strong: #1b486e !important;
  --color-primary: #245e8d !important;
  --color-primary-strong: #1b486e !important;
  --color-primary-light: #4e7fa6 !important;
  --doc-paper: #fafbfc !important;
  --doc-paper-alt: #f3f5f7 !important;
  --doc-surface: #ffffff !important;
  --doc-ink: #1c2b36 !important;
  --doc-ink-lift: #2e4250 !important;
  --doc-ink-2: #46545e !important;
  --doc-muted: #5e6e77 !important;
  --doc-rule: #dce1e5 !important;
  --doc-rule-strong: #c3cbd1 !important;
  --doc-steel: #245e8d !important;
  --doc-steel-deep: #1b486e !important;
  --doc-steel-light: #4e7fa6 !important;
  --doc-steel-wash: #eef4f9 !important;
  --doc-btn-bg: #1c2b36 !important;
  --doc-btn-bg-hover: #2e4250 !important;
  --doc-btn-fg: #ffffff !important;
  color: var(--doc-ink) !important;
}
:root[data-theme='dark'] .partners-page .partners-hero-seo .seo-evidence-item {
  background: var(--doc-paper-alt) !important;
  border-color: var(--doc-rule) !important;
}

/* H4. /partners 底部卡组布局：IvdSeoPanel 的 section 自带 .container，
   在 .partners-hero-shell（本身是容器）内再收缩一次（min(1200px, 100%−2rem)
   + margin auto），两块面板比上方 hero 卡各内缩 1rem、边缘不齐。
   恢复为与 shell 同宽（组件的 .container 语义由外层 shell 承担）。 */
.partners-page .partners-hero-seo :is(.seo-answer-block, .seo-evidence-chain) {
  width: 100%;
  margin-inline: 0;
}

/* H5. /buyers-guide 分区节奏：亮面 hero → 品类矩阵 → CTA 带之间补 hairline
   分区线（校准文档语言；home 同款 main > .section 规则）。 */
.buyers-guide-page > .section {
  border-top: 1px solid var(--doc-rule);
}

/* H6. /buyers-guide 移动端：hero 面板摘要 3 列瓦片在 390px 过密
   （"Shareable filters" 等标签折 3 行），≤640 收单列（partners-hero-metrics 同款）。 */
@media (max-width: 640px) {
  .buyers-guide-page .buyer-action-summary {
    grid-template-columns: 1fr;
  }
}

/* H7. /topics 密度：hero 侧栏摘要继承 .ui-summary 的 ≥900px 4 列，
   在约 1/3 页宽的侧栏里每瓦片只有 ~85px（"Disease Zones" 折行）。
   收成 2×2（technologies .tech-hub-summary 同款）。 */
.topics-hub-page .platform-hero__panel .ui-summary {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

/* H8. /technologies 密度：核心技术主题卡在 §17 已改「hairline 编辑行」
   （无边框卡、透明底），但遗留的 min-height:240px（卡模式的呼吸空间）
   与底部 ::after 渐变装饰线仍在 → 短摘要行下方大片空白 + 一条发光线。
   行模式下交还内容高度、去掉装饰线。 */
.technologies-page .tech-hub-grid .tech-hub-card {
  min-height: 0;
}
.technologies-page .tech-hub-grid .tech-hub-card::after {
  content: none;
}

/* ===== [主控仲裁] tests/[slug] hero 对齐设计系统 (2026-10-03) =====
   H1 回到详情档 --text-h1-detail(原 clamp 至 52px 超档);
   墨色 hero 带亮色模式下等值消费 --doc-ink,暗色模式翻转碳纸面板(token 化,防"亮带亮字") */
.test-detail-page .test-guide-hero {
  background: var(--doc-ink);
}
.test-detail-page .test-guide-hero h1 {
  max-width: 28ch;
  font-size: var(--text-h1-detail);
  line-height: var(--leading-tight);
  letter-spacing: -0.01em;
}
:root[data-theme='dark'] .test-detail-page .test-guide-hero {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  color: var(--doc-ink);
}
:root[data-theme='dark'] .test-detail-page .test-guide-hero h1 {
  color: var(--doc-ink);
}
:root[data-theme='dark'] .test-detail-page .test-guide-hero .eyebrow {
  color: var(--doc-steel);
}
:root[data-theme='dark'] .test-detail-page .test-guide-summary {
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .test-detail-page .test-guide-meta span {
  color: var(--doc-muted);
}

/* ===== [主控修复] search 移动端横向溢出 (2026-10-03) =====
   .active-filter-row 三个使用点(筛选/建议/恢复动作)在 ≤767px 都必须是容器内横滚,不得撑宽页面 */
@media (max-width: 767px) {
  .search-page .active-filter-row {
    display: flex;
    flex-wrap: nowrap;
    max-width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }
  .search-page .active-filter-row .ui-chip {
    flex: 0 0 auto;
    white-space: nowrap;
  }
}
/* 根因修正:未命名包装 div 是 grid/flex 子项,min-width:auto 被行内容撑开 → 上游放开 min-width 约束 */
@media (max-width: 767px) {
  .search-page .results-toolbar {
    grid-template-columns: minmax(0, 1fr);
  }
  .search-page .results-toolbar > div {
    min-width: 0;
    max-width: 100%;
  }
}

/* ===== [主控修复] insights 详情 Review 面板对齐文章列 (2026-10-03) =====
   IvdSeoPanel 自带 .container 在文章页内二次居中(偏右悬空),拉回与 prose 同一文档列 */
.insight-article-body ~ .ivd-seo-panel-stack .container,
.insight-article-related ~ .ivd-seo-panel-stack .container,
.ivd-seo-panel-stack .seo-evidence-chain .container {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
}

/* ===== [主控修复] 暗色模式三处对比度 (2026-10-03) =====
   1) 页头 CTA:暗色已是纸白实底,标签必须跟随 --doc-btn-fg(深字),修复"浅底白字"
   2) 亮面 hero 卡内主按钮:墨底实底配白字(与亮色模式同一配方),修复"墨底墨字"
   3) buyers-guide CTA band(section--alt):暗色下浅灰水洗底+浅字对比不足 → 碳纸面板化 */
:root[data-theme='dark'] .header-cta {
  color: var(--doc-btn-fg) !important;
}
:root[data-theme='dark'] :is(
  .technologies-page .tech-hub-hero-inner,
  .topics-hub-page .platform-hero__copy,
  .topics-hub-page .platform-hero__panel,
  .buyers-guide-page .platform-hero__copy,
  .buyers-guide-page .platform-hero__panel
) :is(.ui-btn-primary, .btn-primary) {
  color: #ffffff !important;
}
:root[data-theme='dark'] .buyers-guide-page .section--alt {
  background: var(--doc-paper-alt);
  border-top: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] .buyers-guide-page .section--alt :is(h2, h3) {
  color: var(--doc-ink);
}
:root[data-theme='dark'] .buyers-guide-page .section--alt p {
  color: var(--doc-ink-2);
}

/* ===== [主控修复] partners 暗色:筛选组/计数chip/CTA band (2026-10-03) =====
   .filter-group 白色半透明底(暗色 ghost)+ 计数 chip 浅底浅字;
   .page-cta-banner 白色渐变涂底(渐变装饰 + 浅字 ghost)→ 碳纸面板化 */
:root[data-theme='dark'] .partners-page .filter-group {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] .partners-page .filter-group a > span:last-child {
  background: var(--doc-paper-alt);
  color: var(--doc-muted);
  border: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] .partners-page .page-cta-banner {
  background: var(--doc-paper-alt);
  background-image: none;
  border: 1px solid var(--doc-rule);
}

/* ===== [F-M2/回执] RFQ 目标市场芯片组 + 成功回执多行 (2026-10-03) =====
   F-M2: targetMarkets <select multiple> 改为按钮芯片组(.rfq-market-chip),
   复用 audience 芯片的 is-selected 语义(--doc-steel 描边 + --doc-steel-wash 底);
   hairline 文档语言:1px --doc-rule、--radius-control 近直角、无阴影、无新颜色。
   回执:成功状态追加引用编号与"未同意共享"承诺行,pre-line 让 \n 渲染为换行。
   全部消费 --doc-* / --radius-* / --fs-* / --control-h-* / --sp-* token;
   亮暗双主题由 token 翻转成立,无需额外暗色特例
   (焦点环沿用本文件既有的 button:focus-visible --doc-steel 规则)。 */

/* ---- 1. Market chip group ---------------------------------------------------- */
.rfq-market-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
}
.rfq-market-chip {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-h-sm);
  padding: var(--sp-1) var(--sp-3);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink-2);
  font: inherit;
  font-size: var(--fs-sm);
  line-height: var(--leading-snug);
  cursor: pointer;
  transition:
    color 160ms ease,
    background-color 160ms ease,
    border-color 160ms ease;
}
.rfq-market-chip:hover {
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink);
}
.rfq-market-chip.is-selected {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
  color: var(--doc-ink);
}

/* ---- 2. Multi-line success receipt (reference # / kept-private promise) ------- */
.rfq-form-status {
  white-space: pre-line;
}

/* ===== [F-C2 残留] 暗色复扫修复:亮面面板文字回映射 + 两处暗底暗字 (2026-10-03 晚) =====
   复扫证据:.ux-audit/residual-2026-10-03/stage1.json —— /products 暗色 55 节点,
   全部为"白底亮面面板(筛选侧栏/分页/工具栏)内文字被暗色 token 翻亮"(1.2-2.2:1)、
   产品 stat 数字暗底暗字(1.02:1)、header 语言切换激活项暗底暗字(1.02:1)。
   亮面卡处置沿用既定裁决:面板保持亮面,内部变量回映射亮色文档值。
   注意:这些面板的文字消费三套命名空间(styles.css 的 --p-*、legacy
   --ink/--brand/--line/--muted、shadcn --foreground),必须整组回映射,
   只映射 --doc-* 无效(首版教训,见 stage1 复测)。 */

/* 1. 白底亮面面板(移动筛选层)——暗色下整组回映射亮色值。
   [2026-10-05] 原选择器含 .results-pagination/.results-toolbar-controls,当时
   它们是白底;V2.8 把分页与工具条控件改暗后,此处的亮色 token 重钉会让其中
   文字拿到亮值(实测 'Newest First' 深底深字、分页 #46545e),故这两个作用域
   移出本块,由 V2.8 的暗色回映射接管。 */
:root[data-theme='dark'] .directory-filter-panel {
  /* styles.css --p-* 亮面 token(§19 a1 在 body.page-products 翻暗,此处局部翻回) */
  --p-text: #1c2b36;
  --p-text-muted: #5e6e77;
  --p-brand: #245e8d;
  --p-brand-hover: #1b486e;
  --p-accent: #245e8d;
  --p-accent-soft: #eef4f9;
  --p-border: #dce1e5;
  /* legacy styles.css 命名空间(pagination/计数 span) */
  --ink: #1c2b36;
  --muted: #5e6e77;
  --line: #dce1e5;
  --brand: #245e8d;
  /* shadcn 命名空间(globals .filter-group a 消费 --foreground) */
  --foreground: #1c2b36;
  --muted-foreground: #5e6e77;
  /* 文档 token(面板内个别规则消费) */
  --doc-ink: #1c2b36;
  --doc-ink-2: #46545e;
  --doc-muted: #5e6e77;
  --doc-steel: #245e8d;
  --doc-steel-wash: #eef4f9;
  --doc-btn-fg: #ffffff;
  --doc-rule: #dce1e5;
  --doc-rule-strong: #c3cbd1;
}

/* 2. 产品目录 hero 统计数字:globals 8315 行 `#0b1f33 !important` 字面量在暗色
      未翻转 → 暗底暗字;同优先级 important 下以更高特异性胜出。 */
:root[data-theme='dark'] .products-discovery-page .product-stat-row strong {
  color: var(--doc-steel) !important;
}

/* 3. 语言切换激活项:shadcn --primary/--primary-foreground 暗色值组合出暗底暗字。
   [R7 REL-20] 前景由 var(--doc-ink)(暗值 #e4e9ed,与芯片亮底同源 → 1.22:1)
   改为 var(--doc-btn-fg)(暗值 #14181d 碳墨)→ #14181d on rgb(207,212,216)
   = 11.94:1。芯片亮底来自 globals.css:845-848 用暗色 --primary(#e4e9ed) 的
   color-mix,保持不动(改面会连带影响非激活项与亮色)。桌面页眉 chip 与移动
   抽屉 chip 同 class `.site-header .language-switcher a.is-active` → 一处覆盖两处。 */
:root[data-theme='dark'] .site-header .language-switcher a.is-active {
  color: var(--doc-btn-fg);
}

/* 3a. [R7 REL-21 族B] RFQ 步骤区小徽标/字段标签:legacy styles.css:4013
      `.rfq-step span` (0,1,1) 写死 `color:#fff` + `background:var(--brand)`,而
      --brand 在暗色被本文件 :574 重钉为 #8fb4d4(亮蓝)→ 白字压亮蓝 2.17:1;同族
      `.rfq-field-hint`(ui-consistency:3143 (0,2,1) 给 --doc-muted)坐在同一亮蓝
      pill 上 = 1.09:1。仲裁层以 (0,3,1) 胜出,前景统一换文档碳墨 --doc-btn-fg
      (#14181d) on --brand(#8fb4d4) = 8.19:1。/request-quote 与 /partners/apply
      渲染同一 RfqForm 组件 → 一处覆盖两页;亮色不受影响(暗色作用域)。 */
:root[data-theme='dark'] .rfq-step span {
  color: var(--doc-btn-fg);
}
/* 3a-g1. 防回归:步骤数字圆徽(.rfq-step-heading > span)的面在 :4972 已钉为
      暗色 --doc-steel-wash(#232e38),不能吃上面的碳墨前景(会是 1.29:1)。
      整对回钉为既有值(亮字压暗面 8.82:1),零视觉差,仅锁定级联结果——
      legacy 与本文件同为 (0,1,1),顺序颠倒即翻转,故显式钉死。 */
:root[data-theme='dark'] .rfq-step .rfq-step-heading > span {
  background: var(--doc-steel-wash);
  color: var(--doc-steel-deep);
}
/* 3a-g2. 防误伤:必填星号 .rfq-required 的红色语义属 status token,不在本族
      修复面(单字符 `*` 亦被 dark-scan 的 text.length<2 过滤,属工具盲区)。
      以 (0,5,0) 回钉 var(--status-error),避免被 3a 一并染成碳墨。 */
:root[data-theme='dark'] .rfq-step :is(.rfq-field, .resource-field) .rfq-required {
  color: var(--status-error);
}

/* 3b. [R7 REL-21 族C] RFQ 摘要条 li:legacy styles.css:4540
      `body.page-request .rfq-summary li` (0,2,2) 把 pill 钉成白色渐变,而 li 文字
      走 legacy `--ink`(暗色被 :578 重钉为 #e4e9ed 亮值)→ 亮底亮字 1.06–1.07:1。
      以 (0,3,1)(b 列 3 > 2)覆盖,面回到文档暗面 --doc-surface(#1a2026)
      → #e4e9ed on #1a2026 = 13.44:1。/partners/apply(body.page-partners)的同类
      亮面来自 legacy `.rfq-summary li` (0,1,1) 的 brand 5% 白混色,同一规则一并覆盖。 */
:root[data-theme='dark'] .rfq-summary li {
  background: var(--doc-surface);
}

/* 4. 移动端筛选抽屉实例(DirectoryFilterSheet,与桌面侧栏同名 class):抽屉面板
      是碳纸底,不得继承上面的亮面回映射——整组恢复暗色值(特异性 0,3,0 > 0,2,0)。 */
:root[data-theme='dark'] .directory-filter-shell .directory-filter-panel {
  --p-text: var(--doc-ink);
  --p-text-muted: var(--doc-muted);
  --p-brand: var(--doc-steel);
  --p-brand-hover: var(--doc-steel-deep);
  --p-accent: var(--doc-steel);
  --p-accent-soft: var(--doc-steel-wash);
  --p-border: var(--doc-rule);
  --ink: var(--doc-ink);
  --muted: var(--doc-muted);
  --line: var(--doc-rule);
  --brand: var(--doc-steel);
  --foreground: var(--doc-ink);
  --muted-foreground: var(--doc-muted);
  --doc-ink: #e4e9ed;
  --doc-ink-2: #a7b4bd;
  --doc-muted: #9daab4;
  --doc-steel: #8fb4d4;
  --doc-steel-wash: #232e38;
  --doc-btn-fg: #14181d;
  --doc-rule: #333c44;
  --doc-rule-strong: #47535c;
}

/* 5. 桌面侧栏选中 chip 的计数字:#5e6e77 落在浅 chip 底 #e4e9ed 上 4.0:1,
      提到墨色(仅桌面实例;抽屉内由上面的恢复块接管)。 */
:root[data-theme='dark'] .directory-filter-panel:not(.directory-filter-shell .directory-filter-panel)
  .filter-group a.is-selected span {
  color: #1c2b36;
}

/* 6. 分页计数文字(p.pagination-total)直接坐在暗色页底上,不参与白底 chip 的
      回映射——直写弱化墨色(直写属性优先于变量重解析)。 */
:root[data-theme='dark'] .results-pagination .pagination-total {
  color: #9daab4;
}

/* 7. DirectoryFilterSheet 桌面化:shell 内包裹的是真正的桌面筛选侧栏
      (.finder-sidebar.company-filter-sidebar,companies/partners/products 三页共用),
      ≥768px 整体隐藏会把侧栏一并藏掉 → company-directory-layout 的 290px 首列空置,
      .company-results 自动滑入首列被挤成 290px(卡片逐字竖排)。
      基础层(462-465 行)已隐藏 trigger/panel-header/backdrop,桌面 shell 呈现为
      普通静态侧栏容器;<768px 仍走抽屉行为,不受影响。 */



/* 8. 产品卡属性标签(.result-attribute-chips .ui-chip):bg 是 `color-mix(--primary 8%, white)`
      近白字面量组合,暗色不翻转,文字又被翻亮 → 1.6:1。按 §19 query-chip 同配方仲裁。 */
:root[data-theme='dark'] .result-attribute-chips .ui-chip {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule-strong) !important;
  color: var(--doc-ink-2) !important;
}

/* 9. 首页 browse-subhead 在窄屏把整页撑出 40px 横向溢出：styles.css:2216 把它
      定成 `display:flex; justify-content:space-between`，右侧 .text-link 又被
      压到 105px 而文字需要 161px，于是内容溢出到容器外（.container 415 > 358）。
      允许换行后两栏在 <640px 自然堆叠，宽屏行为不变。 */
.browse-subhead {
  flex-wrap: wrap;
}
.browse-subhead .text-link {
  flex: 0 0 auto;
}

/* 10. 触屏命中区：footer 上已经用 Tailwind 任意变体给 .btn/.ui-btn/.pagination-link
      等补到 44px，但同样的补丁没有覆盖正文里的文字型链接，实测 .text-link 22px、
      .tech-hub-card-link 22px、卡片标题链接 21px，低于 WCAG 2.5.8 的 24px 下限。
      这里按同一口径补齐正文侧；用宽度断点而不是 pointer:coarse，混合指针设备
      （触屏笔记本）同样受益，桌面排版不受影响。 */
@media (max-width: 56.25rem) {
  /* 卡片标题链接（partners / case-studies / companies 的 .company-card-headline，
     technologies 的工具卡 H3）都是 <a> 直接包在 H2/H3 里，行高只有 21-23px。 */
  main .company-card-headline a,
  main .result-actions a,
  main .tech-hub-tool-card h3 a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }
  main .tech-hub-card-link,
  main .text-link,
  main .inquiry-card__link,
  main .resource-pack-access,
  main .result-text-link {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }
}

/* Request intake: keep the decision, description, and contact path readable in one pass. */
.rfq-experience .rfq-layout {
  grid-template-columns: minmax(0, 1.7fr) minmax(250px, 0.72fr);
  gap: clamp(1.25rem, 3vw, 2.5rem);
  align-items: start;
}
.rfq-experience .rfq-form {
  gap: 0;
  padding: clamp(1.25rem, 3vw, 2.25rem);
}
.rfq-form-intro {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0.35rem 1rem;
  padding-bottom: 1.25rem;
}
.rfq-form-intro p {
  margin: 0;
  color: var(--doc-ink);
  font-size: clamp(1.05rem, 1.5vw, 1.2rem);
  font-weight: 600;
  line-height: 1.45;
}
.rfq-form-intro > span {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.rfq-experience .rfq-step {
  gap: 1rem;
  padding: 1.5rem 0;
  border-top: 1px solid var(--doc-rule);
}
.rfq-step-heading {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}
.rfq-step-heading > span {
  display: grid;
  place-items: center;
  flex: 0 0 1.75rem;
  width: 1.75rem;
  height: 1.75rem;
  border-radius: 50%;
  background: var(--doc-steel-wash);
  color: var(--doc-steel-deep);
  font-size: var(--fs-sm);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.rfq-experience .rfq-step-heading h2 {
  margin: 0;
  color: var(--doc-ink);
  font-size: clamp(1.15rem, 1.8vw, 1.4rem);
  font-weight: 650;
  line-height: 1.3;
}
.rfq-audience-choices {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.6rem;
}
.rfq-audience-option {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  min-height: 3.25rem;
  padding: 0.7rem 0.8rem;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
  color: var(--doc-ink);
  font-size: var(--fs-md);
  font-weight: 600;
  line-height: 1.35;
  cursor: pointer;
}
.rfq-audience-option.is-selected {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
}
.rfq-audience-option input {
  flex: 0 0 auto;
  width: 1rem;
  height: 1rem;
  margin: 0;
  accent-color: var(--doc-steel);
}
.rfq-audience-option:focus-within,
.rfq-more-details summary:focus-visible,
.rfq-template-link:focus-visible {
  outline: 2px solid var(--doc-steel);
  outline-offset: 2px;
}
.rfq-experience .rfq-audience-hint,
.rfq-experience .rfq-personal-note {
  margin: 0;
  line-height: 1.55;
}
.rfq-experience .rfq-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem;
}
.rfq-experience .rfq-field {
  display: grid;
  gap: 0.4rem;
  font-size: var(--fs-sm);
  font-weight: 600;
}
.rfq-experience .rfq-field :is(input, select, textarea) {
  width: 100%;
}
.rfq-experience .rfq-field textarea {
  min-height: 7rem;
}
.rfq-selected-product {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.75rem;
  padding: 0.8rem 1rem;
  border-left: 3px solid var(--doc-steel);
  background: var(--doc-steel-wash);
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
}
.rfq-selected-product strong { color: var(--doc-ink); }
.rfq-more-details {
  border-top: 1px solid var(--doc-rule);
  border-bottom: 1px solid var(--doc-rule);
}
.rfq-more-details summary {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 0.2rem 1rem;
  align-items: center;
  padding: 1.1rem 0;
  color: var(--doc-ink);
  cursor: pointer;
  list-style: none;
}
.rfq-more-details summary::-webkit-details-marker { display: none; }
.rfq-more-details summary::after {
  content: '+';
  grid-column: 2;
  grid-row: 1 / span 2;
  font-size: 1.5rem;
  font-weight: 400;
}
.rfq-more-details[open] summary::after { content: '−'; }
.rfq-more-details summary strong { font-size: var(--fs-md); }
.rfq-more-details summary span {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: 1.45;
}
.rfq-more-details-content {
  display: grid;
  gap: 1.2rem;
  padding: 0 0 1.5rem;
}
.rfq-experience .rfq-market-group { gap: 0.65rem; }
.rfq-experience .rfq-consent { margin: 1.4rem 0 0; }
.rfq-experience .rfq-form-status:not(:empty) { margin-top: 1.25rem; }
.rfq-experience .cta-actions { margin-top: 1.25rem; }
.rfq-experience .cta-actions .btn-primary { min-width: 12rem; }
.rfq-experience .rfq-summary {
  padding: clamp(1.25rem, 2vw, 1.75rem);
}
.rfq-experience .rfq-summary h2 {
  margin: 0 0 1.1rem;
  font-size: clamp(1.05rem, 1.5vw, 1.25rem);
}
.rfq-experience .rfq-summary ol {
  display: grid;
  gap: 1rem;
  margin: 0;
  padding-left: 1.4rem;
  color: var(--doc-ink-2);
  line-height: 1.55;
}
.rfq-experience .rfq-summary ol li { padding-left: 0.2rem; }
.rfq-experience .rfq-summary ol li::marker {
  color: var(--doc-steel-deep);
  font-weight: 700;
}
.rfq-privacy-note {
  margin: 1.5rem 0 0;
  padding-top: 1.2rem;
  border-top: 1px solid var(--doc-rule);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: 1.55;
}
.rfq-template-link {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  margin-top: 0.75rem;
  color: var(--doc-steel-deep);
  font-size: var(--fs-sm);
  font-weight: 600;
  text-underline-offset: 0.2rem;
}
@media (max-width: 900px) {
  .rfq-experience .rfq-layout { grid-template-columns: minmax(0, 1fr); }
  .rfq-experience .rfq-summary { position: static; }
}
@media (max-width: 600px) {
  .rfq-experience .rfq-form { padding: 1rem; }
  .rfq-audience-choices,
  .rfq-experience .rfq-grid { grid-template-columns: minmax(0, 1fr); }
  .rfq-experience .rfq-step { padding: 1.25rem 0; }
  .rfq-experience .cta-actions .btn-primary { width: 100%; }
}

.rfq-intake-hero {
  padding: clamp(2rem, 4vw, 3.5rem) 0 clamp(0.25rem, 1.5vw, 1rem);
}
.rfq-intake-hero .container {
  padding-inline-start: clamp(1rem, 2.2vw, 1.75rem);
  border-inline-start: 4px solid var(--doc-steel);
}
.rfq-intake-hero h1 {
  max-width: 18ch;
  margin: 0;
  color: var(--doc-ink);
  font-size: clamp(2rem, 4vw, 3.25rem);
  font-weight: 700;
  line-height: 1.18;
  letter-spacing: -0.025em;
}
.rfq-intake-hero p {
  max-width: 62ch;
  margin: 0.8rem 0 0;
  color: var(--doc-ink-2);
  font-size: clamp(1rem, 1.4vw, 1.15rem);
  line-height: 1.55;
}
.rfq-intake-hero + .rfq-experience { padding-top: clamp(1rem, 2vw, 1.5rem); }

/* 11. 正文行长收口。全站已有 `max-width: 64ch` 的散文惯例（globals.css 多处），
      但这几处阅读型文本落在满宽容器里，实测 13px 字号下行宽 1230-1280px ≈
      154-197 字符，远超 <80ch 的可读区间，眼睛回扫时找不到下一行开头。
      只点真正需要读的段落，不碰 search-scope-label / pagination-total /
      ds-hero__eyebrow 这类只是坐在宽盒子里的短标签（给它们加 ch 上限没有意义）。 */
.conversion-head p,
.search-result-card p,
.company-detail-section-block p,
.tech-detail-compliance p,
.seo-answer-summary,
.product-command-helper {
  max-width: 64ch;
}

/* 列表卡里的摘要是扫读而非通读，放到 75ch：仍比 128ch 可读得多，
   又不至于把 899px 的卡片右半边留白浪费掉。 */
.product-result .result-summary,
.product-result .result-meta-line,
.product-result .product-inline-note {
  max-width: 75ch;
}

/* 同一批漏网的阅读文本：SEO 面板的受众行、RFQ 表单的受众提示。 */
.seo-audience,
.rfq-audience-hint {
  max-width: 68ch;
}

/* 紧跟 h1 的那段就是导语，全站按 60-70ch 惯例收口（先例见 .test-detail-page
   .company-detail-copy h1 + p）。/partners/apply 的导语此前铺满 1280px ≈ 160ch。 */
main .container h1 + p {
  max-width: 68ch;
}

/* ==========================================================================
   V1. 2026-10-04 二轮验证批次（见 UI-FIX-REPORT.md §10）
   实测发现：Calibration Document 的扁平语言只在首页落地。8 条内页路由仍有
   16–22px 圆角、投影与渐变面板，与 design-system.md:22-23（卡片 14px、扁平、
   唯一阴影给 --elev-overlay 移动筛选层）冲突；/compare 的 H1 无任何层级规则
   命中（渲染成 16px 正文）；Hero 卡内边距仍是 1.45/1.55/1.6/1.7rem 孤立值。
   本段只做仲裁，不改 globals.css 的历史规则。
   ========================================================================== */

/* ---- V1.1 阴影 token 归零 -----------------------------------------------
   /styles.css 在 globals.css 之后重新声明了阴影刻度（globals 的 none 只写在
   body.page-search 作用域），所以内页仍拿到真实阴影。在此统一归零。 */
:root {
  --shadow-xs: none;
  --shadow-sm: none;
  --shadow-md: none;
  --shadow-lg: none;
}

/* ---- V1.2 面板：细线边框承载边界 ---------------------------------------- */
.platform-hero__copy,
.platform-hero__panel,
.partners-page .low-impact-hero,
.partners-hero-ad,
.partners-hero-ad__card,
.tech-hub-hero-inner,
.tech-hub-answer-block,
.tech-hub-mini-visual,
.product-workflow-visual,
.product-command-copy,
.product-command-panel,
.finder-sidebar,
.company-filter-intro,
.companies-metric-grid article,
.vault-pack-grid article,
.rfq-step,
.query-chip,
.hero-visual,
.hero-copy-point,
.seo-evidence-item,
.topic-map-home a,
body.page-insights .lead-story {
  box-shadow: none !important;
}

/* 表面渐变属前 Calibration 语言：撤掉，回到纸白面。图片上的
   .hero-visual__scrim 保留（那是可读性遮罩，不是面板底纹）。 */
.platform-hero__copy,
.platform-hero__panel,
.partners-page .low-impact-hero,
.partners-hero-ad,
.tech-hub-hero-inner,
.product-workflow-visual,
/* .hero-visual 不在此列：它的画面由 CSS background-image 承载（/partners 的
   hero 照片就是背景图），去掉会让面板塌成灰块——实测回归后撤回。
   圆角与内高光由上面的分组规则单独处理。 */
.company-filter-intro,
body.page-insights .lead-story {
  background-image: none !important;
  background-color: var(--doc-surface) !important;
  border: 1px solid var(--doc-rule) !important;
  border-radius: var(--radius-card) !important;
}

/* 圆角不超过 --radius-card（14px）：文档规定「No page-specific radius」。 */
.platform-hero__copy,
.hero-visual,
.hero-visual img,
.tech-hub-hero-inner,
.tech-hub-answer-block,
.tech-hub-mini-visual,
.partners-page .low-impact-hero,
.partners-hero-ad,
.product-workflow-visual,
.product-workflow-visual img,
.finder-sidebar,
.company-filter-intro,
.companies-map-layer,
.companies-map-layer span,
.knowledge-directory-intro,
.knowledge-directory-intro img,
.ivd-seo-panel-stack > .seo-answer-block,
.ivd-seo-panel-stack > .seo-evidence-chain {
  border-radius: var(--radius-card) !important;
}

/* ---- V1.3 SEO 面板：阴影 + 渐变 + padding 归 token ---------------------- */
.seo-answer-block,
.seo-evidence-chain {
  box-shadow: none !important;
  background-image: none !important;
  background-color: var(--doc-surface) !important;
  border: 1px solid var(--doc-rule);
  padding: var(--sp-5) !important;
}

/* ---- V1.4 Hero 卡内边距回到 --sp-* scale -------------------------------- */
.platform-hero__copy {
  padding: var(--sp-5) !important;
}

.platform-hero__panel {
  padding: var(--sp-5) !important;
}

.partners-page .low-impact-hero {
  padding: var(--sp-5) !important;
}

/* Keep editorial and directory photography in its original color. */
.hero-visual img,
.product-workflow-visual img,
.companies-boost-illustration img {
  filter: none;
}

/* ---- V1.6 H1 层级补齐 ---------------------------------------------------- */
/* /compare 的 h1 在 .section-heading 内，此前无任何层级规则命中，
   渲染成 16px 正文、还被同页 36px 的 h2 反超。 */
.section-heading h1,
.compare-page h1 {
  font-size: var(--text-h1) !important;
  line-height: 1.08 !important;
}

/* .rfq-intake-hero 的 clamp(2rem,4vw,3.25rem) 在 1440 得 52px，
   落在三层之外；归入 platform 层。 */
.rfq-intake-hero h1 {
  font-size: var(--text-h1) !important;
  font-weight: 600 !important;
  line-height: 1.08 !important;
}

/* ---- V1.7 /partners 目录段与末尾 CTA 的衔接节奏 ------------------------- */
/* 实测末卡底 → CTA 首行 108px（上一段 padding-bottom 64.8 + CTA 段 43.2），
   宽于同级 section 的 2×sm 节奏。目录段改用 compact token。 */
.partners-page #partner-directory {
  padding-bottom: var(--space-section-sm) !important;
}

/* /products 的 hero H1 有自己的 clamp（1440 得 45px）与 780 字重，落在三层
   之外；归入 platform 层。design-system.md:112 「H1 uses --text-h1」。 */
.products-discovery-page .product-command-copy h1 {
  font-size: var(--text-h1) !important;
  font-weight: 600 !important;
  line-height: 1.08 !important;
}

/* Tier 3 展示型 hero 的字重此前由 globals.css 的 780 !important 提供。 */
.partners-page .low-impact-hero .payload-richtext h1 {
  font-weight: 600 !important;
}

/* =====================================================================
   V2 — 2026-10-04 二轮：内容决定高度（生产构建 1440/1024/768/390 实测）
   只处理「同排短卡被长卡撑高 / 网格空格被涂成占位块」这一类实测缺陷。
   ===================================================================== */

/* ---- V2.1 Evidence 瓦片按内容高度排列 ---------------------------------- */
/* .seo-evidence-grid 沿用 Grid 默认 stretch：Source 一格长文，同一行的
   Published / Updated / Disclaimer 三个短瓦片被撑到 200px，卡内 150px 空白，
   看上去像没填完的占位格。实测命中 /products/[slug]、/resources、
   /case-studies、/privacy-policy、/terms-of-use、/partners、公司与技术详情页。
   列宽与 gap 不变，只取消纵向拉伸。 */
.seo-evidence-grid {
  align-items: start;
}

/* ---- V2.2 两列数据网格：末位奇数瓦片占满整行 --------------------------- */
/* 3 格排 2 列时第 3 格孤零零落在下一行左侧，右侧留一个卡洞：/topics hero
   「Topic overview」的 Updated 日期格、/products/[slug] 规格网格的 Regulatory
   Status 卡。让它横跨整行收口，而不是补假内容或改回三列。
   只点名这两处：`.ui-summary` 在 /buyers-guide 是三列满行（实测 162/162/162），
   通用选择器会把第 3 格拉成 510px 宽——已实测并收窄。 */
.topics-hub-page .platform-hero__panel .ui-summary > :last-child:nth-child(odd),
.product-detail-page .product-details-grid > :last-child:nth-child(odd) {
  grid-column: 1 / -1;
}

/* ---- V2.3 Topic map：真实 gap + 各自细线，取消拉伸与占位灰块 ----------- */
/* 占位灰块来自本文件第 10 节自己引入的做法（容器铺 --doc-rule + gap:1px 伪造
   共享细线）：末行不满时空格子露出容器底色。`grid-row: span 2` 与
   min-height 118/208px 原是源样式（frontend-homepage/styles.css）带来的，
   文字结束后留 117px 空底——2026-10-05 已在源侧移除（见 docs/ui-style-debt.md），
   两侧不再对写；本节的 min-height:0 / grid-row:auto 保留为缓存兜底：浏览器或
   CDN 在 styles.css 版本参数提升前仍可能持有旧副本。改为每格自带 hairline、
   真实 --sp-3 gap、高度由内容决定；size-lg 只保留字号层级。 */
.topic-map-home {
  gap: var(--sp-3);
  background: transparent;
  border: 0;
  border-radius: 0;
}

.topic-map-home a,
.topic-map-home-lifted a,
.topic-map-home-lifted a.size-lg {
  min-height: 0;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-control);
}

.topic-map-home a.size-lg {
  grid-row: auto;
}

/* ---- V2.4 /partners/apply H1 归入 Tier 1 -------------------------------- */
/* 该页 h1 直接落在 .section > .container > div 里，没有 hero 类名，此前只拿到
   字号（44px）没拿到字重（继承 400），与其余 platform 页 44/600 不一致。 */
.partners-apply-page .container h1 {
  font-size: var(--text-h1) !important;
  font-weight: 600 !important;
  line-height: 1.08 !important;
}

/* ---- V2.5 长 URL 撑破 SEO 面板网格（390 档横向溢出） --------------------- */
/* 实测 /products/[slug]（含长厂商链接的产品，如 francisella-tularensis-*）在
   390px 下文档 scrollWidth=512：URL 无空格不可断行，min-content 426px 经
   grid 项默认 min-width:auto 反推 .ivd-seo-panel-stack 的单列轨道到 495px。
   允许断行 + 轨道项 min-width:0，两处一起堵住传导链。 */
.ivd-seo-panel-stack > *,
.seo-evidence-item,
.seo-reference-list :is(li, a) {
  min-width: 0;
  overflow-wrap: anywhere;
}

/* CSS-backed partner and resource photographs retain their own color. */
.partners-page .low-impact-hero__visual,
.resources-page .low-impact-hero__visual {
  background-blend-mode: normal;
}

/* ---- V2.7 /companies 装饰圆盘在碳纸主题下不发光 ------------------------ */
/* globals.css:8653 的 .companies-map-layer span 用硬编码 rgba(255,255,255,.48)：
   亮色下是淡盘，暗色（--doc-paper #14181d）下变成 190×190 的高亮块，读起来像
   没加载完的占位图。改用随主题翻转的文档 token，仅压暗，不改几何。 */
:root[data-theme='dark'] .companies-map-layer span {
  background: color-mix(in srgb, var(--doc-paper) 9%, transparent);
}

/* ---- V2.8 Dark sweep round 5：body.page-* 遗留白底面 + 页根浅色渐变 -----
   前四轮的暗色复核覆盖了已目测页面；第五轮像素级全站扫描发现三处系统性漏网：
   (a) frontend-homepage/styles.css 的 body.page-* 白底规则族（约 4454–5103 行）
       —— SiteHeader 水合后给 body 挂 page-* 类，这些规则以更高特异性命中 app，
       且没有暗色对应（此前各轮只按页面修了 companies/partners 的筛选芯片）；
   (b) globals.css:8600 的 .companies-page 页根浅色渐变，暗色下整页近白；
   (c) .pagination-link 的 legacy 白底压过 globals 的 var(--background)。
   本节逐条以 document token 回映射，只作用于暗色；亮色渲染不变。
   亮面例外（tech-hub-hero-inner、partners-hero-seo、low-impact-hero）不在列，
   见 globals.css:9113 与本文件 §H3。像素证据：.ux-audit/round5/。 */

/* (b) /companies 页根浅色渐变（含左侧列、工具条横带两处白块） */
:root[data-theme='dark'] main.companies-page {
  background: var(--doc-paper);
}

/* (a) /products 筛选侧栏 + 芯片 + 工具条（对齐 companies 侧栏的暗色形态） */
:root[data-theme='dark'] body.page-products .finder-sidebar {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
}
:root[data-theme='dark'] body.page-products .finder-sidebar h2 {
  color: var(--doc-ink);
  border-bottom-color: var(--doc-rule);
}
:root[data-theme='dark'] body.page-products .filter-group a {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule-strong);
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] body.page-products .filter-group a > span:last-child {
  background: var(--doc-paper-alt);
  color: var(--doc-muted);
  border: 1px solid var(--doc-rule);
}
:root[data-theme='dark'] body.page-products .filter-group a.is-selected {
  background: var(--doc-steel-wash);
  border-color: var(--doc-steel);
  color: var(--doc-ink);
}
/* 工具条全局回映射(legacy .results-toolbar 的 var(--panel)/渐变在 companies
   等页同样命中;page-products 作用域条目由此覆盖,保留以自适应既有注释) */
:root[data-theme='dark'] .results-toolbar {
  background: var(--doc-paper);
  border-color: var(--doc-rule);
}
:root[data-theme='dark'] body.page-products .product-stat-row div {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
}

/* globals.css:6156 的 rgba(255,255,255,.72) 瓦片组在暗色下呈水洗灰
   (公司卡 PRIMARY FOCUS/REGION/PLATFORM 三瓦片实测),回映射到文档 token */
:root[data-theme='dark'] .company-card-summary-grid > div {
  background: var(--doc-surface);
  border-color: var(--doc-rule);
}
:root[data-theme='dark'] .company-card-summary-grid > div span {
  color: var(--doc-muted);
}

/* globals.css:6170 表单控件组的 rgba(255,255,255,.92) 白底(工具条下拉/搜索框/
   [data-slot] 控件,暗色下保持白底,特异性 (0,2,1) 压过 ui-consistency §341),
   逐选择器回映射;§F-C2 的亮面面板内控件由面板自身的 token 翻转继续接管 */
:root[data-theme='dark'] :is(
  .finder-input-group input[type='search'],
  .products-toolbar-field input,
  .products-toolbar-field select,
  .results-toolbar-controls select,
  .rfq-field input,
  .rfq-field select,
  .rfq-field textarea,
  .resource-field input,
  .resource-field select,
  .resource-field textarea,
  [data-slot='input'],
  [data-slot='textarea'],
  [data-slot='select-trigger']
) {
  background: var(--doc-surface);
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink);
}

/* legacy styles.css:4522 的 .vault-filter a 白色芯片(/resources 筛选,实测
   浅灰底浅灰字不可读) */
:root[data-theme='dark'] body.page-resources .vault-filter a {
  background: var(--doc-surface);
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] body.page-resources .vault-filter a.is-selected {
  background: var(--doc-steel-wash);
  border-color: var(--doc-steel);
  color: var(--doc-ink);
}

/* globals.css:6483 详情对比表斑马行 rgba(248,251,254,.72) 与 :hover 白混色
   (technologies/tools 详情实测:偶数行亮带、文字被洗掉) */
:root[data-theme='dark'] .tech-detail-table-wrap tbody tr:nth-child(even) td {
  background: color-mix(in srgb, var(--doc-surface) 92%, var(--doc-rule));
}
:root[data-theme='dark'] .tech-detail-table-wrap tbody tr:hover td {
  background: var(--doc-steel-wash);
}

/* globals.css:5207 徽章组:背景是白混色、文字在暗色被其它规则翻成 muted →
   亮底亮字。整组回映射到暗色钢蓝文档值 */
:root[data-theme='dark'] :is(.badge-info, .badge-company, .badge-regulatory) {
  background: var(--doc-steel-wash);
  border-color: var(--doc-rule-strong);
  color: var(--doc-steel);
}
:root[data-theme='dark'] .badge-muted {
  background: var(--doc-paper-alt);
  border-color: var(--doc-rule);
  color: var(--doc-muted);
}

/* legacy styles.css:4462 族的 .vault-pack-grid article #fff 资源包卡
   (/resources 实测白卡+暗色 ink 标题,洗白不可读) */
:root[data-theme='dark'] body.page-resources .vault-pack-grid article {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  box-shadow: none;
}
:root[data-theme='dark'] body.page-resources .vault-pack-grid article h3,
:root[data-theme='dark'] body.page-resources .vault-pack-grid article strong {
  color: var(--doc-ink);
}
:root[data-theme='dark'] body.page-resources .vault-pack-grid article p,
:root[data-theme='dark'] body.page-resources .vault-pack-grid article span {
  color: var(--doc-ink-2);
}

/* (c) 分页控件（legacy .pagination-link 白底压过 globals var(--background)；
   companies/products/tests 等目录页共用） */
:root[data-theme='dark'] .pagination-link {
  background: var(--doc-surface);
  border-color: var(--doc-rule-strong);
  color: var(--doc-ink-2);
}
:root[data-theme='dark'] .pagination-link:hover,
:root[data-theme='dark'] .pagination-link:focus-visible {
  color: var(--doc-steel);
  border-color: var(--doc-steel);
}
:root[data-theme='dark'] .pagination-link.is-active {
  background: var(--doc-steel-wash);
  border-color: var(--doc-steel);
  color: var(--doc-ink);
}

/* (a) /request-quote 表单步骤卡（legacy 4462 族 #fff，body.page-request 命中） */
:root[data-theme='dark'] body.page-request .rfq-step {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  box-shadow: none;
}
:root[data-theme='dark'] body.page-request .rfq-form {
  background: transparent;
  box-shadow: none;
}

/* (a) /resources 资源筛选与列表（legacy 4454/4462/4537 族，body.page-resources） */
:root[data-theme='dark'] body.page-resources .vault-filter,
:root[data-theme='dark'] body.page-resources .resource-policy-box {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  box-shadow: none;
}
:root[data-theme='dark'] body.page-resources .resource-feed-list li {
  background: var(--doc-surface);
  border: 1px solid var(--doc-rule);
  box-shadow: none;
}


/* ---- V2.9 Round-5 visual-judge 修复批 ----------------------------------
   第五轮人工级视觉复核(visual-judge,5 组×138 张截图)确认的缺陷,逐条带证据:
   (a) 暗色:companies/partners 卡片分类芯片浅底浅字(globals.css:1801 白混色组,
       无暗色对应;Mindray/Roche 等 11 卡芯片实测 rgb(245,246,248)底);
   (b) 暗色:companies hero 统计瓦片近白卡(globals.css:8741 rgba(255,255,255,.9),
       16/55/72/7 四瓦片实测 rgb(233,233,234));
   (c) 双主题:/resources 与 /buyers-guide 共用的 .cta-panel —— 次按钮墨色字压
       深蓝带(亮色实测 rgb(28,43,54) on 深蓝渐变,判官评"接近不可读"),390 档
       文字距带边 ~2px,暗色下整条带变浅蓝(白字压浅蓝);统一为:带恒深蓝、
       次按钮亮字亮边、带加水平内距;
   (d) 1024-1279 视口:row2 导航 9 项 + 搜索超宽,nav-list overflow-x:auto 且
       滚动条隐藏 → "Buyer's Guide"/"Partners" 无任何可达路径(request-quote
       1024 截图实测 7 项)。允许该区间换行,不重排信息架构。 */

/* (a) 分类芯片(公司卡与伙伴卡共用组) */
:root[data-theme='dark'] :is(.company-card-taxonomy span, .company-tag-list span) {
  background: var(--doc-steel-wash);
  border-color: var(--doc-rule-strong);
  color: var(--doc-steel);
}

/* (b) companies hero 统计瓦片 */
:root[data-theme='dark'] .companies-metric-grid article {
  background: var(--doc-surface);
  border-color: var(--doc-rule);
  box-shadow: none;
}

/* (c) CTA band:带恒为墨蓝文档面,次按钮在其上恒为亮字 */
.container.cta-panel {
  padding-inline: clamp(1.25rem, 2.5vw, 2rem);
}
/* 次按钮色被全局 .btn-secondary 的 !important 墨色压住(实测),变体色按本文件
   惯例用 !important 仲裁;暗色带同理,白渐变的来源规则在级联中压过普通声明 */
.cta-panel .btn-secondary {
  color: #f5f9fd !important;
  border-color: rgba(245, 249, 253, 0.55) !important;
}
.cta-panel .btn-secondary:hover,
.cta-panel .btn-secondary:focus-visible {
  background: rgba(245, 249, 253, 0.12);
}
/* 暗色下带=表面色卡(注意:暗色 token 表中 --doc-ink-lift/#fff 与
   --doc-steel-deep/#b8d2e6 是"用在暗底上的亮值",不能拿来做带的底色——
   首版误用即为判官看到的浅蓝渐变) */
:root[data-theme='dark'] .cta-panel {
  background: var(--doc-surface) !important;
  border-color: var(--doc-rule);
  box-shadow: none;
}
:root[data-theme='dark'] .cta-panel .btn-secondary {
  border-color: rgba(245, 249, 253, 0.55) !important;
}

/* (V2.9 追加)products 筛选组容器/组标题(globals.css:6156 组的白混色同样命中
   .filter-group,暗色下呈浅灰条+洗白标题,visual-judge 复核实) */
:root[data-theme='dark'] body.page-products .finder-sidebar .filter-group {
  background: transparent;
}
:root[data-theme='dark'] body.page-products .finder-sidebar .filter-group h3 {
  color: var(--doc-ink-2);
}

/* (d) 1024-1279 导航换行(仅此区间;≥1280 单行,≤1023 走移动抽屉) */
@media (width >= 64rem) and (width < 80rem) {
  .site-header__row2-inner {
    flex-wrap: wrap;
    row-gap: 0.15rem;
    padding-block: 0.35rem 0.45rem;
  }
  .site-header__nav-list {
    flex-wrap: wrap;
    overflow-x: visible;
  }
  .site-header__row2 .site-header__search-wrap {
    margin-left: auto;
  }
}

/* ==========================================================================
   ROUND 6 RTL ARBITRATION — appended 2026-10-05 (Round 6 F10 + F11).
   APPEND-ONLY section: nothing above this banner was modified.
   Scope: [dir='rtl'] App-track Arabic pages ONLY. Each rule mirrors an
   earlier physical-property rule with CSS logical properties, so LTR
   rendering is untouched (pixel-diff control pages verified identical).
   Covered: R-3 cert strip separators, R-4 eyebrow steel bar, R-5 compare
   sticky first column, R-6 prose list indent, U-5 Arabic font fronting
   (variable registered in the root layout, consumed here).
   Editors: keep using logical properties inside this RTL scope; do not
   rewrite the physical rules earlier in the file.
   ========================================================================== */

/* R-3: certification strip — separator and gaps belong to the reading
   start side, which is the right side in RTL. */
[dir='rtl'] .cert-label {
  margin-right: 0;
  margin-inline-end: 1.25rem;
  padding-left: 0;
  padding-inline-start: 0.7rem;
  border-left: 0;
  border-inline-start: 3px solid var(--doc-rule-strong);
}

[dir='rtl'] .cert-grid a {
  padding: 0.05rem 0;
  padding-inline-start: 1.1rem;
  border-left: 0;
  border-inline-start: 1px solid var(--doc-rule);
}

/* R-4: the 3px steel eyebrow rule marks the start of reading. Important
   parity: the LTR arbitration for interior-hero eyebrows earlier in this
   file is !important, so the mirror must be too. The companion rule below
   keeps the error variant red on the new start side. */
[dir='rtl'] :is(.ui-kicker, .eyebrow, .ds-section-header__eyebrow, .ds-hero__eyebrow) {
  padding: 0.08rem 0 !important;
  padding-inline-start: 0.7rem !important;
  border-left: 0 !important;
  border-inline-start: 3px solid var(--doc-steel) !important;
}

[dir='rtl'] .frontend-feedback--error .eyebrow {
  border-inline-start-color: var(--status-error) !important;
}

/* R-5: compare table sticky first column sticks to the inline start and
   its separator sits on the inline end toward the remaining columns. */
[dir='rtl'] .compare-table th[scope='row'],
[dir='rtl'] .compare-table thead th:first-child {
  inset-inline-start: 0;
  inset-inline-end: auto;
  border-right: 0;
  border-inline-end: 1px solid var(--doc-rule);
}

/* R-6: prose list indent follows the reading side. */
[dir='rtl'] .insight-article-body :is(ul, ol),
[dir='rtl'] .case-study-detail-page .case-study-body :is(ul, ol) {
  padding-left: 0;
  padding-inline-start: 1.4em;
}

/* U-5: front the IBM Plex Sans Arabic face on RTL pages. The variable is
   registered by the root layout; LTR pages keep the untouched tokens, so
   this cannot affect any Latin page. Both token layers that resolve to the
   sans stack are mirrored: --font-sans and --doc-sans (the document-voice
   stack that wins on body). */
[dir='rtl'] {
  --font-sans: var(--font-plex-sans-arabic, var(--font-plex-sans));
  --doc-sans: var(--font-plex-sans-arabic, var(--font-plex-sans)), system-ui, -apple-system, sans-serif;
}

/* Test guides are content cards; a repeated flask does not identify a test. */
.test-directory-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sp-4);
  align-items: stretch;
}
.test-list-page .test-directory-card {
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 188px;
  padding: var(--sp-5);
  border: 1px solid var(--doc-rule);
  border-top: 3px solid var(--doc-steel);
  border-radius: var(--radius-control);
  background: var(--doc-surface);
  color: var(--doc-ink);
  text-decoration: none;
}
.test-list-page .test-directory-card:hover,
.test-list-page .test-directory-card:focus-visible {
  border-color: var(--doc-steel);
  background: var(--doc-steel-wash);
}
.test-list-page .test-directory-card:focus-visible {
  outline: 3px solid var(--doc-steel);
  outline-offset: 3px;
}
.test-list-page .test-directory-card h2 {
  margin: 0 0 var(--sp-3);
  color: var(--doc-ink);
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1.3;
}
.test-list-page .test-directory-card p {
  margin: 0;
  color: var(--doc-ink-2);
  font-size: var(--fs-md);
  line-height: 1.55;
}
.test-directory-card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  margin-top: auto;
  padding-top: var(--sp-4);
  color: var(--doc-muted);
  font-size: var(--fs-sm);
}
.test-directory-card__footer small {
  font-size: inherit;
}
.test-directory-card__footer > span {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  flex: 0 0 auto;
  color: var(--doc-steel);
  font-weight: 600;
}
@media (max-width: 1050px) {
  .test-directory-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 700px) {
  .test-directory-grid {
    grid-template-columns: minmax(0, 1fr);
  }
  .test-list-page .test-directory-card {
    min-height: 0;
  }
}

/* Product catalog hero: keep search, metrics and quick actions in one compact scan. */
.products-discovery-page .product-workflow-visual {
  display: none;
}
.products-discovery-page .product-command-panel h2,
.products-discovery-page .product-command-panel .product-workflow-intro {
  max-width: none;
  padding-inline-end: 0;
}
.products-discovery-page .product-command-panel .hero-cta-group {
  flex-wrap: wrap;
}
.products-discovery-page .product-command-panel .btn {
  min-height: 42px !important;
  padding-inline: 0.9rem !important;
}
.products-discovery-page .product-command-helper {
  max-width: none;
  padding: 0.65rem 0.8rem;
}
@media (min-width: 561px) and (max-width: 900px) {
  .products-discovery-page .query-grid,
  .products-discovery-page .product-stat-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Partners hero: the introduction and its actions form one column-sized card. */
.partners-page .partners-hero-main {
  display: flex;
  flex-direction: column;
  padding: var(--sp-5);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
}

/* Keep the navigation brand gradient and remove the decorative buyers-guide rail. */
.site-header .site-header__row2 {
  background: linear-gradient(100deg, #102a49 0%, #0d4968 55%, #087791 100%);
}
:root[data-theme='dark'] .site-header .site-header__row2 {
  background: linear-gradient(100deg, #071b32 0%, #0a344c 58%, #07566a 100%);
}
.buyers-guide-page .platform-hero__copy::before {
  display: none;
}

/* The selected count needs its own contrast against the dark filter chip. */
:root[data-theme='dark'] body.page-products .filter-group a.is-selected > span:last-child {
  background: #dceefa;
  border-color: #b6d7ea;
  color: #10324c;
}

/* Total results belong on the same line as the pagination controls. */
.results-pagination .pagination-total {
  flex: 0 0 auto;
  min-height: 40px;
  margin: 0 0 0 0.5rem;
  white-space: nowrap;
}
@media (max-width: 640px) {
  .results-pagination .pagination-total {
    margin-left: 0;
  }
}

/* Match the buyer guide hero cards by letting the photograph absorb spare height. */
@media (min-width: 900px) {
  .buyers-guide-page .platform-hero__grid {
    align-items: stretch;
  }
  .buyers-guide-page .platform-hero__panel {
    grid-template-rows: minmax(0, 1fr) auto auto;
    align-content: stretch;
  }
  .buyers-guide-page .platform-hero__visual {
    height: 100%;
    aspect-ratio: auto;
  }
}

/* Partner attribution is one compact record below the hero. */
.partners-page .partners-hero-seo .ivd-seo-panel-stack {
  grid-template-columns: minmax(0, 1fr);
}
.partners-page .partners-hero-seo .seo-evidence-chain {
  max-width: none;
}
@media (min-width: 1080px) {
  .partners-page .partners-hero-seo .seo-evidence-grid {
    grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));
  }
}
.partners-page .partners-hero-main .low-impact-hero {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
  margin-bottom: 0;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}
.partners-page .partners-hero-main .low-impact-hero::before {
  display: none;
}
.partners-page .partners-hero-main .low-impact-hero__visual {
  flex: 1 1 auto;
  min-height: 280px;
  height: auto;
  margin-top: var(--sp-5);
}
.partners-page .partners-hero-actions {
  flex: 0 0 auto;
  margin-top: var(--sp-5);
}
@media (max-width: 900px) {
  .partners-page .partners-hero-main .low-impact-hero {
    flex: none;
  }
  .partners-page .partners-hero-main .low-impact-hero__visual {
    flex: none;
    min-height: 220px;
  }
}

/* Home hero: keep the photo beside the full search journey, not just the heading. */
.home-command {
  padding-block: clamp(1.5rem, 2.3vw, 2.25rem) clamp(1.5rem, 2vw, 2rem);
}
.home-command .search-scope-label {
  margin-top: 1rem;
}
.home-command .search-tabs {
  margin-top: 0.25rem;
}
.home-command .search-shell,
.home-command .search-chips {
  margin-top: 0.4rem;
}
.home-command .command-actions {
  margin-top: 0.9rem;
}
@media (min-width: 901px) {
  .home-command .command-main {
    position: relative;
    isolation: isolate;
    padding-inline-end: 42%;
  }
  .home-command .command-main-hero {
    display: block;
  }
  .home-command .command-main-visual {
    position: absolute;
    inset-block: 0;
    inset-inline-end: 0;
    width: 40%;
    height: 100%;
    min-height: 0;
    margin: 0;
  }
  .home-command .command-main-visual img {
    height: 100%;
    min-height: 0;
    object-position: center;
  }
}

/* Insights hero: center the copy as one group and keep the visual band concise. */
.insights-page .insights-hero {
  padding-block: 2rem;
}
.insights-page .insights-hero-grid {
  align-items: center;
  gap: clamp(1.5rem, 3vw, 2.25rem);
}
.insights-page .insights-hero-main {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.9rem;
}
.insights-page .insights-hero-kicker {
  align-self: flex-start;
}
.insights-page .insights-hero-aside {
  padding: 1.15rem;
}
.insights-page .insights-hero-visual.hero-visual--photo {
  min-height: 190px;
  height: 190px;
  margin-bottom: 0.55rem;
}
.insights-page .insights-aside-copy {
  gap: 0.5rem;
  margin-top: 0.55rem;
}

/* Featured insight: let its editorial image fill the height beside latest stories. */
.insights-page .insights-featured-section .insights-featured-grid {
  align-items: stretch;
}
.insights-page .insights-featured-card {
  display: flex;
  flex-direction: column;
}
.insights-page .insights-featured-visual {
  position: relative;
  display: block;
  flex: 1 1 auto;
  min-height: 230px;
  margin-top: var(--sp-5);
  overflow: hidden;
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-steel-wash);
}
.insights-page .insights-featured-visual img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 42%;
  transition: transform 180ms ease;
}
.insights-page .insights-featured-visual:hover img {
  transform: scale(1.025);
}
.insights-page .insights-featured-visual:focus-visible {
  outline: 3px solid var(--doc-steel);
  outline-offset: 3px;
}
@media (max-width: 899px) {
  .insights-page .insights-featured-visual {
    flex: none;
    height: clamp(210px, 42vw, 300px);
  }
}

/* Product detail: compact, source-linked recommendations below the inquiry actions. */
.product-detail-page .product-inquiry-rail {
  display: grid;
  gap: var(--sp-4);
}
.product-detail-page .product-related-card {
  min-width: 0;
  padding: var(--sp-5);
  border: 1px solid var(--doc-rule);
  border-radius: var(--radius-card);
  background: var(--doc-surface);
}
.product-detail-page .product-related-card .ui-kicker {
  margin: 0 0 var(--sp-2);
}
.product-detail-page .product-related-card h2 {
  margin: 0;
  color: var(--doc-ink);
  font-size: var(--text-h3);
  font-weight: 600;
  line-height: 1.25;
}
.product-detail-page .product-related-card__intro {
  margin: var(--sp-2) 0 var(--sp-3);
  color: var(--doc-ink-2);
  font-size: var(--fs-sm);
  line-height: 1.45;
}
.product-detail-page .product-related-list {
  display: grid;
}
.product-detail-page .product-related-item {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
  padding: 0.8rem 0;
  border-top: 1px solid var(--doc-rule);
  color: var(--doc-ink);
  text-decoration: none;
}
.product-detail-page .product-related-item:hover strong,
.product-detail-page .product-related-item:focus-visible strong {
  color: var(--doc-steel-deep);
  text-decoration: underline;
}
.product-detail-page .product-related-item:focus-visible {
  outline: 3px solid var(--doc-steel);
  outline-offset: 2px;
}
.product-detail-page .product-related-item__match {
  color: var(--doc-steel);
  font-size: var(--fs-xs);
  font-weight: 700;
}
.product-detail-page .product-related-item strong {
  overflow-wrap: anywhere;
  font-size: var(--fs-base);
  font-weight: 600;
  line-height: 1.35;
}
.product-detail-page .product-related-item small {
  color: var(--doc-muted);
  font-size: var(--fs-sm);
  line-height: 1.35;
}
.product-detail-page .product-related-item__platform {
  width: fit-content;
  margin-top: 0.15rem;
  padding: 0.15rem 0.45rem;
  border: 1px solid var(--doc-rule-strong);
  border-radius: 999px;
  color: var(--doc-ink-2);
  font-size: var(--fs-xs);
}
