/* Editorial stylesheet. Tokens first; every colour pair used for text meets WCAG AA
   in both schemes (checked by tests/contrast.test.mjs). Fonts are self-hosted (no
   request leaves the site): Newsreader for headings, the system sans for text. */

@font-face { font-family: "Newsreader"; src: url("/assets/fonts/newsreader-roman.woff2") format("woff2"); font-weight: 400 700; font-style: normal; font-display: swap; }
@font-face { font-family: "Newsreader"; src: url("/assets/fonts/newsreader-italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; }

:root {
  --paper: #f7f5f0;
  --paper-2: #eeeae0;
  --paper-3: #fffdf8;
  --ink: #1b2230;
  --ink-2: #3a4252;
  --muted: #59606e;
  --rule: #d6cfc0;
  --rule-strong: #1b2230;
  --accent: #24477f;
  --accent-hover: #17325e;
  --accent-soft: #e2e8f2;
  --chart-auracast: #0072b2;
  --chart-loops: #007d60;
  --chart-infrared: #a94f00;
  --chart-rf: #aa4880;
  --chart-wifi: #806600;
  --chart-shared: #59606e;

  --timeline-published: #24477f;
  --timeline-draft: #805900;
  --timeline-withdrawn: #7c326c;

  --st-open-fg: #474d58;      --st-open-bg: #e6e3db;
  --st-disputed-fg: #6b2b5c;  --st-disputed-bg: #f1e2ec;
  --st-partly-fg: #664500;    --st-partly-bg: #f3e6c6;
  --st-notyet-fg: #8a2b1c;    --st-notyet-bg: #f5dfd8;
  --st-settled-fg: #23573a;   --st-settled-bg: #dbede0;
  --maker-fg: #7a3a10;        --maker-bg: #fbecdf;  --maker-line: #c08a62;

  --serif: "Newsreader", "Iowan Old Style", "Charter", "Georgia", "Times New Roman", serif;
  --sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --measure: 41rem;
  --gutter: clamp(1rem, 4vw, 2.5rem);
  color-scheme: light dark;
}

@media (prefers-color-scheme: dark) {
  :root {
    --paper: #14171c;
    --paper-2: #1c2027;
    --paper-3: #0f1216;
    --ink: #ece8df;
    --ink-2: #d0cbc0;
    --muted: #aaa59a;
    --rule: #363c47;
    --rule-strong: #7d786e;
    --accent: #a9c1ef;
    --accent-hover: #cbdaf7;
    --accent-soft: #222c3d;
    --chart-auracast: #56b4e9;
    --chart-loops: #38bc98;
    --chart-infrared: #ee9955;
    --chart-rf: #dc8ebf;
    --chart-wifi: #e6cf68;
    --chart-shared: #aaa59a;

    --timeline-published: #a9c1ef;
    --timeline-draft: #edcb7f;
    --timeline-withdrawn: #ecbcdf;

    --st-open-fg: #d6d2c9;      --st-open-bg: #2a2e35;
    --st-disputed-fg: #ecbcdf;  --st-disputed-bg: #3a2335;
    --st-partly-fg: #edcb7f;    --st-partly-bg: #382d14;
    --st-notyet-fg: #f4ad9c;    --st-notyet-bg: #40231c;
    --st-settled-fg: #a2dab5;   --st-settled-bg: #1c3426;
    --maker-fg: #f2bd8f;        --maker-bg: #3a2516;  --maker-line: #8f5f3a;
  }
}

*, *::before, *::after { box-sizing: border-box; }
/* The hidden attribute always wins, whatever display a component sets. */
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font: 400 1.0625rem/1.6 var(--sans);
  font-optical-sizing: auto;
  text-rendering: optimizeLegibility;
  overflow-wrap: break-word;
}
img, svg { max-width: 100%; }
h1, h2, h3, h4 { font-family: var(--serif); font-weight: 560; line-height: 1.15; color: var(--ink); margin: 0; text-wrap: balance; }
h1 { font-size: clamp(2rem, 1.35rem + 2.6vw, 3.1rem); letter-spacing: -0.012em; font-weight: 520; }
h2 { font-size: clamp(1.4rem, 1.2rem + 0.8vw, 1.75rem); }
h3 { font-size: 1.2rem; }
p { margin: 0 0 1em; }
a { color: var(--accent); text-decoration-thickness: 1px; text-underline-offset: 0.18em; }
a:hover { color: var(--accent-hover); text-decoration-thickness: 2px; }
:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; border-radius: 2px; }
code { font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 0.9em; }
input::placeholder { color: var(--muted); opacity: 1; }
.nowrap { white-space: nowrap; }
main:focus { outline: none; }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.print-only { display: none; }

.skip-link { position: absolute; left: 1rem; top: -4rem; z-index: 10; background: var(--ink); color: var(--paper); padding: 0.6rem 1rem; border-radius: 0 0 4px 4px; }
.skip-link:focus { top: 0; color: var(--paper); }

.wrap { max-width: 74rem; margin: 0 auto; padding: 0 var(--gutter); }

