/* purepure v2. One immutable stylesheet for every public v2 page, including
   /gpt (its CSP forbids inline styles); the URL carries the file's own
   content hash (search/ui_v2.py).
   The look is the purepure design system (docs/branding/purepure: brand
   book, tokens.json, components, mockups): ink on off-white, water blue only
   in the wordmark's u's and the focus ring, pill controls, borders instead
   of shadows. The token names below are the system's own; the few values it
   does not define (visited links, highlights, the ranking bars' negative
   tone, the paid-content label) are marked as product additions.
   Type: DM Sans 700 for the wordmark and headings, Public Sans for
   everything else. Both are self-hosted (no third-party request sees a
   query) and swap in over metric-matched local fallbacks.
   The SERP: filter chips above a 640px results column and a 360px source
   panel, the column aligned with the header's search field. Phones: result
   cards on the sunken ground, the source details in a bottom sheet.
   Hard rule kept from v1: no horizontal scroll at any viewport. */

/* fonts: variable, limited to the weights the design uses; Latin preloaded
   (_shell_head.html), Latin Extended on demand. File names carry the
   content hash (tests/test_ui_v2.py). DM Sans keeps its optical-size axis
   (9-40), so the 116px wordmark and 22px headings each get their cut. */
@font-face {
  font-family: "Public Sans"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url("fonts/public-sans-latin.f9454fc3.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Public Sans"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url("fonts/public-sans-latin-ext.d349d2ab.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "DM Sans"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("fonts/dm-sans-latin.4f7589ff.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "DM Sans"; font-style: normal; font-weight: 700; font-display: swap;
  src: url("fonts/dm-sans-latin-ext.e04b9c61.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* Local fallbacks scaled to the web fonts' widths and heights (Arimo and
   Liberation are the metric twins of Arial). Public Sans: measured on SERP
   text (speed review 2026-09-25). DM Sans: its advance widths over heading
   text at optical sizes 24-30 against Liberation Sans Bold (99%), and its
   ascent 992 and descent 310 per 1000. Android has neither Arial nor
   Liberation, so Roboto gets its own face. */
@font-face {
  font-family: "Public Sans fb"; font-weight: 100 549;
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  size-adjust: 105.17%; ascent-override: 90.33%; descent-override: 21.39%; line-gap-override: 0%;
}
@font-face {
  font-family: "Public Sans fb"; font-weight: 550 900;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 99.21%; ascent-override: 95.76%; descent-override: 22.68%; line-gap-override: 0%;
}
@font-face {
  font-family: "Public Sans fb2"; src: local("Roboto"), local("Roboto-Regular");
  size-adjust: 105.71%; ascent-override: 89.87%; descent-override: 21.29%; line-gap-override: 0%;
}
@font-face {
  font-family: "DM Sans fb"; font-weight: 700;
  src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("LiberationSans-Bold");
  size-adjust: 99%; ascent-override: 100.2%; descent-override: 31.31%; line-gap-override: 0%;
}

/* tokens: docs/branding/purepure/tokens.json, exact values */
:root {
  color-scheme: light dark;
  --surface: #fbfcfd;
  --surface-raised: #ffffff;
  --surface-sunken: #f4f6f8;
  --line: #e1e6eb;
  --line-strong: #86909b;
  --ink: #14181c;
  --ink-muted: #58616a;
  --on-ink: #ffffff;
  --link: #1b4f8f;
  --water: #2f7fd6;
  --water-soft: #e3effb;
  --scrim: rgba(20, 24, 28, 0.45);
  --tag-public-bg: #e3efe7; --tag-public-ink: #1e5a3a;
  --tag-research-bg: #e6ecf7; --tag-research-ink: #23427a;
  --tag-media-bg: #ede8f3; --tag-media-ink: #4b2f72;
  --tag-org-bg: #dff0ee; --tag-org-ink: #175a54;
  --tag-business-bg: #f4ead8; --tag-business-ink: #6b4a12;
  --tag-person-bg: #f7e5eb; --tag-person-ink: #7b2c47;
  --shadow-dialog: 0 8px 28px rgba(20, 24, 28, 0.14);
  /* product additions (not in the design system) */
  --visited: #5c3d86;
  --mark: #fff1b8;
  --neg: #9a4a2e;
  --tag-paid-bg: #f8e3da; --tag-paid-ink: #7a2e0e;
  /* type, space, radius */
  --font-display: "DM Sans", "DM Sans fb", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-text: "Public Sans", "Public Sans fb", "Public Sans fb2", system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem;
  --space-5: 1.5rem; --space-6: 2rem; --space-7: 3rem; --space-8: 4rem;
  --radius-sm: 4px; --radius-md: 8px; --radius-lg: 14px; --radius-pill: 999px;
  /* geometry */
  --gutter: max(1rem, env(safe-area-inset-left, 0px));
  --gutter-end: max(1rem, env(safe-area-inset-right, 0px));
  --col: 40rem;
  --panel: 22.5rem;
  --inset: var(--gutter);
  /* the sticky results header's real height: field 46px, padding, border */
  --header-h: calc(4.375rem + 1px + env(safe-area-inset-top, 0px));
  --chips-h: 3.25rem;
}
@media screen and (prefers-color-scheme: dark) {
  :root {
    --surface: #0f1317; --surface-raised: #171c21; --surface-sunken: #0b0e11;
    --line: #273039; --line-strong: #6b7682;
    --ink: #e8edf2; --ink-muted: #a3adb7; --on-ink: #0f1317;
    --link: #8fbbf0; --water: #5aa0ea; --water-soft: #1c3450;
    --scrim: rgba(0, 0, 0, 0.6);
    --tag-public-bg: #16301f; --tag-public-ink: #9fd4b1;
    --tag-research-bg: #18233a; --tag-research-ink: #a9c1ee;
    --tag-media-bg: #261d33; --tag-media-ink: #c8b3ea;
    --tag-org-bg: #12302d; --tag-org-ink: #8fd3cb;
    --tag-business-bg: #33270f; --tag-business-ink: #e6c98a;
    --tag-person-bg: #351a24; --tag-person-ink: #eeaac1;
    --shadow-dialog: 0 8px 28px rgba(0, 0, 0, 0.5);
    --visited: #c3a9ea; --mark: #5c4d12; --neg: #e39a7f;
    --tag-paid-bg: #3f2219; --tag-paid-ink: #f2b59c;
  }
}
@media (min-width: 48rem) {
  :root { --gutter: max(2rem, env(safe-area-inset-left, 0px)); --gutter-end: max(2rem, env(safe-area-inset-right, 0px)); --header-h: calc(5.375rem + 1px + env(safe-area-inset-top, 0px)); }
}
@media (min-width: 64rem) {
  :root { --gutter: max(2.5rem, env(safe-area-inset-left, 0px)); --gutter-end: max(2.5rem, env(safe-area-inset-right, 0px)); }
}
/* Wide screens (mockup Results): the results column starts under the
   header's search field, about 190px in; the wordmark's slot fills the rest. */
@media (min-width: 80rem) {
  :root { --inset: 11.875rem; }
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; overflow-x: clip; }
body {
  margin: 0; min-height: 100dvh; display: flex; flex-direction: column;
  font-family: var(--font-text); font-size: 1rem; line-height: 1.55;
  color: var(--ink); background: var(--surface); overflow-wrap: break-word;
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
}
main { flex: 1 0 auto; width: 100%; min-width: 0; padding-inline: var(--gutter) var(--gutter-end); }
a { color: var(--link); text-decoration: none; }
a:hover { color: var(--ink); text-decoration: underline; text-underline-offset: 0.18em; text-decoration-thickness: from-font; }
/* focus-ring: a 2px gap in the page colour, then a solid 2px water ring */
:focus-visible { outline: 2px solid var(--water); outline-offset: 2px; border-radius: var(--radius-sm); }
[hidden] { display: none !important; }
::selection { background: var(--water-soft); color: var(--ink); }
.sr-only {
  position: absolute; inline-size: 1px; block-size: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.skip-link, .skip-to {
  position: fixed; inset-block-start: 0.5rem; inset-inline-start: 0.5rem; z-index: 100;
  padding: 0.6rem 0.9rem; border-radius: var(--radius-pill); background: var(--ink); color: var(--on-ink);
  transform: translateY(-160%);
}
.skip-link:focus, .skip-to:focus { transform: none; }
code { font-family: var(--mono); font-size: 0.85em; color: var(--ink-muted); }
button { font: inherit; color: inherit; cursor: pointer; }
strong, b { font-weight: 600; }
mark {
  padding: 0 0.125rem; border-radius: 0.125rem; background: var(--mark); color: inherit;
  -webkit-box-decoration-break: clone; box-decoration-break: clone;
}

/* the wordmark: live type, water in the two u's. --lvl (0-1) is the water;
   21% of the u's box is the baseline, +44% the x-height (design system,
   Wordmark). The first u holds a little less, as in the component. */
.wordmark {
  --lvl: 0;
  font-family: var(--font-display); font-weight: 700; letter-spacing: -0.045em; line-height: 1;
  color: var(--ink); text-decoration: none; white-space: nowrap;
}
.wordmark.is-low { --lvl: 0.35; }
.wm-u {
  --f: var(--lvl);
  background: linear-gradient(to top, var(--water) 0, var(--water) calc(21% + var(--f) * 44%), var(--ink) calc(21% + var(--f) * 44%));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.wm-u:first-of-type { --f: calc(var(--lvl) * 0.8); }
a.wordmark:hover { color: var(--ink); text-decoration: none; }
a.wordmark:focus-visible { border-radius: var(--radius-md); }

/* buttons (design system, Button): pills; primary is an ink fill */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); flex: none;
  min-height: 2.75rem; padding: 0 1.375rem; border: 1px solid transparent; border-radius: var(--radius-pill);
  font-family: var(--font-text); font-size: 0.9375rem; font-weight: 600; line-height: 1.2; text-decoration: none; cursor: pointer;
}
.btn:hover { text-decoration: none; }
.btn-primary { background: var(--ink); color: var(--on-ink); border-color: var(--ink); }
.btn-primary:hover { color: var(--on-ink); opacity: 0.88; }
.btn-secondary { background: var(--surface-raised); color: var(--ink); border-color: var(--line-strong); }
.btn-secondary:hover { color: var(--ink); background: var(--surface-sunken); }
.btn-l { min-height: 3.25rem; padding: 0 1.625rem; }
.btn svg { flex: none; }

/* header and footer */
.site-header { flex: none; padding-block-start: env(safe-area-inset-top, 0px); background: var(--surface); }
.site-header-bar {
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.25rem 1.5rem;
  min-height: 4.25rem; padding-inline: var(--gutter) var(--gutter-end);
}
.site-header .wordmark { display: inline-flex; align-items: center; min-height: 2.75rem; flex: none; font-size: 1.75rem; }
.footer-links a {
  display: inline-flex; align-items: center; min-height: 2.75rem;
  color: var(--ink-muted); font-size: 0.875rem; text-decoration: none;
}
.footer-links a:hover { color: var(--ink); text-decoration: underline; }
.footer-links a[aria-current="page"] { color: var(--ink); font-weight: 600; }
.site-footer {
  flex: none; margin-block-start: 3.5rem;
  padding: 0.75rem var(--gutter-end) max(1rem, env(safe-area-inset-bottom, 0px)) var(--gutter);
  border-block-start: 1px solid var(--line); color: var(--ink-muted); font-size: 0.8125rem;
}
.site-footer-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 1.5rem; }
.site-footer p { margin: 0.5rem 0; text-wrap: pretty; }
.footer-links { display: flex; flex-wrap: wrap; gap: 0 1.5rem; }
.footer-links a { font-size: 0.8125rem; }
.index-count { font-variant-numeric: tabular-nums; }
@media (max-width: 47.99rem) { .site-footer-inner { justify-content: center; text-align: center; } }

/* the search field (design system, SearchField): a pill with the search
   icon; 52px on the front page, 46px in the results header */
.search-form { position: relative; display: flex; align-items: center; gap: 0.625rem; width: 100%; min-width: 0; margin: 0; }
.search-field {
  position: relative; display: flex; align-items: center; gap: var(--space-3); flex: 1 1 auto; min-width: 0;
  block-size: 3.25rem; padding: 0 1.25rem; border: 1px solid var(--line-strong); border-radius: var(--radius-pill);
  background: var(--surface-raised); color: var(--ink-muted);
}
.search-field:focus-within { outline: 2px solid var(--water); outline-offset: 2px; }
.search-field-m { block-size: 2.875rem; padding: 0 1.125rem; }
.search-icon { flex: none; }
.search-field-m .search-icon { inline-size: 1rem; block-size: 1rem; }
.search-combobox { position: relative; flex: 1 1 auto; min-width: 0; align-self: stretch; display: flex; align-items: center; }
input[type="search"] {
  display: block; width: 100%; min-width: 0; block-size: 100%; margin: 0; padding: 0;
  font: inherit; font-size: 1.0625rem; color: var(--ink); background: transparent; border: 0; border-radius: 0;
  appearance: none; -webkit-appearance: none;
}
.search-field-m input[type="search"] { font-size: 1rem; }
input[type="search"]::placeholder { color: var(--ink-muted); opacity: 1; }
input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
input[type="search"]::-webkit-search-cancel-button { cursor: pointer; }
input[type="search"]:focus, input[type="search"]:focus-visible { outline: none; }
.suggestions {
  position: absolute; z-index: 50; inset: calc(100% + 0.625rem) -1.25rem auto -2.875rem; margin: 0; padding: 0.375rem;
  list-style: none; background: var(--surface-raised); border: 1px solid var(--line); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-dialog); max-height: 22rem; overflow-y: auto; text-align: start; color: var(--ink);
}
.suggestions [role="option"] {
  display: flex; justify-content: space-between; align-items: baseline; gap: 1rem;
  min-height: 2.75rem; padding: 0.55rem 0.75rem; border-radius: var(--radius-md); cursor: pointer; overflow-wrap: anywhere;
}
.suggestions [role="option"].is-active, .suggestions [role="option"]:hover { background: var(--surface-sunken); }
.suggestions small { color: var(--ink-muted); font-size: 0.8125rem; white-space: nowrap; }

/* front page: the wordmark and the field centred, space-6 apart, one line
   of promise under the field (mockups Main, MobileHome). Nothing else. */
.home-page main { display: flex; flex-direction: column; justify-content: center; padding-block: 1rem 5rem; }
.home { display: flex; flex-direction: column; align-items: center; gap: var(--space-6); width: 100%; max-width: 40rem; margin: 0 auto; text-align: center; }
.home-mark { margin: 0; font-size: clamp(4rem, 17vw, 7.25rem); }
.home-form { text-align: start; }
.home-promise { margin: calc(-1 * var(--space-3)) 0 0; color: var(--ink-muted); font-size: 0.875rem; }
@media (max-width: 47.99rem) {
  /* Phones submit with the keyboard's search key (mockup MobileHome). */
  .home-go { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; padding: 0; border: 0; }
}

/* results header (mockups Results, MobileResults): the wordmark with a low,
   still fill, then the 46px field aligned with the results column. */
.results-page { background: var(--surface-raised); }
.results-page .site-header {
  position: sticky; top: 0; z-index: 40; background: var(--surface-raised); border-block-end: 1px solid var(--line);
}
.results-page:has(.serp > .filter-bar) .site-header { border-block-end-color: transparent; }
.results-page .site-header-bar { flex-wrap: nowrap; gap: var(--space-3); min-height: 0; padding-block: 0.75rem; }
.results-page .site-header .wordmark { font-size: 1.375rem; }
.results-page .search-form { flex: 1 1 auto; }
.results-page .suggestions { inset-inline: -2.875rem -1.125rem; }
@media (min-width: 48rem) {
  .results-page .site-header-bar { gap: var(--space-6); padding-block: 1.25rem; }
  .results-page .site-header .wordmark { font-size: 1.75rem; }
  .results-page .search-form { max-width: 37.5rem; }
}
@media (min-width: 64rem) {
  .results-page .site-header { position: static; }
  .results-page:has(.serp > .filter-bar) .site-header { border-block-end-color: var(--line); }
}
@media (min-width: 80rem) {
  .results-page .site-header .wordmark { inline-size: calc(var(--inset) - var(--gutter) - var(--space-6)); }
}
html:has(.results-page) { scroll-padding-top: calc(var(--header-h) + 0.75rem); }
html:has(.results-page .serp > .filter-bar) { scroll-padding-top: calc(var(--header-h) + var(--chips-h) + 0.75rem); }
@media (min-width: 64rem) { html:has(.results-page) { scroll-padding-top: 1rem; } }

/* SERP frame. Phones: cards on the sunken ground. From 48rem: one column
   of rows. From 64rem: the rows and the source panel. From 80rem: the
   design's 640px column and 360px panel, space-8 apart, under the field. */
.results-page main { padding: 0; }
.serp {
  display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: "bar" "form" "main";
  padding: 0 var(--gutter-end) 0 var(--gutter);
}
.filter-bar { grid-area: bar; }
.serp-main { grid-area: main; min-width: 0; padding-block-start: 1rem; }
.serp-main:focus { outline: none; }
.serp-main[aria-busy="true"] { opacity: 0.55; transition: opacity 150ms ease-out; }
.source-panel { display: none; }
@media (max-width: 47.99rem) {
  .serp-main { padding-block-start: 0.25rem; }
}
@media (min-width: 48rem) {
  .serp-main { max-width: var(--col); padding-block-start: 1.25rem; }
}
@media (min-width: 64rem) {
  .serp { column-gap: var(--space-7); grid-template-columns: minmax(0, var(--col)); justify-content: start; padding-block-start: 1rem; padding-inline-start: var(--inset); }
  .serp.has-panel {
    grid-template-columns: minmax(0, var(--col)) minmax(18rem, var(--panel));
    grid-template-areas: "bar panel" "form panel" "main panel";
    grid-template-rows: auto auto 1fr;
  }
  .serp-main { max-width: none; padding-block-start: 0; }
}
@media (min-width: 80rem) { .serp { column-gap: var(--space-8); } }

/* notes above the results */
.correction-note { margin: 0 0 1rem; font-size: 1rem; color: var(--ink); }
.correction-note a { font-weight: 600; }
.serp-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.625rem; margin: 0 0 0.5rem; }
.meta-line, .page-note { margin: 0; color: var(--ink-muted); font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
.page-note { margin-block-end: 0.75rem; }
.notice {
  margin: 0 0 1.25rem; padding: 0.875rem 1rem; border-radius: var(--radius-lg);
  background: var(--surface-sunken); color: var(--ink); font-size: 0.9375rem; text-wrap: pretty;
}
.notice p { margin: 0; }
.notice p + p { margin-block-start: 0.375rem; }
@media (min-width: 48rem) { .serp-meta, .correction-note, .notice, .page-note, .lane-toggle { margin-inline: var(--space-4); } }

/* shop lane: a two-way switch */
.lane-toggle { display: inline-flex; gap: 0.25rem; margin-block: 0 1rem; padding: 0.25rem; border-radius: var(--radius-pill); background: var(--surface-sunken); }
.lane-toggle a {
  display: inline-flex; align-items: center; min-height: 2.25rem; padding: 0 1rem;
  border-radius: var(--radius-pill); color: var(--ink-muted); font-size: 0.875rem; text-decoration: none;
}
.lane-toggle a:hover { color: var(--ink); }
.lane-toggle a[aria-current="page"] { background: var(--ink); color: var(--on-ink); font-weight: 600; }

/* chips (design system, Chip): 36px pills edged in line-strong; the
   selected one is an ink fill. Each chip holds its screen-reader text, so
   text of a chip scrolled out of the row cannot widen the page. */
.chip { position: relative; display: inline-flex; align-items: center; flex: none; max-width: 100%; color: var(--ink); font-size: 0.84375rem; font-weight: 500; line-height: 1.3; text-decoration: none; }
.chip:hover { color: var(--ink); text-decoration: none; }
.chip-face {
  display: inline-flex; align-items: center; gap: 0.375rem; min-height: 2.25rem; max-width: 100%;
  padding: 0.25rem 0.875rem; border: 1px solid var(--line-strong); border-radius: var(--radius-pill); background: var(--surface-raised);
}
.chip:hover .chip-face { background: var(--surface-sunken); }
.chip svg { flex: none; }
.chip.is-on, .chip-selected { color: var(--on-ink); }
.chip.is-on:hover, .chip-selected:hover { color: var(--on-ink); }
.chip.is-on .chip-face, .chip-selected .chip-face { background: var(--ink); border-color: var(--ink); }
.chip:focus-visible { outline: none; }
.chip:focus-visible .chip-face { outline: 2px solid var(--water); outline-offset: 2px; }
.chip-count {
  display: inline-grid; place-items: center; min-inline-size: 1.25rem; block-size: 1.25rem; padding-inline: 0.3rem;
  border-radius: var(--radius-pill); background: var(--ink); color: var(--on-ink); font-size: 0.75rem; font-weight: 600;
}
.chip.is-on .chip-count { background: var(--on-ink); color: var(--ink); }
.filter-bar { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.chip-row {
  display: flex; gap: var(--space-2); flex: 1 1 auto; min-width: 0; margin: -0.3125rem 0 -0.3125rem -0.25rem; padding: 0.3125rem 0.25rem; list-style: none;
  overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x proximity; scroll-padding-inline: 0.25rem 2rem;
  scrollbar-width: none;
}
.chip-row::-webkit-scrollbar { display: none; }
.chip-row li { flex: none; scroll-snap-align: start; }
.chip-tail { display: flex; flex: none; gap: var(--space-2); margin: 0; padding: 0; list-style: none; }
.chip-tail li:last-child { padding-inline-end: var(--gutter-end); }
@media (max-width: 63.99rem) {
  /* The quick filters belong to the sticky header (mockup MobileResults). */
  .serp > .filter-bar {
    position: sticky; top: var(--header-h); z-index: 30;
    margin-inline: calc(-1 * var(--gutter)) calc(-1 * var(--gutter-end)); padding: 0 0 0.75rem var(--gutter);
    background: var(--surface-raised); border-block-end: 1px solid var(--line);
  }
}
@media (max-width: 63.99rem) {
  /* No snapping: WebKit re-snaps the row whenever the toolbar resizes the
     viewport, so the chips slid sideways during vertical scrolls. */
  .chip-row { scroll-snap-type: none; }
}
@media (min-width: 64rem) {
  /* Static beside the panel: one line of source chips. What does not fit
     wraps below the padding box and is clipped (pure.js makes it inert);
     "Filtre", outside the row, opens the rest. */
  .filter-bar { align-items: flex-start; margin: 0 0 1.25rem; }
  .chip-row { flex: 1 1 0%; min-width: 14rem; flex-wrap: wrap; overflow: hidden; row-gap: var(--space-2); block-size: 2.875rem; }
  .chip-tail li:last-child { padding-inline-end: 0; }
}
/* the applied filters ("… resultater fra [Myndigheder ×]") */
.applied { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.625rem; }
.applied-label { color: var(--ink-muted); font-size: 0.8125rem; }
.applied-list { display: contents; list-style: none; }
.applied-list li { display: flex; min-width: 0; max-width: 100%; }
.applied-list .chip { font-size: 0.8125rem; }
.applied-list .chip-face { min-height: 2rem; padding: 0.25rem 0.75rem; white-space: normal; }
.applied-clear { display: inline-flex; align-items: center; min-height: 2rem; color: var(--ink-muted); font-size: 0.8125rem; text-decoration: underline; }
.applied-note { margin: 1.25rem 0 0; color: var(--ink-muted); font-size: 0.75rem; line-height: 1.5; text-wrap: pretty; }
.applied-note a { color: var(--ink-muted); text-decoration: underline; }
/* The quick-filter chip already shows the one selected group. */
.applied-list .is-chip, .applied.is-chip-only { display: none; }
@media (max-width: 47.99rem) {
  /* Phones show what the mockup shows: the count is for screen readers,
     and the list starts right under the quick filters. */
  .serp-meta { margin: 0; padding: 0; }
  .serp-meta:not(:has(> .applied:not(.is-chip-only))) > .meta-line {
    position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap;
  }
  .serp-meta:has(> .applied:not(.is-chip-only)) { margin-block-end: 1rem; }
}

/* results (design system, Result): the host and its source label, a title
   in link, one snippet. Phones: one surface, rows split by hairlines (a
   departure from the system's card spec: cards cost 14% of the measure and
   break the column into boxes). From 48rem: rows whose padding exists from
   the start, so selecting one (the water-soft ground) changes only its
   colour. No content-visibility: on iOS it painted rows late while
   momentum scrolling and its size estimate made the page jump. */
ol.results { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.result { position: relative; }
.results > .result { padding: 0.875rem 0; border-block-end: 1px solid var(--line); }
.results > .result:last-child { border-block-end: 0; }
@media (max-width: 47.99rem) {
  /* The 44px info button overhangs the text edge; its glyph sits on it. */
  .results > .result .about > summary { inset-inline-end: -0.625rem; }
}
@media (min-width: 48rem) {
  ol.results { gap: var(--space-1); }
  .results > .result { padding-inline: var(--space-4); border-block-end: 0; border-radius: var(--radius-lg); }
}
@media (min-width: 64rem) {
  /* The row the panel describes is the selected result: result 1 (or the
     site box) until the searcher picks another. */
  .serp.has-panel .result.is-selected { background: var(--water-soft); }
  html.panel-off .serp.has-panel .result.is-selected { background: none; }
  html.js .serp.has-panel .result { cursor: pointer; }
  html.js .serp.has-panel .results > .result:not(.is-selected):hover { background: var(--surface-sunken); }
}
.result-source {
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.25rem var(--space-2); min-width: 0; min-height: 1.5rem;
  margin: 0; font-size: 0.84375rem; line-height: 1.45; color: var(--ink-muted);
}
.result-source > * { flex: none; }
.result-source > .source-host { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
/* source labels (design system, SourceTag): the word always shows; the
   colour only helps scanning */
.tag {
  display: inline-block; padding: 0.125rem 0.4375rem; border-radius: var(--radius-sm);
  background: var(--surface-sunken); color: var(--ink);
  font-size: 0.6875rem; font-weight: 600; line-height: 1.3; letter-spacing: 0.04em; text-transform: uppercase; white-space: nowrap;
}
.t-off { background: var(--tag-public-bg); color: var(--tag-public-ink); }
.t-exp { background: var(--tag-research-bg); color: var(--tag-research-ink); }
.t-news { background: var(--tag-media-bg); color: var(--tag-media-ink); }
.t-org { background: var(--tag-org-bg); color: var(--tag-org-ink); }
.t-com { background: var(--tag-business-bg); color: var(--tag-business-ink); }
.t-ppl { background: var(--tag-person-bg); color: var(--tag-person-ink); }
.t-paid { background: var(--tag-paid-bg); color: var(--tag-paid-ink); }
.source-kind { font-weight: 600; }
.source-date { white-space: nowrap; font-variant-numeric: tabular-nums; }
.result-heading {
  margin: var(--space-1) 0 0; font-family: var(--font-text); font-size: 1.0625rem; font-weight: 600; line-height: 1.3; text-wrap: pretty;
}
@media (max-width: 47.99rem) {
  /* The clamp's box leaves room for the focus ring (same layout). */
  .result-heading {
    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden;
    padding: 0.25rem; margin: 0 -0.25rem -0.25rem;
  }
}
@media (min-width: 48rem) { .result-heading { font-size: 1.1875rem; } }
.result-title { color: var(--link); text-decoration: none; }
.result-title:visited { color: var(--visited); }
.result-title:hover { color: var(--link); text-decoration: underline; text-decoration-thickness: from-font; text-underline-offset: 0.16em; }
/* The excerpt, passage or snippet, in one plain style: a table keeps its
   rows, code its font. */
.result-snippet {
  margin: var(--space-1) 0 0; color: var(--ink); font-size: 0.875rem; line-height: 1.5; text-wrap: pretty;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden;
}
.result-snippet.is-lines { -webkit-line-clamp: 5; line-clamp: 5; }
.result-snippet.is-code { font-family: var(--mono); font-size: 0.8125rem; line-height: 1.6; }
@media (min-width: 48rem) { .result-snippet { font-size: 0.9375rem; line-height: 1.55; } }

/* One quiet info button at the end of the source line (phones, tablets,
   no JS). With JS it opens a bottom sheet (mockup MobileSource); without,
   its panel opens below the excerpt. Beside the panel the row itself is the
   button. */
[data-result] > .result-source { padding-inline-end: 2rem; }
.about > summary {
  position: absolute; inset-block-start: 0.5rem; inset-inline-end: 0.25rem;
  display: grid; place-items: center; inline-size: 2.75rem; block-size: 2.25rem;
  border-radius: var(--radius-pill); color: var(--ink-muted); cursor: pointer; list-style: none;
}
.about > summary::-webkit-details-marker { display: none; }
.about > summary::before {
  content: ""; inline-size: 1.125rem; block-size: 1.125rem; background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23000' stroke-linecap='round'%3E%3Ccircle cx='10' cy='10' r='8' stroke-width='1.6'/%3E%3Cpath d='M10 9v5M10 6.2v.1' stroke-width='1.8'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23000' stroke-linecap='round'%3E%3Ccircle cx='10' cy='10' r='8' stroke-width='1.6'/%3E%3Cpath d='M10 9v5M10 6.2v.1' stroke-width='1.8'/%3E%3C/svg%3E") center / contain no-repeat;
}
.about > summary:hover { color: var(--ink); }
.about[open] > summary { color: var(--ink); }
.about > summary:focus-visible { outline-offset: -0.125rem; border-radius: var(--radius-pill); }
.about-panel {
  display: flex; flex-direction: column; gap: var(--space-4);
  margin: 0.875rem 0 0.25rem; padding: var(--space-4); border: 1px solid var(--line); border-radius: var(--radius-lg);
  background: var(--surface-raised); font-size: 0.875rem;
}
.about-head { display: flex; flex-direction: column; align-items: flex-start; gap: 0.375rem; }
.about-title { margin: 0; font-family: var(--font-display); font-size: 1.375rem; font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; overflow-wrap: anywhere; }
.about-read { margin: -0.5rem 0 0; }
.read-link { display: inline-flex; align-items: center; min-height: 2.75rem; color: var(--link); font-size: 0.875rem; font-weight: 500; }
.about-why { border-block-start: 1px solid var(--line); }
.about-why > summary {
  display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; min-height: 2.75rem;
  font-size: 0.9375rem; font-weight: 600; line-height: 1.35; cursor: pointer; list-style: none;
}
.about-why > summary::-webkit-details-marker { display: none; }
.about-why > summary::after {
  content: ""; flex: none; inline-size: 0.45rem; block-size: 0.45rem; margin-inline-end: 0.25rem; margin-block-start: -0.2rem;
  border-inline-end: 1.5px solid var(--ink-muted); border-block-end: 1.5px solid var(--ink-muted); transform: rotate(45deg);
}
.about-why[open] > summary::after { transform: rotate(-135deg); margin-block-start: 0.2rem; }
.about-why > .why-body { padding-block: 0.25rem 0.25rem; }
.panel-btn { display: none; }
.site-box > .about > summary { inset-block-start: 0.5rem; inset-inline-end: 0.25rem; }
@media (pointer: fine) { .read-link, .about-why > summary { min-height: 2.25rem; } }
@media (min-width: 64rem) {
  /* html.js is set before first paint, so the panel replaces the info
     button before the page is drawn. The row is the button; "Vis i
     panelet" is its keyboard and screen-reader form, shown on focus. */
  html.js .serp.has-panel .about { display: none; }
  html.js .serp.has-panel .result:has(> .panel-btn:focus-visible) > .result-source { padding-inline-end: 8.75rem; }
  html.js .serp.has-panel .panel-btn {
    position: absolute; inset-block-start: 0.875rem; inset-inline-end: var(--space-4);
    display: inline-flex; align-items: center; gap: 0.375rem; block-size: 1.5rem; padding: 0;
    border: 0; background: none; color: var(--ink-muted); font-size: 0.8125rem; line-height: 1; opacity: 0;
  }
  html.js .serp.has-panel .panel-btn:focus-visible { opacity: 1; }
}

/* the facts, the reference and the actions (design system, SourcePanel),
   in the panel and in the info view */
.facts { margin: 0; display: grid; gap: var(--space-2); font-size: 0.875rem; line-height: 1.45; }
.facts > div { display: grid; grid-template-columns: 4.75rem minmax(0, 1fr); gap: var(--space-3); }
.facts dt { color: var(--ink-muted); }
.facts dd { margin: 0; overflow-wrap: anywhere; }
.ref-block { display: flex; flex-direction: column; gap: 0.375rem; }
.ref-label { margin: 0; color: var(--ink-muted); font-size: 0.6875rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; }
.ref-text { margin: 0; padding: 0.625rem 0.75rem; border-radius: var(--radius-md); background: var(--surface-sunken); color: var(--ink); font-size: 0.84375rem; line-height: 1.5; overflow-wrap: anywhere; }
.ref-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); }
.ref-actions .btn-primary { flex: 1 1 auto; }

/* what purepure knows about the publisher: descriptions as ruled rows,
   inline and in the panel */
.source-body > :first-child, .why-body > :first-child { margin-block-start: 0; }
.source-body > :last-child, .why-body > :last-child { margin-block-end: 0; }
.dims { margin: 0; }
.dims > div {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 0.125rem;
  padding-block: 0.625rem; border-block-start: 1px solid var(--line); font-size: 0.875rem; line-height: 1.5;
}
.source-stale { display: block; margin-block-start: 0.25rem; color: var(--ink-muted); font-size: 0.75rem; }
.dims dt { color: var(--ink-muted); font-size: 0.8125rem; }
.dims dd { margin: 0; color: var(--ink); }
.source-scope-note { margin: 0; color: var(--ink-muted); font-size: 0.75rem; line-height: 1.5; text-wrap: pretty; }
.dims + .source-scope-note { margin-block-start: 0.5rem; padding-block-start: 0.625rem; border-block-start: 1px solid var(--line); }
.source-actions { display: flex; flex-wrap: wrap; gap: 0 1.25rem; list-style: none; margin: -0.5rem 0 0; padding: 0; }
.source-actions a { display: inline-flex; align-items: center; min-height: 2.75rem; font-size: 0.875rem; }
@media (pointer: fine) { .source-actions a { min-height: 2.25rem; } }

/* "Hvorfor dette resultat?": a level word and an 8px bar per signal,
   adjustments first, all bars on one fixed scale */
.why-title { margin: 1rem 0 0.625rem; color: var(--ink-muted); font-size: 0.75rem; font-weight: 600; }
.why-adjust, .why-bars { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.625rem; }
.why-adjust li { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0 0.75rem; font-size: 0.875rem; line-height: 1.4; }
.why-arrow { color: var(--ink-muted); }
.why-effect { color: var(--ink-muted); font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
.why-bars { gap: 0.875rem; }
.why-bars li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.375rem 0.75rem; align-items: baseline; font-size: 0.875rem; line-height: 1.35; }
.why-level { color: var(--ink-muted); font-size: 0.8125rem; white-space: nowrap; }
.why-track { grid-column: 1 / -1; display: block; block-size: 0.5rem; border-radius: var(--radius-sm); background: var(--surface-sunken); overflow: hidden; }
.why-track::before { content: ""; display: block; inline-size: var(--w, 0%); block-size: 100%; border-radius: var(--radius-sm); background: var(--link); }
.why-bars .is-neg .why-track::before { background: var(--neg); }
.why-caveat { margin: 0.5rem 0 0; color: var(--ink-muted); font-size: 0.75rem; line-height: 1.5; }
.why-math { margin-block-start: 0.875rem; font-size: 0.8125rem; }
.why-math > summary { display: inline-flex; align-items: center; min-height: 2.25rem; color: var(--link); cursor: pointer; list-style: none; }
.why-math > summary::-webkit-details-marker { display: none; }
.why-math > summary:hover { text-decoration: underline; }
.why-n { grid-column: 1 / -1; color: var(--ink-muted); font-size: 0.75rem; font-variant-numeric: tabular-nums; }
.why-adjust .why-n { flex-basis: 100%; }
.why-body:not(:has(.why-math[open])) :is(.why-n, .is-extra) { display: none; }
.why-total { margin: 0.5rem 0 0; padding-block-start: 0.375rem; border-block-start: 1px solid var(--line); font-variant-numeric: tabular-nums; }

/* source panel (design system, SourcePanel): 360px, line edge, radius-lg,
   space-5 padding; label, publisher, facts, reference, then the one
   primary action. What purepure knows and why follow below. */
@media (min-width: 64rem) {
  .serp.has-panel .source-panel {
    display: flex; flex-direction: column; gap: var(--space-4); grid-area: panel; align-self: start;
    position: sticky; top: 1rem; max-height: calc(100vh - 2rem); max-height: calc(100svh - 2rem); overflow-y: auto;
    margin-block-start: 1.75rem; padding: var(--space-5); border: 1px solid var(--line); border-radius: var(--radius-lg);
    background: var(--surface-raised); font-size: 0.875rem; scrollbar-width: thin; scroll-padding-block: 0.75rem;
  }
  /* A long panel scrolls; its parts never shrink. */
  .serp.has-panel .source-panel > * { flex: none; }
}
.sp-head { display: flex; align-items: flex-start; gap: var(--space-3); }
.sp-id { display: flex; flex-direction: column; align-items: flex-start; gap: 0.375rem; min-width: 0; }
.sp-tag:empty { display: none; }
.sp-host { margin: 0; font-family: var(--font-display); font-size: 1.375rem; font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; overflow-wrap: anywhere; }
.sp-host.is-long { font-size: 1.125rem; }
.sp-host:focus { outline: none; }
.sp-host:focus-visible { outline: 2px solid var(--water); outline-offset: 2px; }
.sp-close { display: none; }
html.js .sp-close {
  display: inline-grid; place-items: center; flex: none; margin-inline-start: auto;
  inline-size: 2.75rem; block-size: 2.75rem; padding: 0; border: 0; border-radius: var(--radius-pill); background: var(--surface-sunken); color: var(--ink);
}
html.js .sp-close:hover { background: var(--line); }
@media (pointer: fine) { html.js .sp-close { inline-size: 2.25rem; block-size: 2.25rem; } }
.sp-read { margin: -0.5rem 0 0; }
.sp-read:empty { display: none; }
.sp-read .read-link { display: block; min-height: 0; padding-block: 0.375rem; font-size: 0.8125rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Long model descriptions stay short beside the results; the source page
   ("Alt om …") has them in full. */
.source-panel .dims > div dd { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; line-clamp: 4; overflow: hidden; }
.sp-back { margin: 0; }
.sp-back button { min-height: 2.25rem; padding: 0; border: 0; background: none; color: var(--link); font-size: 0.8125rem; text-decoration: underline; }
.panel-reopen { display: none; }
@media (min-width: 64rem) {
  html.panel-off .serp.has-panel .source-panel { display: none; }
  html.js.panel-off .serp.has-panel .panel-reopen {
    display: inline-flex; align-items: center; min-height: 2.25rem; margin-inline-start: auto; padding: 0 0.875rem;
    border: 1px solid var(--line-strong); border-radius: var(--radius-pill); background: var(--surface-raised); color: var(--ink); font-size: 0.8125rem;
  }
}
.sp-title { margin: 0 0 0.875rem; font-size: 0.9375rem; font-weight: 600; line-height: 1.35; }
.sp-section { padding-block-start: var(--space-4); border-block-start: 1px solid var(--line); }
.sp-related { display: grid; gap: 0.625rem; list-style: none; margin: 0 0 0.75rem; padding: 0; font-size: 0.875rem; line-height: 1.4; }
.sp-related:not(:has(li)) { display: none; }
.source-panel .source-actions { flex-direction: column; gap: 0.25rem; margin: 0; }
.source-panel .source-actions a { min-height: 2rem; }

/* the info view as a bottom sheet over the scrim (phones and tablets with
   JS; mockup MobileSource). The script copies the result's info into it. */
.info-sheet {
  position: fixed; inset: auto 0 0; inline-size: 100%; max-inline-size: 40rem; max-block-size: min(88dvh, 100%);
  margin: 0 auto; padding: 0.625rem var(--gutter-end) max(1.5rem, env(safe-area-inset-bottom, 0px)) var(--gutter);
  border: 0; border-radius: 20px 20px 0 0; background: var(--surface-raised); color: var(--ink);
  box-shadow: var(--shadow-dialog); overflow-y: auto; overscroll-behavior: contain;
}
.info-sheet::backdrop { background: var(--scrim); }
.info-sheet::before { content: ""; display: block; inline-size: 2.5rem; block-size: 0.25rem; margin: 0 auto 0.625rem; border-radius: 2px; background: var(--line-strong); }
.info-sheet .about-panel { margin: 0; padding: 0; border: 0; border-radius: 0; font-size: 0.90625rem; }
.info-sheet .ref-actions { flex-direction: column; }
.info-sheet .ref-actions .btn { min-height: 3rem; }
.info-close {
  position: absolute; inset-block-start: 1.5rem; inset-inline-end: var(--gutter-end);
  display: inline-grid; place-items: center; inline-size: 2.75rem; block-size: 2.75rem; padding: 0;
  border: 0; border-radius: var(--radius-pill); background: var(--surface-sunken); color: var(--ink);
}
.info-sheet .about-head { padding-inline-end: 3.25rem; }
html:has(.info-sheet[open]) { overflow: hidden; }

/* filters: one form, a modal <dialog> the script moves it into (a drawer
   from 48rem); without JS, #filtre opens in the flow above the results. */
.facets { display: none; grid-area: form; font-size: 0.9375rem; }
.facets:target {
  display: block; margin: 1rem 0; padding: 0 1rem; border: 1px solid var(--line);
  border-radius: var(--radius-lg); background: var(--surface-raised);
}
.facets-head {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  margin: 0 0 0.5rem; padding-block: 0.75rem; border-block-end: 1px solid var(--line);
}
.facets-head h2 { margin: 0; font-family: var(--font-display); font-size: 1.375rem; font-weight: 700; letter-spacing: -0.02em; }
.facets-close {
  display: inline-grid; place-items: center; flex: none; inline-size: 2.75rem; block-size: 2.75rem;
  border-radius: var(--radius-pill); background: var(--surface-sunken); color: var(--ink); text-decoration: none;
}
.facets-close:hover { background: var(--line); color: var(--ink); }
.facet { min-width: 0; margin: 0 0 1.25rem; padding: 0; border: 0; }
.facet legend { margin: 0 0 0.25rem; padding: 0; color: var(--ink); font-size: 0.8125rem; font-weight: 600; }
.check { display: flex; align-items: center; gap: 0.625rem; min-height: 3rem; line-height: 1.35; color: var(--ink); cursor: pointer; }
.check span { overflow-wrap: anywhere; }
.check input { flex: none; inline-size: 1.125rem; block-size: 1.125rem; margin: 0; accent-color: var(--ink); cursor: pointer; }
.check input:disabled + span { color: var(--ink-muted); }
.check:hover span { text-decoration: underline; text-decoration-color: var(--ink-muted); }
.facet-members { padding-inline-start: 1.75rem; }
.facets-note { margin: 0 0 1rem; color: var(--ink-muted); font-size: 0.75rem; line-height: 1.5; text-wrap: pretty; }
.facets-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1rem; padding-block: 0.75rem; }
.facets-apply {
  flex: 1 1 auto; min-height: 3rem; padding: 0 1.375rem; border: 1px solid var(--ink); border-radius: var(--radius-pill);
  background: var(--ink); color: var(--on-ink); font-weight: 600;
}
.facets-apply:hover { opacity: 0.88; }
.facets-clear { min-height: 2.75rem; padding: 0 0.25rem; border: 0; background: none; color: var(--ink-muted); text-decoration: underline; }
.facets-reset { color: var(--ink-muted); font-size: 0.875rem; white-space: nowrap; text-decoration: underline; }
/* With JS, "Ryd valg" is the form's one clear; "Fjern alle filtre" stays
   above the results. Unapplied choices are said out loud in the sheet. */
html.js .facets-reset { display: none; }
.facets-pending { display: none; flex-basis: 100%; margin: 0; color: var(--ink-muted); font-size: 0.8125rem; }
html.js .facets.is-dirty .facets-pending { display: block; }
.sheet {
  position: fixed; inset: 0; inline-size: auto; block-size: auto; max-inline-size: none; max-block-size: none;
  margin: 0; padding: 0; border: 0; background: var(--surface-raised); color: var(--ink); overscroll-behavior: contain;
}
.sheet::backdrop { background: var(--scrim); }
.sheet .facets { display: flex; flex-direction: column; min-block-size: 100%; padding: 0 var(--gutter-end) 0 var(--gutter); }
.sheet .facets-head, .sheet .facets-actions {
  position: sticky; z-index: 1; margin-inline: calc(-1 * var(--gutter)) calc(-1 * var(--gutter-end));
  padding-inline: var(--gutter) var(--gutter-end); background: var(--surface-raised);
}
.sheet .facets-head { top: 0; padding-block-start: max(0.75rem, env(safe-area-inset-top, 0px)); }
.sheet .facets-actions { bottom: 0; margin-block-start: auto; border-block-start: 1px solid var(--line); padding-block-end: max(0.75rem, env(safe-area-inset-bottom, 0px)); }
.sheet .facets-apply { flex: 1 1 12rem; }
.sheet .facet { margin-block-start: 0.75rem; }
html:has(.sheet[open]) { overflow: hidden; }
@media (min-width: 48rem) {
  .sheet { inset: 0 auto 0 0; inline-size: min(24rem, 100%); border-inline-end: 1px solid var(--line); box-shadow: var(--shadow-dialog); }
  .sheet .facets { padding-inline: max(1.5rem, env(safe-area-inset-left, 0px)) 1.5rem; }
  .sheet .facets-head, .sheet .facets-actions {
    margin-inline: calc(-1 * max(1.5rem, env(safe-area-inset-left, 0px))) -1.5rem;
    padding-inline: max(1.5rem, env(safe-area-inset-left, 0px)) 1.5rem;
  }
}

/* site box: the answer to a navigational query, a card with its shortcuts
   as tiles */
.site-box {
  margin: 0 0 var(--space-2); padding: 0.875rem var(--space-4); border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface-raised);
}
.site-box .result-heading { font-size: 1.25rem; }
@media (min-width: 64rem) {
  .serp.has-panel .site-box.is-selected { background: var(--water-soft); border-color: transparent; }
  html.js .serp.has-panel .site-box { cursor: pointer; }
}
.sitelinks { list-style: none; margin: 0.75rem 0 0.25rem; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); gap: var(--space-2); }
.sitelinks a {
  display: flex; align-items: center; min-height: 3rem; padding: 0.375rem 0.875rem; border-radius: var(--radius-md);
  background: var(--surface-sunken); color: var(--ink); font-size: 0.875rem; font-weight: 500; line-height: 1.3;
  overflow-wrap: anywhere; hyphens: auto;
}
.sitelinks a:hover { background: var(--line); color: var(--ink); text-decoration: none; }
.nav-destination { margin: 0 0 1.25rem; }

