/* =============================================================================
   Base, shell and page layout, Forge design system.
   Tokens live in variables.css; component skins in components.css.
   ============================================================================= */

*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  color: var(--text-body);
  background: var(--surface-page);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Sora for headings; tight, heavy display type is the system's signature. */
h1, h2, h3, h4 {
  font-family: var(--font-display);
  color: var(--text-strong);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-tight);
  line-height: var(--leading-snug);
}

h1, h2 { letter-spacing: var(--tracking-display); }

p { text-wrap: pretty; }

code, kbd, pre, samp { font-family: var(--font-mono); }

img {
  max-width: 100%;
  height: auto;
  display: block;
}

a {
  color: var(--text-link);
  text-decoration: none;
}

a:hover {
  color: var(--text-link-hover);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Focus is a ring, never a border change. :where() keeps this at zero
   specificity so a component can still draw its own. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: none;
  box-shadow: var(--ring-focus);
}

::selection {
  background: var(--cobalt-100);
  color: var(--ink-950);
}

[data-theme="dark"] ::selection {
  background: var(--cobalt-700);
  color: #fff;
}

.container {
  width: 100%;
  max-width: min(var(--container-max), calc(100% - 2 * var(--page-gutter)));
  margin: 0 auto;
  padding-inline: var(--gutter-inline);
}

/* ---- Brand primitives shared by every page ------------------------------ */

/* Eyebrow: one or two words naming the job, above every section heading. */
.eyebrow {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-muted);
}

.eyebrow-brand { color: var(--text-highlight); }

/* Exactly one emphasised phrase per headline. */
.hl { color: var(--text-highlight); }

.hl-underline {
  background: linear-gradient(var(--amber-400), var(--amber-400)) bottom / 100% 34% no-repeat;
  padding: 0 0.08em;
}

.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* Lucide glyphs, self-hosted, drawn as a mask so they take currentColor. */
.yt-icon {
  display: inline-block;
  width: 1.125rem;
  height: 1.125rem;
  flex: 0 0 auto;
  background: currentColor;
  -webkit-mask: var(--icon) center / contain no-repeat;
  mask: var(--icon) center / contain no-repeat;
}
.yt-icon-sm { width: 1rem; height: 1rem; }
.yt-icon-lg { width: 1.25rem; height: 1.25rem; }
.yt-icon[data-icon="scale"] { --icon: url('/assets/icons/lucide/scale.svg'); }
.yt-icon[data-icon="terminal"] { --icon: url('/assets/icons/lucide/terminal.svg'); }
.yt-icon[data-icon="wallet"] { --icon: url('/assets/icons/lucide/wallet.svg'); }
.yt-icon[data-icon="sigma"] { --icon: url('/assets/icons/lucide/sigma.svg'); }
.yt-icon[data-icon="heart-pulse"] { --icon: url('/assets/icons/lucide/heart-pulse.svg'); }
.yt-icon[data-icon="image"] { --icon: url('/assets/icons/lucide/image.svg'); }
.yt-icon[data-icon="type"] { --icon: url('/assets/icons/lucide/type.svg'); }
.yt-icon[data-icon="palette"] { --icon: url('/assets/icons/lucide/palette.svg'); }
.yt-icon[data-icon="search"] { --icon: url('/assets/icons/lucide/search.svg'); }
.yt-icon[data-icon="shield-check"] { --icon: url('/assets/icons/lucide/shield-check.svg'); }
.yt-icon[data-icon="file-text"] { --icon: url('/assets/icons/lucide/file-text.svg'); }
.yt-icon[data-icon="calendar"] { --icon: url('/assets/icons/lucide/calendar.svg'); }
.yt-icon[data-icon="sliders-horizontal"] { --icon: url('/assets/icons/lucide/sliders-horizontal.svg'); }
.yt-icon[data-icon="graduation-cap"] { --icon: url('/assets/icons/lucide/graduation-cap.svg'); }
.yt-icon[data-icon="moon"] { --icon: url('/assets/icons/lucide/moon.svg'); }
.yt-icon[data-icon="sun"] { --icon: url('/assets/icons/lucide/sun.svg'); }
.yt-icon[data-icon="menu"] { --icon: url('/assets/icons/lucide/menu.svg'); }
.yt-icon[data-icon="x"] { --icon: url('/assets/icons/lucide/x.svg'); }
.yt-icon[data-icon="zap"] { --icon: url('/assets/icons/lucide/zap.svg'); }
.yt-icon[data-icon="arrow-right"] { --icon: url('/assets/icons/lucide/arrow-right.svg'); }
.yt-icon[data-icon="check"] { --icon: url('/assets/icons/lucide/check.svg'); }
.yt-icon[data-icon="chevron-down"] { --icon: url('/assets/icons/lucide/chevron-down.svg'); }
.yt-icon[data-icon="clock"] { --icon: url('/assets/icons/lucide/clock.svg'); }
.yt-icon[data-icon="history"] { --icon: url('/assets/icons/lucide/history.svg'); }
.yt-icon[data-icon="book-open"] { --icon: url('/assets/icons/lucide/book-open.svg'); }
.yt-icon[data-icon="layers"] { --icon: url('/assets/icons/lucide/layers.svg'); }
.yt-icon[data-icon="info"] { --icon: url('/assets/icons/lucide/info.svg'); }