/* ---------------------------------------------------------------- masthead */
.masthead { border-top: 4px solid var(--rule-strong); border-bottom: 1px solid var(--rule); background: var(--paper); }
.masthead-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.5rem 2rem; padding-top: 0.9rem; padding-bottom: 0.9rem; }
.wordmark { display: inline-flex; align-items: center; gap: 0.6rem; color: var(--ink); text-decoration: none; }
.wordmark:hover { color: var(--ink); }
.wordmark-name { font-family: var(--serif); font-size: 1.45rem; font-weight: 560; letter-spacing: -0.008em; line-height: 1; }
.wm-line { white-space: nowrap; }
/* The Archway mark: piers in ink, the arch in the accent. */
.mark { width: 2.35rem; height: 2.35rem; flex: none; }
.mark .mark-piers { fill: currentColor; }
.mark .mark-arch { fill: var(--accent); }
/* Stacked lockup (footer, and the header on phones): two equal lines, the mark spanning both. */
.wordmark-small { gap: 0.55rem; }
.wordmark-small .mark { width: 2.7rem; height: 2.7rem; }
.wordmark-small .wordmark-name { font-size: 1.2rem; line-height: 1.05; }
.wordmark-small .wm-line { display: block; }
.site-nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.15rem 1.35rem; }
.site-nav a { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.35rem 0; color: var(--ink-2); text-decoration: none; font-weight: 500; border-bottom: 2px solid transparent; }
.site-nav a:hover { color: var(--ink); border-bottom-color: var(--rule); }
.site-nav a[aria-current] { color: var(--ink); border-bottom-color: var(--accent); }
.site-nav svg { width: 1rem; height: 1rem; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; }
@media (max-width: 40rem) {
  .masthead-inner { padding-top: 0.75rem; padding-bottom: 0.4rem; }
  .wordmark { gap: 0.55rem; }
  .wordmark .mark { width: 2.7rem; height: 2.7rem; }
  .wordmark-name { font-size: 1.2rem; line-height: 1.05; }
  .wm-line { display: block; }
  .site-nav { width: 100%; }
  .site-nav ul { display: grid; grid-template-columns: repeat(3, max-content); gap: 0 1.6rem; }
}
@media (max-width: 22rem) {
  .site-nav ul { grid-template-columns: repeat(2, max-content); }
  .site-nav a { font-size: 0.98rem; padding: 0.3rem 0; }
}

/* ---------------------------------------------------------------- page heads and shared text */
.page-head { padding: clamp(1.75rem, 4vw, 3rem) 0 clamp(1.25rem, 3vw, 2rem); border-bottom: 1px solid var(--rule); }
.page-head h1 { max-width: 22em; }
.page-head .lede { max-width: var(--measure); }
.lede { font-size: 1.2rem; line-height: 1.5; color: var(--ink-2); margin-top: 0.9rem; }
.kicker { font-size: 0.8rem; font-weight: 600; letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted); margin: 0 0 0.7rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
.meta { font-size: 0.92rem; color: var(--muted); margin: 0; }
/* Lists with a "·" between items. Every item draws the dot in front of itself and is
   pulled left by the dot's width, while the gap between items puts that width back. The
   first item on each line has no gap before it, so its dot falls outside the list and is
   clipped: a wrapped line never starts or ends with a separator. The small padding keeps
   focus rings visible. */
.sep-list { list-style: none; margin: 0 0 0 -0.3em; padding: 0 0 0 0.3em; display: flex; flex-wrap: wrap; align-items: center; column-gap: 1.1em; row-gap: 0.2rem; overflow-x: clip; }
.sep-list > li { position: relative; margin: 0 0 0 -1.1em; padding: 0 0 0 1.1em; }
.sep-list > li::before { content: "·"; position: absolute; left: 0; width: 1.1em; text-align: center; color: var(--muted); font-weight: 400; letter-spacing: 0; }
.kicker.sep-list { column-gap: 1.1em; margin: 0 0 0.7rem -0.3em; }
.meta-item { white-space: nowrap; }
.funding-line { margin-top: 0.6rem; }
.breadcrumb ol { list-style: none; margin: 0 0 1.1rem; padding: 0; display: flex; flex-wrap: wrap; font-size: 0.9rem; color: var(--muted); }
.breadcrumb li + li::before { content: "/"; padding: 0 0.5em; color: var(--rule); }
.breadcrumb a { color: var(--muted); }
.breadcrumb [aria-current] { color: var(--ink-2); }
.breadcrumb li:last-child { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 40rem) { .breadcrumb li:last-child:not(:first-child) { display: none; } }
.more-link { font-weight: 600; text-decoration: none; }
.more-link::after { content: " →"; }
.more-link:hover { text-decoration: underline; }

.status, .funding { display: inline-block; font-family: var(--sans); font-size: 0.78rem; font-weight: 650; letter-spacing: 0.03em; line-height: 1.2; padding: 0.2rem 0.5rem; border-radius: 3px; white-space: nowrap; text-transform: none; vertical-align: 0.1em; }
.status-open { color: var(--st-open-fg); background: var(--st-open-bg); }
.status-disputed { color: var(--st-disputed-fg); background: var(--st-disputed-bg); }
.status-partly-answered { color: var(--st-partly-fg); background: var(--st-partly-bg); }
.status-not-reliable-yet { color: var(--st-notyet-fg); background: var(--st-notyet-bg); }
.status-settled { color: var(--st-settled-fg); background: var(--st-settled-bg); }
.funding { color: var(--ink-2); border: 1px solid var(--rule); background: transparent; font-weight: 600; }
.funding-manufacturer { color: var(--maker-fg); background: var(--maker-bg); border-color: var(--maker-line); }
.funding-detail { color: var(--muted); font-size: 0.9em; }

/* ---------------------------------------------------------------- sections with a side label (home, about) */
.band { padding: clamp(2rem, 5vw, 3.5rem) 0; border-bottom: 1px solid var(--rule); }
.band-alt { background: var(--paper-2); }
.split-section { display: grid; gap: 1.25rem 3rem; }
@media (min-width: 60rem) { .split-section { grid-template-columns: 15rem minmax(0, 1fr); } }
.section-label h2 { font-size: 1.5rem; }
.section-label p { color: var(--muted); font-size: 0.95rem; margin: 0.6rem 0 0.8rem; }