/* more results and supplementary results */
.more { margin: 1rem 0 2rem; }
.more-link {
  display: flex; align-items: center; justify-content: center; min-height: 3rem; padding: 0 1.5rem;
  border: 1px solid var(--line-strong); border-radius: var(--radius-pill); background: var(--surface-raised);
  color: var(--ink); font-weight: 600; font-size: 0.9375rem; text-decoration: none;
}
.more-link:hover { color: var(--ink); text-decoration: none; background: var(--surface-sunken); }
.more-link[aria-busy="true"] { color: var(--ink-muted); pointer-events: none; }
.result-external { margin: 0 0 1.25rem; }
.result-external .result-heading { font-size: 1.0625rem; }
.result-url { color: var(--ink-muted); min-width: 0; overflow-wrap: anywhere; white-space: normal; }
@media (min-width: 48rem) { .external, .more { margin-inline: var(--space-4); } }

/* no results and errors (design system, NoResults): heading-1, one plain
   line, chips for what to try next */
.zero, .error-page { display: flex; flex-direction: column; gap: var(--space-4); margin: 1.5rem 0 2.5rem; max-width: 40rem; }
@media (min-width: 48rem) { .zero { margin: 2.5rem var(--space-4) 3rem; } .error-page { margin-block-start: 3.5rem; } }
.zero-heading, .error-heading {
  margin: 0; font-family: var(--font-display); font-size: 1.625rem; font-weight: 700; line-height: 1.15; letter-spacing: -0.025em; text-wrap: balance; overflow-wrap: anywhere;
}
@media (min-width: 48rem) { .zero-heading, .error-heading { font-size: 1.875rem; } }
.zero-sub, .error-message { margin: 0; color: var(--ink); font-size: 0.9375rem; line-height: 1.6; text-wrap: pretty; }
.zero > .zero-sub:last-child { color: var(--ink-muted); font-size: 0.875rem; }
.zero-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); list-style: none; margin: 0; padding: 0; }
.error-page .search-form { margin: 0.5rem 0; }
.error-home { margin: 0; }
/* A streamed search that failed (error_fragment.html). */
.zero > p:first-child:not(.zero-sub) { margin: 0; font-family: var(--font-display); font-size: 1.625rem; font-weight: 700; line-height: 1.15; letter-spacing: -0.025em; }