/* Feature tile: 38px cobalt-100 square holding a cobalt-600 glyph. */
.icon-tile {
  width: 38px;
  height: 38px;
  flex: 0 0 38px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-md);
  background: var(--cobalt-100);
  color: var(--cobalt-600);
}

[data-theme="dark"] .icon-tile {
  background: var(--cobalt-950);
  color: var(--cobalt-300);
}

/* Bands: one full-width surface per idea, content centred. */
.band { border-bottom: 1px solid var(--border-hairline); }
.band-tint { background: var(--surface-band); }
.band-warm { background: var(--surface-band-warm); }
.band-inner { padding-block: var(--section-y); }
.band-inner-tight { padding-block: var(--section-y-tight); }

/* Header mount point: reserves the header's real height before app.js has
   populated #header-component, so the page doesn't shift down once it does. */
#header-component {
  min-height: var(--header-height);
}

/* ---- Header -------------------------------------------------------------- */
/* Not sticky: Forge keeps nothing fixed on the public site. */
.site-header {
  position: relative;
  z-index: var(--z-header);
  background: var(--surface-page);
  border-bottom: 1px solid var(--border-hairline);
}

.header-inner {
  display: flex;
  align-items: center;
  gap: var(--space-3) var(--space-5);
  min-height: var(--header-height);
}

/* Wordmark: no logo file exists, so the name is set in display type with a
   cobalt square holding the initial. */
.logo {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
  font-family: var(--font-display);
  font-size: 1.25rem;
  font-weight: var(--weight-black);
  letter-spacing: -0.04em;
  color: var(--text-strong);
  text-decoration: none;
}

.logo:hover {
  color: var(--text-strong);
  text-decoration: none;
}

.logo-icon {
  width: 1.5rem;
  height: 1.5rem;
  border-radius: var(--radius-sm);
  background: var(--cobalt-500);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-size: 0.9rem;
  font-weight: var(--weight-black);
  letter-spacing: -0.05em;
  line-height: 1;
}

/* Search: a quiet field that reads as a button until it is used. */
.search-wrapper {
  position: relative;
  flex: 0 1 15rem;
  min-width: 0;
}

.search-input,
.search-input-page {
  width: 100%;
  height: 38px;
  padding: 0 3.25rem 0 2.25rem;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  background: var(--surface-page);
  color: var(--text-strong);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  transition: var(--transition-control);
  -webkit-appearance: none;
  appearance: none;
}