/* ---------------------------------------------------------------- home */
.intro { display: grid; gap: 2rem 3.5rem; padding-top: clamp(2rem, 5vw, 3.75rem); padding-bottom: clamp(2rem, 5vw, 3.25rem); }
@media (min-width: 60rem) { .intro { grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); align-items: start; } }
.intro h1 { font-size: clamp(2.1rem, 1.3rem + 3.2vw, 3.5rem); max-width: 15em; }
.intro .lede { max-width: 36rem; }
.intro-facts { display: flex; flex-wrap: wrap; gap: 0.25rem 1.75rem; margin: 1.5rem 0 0; padding: 0.9rem 0 0; border-top: 1px solid var(--rule); list-style: none; font-size: 0.95rem; color: var(--muted); }
.intro-facts strong { font-family: var(--serif); font-size: 1.5rem; font-weight: 560; color: var(--ink); margin-right: 0.3rem; }
.latest-updates { border-top: 3px solid var(--rule-strong); padding-top: 0.9rem; }
.latest-updates h2 { font-size: 1.3rem; }
.audience-links { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.6rem; margin: 1.25rem 0 0; font-size: 1rem; }
.audience-links p { margin: 0; font-weight: 650; color: var(--ink-2); }
.audience-links a { font-weight: 600; }
.headlines { list-style: none; margin: 0.6rem 0 0; padding: 0; }
.headlines li { padding: 0.8rem 0; border-bottom: 1px solid var(--rule); display: grid; grid-template-columns: 3.6rem minmax(0, 1fr); gap: 0.75rem; }
.headlines li:last-child { border-bottom: 0; }
.headlines time { font-size: 0.85rem; font-weight: 600; color: var(--muted); padding-top: 0.15rem; white-space: nowrap; }
.headlines a { font-family: var(--serif); font-size: 1.08rem; font-weight: 560; line-height: 1.3; color: var(--ink); text-decoration: none; }
.headlines a:hover { color: var(--accent); text-decoration: underline; }
.headlines p { margin: 0.3rem 0 0; font-size: 0.93rem; color: var(--ink-2); line-height: 1.5; }

.status-groups { margin: 0; padding: 0; list-style: none; }
.status-group { display: grid; gap: 0.5rem 2rem; padding: 1rem 0 1.1rem; border-top: 1px solid var(--rule); }
.status-group:first-child { border-top: 3px solid var(--rule-strong); }
@media (min-width: 44rem) { .status-group { grid-template-columns: 12rem minmax(0, 1fr); } }
.status-group-head p { margin: 0.45rem 0 0; font-size: 0.88rem; color: var(--muted); line-height: 1.45; }
.status-group-head .count { font-family: var(--serif); font-size: 1.05rem; color: var(--ink); margin-left: 0.4rem; }
.title-list { list-style: none; margin: 0; padding: 0; columns: 2 20rem; column-gap: 2.5rem; }
.title-list li { break-inside: avoid; padding: 0.15rem 0 0.55rem; }
.title-list a, .path a { font-family: var(--serif); font-size: 1.08rem; line-height: 1.32; color: var(--ink); text-decoration-color: var(--rule); }
.title-list a:hover, .path a:hover { color: var(--accent); text-decoration-color: currentColor; }