/* debug banner (?debug=1 only) */
.test-status-banner {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.75rem; margin: 0 0 1rem;
  padding: 0.5rem 0.75rem; border-radius: var(--radius-md); background: var(--surface-sunken); font-size: 0.8125rem;
}
.test-status-banner .status-item { display: inline-flex; align-items: center; gap: 0.35rem; }
.test-status-banner .status-badge { font-weight: 600; }
.test-status-banner .status-divider { color: var(--ink-muted); }
.test-status-banner .status-active { font-weight: 600; }
.test-status-banner .status-fallback { font-weight: 600; text-decoration: underline dotted; }
.test-status-banner .status-meta, .test-status-banner .status-inactive { color: var(--ink-muted); }

/* text pages (crawler, rangering, source) */
.page { max-width: 40rem; margin: 2rem auto 0; line-height: 1.65; }
.page h1 { margin: 0 0 1rem; font-family: var(--font-display); font-size: 1.875rem; font-weight: 700; line-height: 1.15; letter-spacing: -0.025em; text-wrap: balance; }
.page h2 { margin: 2.25rem 0 0.5rem; font-family: var(--font-display); font-size: 1.375rem; font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; text-wrap: balance; }
.page h3 { margin: 1.5rem 0 0.4rem; font-size: 1rem; }
.page p, .page li { text-wrap: pretty; }
.weights-list, .stats-list { list-style: none; padding: 0; }
.weights-list li, .stats-list li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.8rem; padding-block: 0.15rem; font-variant-numeric: tabular-nums; }
.source-profile { margin-block-start: 1.5rem; border-block-start: 1px solid var(--line); }
.source-dimensions { margin-block: 0.4rem 0.75rem; font-size: 0.875rem; }
.source-dimensions div { display: grid; grid-template-columns: minmax(6rem, 1fr) 2.5fr; gap: 0.75rem; padding-block: 0.2rem; }
.source-dimensions dt { color: var(--ink-muted); }
.source-dimensions dd { margin: 0; }