.search-input::placeholder,
.search-input-page::placeholder {
  color: var(--text-muted);
  opacity: 1;
}

.search-input:hover,
.search-input-page:hover {
  border-color: var(--border-brand);
}

.search-input:focus,
.search-input-page:focus {
  outline: none;
  border-color: var(--focus-ring);
  box-shadow: var(--ring-focus);
}

.search-input::-webkit-search-cancel-button { -webkit-appearance: none; }

.search-icon {
  position: absolute;
  left: 0.75rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--text-muted);
  pointer-events: none;
  display: flex;
}

.search-kbd {
  position: absolute;
  right: 0.5rem;
  top: 50%;
  transform: translateY(-50%);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  line-height: 1.4;
  padding: 1px 6px;
  border-radius: var(--radius-sm);
  background: var(--surface-sunken);
  color: var(--text-muted);
  pointer-events: none;
}

.search-input:focus ~ .search-kbd,
.search-input:not(:placeholder-shown) ~ .search-kbd {
  display: none;
}

.search-dropdown {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  width: max(100%, 22rem);
  background: var(--surface-card);
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lifted);
  max-height: 420px;
  overflow-y: auto;
  display: none;
  z-index: var(--z-dropdown);
  padding: var(--space-1) 0;
}

.search-dropdown.active {
  display: block;
}

.search-result-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 0.6rem var(--space-4);
  cursor: pointer;
  text-decoration: none;
  color: var(--text-strong);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
}

.search-result-item:hover,
.search-result-item.active {
  background: var(--surface-band);
  color: var(--text-strong);
  text-decoration: none;
}

.search-result-name {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.search-result-category {
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-subtle);
  white-space: nowrap;
}

.search-result-empty {
  padding: var(--space-4);
  font-size: var(--text-sm);
  color: var(--text-muted);
}

/* Toast (Utils.showToast): ink surface, white text, a status dot. */
.yt-toast {
  position: fixed;
  right: var(--space-6);
  bottom: var(--space-6);
  z-index: 9999;
  display: flex;
  align-items: center;
  gap: 0.625rem;
  min-width: 240px;
  max-width: 380px;
  padding: 0.75rem 0.875rem;
  border-radius: var(--radius-md);
  background: var(--ink-950);
  color: #fff;
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  box-shadow: var(--shadow-lifted);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur-base) var(--ease-out);
}

.yt-toast::before {
  content: "";
  flex: 0 0 auto;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mint-500);
}

.yt-toast.is-error::before {
  background: var(--coral-500);
}

[data-theme="dark"] .yt-toast {
  background: var(--ink-800);
  border: 1px solid var(--ink-700);
}

.search-section-title {
  padding: var(--space-2) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-medium);
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: var(--tracking-eyebrow);
}

.header-actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.theme-toggle,
.mobile-menu-btn {
  width: 38px;
  height: 38px;
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  background: var(--surface-page);
  color: var(--text-body);
  cursor: pointer;
  transition: var(--transition-control);
}

.theme-toggle:hover,
.mobile-menu-btn:hover {
  background: var(--action-ghost-hover);
  color: var(--text-strong);
}

.mobile-menu-btn {
  display: none;
}

/* Nav: ghost pills; the mega menu drops full width under the header. */
.main-nav {
  display: flex;
  align-items: stretch;
  align-self: stretch;
  gap: 2px;
  flex: 1 1 auto;
  min-width: 0;
}

.nav-item {
  display: flex;
  align-items: center;
}

.nav-link {
  display: flex;
  align-items: center;
  align-self: center;
  padding: 0.5rem 0.75rem;
  border-radius: var(--radius-pill);
  color: var(--text-body);
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  white-space: nowrap;
  text-decoration: none;
  transition: var(--transition-control);
}

.nav-link:hover,
.nav-item:hover > .nav-link,
.nav-item:focus-within > .nav-link {
  background: var(--action-ghost-hover);
  color: var(--text-strong);
  text-decoration: none;
}