.paths { display: grid; gap: 0 2.5rem; margin: 0; padding: 0; list-style: none; }
@media (min-width: 44rem) { .paths { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.path { border-top: 1px solid var(--rule); padding: 1rem 0 1.2rem; }
.path h3 { font-size: 1.25rem; }
.path > p { font-size: 0.92rem; color: var(--muted); margin: 0.3rem 0 0.6rem; }
.path ul { margin: 0; padding: 0 0 0 1.1rem; list-style: square; }
.path li { padding: 0.15rem 0 0.4rem; }
.path li::marker { color: var(--muted); font-size: 0.8rem; }

.source-list { list-style: none; margin: 0; padding: 0; }
.source-list > li { padding: 1rem 0 1.15rem; border-top: 1px solid var(--rule); }
.source-list > li:first-child { border-top: 3px solid var(--rule-strong); }
.source-list h3, .source-list h2 { font-size: 1.18rem; line-height: 1.3; margin: 0.35rem 0 0.4rem; }
.source-list h3 a, .source-list h2 a { color: var(--ink); text-decoration: none; }
.source-list h3 a:hover, .source-list h2 a:hover { color: var(--accent); text-decoration: underline; }
.source-list p { margin: 0 0 0.35rem; max-width: 46rem; }
.source-list .meta { row-gap: 0.3rem; }

.signup-band { display: grid; gap: 1.25rem 3rem; align-items: center; }
@media (min-width: 52rem) { .signup-band { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.signup-band h2 { margin-bottom: 0.6rem; }
.signup-band p { color: var(--ink-2); max-width: 34rem; }
.signup fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.signup label { display: block; font-weight: 600; font-size: 0.95rem; margin-bottom: 0.35rem; }
.signup-row { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.signup input { flex: 1 1 14rem; min-width: 0; font: inherit; padding: 0.6rem 0.75rem; border: 1px solid var(--muted); border-radius: 3px; background: var(--paper-3); color: var(--ink); }
.signup button, .button { font: inherit; font-weight: 650; padding: 0.6rem 1.1rem; border: 1px solid var(--ink); border-radius: 3px; background: var(--ink); color: var(--paper); cursor: pointer; }
.signup button:hover, .button:hover { background: var(--accent-hover); border-color: var(--accent-hover); }
.signup fieldset:disabled input, .signup fieldset:disabled button { opacity: 0.55; cursor: not-allowed; }
.signup fieldset:disabled button:hover { background: var(--ink); border-color: var(--ink); }
.signup-note { margin: 0.6rem 0 0; font-size: 0.92rem; color: var(--ink-2); }
/* Contribute and follow forms. */
.queue-form { display: grid; gap: 1.1rem; margin: 1rem 0 0; }
.queue-form .field label, .queue-form legend, .follow-form > label { display: block; font-weight: 600; font-size: 0.95rem; margin-bottom: 0.35rem; color: var(--ink); }
.queue-form .optional { font-weight: 400; color: var(--muted); }
.queue-form input[type="text"], .queue-form input[type="email"], .queue-form input[type="url"], .queue-form select, .queue-form textarea { width: 100%; min-height: 2.75rem; font: inherit; padding: 0.55rem 0.7rem; border: 1px solid var(--muted); border-radius: 3px; background: var(--paper-3); color: var(--ink); }
.queue-form textarea { resize: vertical; line-height: 1.5; }
.queue-form [aria-invalid="true"] { border-color: var(--st-notyet-fg); }
.queue-form fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }
.kind-choice label, .queue-form .check { display: flex; gap: 0.55rem; align-items: baseline; padding: 0.2rem 0; font-weight: 400; }
.kind-choice input, .queue-form .check input { accent-color: var(--accent); width: 1.05rem; height: 1.05rem; flex: none; position: relative; top: 0.15rem; }
.field-row { display: grid; gap: 1.1rem; }
@media (min-width: 36rem) { .field-row { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.field-hint, .form-note { margin: 0 0 0.45rem; font-size: 0.9rem; color: var(--ink-2); }
.form-note { margin: 0; }
.field-error { margin: 0.35rem 0 0; font-size: 0.92rem; font-weight: 600; color: var(--st-notyet-fg); }
.form-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1rem; }
.queue-form button { font: inherit; font-weight: 650; padding: 0.6rem 1.3rem; border: 1px solid var(--ink); border-radius: 3px; background: var(--ink); color: var(--paper); cursor: pointer; }
.queue-form button:hover { background: var(--accent-hover); border-color: var(--accent-hover); }
.queue-form button:disabled { opacity: 0.6; cursor: progress; }
.form-status { margin: 0; font-weight: 600; color: var(--ink-2); }
.form-status:empty { display: none; }
main[lang="de"] { hyphens: auto; overflow-wrap: break-word; }
.de-questions { list-style: none; padding: 0; margin: 1rem 0 0; display: grid; gap: 1.6rem; }
.de-question h3 { margin: 0.3rem 0 0.4rem; font-size: 1.2rem; }
.de-question h3 a { color: var(--ink); }
.de-question p { margin: 0 0 0.4rem; }
.de-more { font-size: 0.92rem; color: var(--muted); }
.follow-form { margin-top: 2rem; padding: 1rem 1.1rem; border-left: 4px solid var(--accent); background: var(--paper-3); gap: 0.6rem; }
.follow-form input[type="email"] { flex: 1 1 14rem; width: auto; }
/* The honeypot: out of sight and out of the tab order; people never see it. */
.hp { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.signup-status { padding: 1rem 1.1rem; border-left: 4px solid var(--accent); background: var(--paper-3); }
.signup-status p { margin: 0 0 0.75rem; color: var(--ink-2); }
.signup-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1.25rem; margin: 0 !important; }
a.button { display: inline-block; text-decoration: none; }
a.button:hover { color: var(--paper); }

/* ---------------------------------------------------------------- tracker and evidence lists */
.toolbar { display: grid; gap: 0.9rem; padding: 1.25rem 0 1rem; }
/* The evidence filters sit in a panel: closed on phones (src/site.js), always open on
   wider screens, where its summary is not shown. */
.filter-panel > summary { display: inline-flex; align-items: center; gap: 0.4rem; cursor: pointer; font-weight: 650; font-size: 0.95rem; color: var(--ink); padding: 0.5rem 0.8rem; border: 1px solid var(--muted); border-radius: 3px; background: var(--paper-3); list-style: none; }
.filter-panel > summary::-webkit-details-marker { display: none; }
.filter-panel > summary::after { content: "▾"; color: var(--muted); }
.filter-panel[open] > summary::after { content: "▴"; }
.filter-panel[open] > summary { margin-bottom: 0.75rem; }
.filter-active { color: var(--muted); font-weight: 600; }
@media (min-width: 40rem) { .filter-panel > summary { display: none; } }
.search-field label, .filter-field label, .toolbar-label { display: block; font-size: 0.85rem; font-weight: 650; color: var(--ink-2); margin-bottom: 0.3rem; }
.search-field { max-width: 36rem; }
/* The question tracker's search and technology filter share a row on wider screens. */
.toolbar-row { display: flex; flex-wrap: wrap; align-items: end; gap: 0.75rem 1rem; }
.toolbar-row .search-field { flex: 1 1 18rem; }
.toolbar-row .filter-field { flex: 0 1 15rem; min-width: 11rem; }
.search-field input, .filter-field select { min-height: 2.75rem; width: 100%; font: inherit; padding: 0.55rem 0.7rem; border: 1px solid var(--muted); border-radius: 3px; background: var(--paper-3); color: var(--ink); }
.filters { display: grid; gap: 0.75rem; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); }
@media (max-width: 39.99rem) { .filters { grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr)); } }
.filter-field select option:disabled { color: var(--muted); }
.status-filter { display: flex; flex-wrap: wrap; gap: 0.45rem; }
.status-filter button { font: inherit; font-size: 0.9rem; font-weight: 600; padding: 0.35rem 0.7rem; border-radius: 3px; border: 1px solid var(--muted); background: transparent; color: var(--ink); cursor: pointer; display: inline-flex; align-items: center; gap: 0.45rem; }
.status-filter button:disabled { cursor: default; opacity: 0.6; }
.toolbar-hint { font-weight: 400; color: var(--muted); }
.status-filter button .status { font-size: 0.75rem; }
.status-filter button[aria-pressed="true"] { border-color: var(--ink); box-shadow: inset 0 0 0 1px var(--ink); background: var(--paper-3); }
.toolbar-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.5rem 1rem; font-size: 0.92rem; color: var(--muted); }
.link-button { font: inherit; font-size: 0.92rem; color: var(--accent); background: none; border: 0; padding: 0; text-decoration: underline; cursor: pointer; }
.empty { padding: 1.5rem 0; color: var(--ink-2); }

.question-list { list-style: none; margin: 0; padding: 0; counter-reset: q; }
.question-list > li { display: grid; gap: 0.35rem 2rem; padding: 1.15rem 0 1.25rem; border-top: 1px solid var(--rule); }
.question-list > li:first-child { border-top: 3px solid var(--rule-strong); }
@media (min-width: 48rem) { .question-list > li { grid-template-columns: 10rem minmax(0, 1fr); } }
.question-list h2 { font-size: 1.35rem; line-height: 1.25; margin-bottom: 0.4rem; }
.question-list h2 a { color: var(--ink); text-decoration: none; }
.question-list h2 a:hover { color: var(--accent); text-decoration: underline; }
.question-list p { margin: 0 0 0.45rem; max-width: 46rem; color: var(--ink-2); }
.question-list .status-cell { padding-top: 0.3rem; }

/* ---------------------------------------------------------------- reading pages (questions, evidence, about) */
.reading { display: grid; gap: 1.5rem 3.5rem; padding-top: clamp(1.5rem, 4vw, 2.5rem); padding-bottom: clamp(2.5rem, 6vw, 4rem); }
@media (min-width: 62rem) { .reading { grid-template-columns: 13.5rem minmax(0, var(--measure)); } .reading-aside-right { grid-template-columns: minmax(0, var(--measure)) 15rem; } }
.toc { font-size: 0.92rem; }
@media (min-width: 62rem) { .toc { position: sticky; top: 1.25rem; align-self: start; } }
.toc-title { font-size: 0.8rem; font-weight: 650; letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted); margin: 0 0 0.5rem; }
.toc ol { list-style: none; margin: 0; padding: 0; border-left: 1px solid var(--rule); }
.toc li a { display: block; padding: 0.25rem 0 0.25rem 0.85rem; color: var(--ink-2); text-decoration: none; line-height: 1.35; }
.toc li a:hover { color: var(--accent); text-decoration: underline; }
.toc .toc-num { color: var(--muted); font-variant-numeric: tabular-nums; margin-right: 0.35rem; }
.toc .toc-sub { border-left: 0; margin: 0 0 0.35rem 1.45rem; }
.toc .toc-sub a { font-size: 0.86rem; padding: 0.12rem 0 0.12rem 0.6rem; border-left: 1px solid var(--rule); }
@media (max-width: 61.99rem) {
  .toc ol { display: flex; flex-wrap: wrap; gap: 0.2rem 1.1rem; border-left: 0; }
  .toc li a { padding: 0.15rem 0; }
  .toc li.has-sub { flex-basis: 100%; }
  .toc .toc-sub { margin: 0.1rem 0 0.25rem 1.1rem; gap: 0.1rem 0.9rem; }
  .toc .toc-sub a { padding: 0.1rem 0; border-left: 0; }
}