/* About (mockup About): one statement, three principle cards, two-column
   sections, the schools band in ink */
.about-page { max-width: 68rem; margin: 0 auto; padding-block: var(--space-7) 0; }
.about-hero { display: flex; flex-direction: column; gap: 1.25rem; padding-block-end: var(--space-7); }
.about-statement { margin: 0; max-width: 51rem; font-family: var(--font-display); font-size: clamp(2.25rem, 7vw, 3.75rem); font-weight: 700; line-height: 1.05; letter-spacing: -0.035em; text-wrap: balance; }
.about-lead { margin: 0; max-width: 42.5rem; font-size: 1.125rem; line-height: 1.55; color: var(--ink); text-wrap: pretty; }
.about-principles { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr)); gap: var(--space-5); padding-block-end: var(--space-7); }
.about-card { display: flex; flex-direction: column; gap: 0.625rem; padding: 1.75rem; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface-raised); scroll-margin-top: 1rem; }
.about-card h2, .about-split h2 { margin: 0; font-family: var(--font-display); font-weight: 700; }
.about-card h2 { font-size: 1.375rem; line-height: 1.25; letter-spacing: -0.02em; }
.about-card p { margin: 0; font-size: 0.9375rem; line-height: 1.6; text-wrap: pretty; }
.about-split { display: grid; gap: var(--space-4) var(--space-8); padding-block-end: var(--space-7); }
.about-split h2 { font-size: 1.875rem; line-height: 1.15; letter-spacing: -0.025em; text-wrap: balance; }
.about-prose { display: flex; flex-direction: column; gap: var(--space-4); max-width: 38.75rem; font-size: 1rem; line-height: 1.65; }
.about-prose p { margin: 0; text-wrap: pretty; }
@media (min-width: 64rem) { .about-split { grid-template-columns: 18.75rem minmax(0, 1fr); } }
.about-schools {
  display: grid; gap: var(--space-6); align-items: center; margin-block-end: var(--space-7);
  padding: clamp(2rem, 6vw, 4.5rem) clamp(1.25rem, 6vw, 4.5rem); border-radius: 20px; background: var(--ink); color: var(--on-ink);
}
.about-schools-text { display: flex; flex-direction: column; gap: 1.125rem; }
.about-kicker { margin: 0; font-size: 0.8125rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; }
.about-schools h2 { margin: 0; font-family: var(--font-display); font-size: clamp(1.875rem, 5vw, 2.75rem); font-weight: 700; line-height: 1.08; letter-spacing: -0.03em; }
.about-schools-text > p:last-child { margin: 0; max-width: 32.5rem; font-size: 1.0625rem; line-height: 1.6; }
.about-ref { display: flex; flex-direction: column; gap: 0.75rem; padding: 1.375rem; border-radius: var(--radius-lg); background: var(--surface-raised); color: var(--ink); }
@media (min-width: 64rem) { .about-schools { grid-template-columns: minmax(0, 1fr) 26.25rem; gap: var(--space-8); } }