.mega-menu {
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  display: none;
  background: var(--surface-page);
  border-top: 1px solid var(--border-hairline);
  border-bottom: 1px solid var(--border-hairline);
  box-shadow: var(--shadow-lifted);
  z-index: var(--z-dropdown);
}

.nav-item:hover > .mega-menu,
.nav-item:focus-within > .mega-menu {
  display: block;
}

.mega-menu-inner {
  max-width: min(var(--container-max), calc(100% - 2 * var(--page-gutter)));
  margin: 0 auto;
  padding: var(--space-7) var(--gutter-inline) var(--space-8);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: var(--space-7);
}

.mega-menu-col {
  display: flex;
  flex-direction: column;
  gap: 0.625rem;
  min-width: 0;
}

.mega-menu-col h4 {
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-muted);
  line-height: var(--leading-normal);
}

.mega-menu-col a {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 3px 0;
  font-size: var(--text-base);
  color: var(--text-body);
  text-decoration: none;
}

.mega-menu-col a:hover {
  color: var(--text-link);
  text-decoration: none;
}

.mega-meta {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-subtle);
  white-space: nowrap;
}

.mega-menu-foot {
  grid-column: 1 / -1;
  padding-top: var(--space-4);
  border-top: 1px solid var(--border-hairline);
  font-size: var(--text-sm);
}

/* ---- Page heads -----------------------------------------------------------
   Every page opens on a band: breadcrumb, heading, one-sentence lede. */
.hero {
  background: var(--surface-band);
  border-bottom: 1px solid var(--border-hairline);
  color: var(--text-body);
  padding: var(--space-6) 0 var(--space-14);
  text-align: left;
}

.hero .breadcrumb {
  margin-bottom: var(--space-6);
}

.hero h1 {
  font-size: clamp(2rem, 4.2vw, var(--text-h1));
  font-weight: var(--weight-black);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-display);
  color: var(--text-strong);
  margin-bottom: var(--space-4);
  max-width: var(--measure-headline);
  text-wrap: balance;
}

.hero p {
  font-size: var(--text-md);
  line-height: var(--leading-relaxed);
  color: var(--text-body);
  max-width: var(--measure-lede);
  margin: 0;
}

.hero-compact {
  padding: var(--space-5) 0 var(--space-7);
}

.hero-compact h1 {
  font-size: var(--text-h2);
  font-weight: var(--weight-bold);
  line-height: var(--leading-snug);
  margin-bottom: 0.625rem;
  max-width: none;
}

.hero-compact p {
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  max-width: var(--measure-prose);
}

.hero-search {
  max-width: 560px;
  margin-top: var(--space-6);
}

.hero-search .search-input,
.hero-search .search-input-page {
  height: 3.75rem;
  padding: 0 var(--space-5) 0 3rem;
  font-size: var(--text-md);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
}

.hero-search .search-icon { left: 1.125rem; }

/* StatBlock: oversized proof numbers in pairs. */
.hero-stats {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-8);
  margin-top: var(--space-8);
}

.hero-stat-number {
  font-family: var(--font-display);
  font-size: var(--text-h2);
  font-weight: var(--weight-black);
  letter-spacing: var(--tracking-mega);
  line-height: 1;
  color: var(--text-strong);
}

.hero-stats > div + div .hero-stat-number,
.stat-brand .hero-stat-number {
  color: var(--text-highlight);
}

.hero-stat-label {
  margin-top: var(--space-2);
  font-size: var(--text-sm);
  color: var(--text-muted);
  max-width: 24ch;
}

/* Tool page head: breadcrumb, title and lede on the left, actions on the
   right (build-shell.js moves the byline and action row up here). */
.tool-head-row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-4) var(--space-8);
}

.tool-head-main {
  min-width: 0;
  flex: 1 1 30rem;
}

/* The byline and the trust facts read as one mono meta row: both wrappers
   step out of the box tree so their spans share the row's flex line. */