.prose { max-width: var(--measure); min-width: 0; }
.prose h2 { margin: 2.4rem 0 0.8rem; padding-top: 1rem; border-top: 1px solid var(--rule); scroll-margin-top: 1rem; }
.prose h3 { margin: 1.6rem 0 0.5rem; }
.prose ul, .prose ol { padding-left: 1.3rem; margin: 0 0 1.1em; }
.prose li { margin: 0.35rem 0; }
.prose li::marker { color: var(--muted); }
.prose blockquote { margin: 1.2rem 0; padding: 0.2rem 0 0.2rem 1.1rem; border-left: 3px solid var(--rule); color: var(--ink-2); font-family: var(--serif); font-size: 1.1rem; }
.prose .table-wrap { overflow-x: auto; margin: 1rem 0 1.4rem; }
.prose table { border-collapse: collapse; width: 100%; font-size: 0.95rem; }
.prose th, .prose td { text-align: left; padding: 0.45rem 0.6rem; border-bottom: 1px solid var(--rule); vertical-align: top; }
/* Wide research tables scroll within the page, including by keyboard. Keep native
   table semantics and all notes beside their values on small screens. */
.data-content { padding-top: 1.5rem; padding-bottom: 3rem; min-width: 0; }
.data-introduction { max-width: var(--measure); }
.data-table-scroll { max-width: 100%; overflow-x: auto; margin: 1rem 0; border: 1px solid var(--rule); }
.data-table { border-collapse: collapse; table-layout: fixed; width: calc(var(--columns) * 18rem); font-size: 0.95rem; }
.data-table caption { text-align: left; padding: 0.75rem; font-weight: 650; color: var(--ink-2); }
.data-table th, .data-table td { text-align: left; vertical-align: top; padding: 0.65rem 0.8rem; border-bottom: 1px solid var(--rule); border-right: 1px solid var(--rule); overflow-wrap: anywhere; white-space: pre-wrap; }
.data-table thead th { background: var(--paper-2); border-bottom: 3px solid var(--rule-strong); font-weight: 650; }
.data-table tbody th { font-weight: 500; }
.data-table tbody tr:nth-child(even) { background: var(--paper-2); }
.data-table tr:target { outline: 3px solid var(--accent); outline-offset: -3px; }
.latency-plot { margin-block: 2rem; }
.latency-plot h2 { margin-bottom: 1rem; }
.latency-metric { margin-block: 2rem; }
.latency-path { margin-block: 1.25rem; border-top: 1px solid var(--rule); padding-top: 1rem; }
.latency-path h4 { font-family: var(--sans); font-size: 1rem; line-height: 1.5; }
.latency-scroll { max-width: 100%; overflow-x: auto; margin-top: 0.5rem; }
.latency-svg { display: block; width: 100%; min-width: 47.5rem; height: auto; font: 14px var(--sans); }
.tech-auracast { --chart-colour: var(--chart-auracast); }
.tech-loops { --chart-colour: var(--chart-loops); }
.tech-infrared { --chart-colour: var(--chart-infrared); }
.tech-rf { --chart-colour: var(--chart-rf); }
.tech-wifi { --chart-colour: var(--chart-wifi); }
.tech-shared { --chart-colour: var(--chart-shared); }
.latency-marker { stroke: var(--chart-colour); stroke-width: 2; fill: var(--chart-colour); }
.latency-observation.stated .latency-marker { fill: var(--paper); }
.latency-range { fill: none; stroke: var(--chart-colour); stroke-width: 2; }
.latency-hit { fill: transparent; stroke: transparent; stroke-width: 2; }
.latency-observation:hover .latency-hit, .latency-observation:focus .latency-hit { stroke: var(--ink); }
.latency-label, .latency-qualifier { fill: var(--ink); }
.latency-technology { fill: var(--muted); }
.latency-axis path { fill: none; stroke: var(--muted); stroke-width: 1; }
.latency-axis text { fill: var(--muted); }
@media (forced-colors: active) {
  .latency-marker, .latency-range { stroke: LinkText; }
  .latency-marker { fill: LinkText; }
  .latency-observation.stated .latency-marker { fill: Canvas; }
  .latency-label, .latency-qualifier, .latency-axis text { fill: CanvasText; }
  .latency-axis path { stroke: CanvasText; }
}