@media (prefers-reduced-motion: no-preference) {
  .btn, .chip-face, .more-link, .search-field, .panel-btn, .result { transition: background-color 120ms ease-out, border-color 120ms ease-out, color 120ms ease-out, opacity 120ms ease-out; }
}
@media (forced-colors: active) {
  .search-field, .chip-face, .more-link, .site-box, .about-panel, .source-panel, .notice, .tag, .btn, .facets-apply, .about-card, .info-sheet { border: 1px solid CanvasText; }
  .wm-u { forced-color-adjust: none; background: none; color: CanvasText; }
  .why-track { forced-color-adjust: none; border: 1px solid CanvasText; background: Canvas; }
  .why-track::before { background: CanvasText; }
  .chip.is-on .chip-face, .chip-selected .chip-face { forced-color-adjust: none; background: SelectedItem; color: SelectedItemText; border-color: SelectedItem; }
  mark { background: Mark; color: MarkText; }
  :focus-visible, .chip:focus-visible .chip-face, .search-field:focus-within { outline-color: Highlight; }
  html.js .serp.has-panel .panel-btn { opacity: 1; }
  html.js .serp.has-panel .result-source { padding-inline-end: 8.75rem; }
  /* The icons are masks over a background colour, which forced colours
     would paint as the page background. */
  .about > summary::before { forced-color-adjust: none; background: ButtonText; }
  .about[open] > summary::before { background: Highlight; }
}
@media (forced-colors: active) and (min-width: 64rem) {
  /* Only beside the panel is a result "selected". */
  html:not(.panel-off) .serp.has-panel .result.is-selected { outline: 2px solid Highlight; }
}
@media print {
  .site-header, .site-footer, .filter-bar, .facets, .source-panel, .applied, .applied-note, .about, .panel-btn, .more, .skip-link, .skip-to { display: none !important; }
  .serp { display: block; margin: 0; max-width: none; padding: 0; }
  .results > .result { margin: 0; padding: 0 0 1rem; border: 0; }
  .result-title::after { content: " – " attr(href); overflow-wrap: anywhere; font-family: var(--font-text); font-size: 0.75rem; color: var(--ink-muted); }
}
/* Short phones: header and quick filters would take a quarter of the
   screen, so the filters scroll away with the page. */