.tool-head .tool-meta,
.tool-head .hero-badges {
  display: contents;
  font: inherit;
  color: inherit;
}

.tool-head .hero-badges span:first-child::before {
  content: "\00B7";
  color: var(--text-subtle);
}

.tool-head-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-top: 0.875rem;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-muted);
}

.tool-head-meta span {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  border: 0;
  padding: 0;
  background: none;
  border-radius: 0;
  font-size: inherit;
  font-weight: inherit;
  color: inherit;
}

.tool-head-meta span + span::before {
  content: "\00B7";
  color: var(--text-subtle);
}

.tool-head .tool-actions {
  margin: 0;
}

/* Category hub head: eyebrow, H1 with one highlighted word, lede, and the
   proof numbers aligned to the bottom right. */
.hub-head {
  padding: var(--space-6) 0 var(--space-14);
}

.hub-head-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-10);
}

.hub-head-main {
  flex: 1 1 26rem;
  min-width: 0;
}

.hub-head .eyebrow {
  margin-bottom: 0.875rem;
}

.hub-head .hero-stats {
  margin-top: 0;
}

section.hub-head ~ main {
  padding-block: var(--space-8) var(--space-12);
}

/* Pill tabs over the tool groups (app.js turns them into a filter). */
.hub-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-8);
}

.hub-filter {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  min-width: 0;
}

.hub-filter-pill {
  padding: 0.4375rem var(--space-4);
  border-radius: var(--radius-pill);
  font-size: var(--text-base);
  font-weight: var(--weight-semibold);
  color: var(--text-muted);
  text-decoration: none;
  white-space: nowrap;
  transition: var(--transition-control);
}

.hub-filter-pill:hover {
  background: var(--action-ghost-hover);
  color: var(--text-strong);
  text-decoration: none;
}

.hub-filter-pill.is-active,
.hub-filter-pill.is-active:hover {
  background: var(--action-neutral);
  color: var(--action-neutral-text);
}

.hub-count {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-muted);
  white-space: nowrap;
}

/* About the category: prose on the left, tinted feature cards on the right. */
.hub-about {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-12);
  margin: var(--space-12) 0 0;
  padding-top: var(--space-16);
  border-top: 1px solid var(--border-hairline);
}

.hub-about-prose {
  flex: 2 1 28rem;
  min-width: 0;
  max-width: var(--measure-prose);
}

.hub-about-prose > h2 {
  font-size: var(--text-h3);
  letter-spacing: var(--tracking-display);
  margin-bottom: var(--space-4);
}

.hub-about-cards {
  flex: 1 1 16rem;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

/* FeatureCard, tinted: brand-soft ground, no border, no shadow. */
.feature-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--card-pad);
  background: var(--surface-brand-soft);
  border-radius: var(--radius-card);
}

.feature-card h3 {
  font-size: var(--text-lg);
  margin: 0;
}

.feature-card p {
  margin: 0;
  color: var(--text-muted);
  line-height: var(--leading-relaxed);
}

/* ---- Search page ------------------------------------------------------------ */
.search-head-inner {
  max-width: min(50rem, calc(100% - 2 * var(--page-gutter)));
  padding-block: 4.5rem var(--space-14);
  text-align: center;
}

.search-head .page-title {
  max-width: none;
  margin: 0.875rem 0 var(--space-7);
  font-size: clamp(1.875rem, 4vw, 2.875rem);
}

.search-page-box {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  height: 3.75rem;
  padding: 0 1.125rem;
  background: var(--surface-page);
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  text-align: left;
  transition: var(--transition-control);
}

.search-page-box:focus-within {
  border-color: var(--focus-ring);
  box-shadow: var(--ring-focus), var(--shadow-card);
}

.search-page-box .search-icon {
  position: static;
  transform: none;
}