.standards-timeline { margin: 1.5rem 0; }
.standards-timeline h2 { margin-bottom: 0.65rem; }
.timeline-key { display: flex; flex-wrap: wrap; gap: 0.6rem 1.5rem; list-style: none; padding: 0; }
.timeline-key li { display: flex; align-items: center; gap: 0.4rem; }
.timeline-published { color: var(--timeline-published); fill: currentColor; stroke: currentColor; stroke-width: 2; }
.timeline-draft { color: var(--timeline-draft); fill: currentColor; stroke: currentColor; stroke-width: 2; }
.timeline-withdrawn { color: var(--timeline-withdrawn); stroke: currentColor; stroke-width: 2.5; }
.timeline-scroll { max-width: 100%; overflow-x: auto; border: 1px solid var(--rule); }
.timeline-chart { display: block; max-width: none; font-family: var(--sans); font-size: 13px; }
.timeline-axis path { stroke: var(--muted); stroke-width: 1; }
.timeline-axis text { fill: var(--muted); text-anchor: middle; }
.timeline-event text { fill: var(--ink); stroke: none; }
.timeline-hit { fill: transparent; stroke: none; }
.timeline-event:hover .timeline-hit, .timeline-event:focus .timeline-hit { fill: var(--paper-2); stroke: currentColor; stroke-width: 2; }
.timeline-row-number { display: block; font-weight: 650; }
.filter-field { min-width: 0; max-width: 100%; }
.filter-field select { max-width: 100%; }
.question-body { counter-reset: part 1; }
.question-body > h2:not(.unnumbered)::before { counter-increment: part; content: counter(part); display: inline-block; min-width: 1.6rem; color: var(--accent); font-variant-numeric: tabular-nums; }
.in-brief { margin: 0 0 0.5rem; padding: 1.1rem 1.25rem 1.15rem; background: var(--paper-2); border-left: 4px solid var(--accent); }
.in-brief h2 { margin: 0 0 0.45rem; padding: 0; border: 0; font-size: 1rem; font-family: var(--sans); font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-2); }
.in-brief h2::before { content: "1"; display: inline-block; min-width: 1.6rem; color: var(--accent); }
.in-brief p { margin: 0; font-family: var(--serif); font-size: 1.2rem; line-height: 1.45; }
.evidence-glance { margin: 2rem 0; }
.evidence-glance h2 { font-family: var(--serif); }
.prose .glance-list { list-style: none; padding: 0; }
.glance-list > li { margin: 0; padding: 1rem 0; border-top: 1px solid var(--rule); overflow-wrap: anywhere; }
.glance-list h3 { margin: 0 0 0.5rem; font-family: var(--sans); font-size: 1rem; color: var(--ink-2); }
.glance-list .glance-figure { margin: 0.4rem 0; font-size: 1.2rem; font-weight: 650; font-variant-numeric: tabular-nums; }
.glance-list .glance-context, .glance-list .glance-sources { margin: 0.4rem 0; font-size: 0.95rem; }
.glance-list details { margin: 0.5rem 0; font-size: 0.9rem; }
.glance-list summary { cursor: pointer; color: var(--ink-2); }
.glance-row-link { display: inline-block; margin-top: 0.25rem; font-size: 0.95rem; }
sup.cite { font-size: 0.72em; line-height: 0; vertical-align: super; font-weight: 650; white-space: nowrap; }
/* A larger tap target than the digit itself, without moving the line. */
sup.cite a { text-decoration: none; padding: 0.35em 0.2em; margin: -0.35em -0.1em; }
sup.cite a:hover { text-decoration: underline; }
.cite-sep { color: var(--muted); }
:target { scroll-margin-top: 1rem; }
.references { padding-left: 1.8rem !important; }
.references li { padding-left: 0.2rem; margin: 0.6rem 0 !important; }
.references li:target { background: var(--accent-soft); outline: 6px solid var(--accent-soft); }
.references a.ref-title { font-weight: 600; }
.references .ref-back { text-decoration: none; padding: 0 0.3em; font-family: var(--sans); }
.changes { list-style: none; padding: 0 !important; }
.changes li { display: grid; grid-template-columns: 7.5rem minmax(0, 1fr); gap: 0.75rem; padding: 0.5rem 0; border-bottom: 1px solid var(--rule); margin: 0 !important; }
.changes time { font-size: 0.9rem; font-weight: 600; color: var(--muted); padding-top: 0.1rem; }
@media (max-width: 30rem) { .changes li { grid-template-columns: minmax(0, 1fr); gap: 0.1rem; } }
.follow-note { margin-top: 2rem; font-size: 0.95rem; color: var(--ink-2); }
.mail-links { margin: 0 0 1.25rem -0.3em !important; padding: 0 0 0 0.3em !important; font-weight: 600; }
.mail-links li { margin: 0 0 0 -1.1em !important; padding-left: 1.1em !important; }
.note { font-size: 0.93rem; color: var(--muted); border-top: 1px solid var(--rule); padding-top: 1rem; margin-top: 2.5rem; }