@media (max-height: 40rem) {
  .serp > .filter-bar { position: static; }
  html:has(.results-page .serp > .filter-bar) { scroll-padding-top: calc(var(--header-h) + 0.75rem); }
}
/* Short viewports (landscape phones, 400 % zoom): sticky chrome would cover
   most of the screen, so everything scrolls as one page. */
@media (max-height: 30rem) {
  .results-page .site-header, .serp > .filter-bar, .sheet .facets-head, .sheet .facets-actions { position: static; }
  .serp.has-panel .source-panel { position: static; max-height: none; overflow: visible; }
  html:has(.results-page), html:has(.results-page .serp > .filter-bar) { scroll-padding-top: 1rem; }
}

/* /gpt keeps its own gpt.css; these are the v1 base rules it builds on */
.gpt-page main { margin-inline: auto; }
.gpt-page button { padding: 0.55rem 1.1rem; border: 1px solid var(--ink); border-radius: var(--radius-md); background: var(--ink); color: var(--on-ink); }
.gpt-page .quiet-button { background: var(--surface); color: var(--ink); border-color: var(--line); }
.wordmark-big { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.035em; margin: 0; }
.tagline { color: var(--ink-muted); }
.page-lead { font-size: 1.125rem; line-height: 1.55; }
.page pre { overflow-x: auto; padding: 0.75rem 1rem; border-radius: var(--radius-md); background: var(--surface-sunken); font-size: 0.875rem; }