.search-page-box .search-input-page {
  flex: 1;
  min-width: 0;
  height: 100%;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  font-size: var(--text-md);
}

.search-page-box .search-input-page:focus,
.search-page-box .search-input-page:hover {
  border: 0;
  box-shadow: none;
}

.search-page-hint {
  padding: 4px 8px;
  border-radius: var(--radius-sm);
  background: var(--surface-sunken);
  color: var(--text-muted);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  white-space: nowrap;
}

.search-filters {
  justify-content: center;
  margin-top: var(--space-5);
}

.search-filters .hub-filter-pill {
  border: 0;
  cursor: pointer;
  font-family: var(--font-sans);
}

.search-filters .hub-filter-pill:not(.is-active) {
  background: transparent;
}

.search-main {
  max-width: min(50rem, calc(100% - 2 * var(--page-gutter)));
  padding-block: var(--space-8) var(--space-20);
}

.search-results-head {
  display: flex;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-4);
}

.search-hits {
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-card);
  background: var(--surface-card);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}

.search-hits:empty {
  display: none;
}

.search-hit {
  display: flex;
  align-items: center;
  gap: 0.875rem;
  padding: 0.875rem 1.125rem;
  border-bottom: 1px solid var(--border-hairline);
  color: var(--text-body);
  text-decoration: none;
  transition: background-color var(--dur-fast) var(--ease-out);
}

.search-hit:last-child {
  border-bottom: 0;
}

.search-hit:hover {
  background: var(--surface-band);
  color: var(--text-body);
  text-decoration: none;
}

.icon-tile-sm {
  width: 30px;
  height: 30px;
  flex-basis: 30px;
  border-radius: var(--radius-sm);
}

.search-hit-text {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.search-hit-name {
  font-weight: var(--weight-medium);
  color: var(--text-strong);
}

.search-hit-desc {
  font-size: var(--text-sm);
  color: var(--text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.search-hit-cat {
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-subtle);
  white-space: nowrap;
}

.search-empty {
  padding: var(--space-12) var(--space-6);
  text-align: center;
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-card);
  background: var(--surface-band);
  color: var(--text-muted);
}

.search-empty-title {
  margin-bottom: var(--space-2);
  font-family: var(--font-display);
  font-size: var(--text-lg);
  font-weight: var(--weight-semibold);
  color: var(--text-strong);
}

/* ---- 404 -------------------------------------------------------------------- */
.notfound-inner {
  max-width: min(50rem, calc(100% - 2 * var(--page-gutter)));
  padding-block: var(--section-y);
  text-align: center;
}

.notfound-code {
  margin-bottom: var(--space-5);
  font-family: var(--font-mono);
  font-size: var(--text-mega);
  font-weight: var(--weight-semibold);
  line-height: 1;
  color: var(--text-highlight);
}

.notfound-head h1 {
  margin-bottom: var(--space-4);
  font-size: var(--text-h2);
  text-wrap: balance;
}

.notfound-lede {
  max-width: var(--measure-lede);
  margin: 0 auto var(--space-7);
  font-size: var(--text-md);
  line-height: var(--leading-relaxed);
  color: var(--text-body);
}

.notfound-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3);
}

.notfound-guess-title {
  margin-bottom: var(--space-4);
  font-size: var(--text-h4);
}

.notfound-search {
  max-width: 36rem;
  height: 3.25rem;
  margin-bottom: var(--space-6);
}

/* ---- Layout ---------------------------------------------------------------- */
.page-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-8);
  padding-block: var(--space-8) var(--space-20);
}

.page-layout.with-sidebar {
  grid-template-columns: minmax(0, 1fr) var(--sidebar-width);
  align-items: start;
}

.main-content {
  min-width: 0;
}

/* Plain content pages (about, legal, comparisons). */
.page-main {
  padding-block: var(--space-10) var(--space-20);
}

/* ---- Sidebar --------------------------------------------------------------- */
.sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  min-width: 0;
}