.record { font-size: 0.93rem; }
@media (min-width: 62rem) { .record { position: sticky; top: 1.25rem; align-self: start; } }
.record dl { margin: 0; border-top: 3px solid var(--rule-strong); }
.record dt { font-size: 0.78rem; font-weight: 650; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); padding-top: 0.7rem; }
.record dd { margin: 0.15rem 0 0; padding-bottom: 0.7rem; border-bottom: 1px solid var(--rule); color: var(--ink); }
.findings li { margin: 0.55rem 0; }
.original a { word-break: break-all; }
.cite-block { margin-top: 0.5rem; padding: 1rem 1.1rem; background: var(--paper-2); border-left: 4px solid var(--rule-strong); }
.cite-block p.citation { font-family: var(--serif); font-size: 1.05rem; line-height: 1.5; margin: 0 0 0.75rem; word-break: break-word; }
.cite-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1rem; }
.copy-button { font: inherit; font-size: 0.92rem; font-weight: 650; padding: 0.4rem 0.85rem; border: 1px solid var(--ink); border-radius: 3px; background: var(--paper-3); color: var(--ink); cursor: pointer; }
.copy-button:hover { background: var(--ink); color: var(--paper); }
.copy-status { font-size: 0.9rem; color: var(--st-settled-fg); font-weight: 600; }
.copy-field { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1rem; padding: 0.9rem 1rem; background: var(--paper-2); border-left: 4px solid var(--accent); margin: 0.5rem 0 1.25rem; }
.copy-value { font-family: var(--sans); font-size: 1.15rem; font-weight: 650; color: var(--ink); word-break: break-all; }
.cited-in { list-style: none; padding: 0 !important; }
.cited-in li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.6rem; padding: 0.45rem 0; border-bottom: 1px solid var(--rule); margin: 0 !important; }

.update-list { list-style: none; margin: 0; padding: 0; }
.update-month { margin: 2rem 0 0.25rem; font-size: 1.15rem; padding-bottom: 0.5rem; border-bottom: 3px solid var(--rule-strong); }
.update-month:first-child { margin-top: 0; }
.update-list li { display: grid; grid-template-columns: 4.5rem minmax(0, 1fr); gap: 1rem; padding: 0.9rem 0; border-bottom: 1px solid var(--rule); }
.update-list time { font-weight: 600; font-size: 0.9rem; color: var(--muted); padding-top: 0.2rem; }
.update-list h3 { font-size: 1.2rem; line-height: 1.3; margin: 0 0 0.3rem; }
.update-list h3 a { color: var(--ink); text-decoration: none; }
.update-list h3 a:hover { color: var(--accent); text-decoration: underline; }
.update-list p { margin: 0; color: var(--ink-2); }

.definition-list { list-style: none; padding: 0 !important; }
.definition-list li { display: grid; gap: 0.25rem 1rem; padding: 0.6rem 0; border-bottom: 1px solid var(--rule); margin: 0 !important; }
@media (min-width: 36rem) { .definition-list li { grid-template-columns: 10.5rem minmax(0, 1fr); } }