/* /deltag: a visual explanation, then one platform's installation guide. */
.donor-page { max-width: 62rem; margin-block-start: 3rem; }
.donor-hero { max-width: 42rem; margin-block-end: 2.5rem; }
.donor-hero h1 { font-size: clamp(2rem, 5vw, 3.25rem); line-height: 1.08; letter-spacing: -0.035em; }
.donor-hero .page-lead { max-width: 37rem; margin-block: 1rem; }
.donor-flow { padding: 1.75rem; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--surface-raised); }
.donor-flow h2 { margin: 0 0 1.75rem; font-size: 1.125rem; }
.donor-flow-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 3rem; list-style: none; margin: 0; padding: 0; }
.donor-flow-steps > li { position: relative; min-width: 0; }
.donor-flow-arrow { position: absolute; inset-inline-start: -2.125rem; top: 2rem; color: var(--ink-muted); font-size: 1.5rem; }
.donor-flow-arrow::before { content: '→'; }
.donor-illustration { display: flex; align-items: center; gap: 1rem; min-height: 5rem; }
.donor-illustration svg { width: 4.5rem; height: 4.5rem; flex-shrink: 0; }
.donor-file { color: var(--ink-muted); font-size: 0.75rem; font-weight: 600; }
.donor-flow-steps h3 { margin: 1rem 0 0.375rem; font-size: 1rem; }
.donor-flow-steps p { margin: 0; font-size: 0.875rem; line-height: 1.55; color: var(--ink-muted); }
.donor-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.75rem; list-style: none; margin: 1.75rem 0 3rem; padding: 0; }
.donor-facts li { display: flex; align-items: flex-start; gap: 0.75rem; color: var(--ink-muted); font-size: 0.875rem; line-height: 1.55; }
.donor-facts svg { width: 1.75rem; height: 1.75rem; flex-shrink: 0; color: var(--ink); }
.donor-facts strong { display: block; color: var(--ink); font-weight: 600; margin-block-end: 0.25rem; }
.donor-setup, .donor-help { max-width: 48rem; }
.donor-setup h2, .donor-help h2 { margin: 0 0 0.5rem; font-size: 1.625rem; scroll-margin-top: 1.5rem; }
.donor-soon { padding: 0.75rem 1rem; border-radius: var(--radius-md); background: var(--water-soft); }
.donor-tabs { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-block: 1.5rem; }
.donor-tabs [role="tab"] { min-height: 2.75rem; padding: 0 1.125rem; border: 1px solid var(--line-strong); border-radius: var(--radius-pill); background: var(--surface-raised); font-weight: 600; }
.donor-tabs [aria-selected="true"] { background: var(--ink); color: var(--on-ink); border-color: var(--ink); }
.donor-panel h3 { margin-block-start: 0.5rem; }
.donor-enhanced .donor-panel h3, .donor-copy-status { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.donor-install-steps { list-style: none; margin: 0; padding: 0; }
.donor-install-steps > li { display: flex; align-items: flex-start; gap: 1rem; padding-block: 1.25rem; }
.donor-install-steps > li + li { border-block-start: 1px solid var(--line); }
.donor-step-number { display: grid; place-items: center; width: 2rem; height: 2rem; flex-shrink: 0; border-radius: 50%; background: var(--ink); color: var(--on-ink); font-size: 0.875rem; font-weight: 600; }
.donor-install-steps > li > div { min-width: 0; flex: 1; }
.donor-install-steps > li > svg { width: 2.75rem; height: 2.75rem; color: var(--ink-muted); flex-shrink: 0; }
.donor-install-steps h4 { margin: 0 0 0.375rem; font-size: 1rem; font-weight: 600; }
.donor-install-steps p { margin: 0; color: var(--ink-muted); font-size: 0.9375rem; }
.donor-page kbd { border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 0.1rem 0.3rem; background: var(--surface-raised); font: 0.8125rem var(--mono); color: var(--ink); }
.donor-panel-link { display: inline-flex; align-items: center; gap: 0.5rem; min-height: 2.75rem; margin-block-start: 0.5rem; font-size: 0.9375rem; }
.donor-command { display: flex; align-items: stretch; gap: 0.5rem; margin-block: 0.75rem 0; }
.donor-command pre { flex: 1; min-width: 0; margin: 0; }
.donor-command code { color: var(--ink); white-space: pre-wrap; overflow-wrap: anywhere; }
.donor-command .btn { width: 8.5rem; flex-shrink: 0; min-height: 2.75rem; padding: 0 1rem; align-self: flex-start; }
.donor-copy:disabled { opacity: 0.5; cursor: not-allowed; }
.donor-note { color: var(--ink-muted); font-size: 0.9375rem; }
.donor-help { margin-block: 2.5rem 2rem; }
.donor-help details { border-block-end: 1px solid var(--line); }
.donor-help summary { padding-block: 1rem; font-weight: 600; cursor: pointer; }
.donor-help-body { max-width: 43rem; padding-block-end: 1rem; font-size: 0.9375rem; }
.donor-help-body p { margin-block: 0.5rem 0.75rem; }
.donor-help-body code { overflow-wrap: anywhere; }
.donor-live { display: flex; align-items: center; gap: 0.5rem; margin-block: 1.25rem; color: var(--ink-muted); font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
.donor-live strong { color: var(--ink); }
.donor-online-dot { width: 0.375rem; height: 0.375rem; flex-shrink: 0; border-radius: 50%; background: currentColor; }
@media (max-width: 45rem) {
  .donor-page { margin-block-start: 2rem; }
  .donor-flow { padding: 1.25rem; }
  .donor-flow-steps { grid-template-columns: 1fr; gap: 1.75rem; }
  .donor-flow-steps > li { display: grid; grid-template-columns: 4rem minmax(0, 1fr); gap: 0 1rem; }
  .donor-illustration { grid-row: span 2; min-height: 0; }
  .donor-illustration svg { width: 3.5rem; height: 3.5rem; }
  .donor-file { display: none; }
  .donor-flow-steps h3 { margin-block: 0 0.25rem; }
  .donor-flow-arrow { inset-inline-start: 1.5rem; top: -1.6rem; font-size: 1rem; }
  .donor-flow-arrow::before { content: '↓'; }
  .donor-facts { grid-template-columns: 1fr; gap: 1.125rem; margin-block-end: 2.5rem; }
  .donor-command { flex-direction: column; }
  .donor-command .btn { width: 100%; }
  .donor-install-steps > li > svg { display: none; }
}
@media (max-width: 30rem) { .donor-install-steps > li { gap: 0.75rem; } }
@media (max-width: 47.99rem) { .results-page .site-footer { margin-block-start: 0; } }