.sidebar-widget {
  background: var(--surface-card);
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  padding: var(--space-5);
}

.sidebar-widget h3 {
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-muted);
  line-height: var(--leading-normal);
  margin-bottom: 0.875rem;
}

.sidebar-widget.is-quiet {
  background: var(--surface-band);
  box-shadow: none;
}

.sidebar-links {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.sidebar-links li {
  margin: 0;
}

.sidebar-links a {
  display: block;
  margin: 0 -0.5rem;
  padding: 0.4375rem 0.5rem;
  border-radius: var(--radius-sm);
  color: var(--text-body);
  font-size: var(--text-sm);
  text-decoration: none;
  transition: var(--transition-control);
}

.sidebar-links a:hover {
  background: var(--action-ghost-hover);
  color: var(--text-strong);
  text-decoration: none;
}

/* ---- Category cards (icon tile, name and blurb, count) ---------------------- */
.categories-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr));
  gap: var(--space-3);
}

.category-card {
  display: grid;
  grid-template-columns: 38px minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--space-4);
  padding: 1.125rem var(--space-5);
  background: var(--surface-card);
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  color: var(--text-body);
  text-decoration: none;
  transition: box-shadow var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}

.category-card:hover {
  box-shadow: var(--shadow-lifted);
  transform: var(--lift-hover);
  color: var(--text-body);
  text-decoration: none;
}

.category-card-name {
  display: block;
  font-family: var(--font-display);
  font-size: var(--text-md);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-tight);
  color: var(--text-strong);
}

.category-card-desc {
  display: block;
  margin-top: 2px;
  font-size: var(--text-sm);
  color: var(--text-muted);
}

.category-count {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  font-variant-numeric: tabular-nums;
  color: var(--text-body);
  white-space: nowrap;
}

/* ---- Tools grid ------------------------------------------------------------ */
.tools-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr));
  gap: var(--space-3);
}

.section-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-6);
  margin-bottom: var(--space-8);
}

.section-header h2,
.section-title {
  font-size: var(--text-h2);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-display);
}

/* Page-level display headline (blog index, search, 404). */
.page-title {
  margin: 0.875rem 0 var(--space-4);
  font-size: clamp(2rem, 4.2vw, var(--text-h1));
  font-weight: var(--weight-black);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-display);
  max-width: var(--measure-headline);
  text-wrap: balance;
}

.section-lede {
  margin-top: var(--space-2);
  font-size: var(--text-base);
  color: var(--text-muted);
  max-width: var(--measure-lede);
}

.section-note {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-muted);
}

/* ---- Footer: near-black, brand plus four link columns ---------------------- */
.site-footer {
  background: var(--surface-inverse);
  color: var(--ink-300);
  padding: var(--space-20) 0 var(--space-8);
  margin-top: var(--space-16);
}

[data-theme="dark"] .site-footer {
  border-top: 1px solid var(--border-hairline);
}

/* A page that already ends on a band sits flush against the footer. */
main:has(> .band:last-child) + #footer-component .site-footer,
main.flush-footer + #footer-component .site-footer {
  margin-top: 0;
}

.footer-grid {
  display: grid;
  grid-template-columns: minmax(200px, 1.3fr) repeat(4, minmax(0, 1fr));
  gap: var(--space-12);
}

.footer-brand {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.footer-brand .logo,
.footer-brand .logo:hover {
  color: #fff;
  font-size: 1.375rem;
}

.footer-brand p {
  color: var(--ink-400);
  font-size: var(--text-sm);
  line-height: var(--leading-relaxed);
  max-width: 26ch;
}

.footer-col h4 {
  font-family: var(--font-sans);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--ink-400);
  line-height: var(--leading-normal);
  margin-bottom: var(--space-3);
}