/* ---------------------------------------------------------------- technologies and coverage */
.tech-line { margin-top: 0.45rem; }
.tech-line span { font-weight: 600; }
.tech-list { list-style: none; margin: 0; padding: clamp(1.5rem, 4vw, 2.25rem) 0 0; display: grid; gap: 0 2.5rem; }
@media (min-width: 48rem) { .tech-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.tech-list > li { border-top: 3px solid var(--rule-strong); padding: 0.9rem 0 1.5rem; min-width: 0; }
.tech-list h2 { font-size: 1.45rem; margin-bottom: 0.45rem; }
.tech-list h2 a { color: var(--ink); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.18em; text-decoration-color: var(--rule-strong); }
.tech-list h2 a:hover { color: var(--accent); text-decoration-color: currentColor; }
@media (min-width: 48rem) { .tech-list > #shared { grid-column: 1 / -1; } }
@media (min-width: 62rem) { #shared .cited-in { columns: 2; column-gap: 2.5rem; } #shared .cited-in li { break-inside: avoid; } }
.tech-list p { color: var(--ink-2); margin: 0 0 0.5rem; max-width: 40rem; }
.tech-list .cited-in { list-style: none; margin: 0.75rem 0 0; padding: 0; }
.tech-list .cited-in li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 0.6rem; padding: 0.4rem 0; border-bottom: 1px solid var(--rule); }
.tech-coverage { padding: 0.5rem 0 1rem; }
.tech-coverage > h2 { margin-bottom: 0.9rem; }
.tech-sources { list-style: none; padding: 0 !important; margin: 0.75rem 0 1rem !important; border-top: 1px solid var(--rule); }
.tech-sources > li { padding: 0.55rem 0; border-bottom: 1px solid var(--rule); margin: 0 !important; }
.tech-sources > li > a { font-weight: 600; }
.tech-sources .meta { margin-top: 0.2rem; }
.pending, .empty-note { padding: 0.8rem 1rem; background: var(--paper-2); border-left: 4px solid var(--rule-strong); color: var(--ink-2); }

/* The coverage panel: a table on wider screens (technologies across, measures down);
   on phones the same figures as one block per technology. */
.coverage { min-width: 0; overflow-x: auto; }
.coverage-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; font-variant-numeric: tabular-nums; }
.coverage-table caption { text-align: left; font-size: 0.85rem; font-weight: 650; color: var(--ink-2); padding-bottom: 0.5rem; }
.coverage-table th, .coverage-table td { padding: 0.4rem 0.35rem; border-bottom: 1px solid var(--rule); text-align: right; vertical-align: bottom; }
.coverage-table thead th { font-family: var(--sans); font-size: 0.82rem; font-weight: 650; line-height: 1.25; border-bottom: 3px solid var(--rule-strong); }
.coverage-table thead th a { color: var(--ink); }
.coverage-table thead td { border-bottom: 3px solid var(--rule-strong); }
.coverage-table tbody th { text-align: left; font-weight: 600; }
.coverage-table tbody .funding { font-size: 0.72rem; padding: 0.15rem 0.4rem; }
.coverage-table tbody td { vertical-align: baseline; }
.coverage-table .coverage-sub th { padding-left: 1.1rem; font-weight: 400; }
.coverage-table .coverage-total { background: var(--paper-2); }
.band-alt .coverage-table .coverage-total { background: var(--paper-3); }
.coverage .zero { color: var(--muted); }
.coverage-cards { display: none; list-style: none; margin: 0; padding: 0; }
.coverage-cards > li { padding: 0.75rem 0; border-top: 1px solid var(--rule); }
.coverage-cards > li:first-child { border-top: 3px solid var(--rule-strong); }
.coverage-cards h3 { font-size: 1.15rem; margin-bottom: 0.25rem; }
.coverage-cards h3 a { color: var(--ink); }
.coverage-funding { margin-top: 0.15rem; }
.coverage-note { font-size: 0.88rem; color: var(--muted); margin: 0.75rem 0 0; max-width: 46rem; }
@media (max-width: 47.99rem) {
  .coverage-table { display: none; }
  .coverage-cards { display: block; }
}
.prose .coverage { margin: 1rem 0 1.25rem; }
/* Lists inside prose keep their own spacing: meta lines, coverage blocks. */
.prose .sep-list { margin: 0 0 0 -0.3em; padding: 0 0 0 0.3em; }
.prose .sep-list > li { margin: 0 0 0 -1.1em; }
.prose .coverage-cards { padding: 0; }
.prose .coverage-cards > li { margin: 0; }

/* ---------------------------------------------------------------- search (Pagefind UI) */
.search-page { max-width: 62rem; }
.search-page .pagefind-ui { --pagefind-ui-scale: 0.95; --pagefind-ui-primary: var(--accent); --pagefind-ui-text: var(--ink); --pagefind-ui-background: var(--paper-3); --pagefind-ui-border: var(--muted); --pagefind-ui-tag: var(--paper-2); --pagefind-ui-border-width: 1px; --pagefind-ui-border-radius: 3px; --pagefind-ui-font: var(--sans); }
.search-page .pagefind-ui__result-link { font-family: var(--serif); color: var(--ink); }
.search-page .pagefind-ui__result-excerpt { color: var(--ink-2); }
.search-page .pagefind-ui__result-excerpt mark { background: var(--accent-soft); color: var(--ink); }

/* ---------------------------------------------------------------- footer */
.site-footer { margin-top: 0; padding: 2.25rem 0 2.5rem; border-top: 4px solid var(--rule-strong); background: var(--paper-2); font-size: 0.93rem; color: var(--ink-2); }
.footer-inner { display: grid; gap: 1.5rem 3rem; }
@media (min-width: 56rem) { .footer-inner { grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); } .footer-notes { grid-column: 1 / -1; } }
.footer-brand p { margin: 0.6rem 0 0; }
.footer-nav { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 1.5rem; }
.footer-nav ul { list-style: none; margin: 0; padding: 0; }
.footer-nav li { padding: 0.2rem 0; }
.footer-nav a { color: var(--ink); }
.footer-notes { border-top: 1px solid var(--rule); padding-top: 1rem; }
.footer-notes p { margin: 0 0 0.5rem; max-width: 60rem; }
.footer-notes .legal { color: var(--muted); font-size: 0.88rem; }

/* ---------------------------------------------------------------- print: question and source pages read as documents */
@media print {
  :root { --paper: #fff; --paper-2: #fff; --paper-3: #fff; --ink: #000; --ink-2: #222; --muted: #444; --rule: #999; --rule-strong: #000; --accent: #000; }
  @page { margin: 18mm 16mm; }
  body { font-size: 10.5pt; line-height: 1.45; background: #fff; color: #000; }
  .skip-link, .site-nav, .toolbar, .copy-button, .copy-status, .signup, .signup-status, .follow-note, .queue-form, .toc, .footer-nav, .footer-brand, .breadcrumb, .record, .cite-actions, .audience-links, .ref-back { display: none !important; }
  .print-only { display: inline; }
  p.print-only { display: block; font-size: 9pt; margin: 4pt 0 0; }
  .masthead { border-top: 0; border-bottom: 1pt solid #000; }
  .masthead-inner { padding: 0 0 4pt; }
  .wrap { max-width: none; padding: 0; }
  .reading { display: block; padding: 8pt 0; }
  .prose { max-width: none; }
  .page-head { padding: 10pt 0 8pt; }
  h1 { font-size: 20pt; }
  h2 { font-size: 13pt; break-after: avoid; }
  .prose h2 { margin-top: 14pt; }
  li, .in-brief, .cite-block { break-inside: avoid; }
  a { color: #000; text-decoration: none; }
  .prose a[href^="http"]::after { content: " <" attr(href) ">"; font-size: 8.5pt; word-break: break-all; }
  .prose .original a::after { content: none; }
  .footer-notes .legal { font-size: 1em; }
  .references .ref-url { font-size: 8.5pt; word-break: break-all; }
  sup.cite a { color: #000; }
  .status, .funding { border: 0.75pt solid #000; background: none !important; color: #000 !important; }
  .in-brief { border-left: 2pt solid #000; padding: 6pt 10pt; }
  .site-footer { background: none; border-top: 1pt solid #000; padding: 8pt 0 0; font-size: 8.5pt; }
}