.footer-col ul {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.footer-col a {
  color: var(--ink-300);
  font-size: var(--text-sm);
  text-decoration: none;
}

.footer-col a:hover {
  color: #fff;
  text-decoration: underline;
}

.footer-bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-6);
  margin-top: var(--space-12);
  padding-top: var(--space-5);
  border-top: 1px solid var(--ink-800);
  font-size: var(--text-xs);
  color: var(--ink-400);
}

/* ---- Mobile menu ------------------------------------------------------------ */
.mobile-menu {
  position: fixed;
  inset: 0;
  background: var(--surface-page);
  z-index: var(--z-overlay);
  padding: var(--space-4) var(--gutter-inline) var(--space-8);
  overflow-y: auto;
  visibility: hidden;
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out), visibility 0s linear var(--dur-base);
}

.mobile-menu.active {
  visibility: visible;
  opacity: 1;
  transform: none;
  transition: opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out), visibility 0s;
}

.mobile-menu-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 3rem;
  margin-bottom: var(--space-4);
}

.mobile-menu-close {
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border: 1px solid var(--border-strong);
  border-radius: var(--radius-md);
  background: var(--surface-page);
  color: var(--text-body);
  cursor: pointer;
}

.mobile-nav-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.875rem 0;
  font-family: var(--font-display);
  font-size: var(--text-md);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-tight);
  color: var(--text-strong);
  text-decoration: none;
  border-bottom: 1px solid var(--border-hairline);
}

.mobile-nav-link:hover {
  color: var(--text-link);
  text-decoration: none;
}

.mobile-nav-group {
  margin-top: var(--space-6);
}

/* ---- Blog cards (index and further reading) ---------------------------------- */
.blog-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
  gap: var(--space-4);
}

.blog-card {
  overflow: hidden;
}

.blog-card-image {
  height: 200px;
  background: var(--surface-sunken);
  object-fit: cover;
}

.blog-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: var(--space-3);
}

.blog-card-meta span:first-child {
  color: var(--text-highlight);
}

.blog-card-title {
  font-family: var(--font-display);
  font-size: var(--text-lg);
  font-weight: var(--weight-semibold);
  line-height: var(--leading-snug);
  letter-spacing: var(--tracking-tight);
  margin-bottom: var(--space-2);
}

.blog-card-title a {
  color: var(--text-strong);
}

.blog-card-title a:hover {
  color: var(--text-link);
}

.blog-card-excerpt {
  font-size: var(--text-sm);
  line-height: var(--leading-relaxed);
  color: var(--text-muted);
}

.article-content {
  max-width: var(--measure-prose);
  margin: 0 auto;
}

.article-content h2 {
  font-size: var(--text-h3);
  margin: var(--space-8) 0 var(--space-4);
}

.article-content p {
  margin-bottom: var(--space-4);
  line-height: var(--leading-relaxed);
  color: var(--text-body);
}

.toc {
  background: var(--surface-band);
  border: 1px solid var(--border-hairline);
  border-radius: var(--radius-card);
  padding: var(--space-5);
  margin-bottom: var(--space-8);
}

.toc h3 {
  font-family: var(--font-mono);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-medium);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: var(--space-3);
}

.toc ol {
  padding-left: var(--space-5);
}

.toc li {
  margin-bottom: var(--space-1);
}

.toc a {
  font-size: var(--text-sm);
  color: var(--text-body);
  text-decoration: none;
}

.toc a:hover {
  color: var(--text-link);
}

/* ---- Byline ------------------------------------------------------------------ */
.tool-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-muted);
  margin-bottom: var(--space-6);
}

.tool-meta span {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}

.tool-meta span + span::before {
  content: "\00B7";
  color: var(--text-subtle);
}

/* ---- Skip link / visually hidden ---------------------------------------------- */
.skip-link {
  position: absolute;
  top: -100%;
  left: var(--space-4);
  background: var(--action-primary);
  color: #fff;
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  font-weight: var(--weight-semibold);
  z-index: 9999;
}

.skip-link:focus {
  top: var(--space-4);
  color: #fff;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}
