  /* ---------- Design tokens (authoritative; mirror Avalonia app) ----------

     Theme states:
     - Dark (default on `:root`)         — original brand palette
     - Light via OS preference           — `@media (prefers-color-scheme: light)`
                                           applies when no explicit override
     - Explicit light                     — `:root[data-site-theme="light"]`
     - Explicit dark (override OS-light)  — `:root[data-site-theme="dark"]`

     `/js/site-theme.js` writes the `data-site-theme` attribute
     synchronously in <head> before paint, so there's no flash.
     `localStorage.ffb-site-theme` holds `light` / `dark`.                     */
  :root {
    --bg: #0E1013;
    --section-bg: #13161A;
    --card: #15181D;
    --card-2: #191D23;
    --card-hi: #1E232A;
    --card-hover: #1E232A;
    --well: #0A0C0F;
    --border: #24292F;
    --border-hi: #2F353D;
    --hairline: #1C2027;

    --fg:           #E7EAEE;
    --text-primary: #E7EAEE;
    --fg-dim:       #AEB4BD;
    --text-dim:     #AEB4BD;
    --fg-mute:      #9AA3AF;
    --text-mute:    #9AA3AF;
    --fg-faint:     #8A95A3;
    --text-faint:   #8A95A3;

    --brand: #4F9CFF;
    --brand-hover: #68ADFF;
    --brand-on-fill: #0A1628;
    --brand-fill: #2563EB;
    --brand-fill-hover: #1D4ED8;
    --brand-soft: rgba(79, 156, 255, 0.4);

    --signal: #E8B53C;
    --signal-soft: rgba(232, 181, 60, 0.12);
    --beta: #6D28D9;
    --ok: #6CC66B;
    --err: #E86B6B;

    /* Theme-sensitive overlays that need to flip with the palette.
       `--nav-bg` is the translucent sticky nav; `--hover-wash` is
       the subtle hover-tint used on text links in compact lists
       (docs sidebar, list rows). */
    --nav-bg:      rgba(10, 12, 15, 0.9);
    --hover-wash:  rgba(255, 255, 255, 0.03);

    --max: 1100px;
    --pad-v: 96px;
    --pad-v-mob: 64px;
    --nav-h: 64px;
    --radius-sm: 6px;
    --radius: 8px;
    --radius-lg: 12px;
    --font-ui: var(--font-sans);
    --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
    --font-mono: ui-monospace, "SFMono-Regular", "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
    --shadow: 0 10px 30px rgba(0,0,0,0.40);
    --shadow-lg: 0 30px 60px rgba(0,0,0,0.50);

    color-scheme: dark;
  }

  /* OS fallback — follow the browser preference when JS has not stamped
     an explicit light/dark choice yet.
     `:not([data-site-theme="dark"])` keeps explicit dark-on-light-OS
     working. */
  @media (prefers-color-scheme: light) {
    :root:not([data-site-theme="dark"]) {
      --bg:          #FBFCFD;
      --section-bg:  #F3F5F8;
      --card:        #FFFFFF;
      --card-2:      #F7F9FB;
      --card-hi:     #EEF1F5;
      --card-hover:  #EEF1F5;
      --well:        #F7F9FB;
      --border:      #DDE2E8;
      --border-hi:   #C7CDD5;
      --hairline:    #E7EAEE;

      --fg:           #0F172A;
      --text-primary: #0F172A;
      --fg-dim:       #475569;
      --text-dim:     #475569;
      --fg-mute:      #5B6678;
      --text-mute:    #5B6678;
      --fg-faint:     #64748B;
      --text-faint:   #64748B;

      /* `--brand-on-fill` is the dark navy still used by the small
         `.beta-tag` pill (dark bg / white text). Filled CTA buttons
         use `--brand-fill` + white text instead — see `.btn-primary`. */
      --brand-on-fill: #0A1628;
      --brand-fill:    #2563EB;
      --brand-fill-hover: #1D4ED8;
      --brand-soft:    rgba(79, 156, 255, 0.28);

      --signal:       #8A6200;
      --signal-soft:  rgba(183, 134, 11, 0.14);
      --beta:         #6D28D9;
      --ok:           #15803D;
      --err:          #B91C1C;

      --nav-bg:       rgba(251, 252, 253, 0.9);
      --hover-wash:   rgba(15, 23, 42, 0.045);
      --shadow-lg:    0 24px 60px rgba(15,23,42,.14);

      color-scheme: light;
    }
  }

  /* Explicit user override — wins over OS preference. */
  :root[data-site-theme="light"] {
    --bg:          #FBFCFD;
    --section-bg:  #F3F5F8;
    --card:        #FFFFFF;
    --card-2:      #F7F9FB;
    --card-hi:     #EEF1F5;
    --card-hover:  #EEF1F5;
    --well:        #F7F9FB;
    --border:      #DDE2E8;
    --border-hi:   #C7CDD5;
    --hairline:    #E7EAEE;

    --fg:           #0F172A;
    --text-primary: #0F172A;
    --fg-dim:       #475569;
    --text-dim:     #475569;
    --fg-mute:      #5B6678;
    --text-mute:    #5B6678;
    --fg-faint:     #64748B;
    --text-faint:   #64748B;

    --brand-on-fill: #0A1628;
    --brand-fill:    #2563EB;
    --brand-fill-hover: #1D4ED8;
    --brand-soft:    rgba(79, 156, 255, 0.28);

    --signal:       #8A6200;
    --signal-soft:  rgba(183, 134, 11, 0.14);
    --beta:         #6D28D9;
    --ok:           #15803D;
    --err:          #B91C1C;

    --nav-bg:       rgba(251, 252, 253, 0.9);
    --hover-wash:   rgba(15, 23, 42, 0.045);
    --shadow-lg:    0 24px 60px rgba(15,23,42,.14);

    color-scheme: light;
  }

  /* Explicit dark override — defeats OS-light preference. The base
     `:root` already carries the dark tokens, so we just re-assert
     `color-scheme: dark` in case the media query above flipped it. */
  :root[data-site-theme="dark"] {
    color-scheme: dark;
  }

  /* ---------- Theme-aware images ----------
     ResponsiveAssetImage.razor emits a <span class="theme-aware-image">
     wrapper around two <picture> blocks (.theme-light + .theme-dark)
     when the root light/default PNG and an images/.../dark/ sibling
     exist. CSS hides the wrong variant per the active data-site-theme
     attribute. */
  .theme-aware-image {
    display: contents;
  }
  :root[data-site-theme="light"] .theme-aware-image .theme-dark,
  :root[data-site-theme="dark"]  .theme-aware-image .theme-light {
    display: none;
  }
  :root:not([data-site-theme]) .theme-aware-image .theme-dark {
    display: none;
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-site-theme]) .theme-aware-image .theme-light {
      display: none;
    }
    :root:not([data-site-theme]) .theme-aware-image .theme-dark {
      display: block;
    }
  }

  /* ---------- Reset ---------- */
  *, *::before, *::after { box-sizing: border-box; }
  html { scroll-behavior: smooth; }
  body {
    margin: 0;
    font-family: var(--font-sans);
    font-weight: 400;
    font-size: 16px;
    line-height: 1.55;
    color: var(--text-primary);
    background: var(--bg);
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }
  h1, h2, h3, p, ul, ol { margin: 0; }
  ul { padding: 0; list-style: none; }
  a { color: var(--brand); text-decoration: none; }
  a:hover { color: var(--brand-hover); }
  img { display: block; max-width: 100%; height: auto; }

  :where(.form-hint, .subscribe-consent, .legal, .confirm-card-body,
         .confirm-card-fine) a {
    text-decoration: underline;
    text-decoration-thickness: 0.08em;
    text-underline-offset: 0.18em;
  }

  :where(.docs-article p, .docs-article li,
         .docs-manual p, .docs-manual li,
         .docs-release-banner) a {
    text-decoration: underline;
    text-decoration-color: currentColor;
    text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
    text-decoration-thickness: 0.06em;
    text-underline-offset: 0.22em;
  }

  :where(.docs-article p, .docs-article li,
         .docs-manual p, .docs-manual li,
         .docs-release-banner) a:hover,
  :where(.docs-article p, .docs-article li,
         .docs-manual p, .docs-manual li,
         .docs-release-banner) a:focus-visible {
    text-decoration-color: currentColor;
    text-decoration-thickness: 0.08em;
  }

  a[href],
  button,
  input,
  select,
  textarea,
  summary,
  [tabindex]:not([tabindex="-1"]) {
    outline: 2px solid transparent;
    outline-offset: 3px;
    border-radius: 4px;
  }
  a[href]:focus,
  button:focus,
  input:focus,
  select:focus,
  textarea:focus,
  summary:focus,
  [tabindex]:not([tabindex="-1"]):focus {
    outline-color: var(--brand) !important;
  }
  /* Blazor's <FocusOnNavigate> sets focus on the first h1 after
     route load so screen readers announce the new page. Sighted
     users shouldn't see a focus ring on something they didn't
     tab to; FocusOnNavigate marks the target with tabindex="-1",
     which we use as the signal to suppress the outline. */
  [tabindex="-1"]:focus,
  [tabindex="-1"]:focus-visible { outline: none; }

  .visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    clip-path: inset(50%) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

  code, .mono { font-family: var(--font-mono); }

  /* ---------- Layout ---------- */
  .wrap { max-width: var(--max); margin: 0 auto; padding: 0 24px; }
  section { padding-top: var(--pad-v); padding-bottom: var(--pad-v); }
  @media (max-width: 900px) {
    section { padding-top: var(--pad-v-mob); padding-bottom: var(--pad-v-mob); }
  }
  @media (max-width: 500px) {
    .wrap { padding: 0 18px; }
  }

  .section-alt { background: var(--section-bg); }

  .eyebrow {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--brand);
    margin-bottom: 12px;
  }
  .eyebrow-free {
    display: inline-block;
    margin-right: 10px;
    padding: 2px 8px;
    background: rgba(108, 198, 107, 0.16);
    color: var(--ok);
    font-weight: 700;
    letter-spacing: 0.08em;
    border-radius: 4px;
  }

  /* Hero trust strip — sits below the subscribe form (under the consent
     checkbox), replacing the old tiny uppercase eyebrow. Reads as a
     confident statement, not a row of buttons: a green "free" badge and
     the supported OSes as bold inline text, with the sims on a quieter
     line beneath. */
  .hero-trust {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px;
    margin-top: 24px;
  }
  .hero-trust-free {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 13px;
    background: rgba(108, 198, 107, 0.15);
    color: var(--ok);
    font-weight: 700;
    font-size: 13.5px;
    letter-spacing: 0.01em;
    border-radius: 999px;
  }
  .hero-trust-os {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    letter-spacing: -0.005em;
  }
  .hero-trust-os i {
    font-style: normal;
    font-weight: 400;
    margin: 0 9px;
    color: var(--text-mute);
    opacity: 0.7;
  }
  .hero-trust-sims {
    margin: 11px 0 0;
    font-size: 13.5px;
    color: var(--text-mute);
  }

  h1 {
    font-size: 56px;
    line-height: 1.1;
    letter-spacing: -0.02em;
    font-weight: 700;
    color: var(--text-primary);
  }
  h2 {
    font-size: 32px;
    line-height: 1.2;
    font-weight: 600;
    color: var(--text-primary);
  }
  h3 {
    font-size: 20px;
    line-height: 1.3;
    font-weight: 600;
    color: var(--text-primary);
  }
  .lede {
    color: var(--text-dim);
    font-size: 18px;
    line-height: 1.55;
    max-width: 560px;
  }
  .lede-emph {
    display: inline-block;
    padding: 1px 8px;
    background: rgba(108, 198, 107, 0.14);
    color: var(--ok);
    font-weight: 700;
    border-radius: 4px;
    letter-spacing: -0.01em;
  }
  .subhead {
    color: var(--text-dim);
    max-width: 640px;
  }
  .small { font-size: 14px; line-height: 1.5;  color: var(--text-mute); }
  .tiny  { font-size: 13px; line-height: 1.45; color: var(--text-faint); }

  @media (max-width: 700px) {
    h1 { font-size: 36px; line-height: 1.15; }
    h2 { font-size: 26px; }
    .lede { font-size: 16px; }
  }

  /* ---------- Nav ---------- */
  .site-header { position: relative; z-index: 50; }
  .skip-link {
    position: fixed;
    top: 10px;
    left: 10px;
    transform: translateY(-160%);
    z-index: 100;
    padding: 10px 14px;
    color: var(--bg);
    background: var(--text-primary);
    border-radius: var(--radius-sm);
    font-weight: 700;
    transition: transform .15s ease;
  }
  /* Shadow only while the link is on-screen (focused). At rest the link is
     translated above the viewport, but a base box-shadow's 24px blur leaked a
     soft smudge into the top-left corner of every page. */
  .skip-link:focus { transform: translateY(0); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.28); }
  nav.top {
    position: sticky;
    top: 0;
    z-index: 50;
    height: var(--nav-h);
    background: var(--nav-bg);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid var(--border);
  }
  nav.top .wrap {
    display: flex;
    align-items: center;
    height: 100%;
    gap: 20px;
  }
  .brand {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-right: auto;
    font-weight: 600;
    font-size: 16px;
    color: var(--text-primary);
  }
  /* The brand block is an <a> on every page (see SiteNav.razor).
     Strip the default link styling so it reads the same whether we
     re-use the component on Home (anchor to self) or a sub-page. */
  .brand-link { text-decoration: none; }
  .brand-link:hover .brand-glyph { filter: brightness(1.15); }
  .brand-link:hover > span { color: var(--brand); }
  .brand-glyph {
    width: 26px; height: 26px;
    display: inline-block;
    flex-shrink: 0;
  }
  .pill-beta {
    display: inline-block;
    margin-left: 8px;
    padding: 2px 7px;
    background: var(--beta);
    color: #fff;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.08em;
    border-radius: 999px;
    vertical-align: 2px;
  }
  #primary-nav {
    display: flex;
    gap: 24px;
    align-items: center;
  }
  #primary-nav a {
    color: var(--text-dim);
    font-size: 15px;
    font-weight: 500;
  }
  #primary-nav a:hover { color: var(--text-primary); }

  /* ---- Dropdown menus (Features / Community / Docs) ----------------
     <details>-based: CSP-safe (no inline JS), keyboard-operable, and they
     expand inline inside the mobile drawer. site.js closes an open menu on
     outside-click / Escape / navigation as a progressive enhancement. */
  .nav-dd-li { position: relative; display: flex; }
  .nav-dd { position: relative; }
  .nav-dd > summary {
    display: inline-flex; align-items: center; gap: 5px;
    color: var(--text-dim); font-size: 15px; font-weight: 500;
    cursor: pointer; list-style: none; user-select: none;
  }
  .nav-dd > summary::-webkit-details-marker { display: none; }
  .nav-dd > summary::marker { content: ""; }
  .nav-dd > summary:hover,
  .nav-dd[open] > summary { color: var(--text-primary); }
  .nav-dd-caret { transition: transform .15s ease; opacity: .7; }
  .nav-dd[open] .nav-dd-caret { transform: rotate(180deg); }
  .nav-dd-menu {
    position: absolute; top: calc(100% + 14px); left: -14px;
    min-width: 252px; z-index: 60;
    background: var(--card); border: 1px solid var(--border);
    border-radius: var(--radius-lg); box-shadow: 0 14px 36px rgba(0,0,0,.20);
    padding: 8px; display: flex; flex-direction: column; gap: 2px;
  }
  .nav-dd-menu a {
    display: flex; flex-direction: column; gap: 2px;
    padding: 9px 12px; border-radius: var(--radius); text-decoration: none;
  }
  .nav-dd-menu a:hover { background: var(--hover-wash); }
  .nav-dd-t { font-size: 14px; font-weight: 600; color: var(--text-primary); }
  .nav-dd-d { font-size: 12px; color: var(--text-dim); }

  @media (max-width: 820px) {
    #primary-nav { gap: 16px; }
    #primary-nav a { font-size: 14px; }
  }

  /* Mobile nav drawer. A real button toggles `.is-open` so the drawer
     is reachable by keyboard and exposes aria-expanded state. */
  .nav-burger { display: none; }
  .nav-scrim { display: none; }

  .language-selector {
    position: relative;
    flex: 0 0 auto;
  }
  .language-selector summary {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-height: 36px;
    padding: 0 10px;
    border: 1px solid var(--hairline);
    border-radius: var(--radius-sm);
    color: var(--text-dim);
    background: transparent;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    list-style: none;
  }
  .language-selector summary::-webkit-details-marker { display: none; }
  .language-selector summary::after {
    content: "";
    width: 7px;
    height: 7px;
    border-right: 1.5px solid currentColor;
    border-bottom: 1.5px solid currentColor;
    transform: translateY(-2px) rotate(45deg);
  }
  .language-selector[open] summary,
  .language-selector summary:hover {
    color: var(--text-primary);
    background: var(--card);
    border-color: var(--border);
  }
  .language-selector-icon {
    width: 17px;
    height: 17px;
    flex: 0 0 auto;
    color: var(--text-faint);
  }
  .language-selector-current {
    max-width: 150px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .language-selector ul {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    display: grid;
    width: min(300px, calc(100vw - 28px));
    max-height: min(520px, calc(100vh - var(--nav-h) - 30px));
    overflow-y: auto;
    padding: 8px;
    margin: 0;
    list-style: none;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    box-shadow: 0 20px 48px rgba(0, 0, 0, 0.32);
    z-index: 60;
  }
  .language-selector:not([open]) ul { display: none; }
  .language-selector li { display: block; }
  .language-selector a {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 10px;
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    text-decoration: none;
    font-size: 14px;
  }
  .language-selector a:hover,
  .language-selector a[aria-current="true"] {
    background: var(--hover-wash);
  }
  .language-selector a[aria-current="true"] {
    box-shadow: inset 3px 0 0 var(--brand);
  }
  .language-selector-english {
    color: var(--text-faint);
    font-size: 12px;
    white-space: nowrap;
  }

  .translation-notice {
    color: var(--text-primary);
    background: color-mix(in srgb, var(--brand) 14%, var(--bg));
    border-bottom: 1px solid var(--border);
  }
  .translation-notice .wrap {
    display: flex;
    gap: 10px;
    align-items: baseline;
    padding-top: 10px;
    padding-bottom: 10px;
    font-size: 14px;
    line-height: 1.45;
  }
  .translation-notice strong {
    flex: 0 0 auto;
  }
  .translation-notice a {
    color: var(--brand);
    font-weight: 700;
  }

  @media (max-width: 640px) {
    .brand { font-size: 15px; }
    .language-selector summary {
      width: auto;
      justify-content: center;
      padding: 0 9px;
    }
    .language-selector-current {
      position: absolute;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0, 0, 0, 0);
      white-space: nowrap;
    }
    .translation-notice .wrap {
      display: block;
      font-size: 13px;
    }
    .translation-notice strong {
      display: block;
      margin-bottom: 2px;
    }

    .nav-burger {
      display: inline-flex;
      flex-direction: column;
      justify-content: center;
      gap: 5px;
      width: 36px;
      height: 36px;
      padding: 8px;
      background: transparent;
      border: 1px solid transparent;
      border-radius: var(--radius-sm);
      cursor: pointer;
      transition: border-color .15s ease, background-color .15s ease;
    }
    .nav-burger span {
      display: block;
      height: 2px;
      width: 100%;
      background: var(--text-dim);
      border-radius: 2px;
      transition: transform .2s ease, opacity .15s ease, background-color .15s ease;
      transform-origin: center;
    }
    .nav-burger:hover span { background: var(--text-primary); }

    /* Drawer state: ul becomes a column, pinned to the right edge
       below the nav. It stays out of layout entirely while closed so
       it does not create horizontal document overflow on mobile. */
    #primary-nav {
      display: none;
      position: fixed;
      top: var(--nav-h);
      right: 0;
      width: min(260px, 80vw);
      max-height: calc(100vh - var(--nav-h));
      overflow-y: auto;
      flex-direction: column;
      align-items: stretch;
      gap: 0;
      padding: 12px 0;
      margin: 0;
      background: var(--card);
      border-left: 1px solid var(--border);
      border-bottom: 1px solid var(--border);
      box-shadow: -12px 20px 40px rgba(0, 0, 0, 0.35);
      z-index: 49;
    }
    #primary-nav li { display: block; }
    #primary-nav a {
      display: block;
      padding: 12px 20px;
      font-size: 15px;
      color: var(--text-primary);
    }
    /* Dropdowns expand inline within the drawer instead of as popovers. */
    .nav-dd-li, .nav-dd { display: block; width: 100%; }
    .nav-dd > summary {
      display: flex; justify-content: space-between; align-items: center;
      box-sizing: border-box; width: 100%;
      padding: 12px 20px; font-size: 15px; color: var(--text-primary);
    }
    .nav-dd-menu {
      position: static; min-width: 0; z-index: auto;
      background: transparent; border: none; box-shadow: none;
      border-radius: 0; padding: 0 0 6px 0; gap: 0;
    }
    .nav-dd-menu a { padding: 9px 20px 9px 34px; }
    .nav-dd-t { font-weight: 500; }
    .nav-dd-d { display: none; }
    #primary-nav a:hover { background: var(--hover-wash); }

    /* Scrim — full-viewport tint below the drawer. Hidden by default;
       becomes interactive + visible when the menu is open. */
    .nav-scrim {
      display: block;
      position: fixed;
      top: var(--nav-h);
      left: 0;
      right: 0;
      bottom: 0;
      background: rgba(0, 0, 0, 0.45);
      border: 0;
      padding: 0;
      opacity: 0;
      pointer-events: none;
      transition: opacity .2s ease-out;
      z-index: 48;
    }

    nav.top.is-open #primary-nav { display: flex; }
    nav.top.is-open .nav-scrim { opacity: 1; pointer-events: auto; }

    /* Burger → X animation when open. */
    nav.top.is-open .nav-burger span:nth-child(1) {
      transform: translateY(7px) rotate(45deg);
    }
    nav.top.is-open .nav-burger span:nth-child(2) {
      opacity: 0;
    }
    nav.top.is-open .nav-burger span:nth-child(3) {
      transform: translateY(-7px) rotate(-45deg);
    }
  }

  /* Theme toggle — rightmost item in the top nav. Shows a sun OR
     moon depending on the active theme; click flips
     Light ↔ Dark via /js/site-theme.js. Visible on
     every viewport, including mobile (where ul hides but the button
     stays reachable). */
  .theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    margin-left: 4px;
    padding: 0;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    color: var(--text-dim);
    cursor: pointer;
    transition: color .15s ease, border-color .15s ease, background-color .15s ease;
  }
  .theme-toggle:hover {
    color: var(--text-primary);
    border-color: var(--hairline);
    background: var(--card);
  }
  .theme-toggle svg { width: 18px; height: 18px; display: block; }
  /* Swap which glyph is visible based on the current theme. Default
     visibility hides both; the .is-light / .is-dark class (set by
     site-theme.js) reveals the matching glyph. */
  .theme-toggle .i-sun,
  .theme-toggle .i-moon { display: none; }
  .theme-toggle.is-dark  .i-sun  { display: block; }
  .theme-toggle.is-light .i-moon { display: block; }

  /* ---------- Hero ---------- */
  .hero {
    position: relative;
    padding-top: 72px;
    padding-bottom: 96px;
    background:
      radial-gradient(circle at 50% 0%,
        rgba(79, 156, 255, 0.07) 0%,
        transparent 55%),
      var(--bg);
  }
  /* Hero breaks the standard 1100px wrap on wide screens so the
     product shot has more room to breathe — text still wraps nicely
     against the 580px lede max-width. Below 900px the layout stacks
     and we inherit the default wrap width again. */
  .hero .wrap { max-width: var(--max); }
  .hero-grid {
    display: grid;
    grid-template-columns: 5fr 6fr;
    gap: 64px;
    align-items: center;
  }
  @media (max-width: 900px) {
    .hero .wrap { max-width: var(--max); }
    .hero-grid { grid-template-columns: 1fr; gap: 40px; }
    .hero { padding-top: 48px; padding-bottom: 64px; }
  }
  .hero picture { display: block; width: 100%; height: 100%; }
  .hero h1 { margin-bottom: 20px; }
  .hero .lede { margin-bottom: 28px; }
  .cta-row {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 14px;
  }
  .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 48px;
    min-width: 168px;
    padding: 0 18px;
    font-family: var(--font-sans);
    font-size: 14px;
    font-weight: 600;
    border-radius: var(--radius-sm);
    cursor: pointer;
    border: 1px solid transparent;
    transition: background 150ms ease-out, transform 150ms ease-out, border-color 150ms ease-out;
    text-decoration: none;
  }
  .btn-primary {
    background: var(--brand-fill);
    color: #fff;
  }
  .btn-primary:hover {
    background: var(--brand-fill-hover);
    color: #fff;
    transform: translateY(-1px);
  }
  .btn-secondary {
    background: var(--card);
    color: var(--text-primary);
    border-color: var(--border);
  }
  .btn-secondary:hover {
    background: var(--card-hover);
    border-color: var(--brand-soft);
    color: var(--text-primary);
    transform: translateY(-1px);
  }
  .btn-disabled {
    background: var(--card);
    color: var(--text-mute);
    border-color: var(--border);
    cursor: not-allowed;
  }
  .btn-disabled:hover { transform: none; }
  .btn .glyph {
    width: 16px; height: 16px;
    display: inline-block;
    flex-shrink: 0;
  }
  .btn .tag {
    font-size: 10px;
    font-weight: 500;
    padding: 2px 6px;
    border-radius: 999px;
    background: var(--well);
    color: var(--text-mute);
    letter-spacing: 0.05em;
  }
  .btn .beta-tag {
    display: inline-flex;
    align-items: center;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    padding: 2px 7px;
    border-radius: 999px;
    background: var(--brand-on-fill);
    color: #fff;
    margin-left: 2px;
  }
  .hero-spec {
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--text-mute);
    margin-top: 14px;
  }
  .hero-img-frame {
    border-radius: var(--radius-lg);
    border: 1px solid var(--border);
    background: var(--well);
    overflow: hidden;
    aspect-ratio: 1 / 1;
  }
  .hero-img-frame img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  /* ---------- Features ---------- */
  .features .header { margin-bottom: 48px; }
  .features .header h2 { margin-bottom: 10px; }
  .feature-row {
    display: grid;
    grid-template-columns: 80px 1fr;
    gap: 28px;
    align-items: start;
    padding: 28px 0;
    border-top: 1px solid var(--hairline);
  }
  .feature-row:last-child { border-bottom: 1px solid var(--hairline); }
  .feature-icon {
    width: 56px; height: 56px;
    color: var(--brand);
    flex-shrink: 0;
  }
  .feature-row h3 { margin-bottom: 8px; }
  .feature-row p { color: var(--text-dim); }
  @media (max-width: 700px) {
    .feature-row { grid-template-columns: 1fr; gap: 14px; }
  }

  /* ---------- App tour ---------- */
  .tour .header { margin-bottom: 40px; }
  .tour .header h2 { margin-bottom: 10px; }
  .tiles {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
  }
  @media (max-width: 900px) { .tiles { grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 600px) { .tiles { grid-template-columns: 1fr; } }
  .tile {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    overflow: hidden;
    transition: border-color 150ms ease-out, background 150ms ease-out;
  }
  .tile:hover { border-color: var(--brand-soft); background: var(--card-hover); }
  .tile .shot {
    display: block;
    position: relative;
    aspect-ratio: 16 / 9;
    background: var(--well);
    border-bottom: 1px solid var(--border);
    overflow: hidden;
    cursor: zoom-in;
  }
  .tile .shot picture,
  .app-shot-link picture {
    display: block;
    width: 100%;
    height: 100%;
  }
  .tile .shot img {
    width: 100%; height: 100%; object-fit: cover; object-position: top left;
    transition: transform 200ms ease-out;
  }
  .tile .shot:hover img { transform: scale(1.03); }
  .tile .shot::after {
    content: '';
    position: absolute;
    top: 10px; right: 10px;
    width: 28px; height: 28px;
    background: rgba(10, 12, 15, 0.75);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 6px;
    opacity: 0;
    transition: opacity 150ms ease-out;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23E7EAEE' stroke-width='1.5' stroke-linecap='round'><circle cx='7' cy='7' r='4.5'/><path d='M10.3 10.3L14 14'/><path d='M7 5v4M5 7h4'/></svg>");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 16px 16px;
  }
  .tile:hover .shot::after { opacity: 1; }

  /* ---------- Lightbox ----------
     The backdrop stays dark in both themes (standard lightbox
     convention — focus the eye on the image, not the page). That
     means every control INSIDE the lightbox has to use fixed
     light-on-dark colours, not the site's theme tokens — otherwise
     in light mode the chrome inherits dark text on a dark overlay
     and the close + prev/next buttons vanish. */
  .lightbox {
    padding: 0;
    border: none;
    background: transparent;
    color: #E5E7EB;
    max-width: none;
    max-height: none;
    width: 100vw;
    height: 100vh;
    margin: 0;
    overflow: visible;
  }
  .lightbox::backdrop {
    background: rgba(5, 7, 10, 0.92);
    backdrop-filter: blur(6px);
  }
  .lightbox[open] {
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .lb-stage {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
    max-width: 96vw;
  }
  .lb-stage img {
    max-width: 96vw;
    max-height: calc(100vh - 140px);
    width: auto;
    height: auto;
    border-radius: 8px;
    border: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow: 0 30px 60px rgba(0, 0, 0, 0.5);
    display: block;
  }
  .lb-caption {
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(229, 231, 235, 0.8);
  }
  .lb-caption .lb-count {
    color: rgba(229, 231, 235, 0.55);
    font-family: var(--font-mono);
    font-size: 12px;
    margin-left: 10px;
    letter-spacing: 0.04em;
    text-transform: none;
  }
  .lb-btn {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 44px;
    height: 44px;
    background: rgba(10, 12, 15, 0.7);
    border: 1px solid rgba(255, 255, 255, 0.18);
    color: #E5E7EB;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background 150ms ease-out, border-color 150ms ease-out;
  }
  .lb-btn:hover {
    background: rgba(30, 35, 42, 0.9);
    border-color: rgba(120, 170, 255, 0.55);
  }
  .lb-prev { left: -60px; }
  .lb-next { right: -60px; }
  @media (max-width: 820px) {
    .lb-prev { left: 8px; }
    .lb-next { right: 8px; }
    .lb-btn { background: rgba(10, 12, 15, 0.85); }
  }
  .lb-close {
    position: fixed;
    top: 20px;
    right: 20px;
    width: 40px;
    height: 40px;
    background: rgba(10, 12, 15, 0.7);
    border: 1px solid rgba(255, 255, 255, 0.18);
    color: #E5E7EB;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    line-height: 1;
  }
  .lb-close:hover {
    background: rgba(30, 35, 42, 0.9);
    border-color: rgba(120, 170, 255, 0.55);
  }
  .tile .body { padding: 16px 18px 18px; }
  .tile h3 { font-size: 17px; margin-bottom: 4px; }
  .tile p { font-size: 14px; color: var(--text-dim); line-height: 1.5; }

  /* ---------- Compatibility ---------- */
  .compat .header { margin-bottom: 40px; }
  .compat .header h2 { margin-bottom: 10px; }
  .compat-cols {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 28px;
  }
  @media (max-width: 800px) { .compat-cols { grid-template-columns: 1fr; gap: 24px; } }
  .compat-col {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 24px;
  }
  .compat-col .label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-mute);
    margin-bottom: 10px;
  }
  .compat-col h3 { font-size: 20px; margin-bottom: 10px; }
  .compat-col p { color: var(--text-dim); font-size: 16px; line-height: 1.6; }
  .compat-col .note {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--hairline);
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--text-mute);
    line-height: 1.5;
  }

  /* ---------- FFB Probe promotion ---------- */
  .probe-promo {
    padding-top: 80px;
    padding-bottom: 80px;
    background: var(--section-bg);
  }
  .probe-promo-grid {
    display: grid;
    grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);
    gap: 44px;
    align-items: center;
  }
  .probe-promo h2 {
    margin-bottom: 12px;
  }
  .probe-promo .subhead {
    margin-bottom: 24px;
  }
  .probe-promo-actions {
    margin-bottom: 14px;
  }
  .probe-promo-facts {
    display: grid;
    gap: 14px;
  }
  .probe-promo-facts > div {
    display: grid;
    grid-template-columns: 46px minmax(0, 1fr);
    gap: 6px 14px;
    align-items: start;
    padding: 18px;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
  }
  .probe-fact-k {
    grid-row: 1 / span 2;
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border-radius: 999px;
    border: 1px solid color-mix(in srgb, var(--brand) 45%, var(--border));
    background: color-mix(in srgb, var(--brand) 12%, var(--card));
    color: var(--brand);
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 700;
  }
  .probe-promo-facts strong {
    color: var(--text-primary);
    font-size: 16px;
  }
  .probe-promo-facts p {
    margin: 0;
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.55;
  }
  @media (max-width: 850px) {
    .probe-promo-grid {
      grid-template-columns: 1fr;
      gap: 32px;
    }
  }

  /* ---------- Pricing ---------- */
  .pricing .header { margin-bottom: 40px; max-width: 720px; }
  .pricing .header h2 { margin-bottom: 10px; }
  .pricing-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    align-items: stretch;
  }
  @media (max-width: 800px) { .pricing-grid { grid-template-columns: 1fr; } }
  .pricing-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 28px;
    display: flex;
    flex-direction: column;
    gap: 14px;
  }
  .pricing-card .label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--brand);
  }
  .pricing-card h3 { font-size: 20px; margin: 0; }
  .pricing-support-cta {
    margin-top: auto;
    padding-top: 18px;
    border-top: 1px solid var(--hairline);
  }
  .pricing-support-cta .btn {
    margin-bottom: 10px;
  }
  .pricing-support-cta p {
    color: var(--text-mute);
    font-size: 13px;
    line-height: 1.5;
  }
  .pricing-card-muted .label { color: var(--text-mute); }
  .pricing-card-muted { background: transparent; border-style: dashed; }
  .pricing-muted-body { color: var(--text-dim); font-size: 16px; line-height: 1.6; }
  .checklist { display: flex; flex-direction: column; gap: 10px; }
  .checklist li {
    position: relative;
    padding-left: 26px;
    color: var(--text-dim);
    font-size: 16px;
    line-height: 1.6;
  }
  .checklist li::before {
    content: '';
    position: absolute;
    left: 4px;
    top: 7px;
    width: 6px;
    height: 10px;
    border-right: 2px solid var(--brand);
    border-bottom: 2px solid var(--brand);
    transform: rotate(45deg);
  }
  .checklist-dim li::before {
    border-color: var(--text-mute);
  }

  /* ---------- Support payment ---------- */
  .support-dev {
    padding-top: 72px;
    padding-bottom: 88px;
    background: var(--bg);
  }
  .support-dev-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(340px, 0.9fr);
    gap: 56px;
    align-items: start;
  }
  .support-dev h1 {
    max-width: 720px;
    margin-bottom: 20px;
  }
  .support-dev .lede {
    max-width: 680px;
  }
  .support-dev-facts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-top: 30px;
  }
  .support-dev-facts > div,
  .support-dev-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
  }
  .support-dev-facts > div {
    padding: 16px;
  }
  .support-dev-facts strong,
  .support-dev-facts span {
    display: block;
  }
  .support-dev-facts strong {
    margin-bottom: 4px;
    color: var(--text-primary);
    font-size: 14px;
  }
  .support-dev-facts span {
    color: var(--text-dim);
    font-size: 13px;
    line-height: 1.45;
  }
  .support-dev-card {
    padding: 28px;
  }
  .support-dev-card h2 {
    font-size: 24px;
    margin-bottom: 10px;
  }
  .support-dev-card > p {
    color: var(--text-dim);
    margin-bottom: 22px;
  }
  .support-form {
    display: grid;
    gap: 20px;
  }
  .support-form input[type="email"],
  .support-form input[type="number"] {
    background: var(--well);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    color: var(--text-primary);
    padding: 12px 14px;
    font-family: inherit;
    font-size: 14px;
    line-height: 1.55;
    width: 100%;
    transition: border-color .15s ease, background-color .15s ease;
  }
  .support-form input:focus {
    border-color: var(--brand);
    background: var(--card-hover);
  }
  .money-input {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: 8px;
    background: var(--well);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding-left: 14px;
  }
  .money-input span {
    color: var(--text-mute);
    font-family: var(--font-mono);
  }
  .money-input input[type="number"] {
    border: 0;
    background: transparent;
    padding-left: 0;
  }
  .money-input:focus-within {
    border-color: var(--brand);
    background: var(--card-hover);
  }
  .support-dev-notice {
    padding: 14px 16px;
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    background: var(--well);
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.55;
    margin-bottom: 20px;
  }
  .support-dev-notice code {
    color: var(--text-primary);
  }
  .support-identity-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(320px, 0.72fr);
    gap: 56px;
    align-items: start;
  }
  .support-identity h2,
  .support-funding h2 {
    margin-bottom: 14px;
  }
  .support-identity p {
    max-width: 710px;
    color: var(--text-dim);
    font-size: 16px;
    line-height: 1.7;
    margin-bottom: 16px;
  }
  .support-profile-links {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 24px;
  }
  .support-profile-links a {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 8px 12px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--card);
    color: var(--text-primary);
    font-size: 14px;
    font-weight: 600;
  }
  .support-profile-links a:hover {
    border-color: color-mix(in srgb, var(--brand) 55%, var(--border));
    color: var(--brand-hover);
    background: var(--card-hover);
  }
  .support-identity-panel {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 26px;
  }
  .support-identity-panel p {
    margin-bottom: 18px;
    font-size: 15px;
    line-height: 1.65;
  }
  .support-proof-list {
    display: grid;
    gap: 10px;
  }
  .support-proof-list li {
    position: relative;
    padding-left: 22px;
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.5;
  }
  .support-proof-list li::before {
    content: '';
    position: absolute;
    left: 3px;
    top: 8px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--brand);
  }
  .support-section-header {
    max-width: 780px;
    margin-bottom: 36px;
  }
  .support-section-header h2 {
    margin-bottom: 12px;
  }
  .support-trust-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
  }
  .support-trust-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 22px;
  }
  .support-trust-card .label {
    margin-bottom: 10px;
    color: var(--brand);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }
  .support-trust-card h3 {
    margin-bottom: 8px;
    font-size: 19px;
  }
  .support-trust-card p {
    color: var(--text-dim);
    font-size: 15px;
    line-height: 1.6;
  }
  .support-funding-grid {
    display: grid;
    grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.22fr);
    gap: 48px;
    align-items: start;
  }
  .support-final-actions {
    margin-top: 28px;
  }
  .support-funded-list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
  }
  .support-funded-list > div {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 18px;
  }
  .support-funded-list strong,
  .support-funded-list span {
    display: block;
  }
  .support-funded-list strong {
    margin-bottom: 6px;
    color: var(--text-primary);
    font-size: 15px;
  }
  .support-funded-list span {
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.55;
  }
  @media (max-width: 900px) {
    .support-dev-grid,
    .support-identity-grid,
    .support-funding-grid {
      grid-template-columns: 1fr;
      gap: 34px;
    }
    .support-trust-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }
  @media (max-width: 700px) {
    .support-dev-facts,
    .support-trust-grid,
    .support-funded-list {
      grid-template-columns: 1fr;
    }
    .support-dev-card,
    .support-identity-panel {
      padding: 22px;
    }
  }

  /* ---------- FAQ ---------- */
  .faq .header { margin-bottom: 32px; }
  .faq .header h2 { margin-bottom: 10px; }
  .faq-list { display: flex; flex-direction: column; gap: 10px; }
  .faq-item {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    overflow: hidden;
  }
  .faq-item summary {
    padding: 16px 20px;
    cursor: pointer;
    font-size: 16px;
    font-weight: 500;
    color: var(--text-primary);
    list-style: none;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
  }
  .faq-item[open] summary {
    border-bottom: 1px solid var(--hairline);
  }
  .faq-item summary::-webkit-details-marker { display: none; }
  .faq-item summary::after {
    content: '';
    flex-shrink: 0;
    width: 10px; height: 10px;
    border-right: 2px solid var(--text-mute);
    border-bottom: 2px solid var(--text-mute);
    transform: rotate(45deg) translate(-2px, -2px);
    transition: transform 180ms ease-out;
  }
  .faq-item[open] summary::after {
    transform: rotate(-135deg) translate(-2px, -2px);
  }
  .faq-item .faq-body {
    padding: 18px 20px 22px;
    color: var(--text-dim);
    font-size: 16px;
    line-height: 1.7;
  }
  .faq-item .faq-body p { margin: 0 0 14px; }
  .faq-item .faq-body p:last-child { margin-bottom: 0; }

  /* ---------- SEO landing + download pages ---------- */
  .landing-hero,
  .download-hero {
    padding-top: 72px;
    padding-bottom: 88px;
    background: var(--bg);
  }
  .landing-hero-grid,
  .download-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(360px, 0.9fr);
    gap: 48px;
    align-items: center;
  }
  .landing-hero-grid > *,
  .download-grid > *,
  .landing-split > *,
  .landing-shot-grid > * {
    min-width: 0;
  }
  .landing-hero h1,
  .download-hero h1 {
    margin-bottom: 20px;
    text-wrap: balance;
    overflow-wrap: normal;
    word-break: normal;
    hyphens: none;
  }
  .landing-hero .lede,
  .download-hero .lede {
    margin-bottom: 28px;
  }
  .landing-fact-panel,
  .download-panel {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 28px;
  }
  .landing-panel-kicker,
  .download-panel-kicker,
  .landing-card .label,
  .trust-card .label {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--brand);
    margin-bottom: 12px;
  }
  .landing-fact-panel dl,
  .download-panel dl {
    display: grid;
    grid-template-columns: 116px 1fr;
    gap: 12px 18px;
    margin: 0;
  }
  .landing-fact-panel dt,
  .download-panel dt {
    color: var(--text-mute);
    font-size: 13px;
    font-weight: 600;
  }
  .landing-fact-panel dd,
  .download-panel dd {
    margin: 0;
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.5;
  }
  .landing-fact-panel code,
  .download-panel code {
    color: var(--text-primary);
  }
  .landing-hero-media,
  .download-media,
  .landing-visual-stack {
    display: grid;
    gap: 16px;
  }
  .app-shot {
    margin: 0;
    min-width: 0;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    overflow: hidden;
  }
  .app-shot-link {
    display: block;
    aspect-ratio: 16 / 10;
    background: var(--well);
    border-bottom: 1px solid var(--hairline);
    overflow: hidden;
  }
  .app-shot img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: top left;
  }
  .app-shot figcaption {
    padding: 12px 14px 14px;
    color: var(--text-dim);
    font-size: 13.5px;
    line-height: 1.5;
  }
  .landing-shot-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
  }
  .download-panel h2 {
    margin-bottom: 18px;
  }
  .download-manifest {
    margin-bottom: 24px !important;
  }
  .download-manifest dd strong,
  .download-manifest dd span {
    display: block;
    overflow-wrap: anywhere;
  }
  .download-manifest dd strong {
    color: var(--text-primary);
    font-family: var(--font-mono);
    font-size: 13px;
    margin-bottom: 4px;
  }
  .download-manifest dd span {
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--text-mute);
  }
  .probe-inline-note {
    margin-top: 18px;
    padding: 14px 16px;
    background: var(--card);
    border: 1px solid var(--border);
    border-left: 3px solid var(--brand);
    border-radius: var(--radius-sm);
  }
  .probe-inline-note .label {
    margin-bottom: 5px;
    color: var(--brand);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }
  .probe-inline-note p {
    margin: 0 0 8px 0;
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.5;
  }
  .probe-inline-note a {
    font-weight: 700;
  }
  .landing-card-grid,
  .trust-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
  }
  .landing-card,
  .trust-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 24px;
  }
  .landing-card h2,
  .trust-card h2 {
    font-size: 20px;
    margin-bottom: 10px;
  }
  .landing-card p,
  .trust-card p {
    color: var(--text-dim);
    font-size: 15px;
    line-height: 1.6;
    margin-bottom: 14px;
  }
  .landing-split {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 48px;
    align-items: start;
  }
  .landing-split-visual {
    align-items: center;
  }
  .landing-split h2 {
    margin-bottom: 10px;
  }
  .landing-list {
    display: grid;
    gap: 12px;
  }
  .landing-list > div {
    padding: 16px 18px;
    background: var(--card);
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
  }
  .landing-list strong,
  .landing-list span {
    display: block;
  }
  .landing-list strong {
    margin-bottom: 4px;
    color: var(--text-primary);
  }
  .landing-list span {
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.5;
  }
  .landing-steps .header,
  .download-steps .header {
    margin-bottom: 22px;
  }
  .landing-steps ol,
  .download-steps ol {
    counter-reset: landing-step;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
    list-style: none;
    padding: 0;
    margin: 0 0 28px 0;
  }
  .landing-steps li,
  .download-steps li {
    position: relative;
    padding: 44px 18px 18px;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.5;
  }
  .landing-steps li::before,
  .download-steps li::before {
    counter-increment: landing-step;
    content: counter(landing-step);
    position: absolute;
    top: 16px;
    left: 18px;
    width: 22px;
    height: 22px;
    border-radius: 999px;
    display: grid;
    place-items: center;
    background: var(--brand-fill);
    color: #fff;
    font-family: var(--font-mono);
    font-size: 12px;
    font-weight: 700;
  }
  .landing-split-visual .landing-steps ol,
  .landing-split-visual .download-steps ol {
    grid-template-columns: repeat(2, 1fr);
  }
  .landing-final h2 {
    margin-bottom: 10px;
  }
  .landing-final .subhead {
    margin-bottom: 24px;
  }
  .landing-table-wrap {
    overflow-x: auto;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--card);
  }
  .landing-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 720px;
    font-size: 14px;
  }
  .landing-table th,
  .landing-table td {
    text-align: left;
    padding: 16px 18px;
    border-bottom: 1px solid var(--hairline);
    vertical-align: top;
  }
  .landing-table tr:last-child td {
    border-bottom: 0;
  }
  .landing-table th {
    color: var(--text-mute);
    font-size: 12px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }
  .landing-table td {
    color: var(--text-dim);
    line-height: 1.5;
  }
  .landing-table td:first-child {
    color: var(--text-primary);
    font-weight: 600;
  }
  .setup-paths .header {
    margin-bottom: 40px;
  }
  .setup-paths .header h2 {
    margin-bottom: 10px;
  }
  @media (max-width: 900px) {
    .landing-hero-grid,
    .download-grid,
    .landing-split,
    .landing-shot-grid {
      grid-template-columns: 1fr;
      gap: 32px;
    }
    .landing-card-grid,
    .trust-grid,
    .landing-steps ol,
    .download-steps ol {
      grid-template-columns: 1fr 1fr;
    }
  }
  @media (max-width: 620px) {
    .landing-hero,
    .download-hero {
      padding-top: 48px;
      padding-bottom: 64px;
    }
    .landing-fact-panel dl,
    .download-panel dl,
    .landing-card-grid,
    .trust-grid,
    .landing-steps ol,
    .download-steps ol {
      grid-template-columns: 1fr;
    }
    .landing-fact-panel,
    .download-panel,
    .landing-card,
    .trust-card {
      padding: 20px;
    }
    .app-shot figcaption {
      padding: 11px 12px 13px;
      font-size: 13px;
    }
  }

  /* ---------- Footer ---------- */
  footer {
    background: var(--well);
    border-top: 1px solid var(--border);
    padding-top: 48px;
    padding-bottom: 40px;
  }
  footer .wrap {
    display: grid;
    grid-template-columns: 1.7fr 1fr 1.25fr 1fr;
    gap: 32px;
    align-items: start;
  }
  @media (max-width: 800px) {
    footer .wrap { grid-template-columns: 1fr; gap: 28px; }
  }
  .footer-heading {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--text-mute);
    margin: 0 0 12px 0;
  }
  footer p, footer li {
    font-size: 14px;
    color: var(--text-dim);
    line-height: 1.55;
  }
  footer ul { display: flex; flex-direction: column; gap: 8px; }
  /* Links column has 6+ entries; break it into two visual columns so
     the column doesn't run long and crowd the skyline flourish below. */
  footer ul.footer-links-split {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px 24px;
  }
  footer a { color: var(--text-dim); }
  footer a:hover { color: var(--brand); }
  .footer-meta {
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--text-faint);
  }
  /* Toronto skyline flourish above the footer-bottom line.
     Pulled from FfbBridge.Desktop/Views/AboutView.axaml so site +
     app share the same 220×38 path. Kept faint — an ambient mark,
     not a visual anchor. */
  .footer-skyline {
    max-width: var(--max);
    margin: 32px auto 0;
    padding: 0 24px;
    display: flex;
    justify-content: center;
  }
  .footer-skyline .skyline {
    width: 220px;
    height: 38px;
    color: var(--text-faint);
    opacity: 0.65;
  }
  .footer-bottom {
    max-width: var(--max);
    margin: 16px auto 0;
    padding: 20px 24px 0;
    border-top: 1px solid var(--hairline);
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 8px 12px;
    font-size: 12px;
    color: var(--text-faint);
  }
  .footer-bottom .footer-made-in {
    display: inline-flex;
    align-items: center;
    gap: 8px;
  }
  .footer-bottom .ca-flag {
    width: 22px;
    height: 11px;
    border-radius: 1px;
  }
  .footer-bottom-sep { color: var(--text-faint); opacity: 0.5; }
  @media (max-width: 500px) {
    .footer-bottom-sep { display: none; }
    .footer-bottom { flex-direction: column; gap: 6px; }
  }

  /* ---------- Subscribe form (hero island) ---------- */
  .subscribe { margin: 24px 0 14px; max-width: 520px; }
  .subscribe-row {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
  }
  .subscribe-input {
    flex: 1 1 260px;
    min-width: 0;
    padding: 11px 14px;
    background: var(--well);
    color: var(--text-primary);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    font: inherit;
    font-size: 15px;
    transition: border-color .15s ease, background .15s ease;
  }
  .subscribe-input::placeholder { color: var(--text-faint); }
  .subscribe-input:focus {
    border-color: var(--brand);
    background: var(--card-hover);
  }
  .subscribe-hint {
    margin-top: 10px;
    font-size: 13px;
    color: var(--text-mute);
    line-height: 1.5;
  }
  /* CASL consent row: checkbox + inline label. The checkbox is
     unchecked by default and the submit button stays disabled
     until it's ticked. Privacy policy link lives inside the label
     so the consent is genuinely informed. */
  .subscribe-consent {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-top: 14px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text-dim);
    cursor: pointer;
    user-select: none;
  }
  .subscribe-consent input[type="checkbox"] {
    margin-top: 2px;
    flex-shrink: 0;
    width: 16px;
    height: 16px;
    accent-color: var(--brand);
    cursor: pointer;
  }
  .subscribe-consent a { color: var(--brand); }
  .subscribe-error {
    margin-top: 10px;
    font-size: 13px;
    color: var(--err);
  }
  /* Amber-toned "heads up" block — less severe than .subscribe-error.
     Used for the re-opt-in confirmation state when an address that
     previously unsubscribed is trying to sign up again. */
  .subscribe-warning {
    margin-top: 10px;
    padding: 10px 14px;
    background: rgba(232, 181, 60, 0.10);
    border: 1px solid rgba(232, 181, 60, 0.35);
    border-radius: var(--radius);
    font-size: 13px;
    line-height: 1.5;
    color: var(--text-dim);
  }
  .subscribe-warning strong { color: var(--text-primary); }
  .subscribe-warning em { font-style: normal; color: var(--signal); font-weight: 600; }
  .subscribe-success {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    padding: 20px 22px;
  }
  .subscribe-success h3 { margin-bottom: 8px; color: var(--text-primary); }
  .subscribe-success p  { color: var(--text-dim); font-size: 15px; }
  .subscribe-success a  { color: var(--brand); }

  /* ---------- Legal pages (Privacy, Terms etc) ---------- */
  .legal { padding-top: 72px; padding-bottom: 72px; }
  .legal h1 { font-size: 40px; line-height: 1.15; margin-bottom: 16px; }
  .legal .lede { margin-bottom: 24px; }
  .legal .small { color: var(--text-faint); margin-bottom: 40px; }
  .legal h2 {
    font-size: 20px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 36px 0 12px;
    padding-top: 20px;
    border-top: 1px solid var(--hairline);
  }
  .legal h2:first-of-type { padding-top: 0; border-top: 0; margin-top: 40px; }
  .legal p {
    color: var(--text-dim);
    font-size: 15px;
    line-height: 1.65;
    margin: 0 0 14px;
  }
  .legal p:last-child { margin-bottom: 0; }
  .legal-list {
    margin: 0 0 14px;
    padding-left: 0;
    list-style: none;
  }
  .legal-list li {
    position: relative;
    padding-left: 22px;
    margin-bottom: 10px;
    color: var(--text-dim);
    font-size: 15px;
    line-height: 1.6;
  }
  .legal-list li::before {
    content: "";
    position: absolute;
    left: 4px;
    top: 11px;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--brand);
    opacity: 0.6;
  }
  .legal-list strong { color: var(--text-primary); font-weight: 600; }
  .legal a { color: var(--brand); }

  /* ---------- Confirm / download pages ----------
     Tuned to fit a 1920×1080 viewport without scrolling at default
     zoom. If you add content to this page, trim an existing piece
     first — spacing here is lean on purpose. */
  .confirm { padding-top: 44px; padding-bottom: 36px; }
  .wrap.narrow { max-width: 680px; }

  /* Override the site-wide 56px h1 with a more restrained size for
     the post-flow success headline — the hero's big marquee isn't
     needed on a transactional confirmation page. */
  .confirm h1 { font-size: 38px; line-height: 1.15; }
  .confirm .lede { max-width: 580px; font-size: 16px; line-height: 1.5; }

  .confirm-hero { margin-bottom: 24px; }
  .confirm-check {
    width: 40px;
    height: 40px;
    color: var(--ok);
    margin-bottom: 12px;
  }
  /* Muted variant for "neutral" outcomes (unsubscribed, invalid token,
     etc.) where a green success tick would be too celebratory. */
  .confirm-check-muted { color: var(--text-mute); }

  /* Body paragraph inside a default (non-muted) confirm-card — used
     on /unsubscribe's "Still on the fence?" card which isn't a
     status block like "Your downloads". */
  .confirm-card-body {
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.55;
    margin: 0;
  }
  .confirm-card-body a { color: var(--brand); }

  .confirm-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    padding: 20px 26px;
    margin-bottom: 14px;
  }
  /* Inside the downloads card specifically, size the two platform
     buttons to share width equally — side-by-side on desktop, equal
     full-width stack on mobile. Without this, "Download for Windows"
     and "Download for Linux" render at their natural (different)
     content widths when stacked and look misaligned. */
  .confirm-card .cta-row { margin-bottom: 0; }
  .confirm-card .cta-row .btn { flex: 1 1 220px; }
  .confirm-card-muted {
    background: var(--section-bg);
    border-color: var(--hairline);
  }
  .confirm-card-label {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text-mute);
    margin-bottom: 12px;
  }
  .confirm-card-fine {
    margin-top: 12px;
    font-size: 13px;
    line-height: 1.55;
    color: var(--text-mute);
  }
  .confirm-card-fine a { color: var(--brand); }
  .confirm-card-muted h2 {
    font-size: 17px;
    font-weight: 600;
    margin: 0 0 6px;
    color: var(--text-primary);
  }
  .confirm-card-muted p {
    color: var(--text-dim);
    font-size: 14px;
    line-height: 1.55;
    margin: 0;
  }

  /* Toronto skyline + Made-in-Canada line live in SiteFooter.razor
     now — shared across every page — see .footer-skyline and the
     .footer-bottom block above. The per-page .made-in-canada block
     that used to sit at the bottom of /confirm was retired when
     the global footer landed. */

  /* ---------- Blazor error banner ----------
     Hidden by default; Blazor sets display:block at runtime if an
     unhandled Interactive Server error occurs. Strip'd Bootstrap
     meant we lost the default display:none rule, which is why
     every page was showing "An unhandled error has occurred" as
     plain inline text. Keep this rule. */
  #blazor-error-ui {
    background: #3c2a2a;
    color: var(--text-primary);
    border-top: 1px solid var(--err);
    bottom: 0;
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 12px 20px;
    position: fixed;
    width: 100%;
    z-index: 1000;
    font-size: 14px;
  }
  #blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 16px;
    top: 10px;
  }
  #blazor-error-ui .reload { color: var(--brand); }

  /* ---------- Feedback page ----------
     Uses the shared .confirm scaffold. Unlike the other utility pages
     (Confirm / Unsubscribe / Privacy) which lock content to a 680px
     narrow wrap, feedback uses the full .wrap (1100px) so the form
     can breathe and the two short fields (category + email) can sit
     side-by-side on desktop. */

  /* Feedback form extends .confirm-card with form-specific padding
     and a two-column grid for fields that benefit from it. */
  .feedback-form {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 22px 24px;
    padding: 28px 32px;
  }
  /* Most form fields span both columns; only those explicitly marked
     as .form-field-half stick to one. */
  .feedback-form > * { grid-column: 1 / -1; }
  .feedback-form .form-field-half { grid-column: auto; }

  @media (max-width: 680px) {
    .feedback-form {
      grid-template-columns: 1fr;
      padding: 22px;
      gap: 20px;
    }
    .feedback-form .form-field-half { grid-column: 1; }
  }

  .feedback-error {
    background: rgba(232, 107, 107, 0.08);
    border: 1px solid rgba(232, 107, 107, 0.35);
    border-radius: var(--radius);
    padding: 14px 18px;
    margin-bottom: 24px;
    color: var(--text-primary);
    font-size: 14px;
    line-height: 1.5;
  }
  .feedback-error strong {
    color: var(--err);
    display: block;
    margin-bottom: 4px;
  }

  .form-field {
    display: flex;
    flex-direction: column;
    gap: 8px;
  }
  .form-field label {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    letter-spacing: -0.005em;
  }
  .form-required {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--signal);
  }
  .form-optional {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text-mute);
  }
  .form-hint {
    font-size: 13px;
    color: var(--text-mute);
    line-height: 1.55;
    margin: 0;
  }

  .feedback-form textarea,
  .feedback-form input[type="email"],
  .feedback-form input[type="text"],
  .feedback-form select {
    background: var(--well);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    color: var(--text-primary);
    padding: 12px 14px;
    font-family: inherit;
    font-size: 14px;
    line-height: 1.55;
    width: 100%;
    transition: border-color .15s ease, background-color .15s ease;
  }
  .feedback-form textarea:focus,
  .feedback-form input:focus,
  .feedback-form select:focus {
    border-color: var(--brand);
    background: var(--card-hover);
  }
  .feedback-form textarea {
    resize: vertical;
    min-height: 160px;
    font-family: var(--font-sans);
  }
  .feedback-form select {
    appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%237A8089' stroke-width='2'><polyline points='2 4 6 8 10 4'/></svg>");
    background-repeat: no-repeat;
    background-position: right 14px center;
    padding-right: 40px;
  }
  .feedback-form select option { background: var(--well); color: var(--text-primary); }

  /* File inputs: let the browser's default render, but tint the
     surrounding container so the row reads as part of the form. */
  .feedback-form input[type="file"] {
    color: var(--text-dim);
    font-size: 13px;
    padding: 10px 0;
  }
  .feedback-form input[type="file"]::file-selector-button {
    background: var(--card-hover);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    color: var(--text-primary);
    padding: 8px 14px;
    margin-right: 12px;
    font-size: 13px;
    cursor: pointer;
    transition: background .15s ease;
  }
  .feedback-form input[type="file"]::file-selector-button:hover {
    background: rgba(79, 156, 255, 0.12);
    border-color: var(--brand-soft);
  }

  .form-file-list {
    list-style: none;
    padding: 0;
    margin: 4px 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
  }
  .form-file-list li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    padding: 8px 12px;
    background: var(--well);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    font-size: 13px;
    color: var(--text-dim);
  }
  .form-file-list .fname {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .form-file-list .fsize {
    color: var(--text-mute);
    font-variant-numeric: tabular-nums;
    font-family: var(--font-mono);
    flex-shrink: 0;
  }

  /* Honeypot: off-screen so bots autofill it; inert keeps sighted,
     keyboard, and screen-reader users away from it. */
  .hp-field {
    position: absolute;
    left: -10000px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
  }

  /* Char counter inherits .form-hint but right-aligns the number. */
  #feedback-body-count {
    color: var(--text-dim);
    font-variant-numeric: tabular-nums;
    font-family: var(--font-mono);
  }

  .form-submit-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 16px 24px;
    border-top: 1px solid var(--hairline);
    padding-top: 20px;
  }
  .form-submit-row .form-hint { flex: 1; min-width: 240px; }
  .form-submit-row .btn { padding: 12px 28px; }

  /* ---------- Documentation (/docs/*) ---------- */
  /* Two-column shell: sticky left nav + article body. Narrower than
     the marketing pages' ample whitespace — these are read, not
     scrolled. Max article width ~760px preserves comfortable line
     length. */

  .docs-shell {
    padding-top: 40px;
    padding-bottom: 96px;
    background: var(--bg);
  }

  .docs-wrap {
    max-width: 1180px;
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 56px;
    align-items: start;
  }
  @media (max-width: 900px) {
    .docs-wrap { grid-template-columns: 1fr; gap: 24px; }
  }
  /* CSS Grid items default to `min-width: auto` which makes them grow
     to fit unbreakable child content (wide <pre> blocks, long paths in
     <code>, wide tables). On a 393px viewport the article would then
     blow wider than the screen, dragging the H1 and paragraphs
     off-canvas. Forcing `min-width: 0` keeps both columns
     viewport-bounded; pre + table take care of their own overflow with
     the rules below. */
  .docs-wrap > * { min-width: 0; }

  .docs-side {
    position: sticky;
    top: calc(var(--nav-h) + 24px);
    align-self: start;
    max-height: calc(100vh - var(--nav-h) - 48px);
    overflow-y: auto;
    padding-right: 8px;
  }
  @media (max-width: 900px) {
    .docs-side {
      position: static;
      max-height: none;
      padding-right: 0;
      padding-bottom: 8px;
      border-bottom: 1px solid var(--hairline);
    }
  }
  .docs-side-inner { padding-top: 4px; }

  /* Mobile collapse for the docs sidebar. A real button toggles
     `.is-open`, keeping hidden links out of the tab order while closed. */
  .docs-toc-button { display: none; }

  @media (max-width: 900px) {
    .docs-toc-button {
      display: flex;
      align-items: center;
      justify-content: space-between;
      width: 100%;
      padding: 12px 14px;
      font-size: 14px;
      font-weight: 500;
      color: var(--text-primary);
      background: var(--card);
      border: 1px solid var(--hairline);
      border-radius: var(--radius-sm);
      cursor: pointer;
      user-select: none;
    }
    .docs-toc-button:hover { background: var(--card-hover); }
    .docs-toc-caret {
      transition: transform .18s ease;
      color: var(--text-mute);
    }
    .docs-side.is-open .docs-toc-caret {
      transform: rotate(180deg);
    }

    .docs-side-inner {
      display: none;
      padding-top: 0;
    }
    .docs-side.is-open .docs-side-inner {
      display: block;
      max-height: 80vh;
      overflow-y: auto;
      padding-top: 12px;
    }

    /* Sidebar's bottom border looks weird when the menu is
       collapsed (a single line under just the button). Drop it on
       mobile and let the button itself carry the visual weight. */
    .docs-side {
      border-bottom: none;
      padding-bottom: 0;
    }
  }

  .docs-eyebrow {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--brand);
    margin-bottom: 16px;
  }

  .docs-nav-group { margin-bottom: 20px; }
  .docs-nav-heading {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text-mute);
    margin-bottom: 6px;
    padding-left: 10px;
  }
  .docs-nav ul { display: flex; flex-direction: column; gap: 1px; }
  .docs-nav a {
    display: block;
    font-size: 14px;
    color: var(--text-dim);
    padding: 5px 10px;
    border-radius: var(--radius-sm);
    border-left: 2px solid transparent;
  }
  .docs-nav a:hover {
    color: var(--text-primary);
    background: var(--hover-wash);
  }
  .docs-nav a.is-active {
    color: var(--brand);
    background: rgba(79, 156, 255, 0.08);
    border-left-color: var(--brand);
    font-weight: 500;
  }

  /* --- Article body --- */
  .docs-article {
    max-width: 760px;
    font-size: 16px;
    color: var(--text-primary);
  }
  .docs-article h1 {
    font-size: 40px;
    line-height: 1.15;
    letter-spacing: -0.015em;
    margin-bottom: 6px;
  }
  .docs-article .doc-lede {
    color: var(--text-dim);
    font-size: 17px;
    line-height: 1.55;
    margin-bottom: 32px;
  }
  .docs-article h2 {
    font-size: 24px;
    font-weight: 600;
    line-height: 1.25;
    margin-top: 48px;
    margin-bottom: 10px;
    padding-top: 4px;
    scroll-margin-top: calc(var(--nav-h) + 16px);
  }
  .docs-article h2:first-of-type { margin-top: 36px; }
  .docs-article h3 {
    font-size: 18px;
    font-weight: 600;
    margin-top: 28px;
    margin-bottom: 6px;
    color: var(--text-primary);
  }
  .docs-article p {
    margin-bottom: 14px;
    line-height: 1.65;
    color: var(--text-primary);
  }
  .docs-article p.muted { color: var(--text-dim); }
  .docs-article a {
    color: var(--brand);
  }
  .docs-article a:hover { color: var(--brand-hover); }

  .docs-article ul, .docs-article ol {
    margin: 0 0 18px 0;
    padding-left: 22px;
    color: var(--text-primary);
  }
  .docs-article ul { list-style: disc; }
  .docs-article ol { list-style: decimal; }
  .docs-article li { margin-bottom: 6px; line-height: 1.6; }

  .docs-article code {
    font-family: var(--font-mono);
    font-size: 0.92em;
    padding: 1px 6px;
    background: var(--well);
    border: 1px solid var(--hairline);
    border-radius: 4px;
    color: var(--text-primary);
  }
  .docs-article pre {
    margin: 0 0 18px 0;
    padding: 14px 16px;
    background: var(--well);
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    font-family: var(--font-mono);
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--text-primary);
    overflow-x: auto;
    white-space: pre;
  }
  .docs-article pre code {
    padding: 0; background: transparent; border: 0; border-radius: 0;
    font-size: inherit;
  }

  .docs-article blockquote {
    margin: 0 0 18px 0;
    padding: 12px 16px;
    border-left: 3px solid var(--brand);
    background: rgba(79, 156, 255, 0.06);
    color: var(--text-primary);
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  }
  .docs-article blockquote p:last-child { margin-bottom: 0; }

  /* Callout boxes: .note, .tip, .warn */
  .doc-callout {
    margin: 0 0 18px 0;
    padding: 14px 18px;
    border-radius: var(--radius);
    border: 1px solid var(--hairline);
    background: var(--card);
  }
  .doc-callout-title {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    margin-bottom: 6px;
  }
  .doc-callout.note        { border-color: rgba(79, 156, 255, 0.35); background: rgba(79, 156, 255, 0.06); }
  .doc-callout.note .doc-callout-title    { color: var(--brand); }
  .doc-callout.tip         { border-color: rgba(108, 198, 107, 0.35); background: rgba(108, 198, 107, 0.06); }
  .doc-callout.tip .doc-callout-title     { color: var(--ok); }
  .doc-callout.warn        { border-color: rgba(232, 181, 60, 0.4);  background: rgba(232, 181, 60, 0.06); }
  .doc-callout.warn .doc-callout-title    { color: var(--signal); }
  .doc-callout.stop        { border-color: rgba(232, 107, 107, 0.4); background: rgba(232, 107, 107, 0.06); }
  .doc-callout.stop .doc-callout-title    { color: var(--err); }
  .doc-callout p:last-child { margin-bottom: 0; }

  /* Figures (screenshots with captions). */
  .doc-fig {
    margin: 0 0 28px 0;
    padding: 0;
  }
  .doc-fig-link {
    display: block;
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    background: var(--well);
    overflow: hidden;
    transition: border-color 120ms ease;
  }
  .doc-fig-link:hover { border-color: var(--border); }
  .doc-fig-link picture {
    display: block;
    width: 100%;
  }
  .doc-fig-link img {
    display: block;
    width: 100%;
    height: auto;
  }
  .doc-fig figcaption {
    margin-top: 10px;
    font-size: 13.5px;
    color: var(--text-dim);
    line-height: 1.5;
  }
  .doc-fig-num {
    color: var(--text-mute);
    font-weight: 600;
    margin-right: 6px;
  }
  .doc-fig-wide .doc-fig-link { max-width: none; }
  .doc-fig-placeholder .doc-fig-link {
    border-style: dashed;
    border-color: rgba(232, 181, 60, 0.35);
  }
  .doc-fig-placeholder img {
    opacity: 0.78;
  }
  .doc-fig-pending {
    color: var(--signal);
    font-style: italic;
  }
  .doc-fig-pending code {
    font-size: 0.9em;
    padding: 0 4px;
    background: rgba(232, 181, 60, 0.12);
    border: 1px solid rgba(232, 181, 60, 0.3);
    border-radius: 3px;
  }

  /* Table for keyboard shortcuts / effect list / compatibility matrices. */
  .docs-article table {
    width: 100%;
    border-collapse: collapse;
    margin: 0 0 22px 0;
    font-size: 14.5px;
  }
  .docs-article th, .docs-article td {
    text-align: left;
    padding: 10px 12px;
    border-bottom: 1px solid var(--hairline);
    vertical-align: top;
  }
  .docs-article th {
    color: var(--text-mute);
    font-weight: 600;
    font-size: 12px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    border-bottom-color: var(--border);
  }
  .docs-article td code { font-size: 0.88em; }

  /* Grouped at-a-glance effects table (/docs/effects). Each <tbody> is a
     group; its first row (.grp) is a full-width header that reads as a
     divider rather than a column header — so it drops the uppercase
     column-head treatment and gets a tint + a little top breathing room. */
  .docs-article .doc-effects-table td:first-child {
    font-weight: 600;
    white-space: nowrap;
  }
  .docs-article .doc-effects-table tr.grp th {
    text-transform: none;
    letter-spacing: 0.01em;
    font-size: 13px;
    font-weight: 700;
    color: var(--brand, var(--text-mute));
    background: var(--card-2);
    border-bottom-color: var(--border);
    padding-top: 16px;
  }
  @media (max-width: 640px) {
    .docs-article .doc-effects-table td:first-child { white-space: normal; }
  }

  /* Mobile overflow protection.
     - Tables can carry long unbreakable cells (file paths, GUIDs,
       URLs) that would push the table wider than the viewport even
       after the grid `min-width: 0` fix. Make the table itself
       scrollable horizontally on narrow screens — the inner row /
       cell layout is preserved by the browser even with
       `display: block` on the outer table.
     - Inline `<code>` (paths, URLs) outside <pre> needs to be
       breakable on phones, otherwise a single
       `%APPDATA%\Microsoft Flight Simulator 2024\SimConnect.xml`
       token is enough to push its parent row wider than the viewport. */
  @media (max-width: 900px) {
    .docs-article table {
      display: block;
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
    }
  }
  @media (max-width: 640px) {
    .docs-article p code,
    .docs-article li code,
    .docs-article td code {
      overflow-wrap: anywhere;
    }
  }

  /* "Previous / Next" page footer pager. */
  .docs-pager {
    margin-top: 56px;
    padding-top: 24px;
    border-top: 1px solid var(--hairline);
    display: flex;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
  }
  .docs-pager a {
    display: inline-flex;
    flex-direction: column;
    padding: 14px 18px;
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    min-width: 180px;
    max-width: 320px;
    color: var(--text-primary);
    background: var(--card);
    transition: border-color 120ms ease, background 120ms ease;
  }
  .docs-pager a:hover {
    border-color: var(--border);
    background: var(--card-hover);
  }
  .docs-pager a .pager-dir {
    font-size: 11px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--text-mute);
    margin-bottom: 2px;
  }
  .docs-pager a.pager-next { margin-left: auto; text-align: right; }
  .docs-pager a.pager-prev .pager-dir::before { content: "← "; }
  .docs-pager a.pager-next .pager-dir::after  { content: " →"; }
  /* On phones, two ~216px-min pager buttons + a 16px gap don't fit
     side-by-side in a 393px viewport. They'd flex-wrap, but
     `margin-left: auto` on .pager-next keeps it pinned to the right
     even when it's alone on its row, producing an "indented orphan"
     look. Stack vertically full-width and drop the auto-left so both
     buttons align to the same edge. */
  @media (max-width: 640px) {
    .docs-pager { flex-direction: column; gap: 12px; }
    .docs-pager a {
      min-width: 0;
      max-width: none;
      width: 100%;
    }
    .docs-pager a.pager-next {
      margin-left: 0;
      text-align: left;
    }
  }

  /* Key / value pair layout used for spec-style reference blocks. */
  .docs-article .doc-kv {
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 6px 18px;
    margin: 0 0 20px 0;
    padding: 14px 16px;
    background: var(--card);
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
  }
  .docs-article .doc-kv dt {
    color: var(--text-mute);
    font-size: 13px;
    font-weight: 500;
  }
  .docs-article .doc-kv dd { margin: 0; font-size: 14px; }
  @media (max-width: 500px) {
    .docs-article .doc-kv { grid-template-columns: 1fr; gap: 0; }
    .docs-article .doc-kv dt { margin-top: 8px; }
  }

  /* Changelog page. Each release is one .changelog-entry block;
     the version is the section's anchor target so external links
     can land on a specific release. */
  .docs-article .changelog { margin-top: 12px; }
  .docs-article .changelog-entry {
    padding: 18px 20px 4px 20px;
    margin-bottom: 18px;
    background: var(--card);
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    scroll-margin-top: 80px;
  }
  .docs-article .changelog-entry header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    margin: 0 0 4px 0;
    border: 0;
  }
  .docs-article .changelog-entry header h2 {
    font-size: 20px;
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--text-primary);
  }
  .docs-article .changelog-entry header time {
    font-size: 13px;
    color: var(--text-mute);
    font-variant-numeric: tabular-nums;
  }
  .docs-article .changelog-entry h3 {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--text-mute);
    margin-top: 14px;
    margin-bottom: 6px;
  }
  .docs-article .changelog-entry ul {
    margin-top: 0;
    margin-bottom: 8px;
  }
  @media (max-width: 500px) {
    .docs-article .changelog-entry header {
      flex-direction: column;
      gap: 4px;
    }
  }

  /* Overview cards (index page). */
  .docs-index-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px;
    margin-bottom: 32px;
  }
  .docs-index-card {
    display: block;
    padding: 16px 18px;
    background: var(--card);
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    color: var(--text-primary);
    transition: border-color 120ms ease, background 120ms ease;
  }
  .docs-index-card:hover {
    border-color: var(--border);
    background: var(--card-hover);
  }
  .docs-index-card h3 {
    font-size: 15px;
    margin-bottom: 4px;
    color: var(--text-primary);
  }
  .docs-index-card p {
    font-size: 13.5px;
    color: var(--text-dim);
    margin: 0;
    line-height: 1.5;
  }

  /* Chip / pill used inline to mark OS-specific content. */
  .doc-os {
    display: inline-block;
    padding: 1px 8px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    border-radius: 4px;
    vertical-align: 2px;
    margin-right: 6px;
  }
  .doc-os.win   { background: rgba(79, 156, 255, 0.16); color: var(--brand); }
  .doc-os.linux { background: rgba(232, 181, 60, 0.16); color: var(--signal); }
  .doc-os.both  { background: rgba(108, 198, 107, 0.16); color: var(--ok); }
  .doc-os.mac   { background: rgba(180, 142, 255, 0.16); color: #b48eff; }

  /* Manual single-page — wider, denser, no sidebar. */
  .docs-manual {
    max-width: 840px;
    margin: 0 auto;
    padding: 40px 24px 96px;
  }
  .docs-manual h1 { font-size: 44px; line-height: 1.1; margin-bottom: 4px; }
  .docs-manual .manual-cover {
    padding: 56px 0 40px;
    border-bottom: 1px solid var(--hairline);
    margin-bottom: 28px;
  }
  .docs-manual .manual-cover .cover-sub {
    color: var(--text-dim);
    font-size: 18px;
    margin-top: 8px;
  }
  .docs-manual .manual-cover .cover-meta {
    margin-top: 28px;
    color: var(--text-mute);
    font-size: 13px;
    font-family: var(--font-mono);
  }
  .docs-manual h2.chapter {
    font-size: 28px;
    margin-top: 56px;
    padding-top: 28px;
    border-top: 2px solid var(--border);
  }
  .docs-manual h2.chapter .chap-num {
    color: var(--brand);
    font-family: var(--font-mono);
    font-size: 14px;
    font-weight: 600;
    letter-spacing: 0.12em;
    display: block;
    margin-bottom: 4px;
  }
  /* Release note banner. Sits at the top of every /docs/*
     page (rendered by DocsLayout) and of /docs/manual (rendered
     manually inside its own shell). Amber-signal border on a
     faint tint keeps it visible without overwhelming the content
     below — same visual language as .doc-callout.warn, but
     full-width and pinned to the top of the article. */
  .docs-release-banner {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin: 0 0 28px 0;
    padding: 12px 16px;
    border: 1px solid rgba(232, 181, 60, 0.38);
    background: rgba(232, 181, 60, 0.06);
    border-radius: var(--radius);
    color: var(--text-primary);
    font-size: 13.5px;
    line-height: 1.5;
  }
  .docs-release-banner svg {
    color: var(--signal);
    flex-shrink: 0;
    margin-top: 1px;
  }
  .docs-release-banner strong {
    color: var(--signal);
    font-weight: 600;
  }
  .docs-release-banner a {
    color: var(--brand);
  }
  .docs-release-banner a:hover {
    color: var(--brand-hover);
  }
  /* Manual shell doesn't have the article's max-width, so give
     the banner its own cap + a bit more breathing room before
     the cover block. */
  .docs-release-banner-manual {
    max-width: 820px;
    margin: 0 auto 36px;
  }

  /* Manual cover download button */
  .docs-manual .manual-cover-actions {
    margin-top: 28px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 18px;
  }
  .manual-dl-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    background: var(--brand-fill);
    color: #fff;
    font-weight: 600;
    font-size: 14px;
    border-radius: var(--radius);
    border: 1px solid var(--brand-fill);
    text-decoration: none;
    transition: background 120ms ease, border-color 120ms ease;
  }
  .manual-dl-btn:hover {
    background: var(--brand-fill-hover);
    border-color: var(--brand-fill-hover);
    color: #fff;
  }
  .manual-dl-hint {
    color: var(--text-mute);
    font-size: 13px;
    max-width: 420px;
  }

  /* Sidebar PDF-download link — same left-rail pattern as the
     in-page nav links, but a brand-tinted variant so it reads as
     an action not a route. */
  .docs-nav a.docs-nav-pdf {
    color: var(--brand);
    font-weight: 500;
  }
  .docs-nav a.docs-nav-pdf:hover {
    color: var(--brand-hover);
    background: rgba(79, 156, 255, 0.10);
  }

  .docs-manual .manual-toc {
    padding: 18px 20px;
    border: 1px solid var(--hairline);
    border-radius: var(--radius);
    margin-bottom: 32px;
    background: var(--card);
  }
  .docs-manual .manual-toc ol { margin: 0; padding-left: 22px; list-style: decimal; }
  .docs-manual .manual-toc li { margin-bottom: 3px; font-size: 14.5px; }
  .docs-manual .manual-toc a { text-decoration: none; }

  /* --- Print / PDF styles (for /docs/manual when browser-printed) --- */
  @media print {
    nav.top, footer, .docs-side, .docs-pager,
    #blazor-error-ui { display: none !important; }
    body {
      background: #ffffff !important;
      color: #111 !important;
      font-size: 11pt;
    }
    .docs-shell, .docs-manual {
      padding: 0 !important;
      background: #ffffff !important;
    }
    .docs-wrap { grid-template-columns: 1fr !important; gap: 0 !important; }
    .docs-article, .docs-manual {
      max-width: none !important;
      color: #111 !important;
    }
    .docs-article h1, .docs-article h2, .docs-article h3,
    .docs-manual h1, .docs-manual h2, .docs-manual h3 {
      color: #000 !important;
      page-break-after: avoid;
    }
    .docs-article p, .docs-article li, .docs-manual p, .docs-manual li {
      color: #222 !important;
    }
    .docs-article a, .docs-manual a {
      color: #0b4fbf !important;
      border-bottom: 0 !important;
    }
    .docs-article code, .docs-article pre,
    .docs-manual code, .docs-manual pre {
      background: #f4f4f6 !important;
      border-color: #d5d7dc !important;
      color: #111 !important;
    }
    .doc-fig { page-break-inside: avoid; }
    .doc-fig-link {
      border-color: #d5d7dc !important;
      background: #f8f8fa !important;
    }
    .doc-fig figcaption { color: #555 !important; }
    .doc-callout {
      background: #f7f7f9 !important;
      border-color: #d5d7dc !important;
      color: #111 !important;
    }
    .doc-callout.note .doc-callout-title { color: #1a57b8 !important; }
    .doc-callout.tip  .doc-callout-title { color: #2f7d2f !important; }
    .doc-callout.warn .doc-callout-title { color: #8a6200 !important; }
    .doc-callout.stop .doc-callout-title { color: #a83030 !important; }
    .docs-manual h2.chapter { page-break-before: always; border-top: 0; }
    .docs-manual h2.chapter:first-of-type { page-break-before: auto; }
    /* Explicit URL after external links for the printed version. */
    .docs-article a[href^="http"]::after,
    .docs-manual a[href^="http"]::after {
      content: " (" attr(href) ")";
      font-size: 85%;
      color: #555;
    }
    @page { margin: 20mm 18mm 20mm 18mm; }
  }

  /* ---------- Staging translation review overlay ---------- */
  .ffb-tr-review-active .ffb-tr-text {
    cursor: help;
    border-radius: 3px;
    box-shadow: inset 0 -0.18em rgba(232, 181, 60, 0.34);
    transition: background 120ms ease, box-shadow 120ms ease;
  }
  .ffb-tr-review-active .ffb-tr-text:hover,
  .ffb-tr-review-active .ffb-tr-text:focus {
    background: rgba(232, 181, 60, 0.14);
    box-shadow: inset 0 -0.2em rgba(232, 181, 60, 0.56);
  }
  .ffb-tr-review-active .ffb-tr-text-noted {
    box-shadow: inset 0 -0.18em rgba(108, 198, 107, 0.45);
  }
  .ffb-tr-review-active .ffb-tr-text-has-notes {
    background: rgba(108, 198, 107, 0.10);
    box-shadow: inset 0 -0.18em rgba(108, 198, 107, 0.50);
  }
  .ffb-tr-review-active .ffb-tr-text-has-notes::after {
    content: attr(data-tr-note-count);
    display: inline-grid;
    place-items: center;
    min-width: 1.35em;
    height: 1.35em;
    margin-left: 0.25em;
    padding: 0 0.25em;
    border-radius: 999px;
    background: var(--ok);
    color: var(--bg);
    font-size: 0.72em;
    font-weight: 800;
    line-height: 1;
    vertical-align: 0.1em;
  }
  .ffb-tr-toolbar {
    position: fixed;
    right: 16px;
    bottom: 16px;
    z-index: 80;
    display: flex;
    align-items: center;
    gap: 8px;
    max-width: calc(100vw - 32px);
    padding: 9px 10px;
    border: 1px solid rgba(232, 181, 60, 0.42);
    border-radius: 8px;
    background: color-mix(in srgb, var(--card) 92%, #111 8%);
    color: var(--text-primary);
    box-shadow: 0 18px 48px rgba(0, 0, 0, 0.28);
    font-size: 13px;
  }
  .ffb-tr-toolbar .ffb-tr-count {
    color: var(--text-mute);
    font-size: 12px;
  }
  .ffb-tr-toolbar button,
  .ffb-tr-button {
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--well);
    color: var(--text-primary);
    font: inherit;
    font-weight: 600;
    padding: 6px 9px;
    cursor: pointer;
  }
  .ffb-tr-toolbar button:hover,
  .ffb-tr-button:hover {
    border-color: var(--brand);
  }
  .ffb-tr-panel {
    position: fixed;
    z-index: 90;
    display: none;
    grid-template-columns: 1fr;
    gap: 9px;
    padding: 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--card);
    color: var(--text-primary);
    box-shadow: 0 24px 70px rgba(0, 0, 0, 0.34);
    max-height: calc(100vh - 24px);
    overflow: auto;
  }
  .ffb-tr-panel.is-open {
    display: grid;
  }
  .ffb-tr-panel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
  }
  .ffb-tr-panel-title {
    font-weight: 700;
    font-size: 13px;
  }
  .ffb-tr-panel-close {
    display: grid;
    place-items: center;
    width: 28px;
    height: 28px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--well);
    color: var(--text-primary);
    font: inherit;
    font-size: 20px;
    line-height: 1;
    padding: 0;
    cursor: pointer;
  }
  .ffb-tr-panel-close:hover {
    border-color: var(--brand);
    color: var(--brand);
  }
  .ffb-tr-context,
  .ffb-tr-preview {
    border-radius: 6px;
    padding: 8px;
    font-size: 12px;
    line-height: 1.45;
  }
  .ffb-tr-context {
    background: var(--well);
    color: var(--text-mute);
    max-height: 88px;
    overflow: auto;
  }
  .ffb-tr-preview {
    background: rgba(79, 156, 255, 0.10);
    color: var(--text-primary);
    max-height: 132px;
    overflow: auto;
  }
  .ffb-tr-existing {
    display: grid;
    gap: 7px;
    max-height: 180px;
    overflow: auto;
  }
  .ffb-tr-existing-title {
    color: var(--text-mute);
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0;
  }
  .ffb-tr-existing-note {
    display: grid;
    gap: 5px;
    border: 1px solid var(--hairline);
    border-radius: 6px;
    background: color-mix(in srgb, var(--well) 82%, var(--ok) 18%);
    padding: 8px;
  }
  .ffb-tr-existing-meta {
    color: var(--text-mute);
    font-size: 11px;
  }
  .ffb-tr-existing-selected {
    border-left: 2px solid var(--ok);
    padding-left: 7px;
    color: var(--text-dim);
    font-size: 12px;
  }
  .ffb-tr-existing-body {
    color: var(--text-primary);
    font-size: 12.5px;
    line-height: 1.45;
    white-space: pre-wrap;
  }
  .ffb-tr-textarea {
    width: 100%;
    min-height: 96px;
    max-height: 220px;
    resize: vertical;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--well);
    color: var(--text-primary);
    font: inherit;
    font-size: 13px;
    padding: 9px;
  }
  .ffb-tr-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
  }
  .ffb-tr-button.primary {
    background: var(--brand-fill);
    border-color: var(--brand-fill);
    color: #fff;
  }
  .ffb-tr-button:disabled {
    cursor: wait;
    opacity: 0.7;
  }
  .ffb-tr-message {
    min-height: 18px;
    color: var(--text-mute);
    font-size: 12px;
  }

  @media (max-width: 620px) {
    .ffb-tr-toolbar {
      left: 12px;
      right: 12px;
      justify-content: space-between;
    }
    .ffb-tr-panel {
      left: 12px !important;
      right: 12px !important;
      width: auto !important;
    }
  }

/* ============================================================
   Community — Profile Library + Forum
   Built on the site design tokens (--card / --border / --well /
   --text-* / --radius / --brand / --signal) so it flips cleanly
   for light/dark and matches the rest of the site exactly.
   ============================================================ */
.profiles { padding: 48px 0 72px; }
.profiles .wrap.narrow { max-width: 720px; }
.profiles-hero { max-width: 720px; margin-bottom: 28px; }
.profiles-hero h1 { margin: 0 0 8px; }

.profiles-filter {
  display: flex; flex-wrap: wrap; gap: 14px 18px; align-items: flex-end;
  padding: 18px; border: 1px solid var(--border); border-radius: var(--radius-lg);
  background: var(--card); margin-bottom: 28px;
}
.profiles-filter .form-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.profiles-filter input, .profiles-filter select {
  padding: 9px 11px; border-radius: var(--radius); border: 1px solid var(--border);
  background: var(--well); color: var(--text-primary); font: inherit; min-width: 160px;
  transition: border-color .15s ease, background-color .15s ease;
}
.profiles-filter input:focus, .profiles-filter select:focus {
  border-color: var(--brand); background: var(--card-hover); outline: none;
}
.profiles-filter select {
  appearance: none; padding-right: 36px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%237A8089' stroke-width='2'><polyline points='2 4 6 8 10 4'/></svg>");
  background-repeat: no-repeat; background-position: right 12px center;
}
.profiles-filter .btn { white-space: nowrap; min-width: 0; }
.profiles-clear { align-self: center; font-size: 14px; text-decoration: underline; color: var(--text-mute); }
.profiles-count { font-size: 14px; color: var(--text-mute); margin: 0 0 14px; }

/* Shared empty / zero-result state — a styled dashed placeholder. */
.profiles-empty, .community-empty {
  color: var(--text-dim); padding: 28px 22px; text-align: center;
  background: var(--card); border: 1px dashed var(--hairline); border-radius: var(--radius);
}

.profile-grid {
  list-style: none; margin: 0; padding: 0; display: grid; gap: 18px;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}
.profile-card {
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg);
  overflow: hidden; transition: border-color .15s ease, background-color .15s ease, transform .15s ease;
}
.profile-card:hover { border-color: var(--brand-soft); background: var(--card-hover); transform: translateY(-2px); }
.profile-card-link { display: block; padding: 18px; color: inherit; text-decoration: none; }
.profile-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.profile-card-head h2 { margin: 0; font-size: 18px; line-height: 1.25; }
.profile-card-title { margin: 6px 0 14px; font-size: 14px; color: var(--text-mute); }
.profile-card-meta { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--text-faint); margin-top: 12px; }

.profile-badge {
  flex: none; font-size: 10.5px; font-weight: 700; letter-spacing: .04em;
  padding: 3px 8px; border-radius: 999px; text-transform: uppercase;
}
.profile-badge-verified { background: rgba(79,156,255,.16); color: var(--brand); }
.profile-badge-community { background: var(--well); color: var(--text-dim); border: 1px solid var(--hairline); }

/* Fingerprint — mini (vertical bars on cards) + full (labelled rows). */
.profile-fp-mini { display: flex; align-items: flex-end; gap: 4px; height: 38px; }
.profile-fp-mini .profile-fp-bar {
  position: relative; flex: 1 1 0; height: 100%; min-width: 0;
  background: var(--well); border-radius: 3px; overflow: hidden;
}
.profile-fp-mini .profile-fp-fill {
  position: absolute; left: 0; right: 0; bottom: 0; background: var(--brand); border-radius: 3px;
}
.profile-fp-full { display: grid; gap: 10px; margin-top: 14px; max-width: 560px; }
.profile-fp-row { display: grid; grid-template-columns: 130px 1fr; align-items: center; gap: 12px; }
.profile-fp-label { font-size: 13px; color: var(--text-dim); }
.profile-fp-track { height: 10px; background: var(--well); border-radius: 999px; overflow: hidden; }
.profile-fp-full .profile-fp-fill { display: block; height: 100%; background: var(--brand); border-radius: 999px; }

.profile-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 18px; }
.profile-detail-head h1 { margin: 0 0 4px; }
.profile-crumb { margin: 0 0 18px; font-size: 14px; }
.profile-crumb a { text-decoration: none; color: var(--text-mute); }
.profile-crumb a:hover { color: var(--brand); }
.profile-facts { display: flex; flex-wrap: wrap; gap: 10px 26px; margin: 0 0 22px; padding: 0; }
.profile-facts > div { display: flex; flex-direction: column; }
.profile-facts dt { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-faint); }
.profile-facts dd { margin: 2px 0 0; font-size: 15px; font-weight: 600; }
.profile-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 30px; }
.profile-section { margin-top: 34px; }
.profile-section h2 { margin: 0 0 6px; font-size: 20px; }
.profile-notes { white-space: pre-wrap; line-height: 1.6; max-width: 640px; color: var(--text-dim); }
.profile-json {
  max-height: 460px; overflow: auto; padding: 16px; border-radius: var(--radius);
  background: var(--well); border: 1px solid var(--border);
  font-size: 12.5px; line-height: 1.5; white-space: pre; -webkit-overflow-scrolling: touch;
}

@media (max-width: 560px) {
  .profile-fp-row { grid-template-columns: 96px 1fr; }
  .profile-detail-head { flex-direction: column; }
}

/* ---- Community: submit, reviews, UGC ---- */
/* Hero / page action button-rows reuse the site .cta-row geometry. */
.profiles-hero-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 20px; }

.feedback-success {
  border: 1px solid color-mix(in srgb, var(--ok) 55%, transparent);
  background: color-mix(in srgb, var(--ok) 12%, transparent);
  border-radius: var(--radius); padding: 12px 14px; margin: 0 0 18px; line-height: 1.5;
}
.feedback-success strong { display: block; }

/* User-generated content box: scope + safe defaults for rendered markdown. */
.ugc { line-height: 1.6; max-width: 680px; overflow-wrap: anywhere; }
.ugc p { margin: 0 0 12px; }
.ugc ul { margin: 0 0 12px; padding-left: 22px; }
.ugc li { margin-bottom: 6px; }
.ugc a { color: var(--brand); }
.ugc strong { font-weight: 700; }
.ugc blockquote {
  margin: 0 0 12px; padding: 10px 14px;
  background: var(--well); border: 1px solid var(--hairline); border-left: 3px solid var(--brand-soft);
  border-radius: 0 var(--radius) var(--radius) 0;
  color: var(--text-mute); font-style: italic;
}
.ugc blockquote p { margin: 0; }
.ugc blockquote p + p { margin-top: 8px; }

.profile-stars { color: var(--signal); letter-spacing: 2px; font-size: 15px; line-height: 1; }
.profile-stars .star-empty { color: var(--text-faint); }
.profile-rating-line { display: flex; align-items: center; gap: 8px; margin: 6px 0 0; }

.profile-reviews { list-style: none; margin: 0 0 22px; padding: 0; display: grid; gap: 16px; }
.profile-review { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 16px; }
.profile-review-head { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 6px; }
.profile-review-by { font-weight: 600; }
.profile-review-date { color: var(--text-faint); }

.profile-submit-form, .profile-review-form { display: grid; gap: 14px; max-width: 640px; }
.profile-submit-form .form-row { display: flex; flex-wrap: wrap; gap: 14px; }
.profile-submit-form .form-row .form-field { flex: 1 1 140px; min-width: 0; }
.profile-submit-form textarea, .profile-review-form textarea,
.profile-submit-form input, .profile-submit-form select {
  width: 100%; box-sizing: border-box; padding: 10px 12px; border-radius: var(--radius);
  border: 1px solid var(--border); background: var(--well); color: var(--text-primary); font: inherit;
  transition: border-color .15s ease, background-color .15s ease;
}
.profile-submit-form textarea:focus, .profile-review-form textarea:focus,
.profile-submit-form input:focus, .profile-submit-form select:focus {
  border-color: var(--brand); background: var(--card-hover); outline: none;
}
.profile-submit-form textarea, .profile-review-form textarea {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; resize: vertical;
}
.profile-submit-form input[type="file"] { font-family: inherit; padding: 8px 10px; color: var(--text-dim); }
.profile-review-form { margin-top: 8px; }
/* "paste or upload" divider on the share form */
.profile-or-sep {
  display: flex; align-items: center; gap: 12px; margin: 2px 0;
  font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: var(--text-faint);
}
.profile-or-sep::before, .profile-or-sep::after {
  content: ""; flex: 1; height: 1px; background: var(--hairline);
}

/* ---- Community: search ---- */
.community-search-form {
  display: flex; flex-wrap: wrap; gap: 10px; max-width: 540px; margin: 4px 0 28px;
}
.community-search-form input[type="search"] {
  flex: 1 1 260px; min-width: 0; padding: 11px 14px; border-radius: var(--radius);
  border: 1px solid var(--border); background: var(--well); color: var(--text-primary);
  font: inherit; font-size: 15px; transition: border-color .15s ease, background-color .15s ease;
}
.community-search-form input[type="search"]:focus { border-color: var(--brand); background: var(--card-hover); outline: none; }
.search-kind {
  display: inline-block; margin-right: 8px; padding: 1px 8px; font-size: 11px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; border-radius: 4px;
  background: rgba(79,156,255,.16); color: var(--brand); vertical-align: 1px;
}

/* ============================================================
   Community FORUM look — the furniture people recognise as "a
   forum": breadcrumbs, a bordered board with divided rows, topic
   rows with reply counts + last activity, and classic two-column
   "postbit" threads (author rail on the left, post on the right).
   Built on the site tokens; letter-avatars are first-party.
   ============================================================ */

/* ---- Letter avatars (first-party; bg colour set inline) ---- */
.forum-avatar {
  display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: 34px; height: 34px; border-radius: 50%; color: #fff; font-weight: 700;
  font-size: 15px; line-height: 1; text-transform: uppercase; overflow: hidden;
  /* Take the neon edge off the letter-avatar palette without maintaining a
     second set of hexes — solid colour discs are a forum staple, just calmer. */
  filter: saturate(.8);
}
.forum-avatar-sm { width: 26px; height: 26px; font-size: 12px; }
.forum-avatar-lg { width: 56px; height: 56px; font-size: 24px; }

/* ---- Breadcrumbs ---- */
.forum-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 16px; font-size: 13.5px; color: var(--text-faint); }
.forum-crumbs a { color: var(--text-mute); text-decoration: none; }
.forum-crumbs a:hover { color: var(--brand); }
.forum-crumbs .sep { color: var(--text-faint); }
.forum-crumbs .here { color: var(--text-dim); }

/* ---- Board frame (wraps a category or topic list) ---- */
.forum-board { border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; background: var(--card); margin: 0 0 22px; }
.forum-board-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 18px; background: var(--section-bg); border-bottom: 1px solid var(--border);
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--text-mute);
}
.forum-board-head .col-stat { font-size: 11px; }

/* ---- Category rows: icon | name+desc | topic count ---- */
.forum-cats, .forum-topics { list-style: none; margin: 0; padding: 0; }
.forum-cat, .forum-topic { border-bottom: 1px solid var(--hairline); }
.forum-cat:last-child, .forum-topic:last-child { border-bottom: none; }
.forum-cat:hover, .forum-topic:hover { background: var(--card-hover); }

/* Category rows: coloured left bar (set inline per category) | name+desc |
   topic/post counts | last-post column. */
.forum-cat { border-left: 4px solid var(--border); }
/* Fixed count/last-post tracks so columns line up vertically across rows. */
.forum-cat > a { display: grid; grid-template-columns: minmax(0, 1fr) 132px minmax(180px, 240px); align-items: center; gap: 0 18px; padding: 14px 18px; color: inherit; text-decoration: none; }
.forum-cat-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.forum-cat-name { font-size: 16.5px; font-weight: 700; color: var(--text-primary); }
.forum-cat-desc { font-size: 13.5px; color: var(--text-mute); line-height: 1.5; }
.forum-cat-badge {
  margin-left: 8px; font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px; background: var(--well); border: 1px solid var(--hairline);
  color: var(--text-mute); vertical-align: 2px;
}
.forum-cat-counts { text-align: right; white-space: nowrap; line-height: 1.4; font-size: 12px; color: var(--text-faint); }
.forum-cat-counts .n { font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums; }

/* Last-post column (forum index): small avatar + latest topic + by/when. */
.forum-lastpost { display: flex; align-items: center; gap: 10px; min-width: 0; }
.forum-lastpost-text { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.forum-lastpost-title { font-size: 13px; color: var(--text-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 190px; }
.forum-lastpost-meta { font-size: 11.5px; color: var(--text-faint); }
.forum-lastpost-empty { font-size: 12.5px; color: var(--text-faint); }

/* ---- Topic rows: starter avatar | title+meta | replies/views | last activity ----
   Fixed count/last tracks (124px/172px) so the columns line up across rows. */
.forum-topic > a { display: grid; grid-template-columns: auto minmax(0, 1fr) 124px 172px; align-items: center; gap: 0 14px; padding: 12px 16px; color: inherit; text-decoration: none; }
.forum-topic-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.forum-topic-title { font-size: 15px; font-weight: 600; color: var(--text-primary); }
.forum-topic-by { font-size: 12.5px; color: var(--text-mute); }
/* coloured category tag (used in the Latest list + search). Soft tinted label,
   not a solid fill — keeps the colour-coding for scanning without the
   "ransom-note" loudness of saturated pills stacked down a list. Driven by an
   inline --cat custom property so one rule themes every category, and the
   color-mix toward --text-primary keeps the label legible in light AND dark. */
.forum-cat-tag {
  display: inline-block; padding: 1px 8px; margin-right: 8px; font-size: 11px; font-weight: 700;
  border-radius: 5px; vertical-align: 1px;
  background: color-mix(in srgb, var(--cat, var(--brand)) 15%, transparent);
  color: color-mix(in srgb, var(--cat, var(--brand)) 72%, var(--text-primary));
  border: 1px solid color-mix(in srgb, var(--cat, var(--brand)) 28%, transparent);
}
.forum-topic-counts { display: flex; gap: 0; justify-content: center; white-space: nowrap; }
.forum-topic-counts .stat { width: 62px; text-align: center; line-height: 1.15; }
.forum-topic-counts .n { display: block; font-size: 14px; font-weight: 700; color: var(--text-dim); font-variant-numeric: tabular-nums; }
.forum-topic-counts .l { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-faint); }
/* meta (right-aligned) | avatar pinned to the track's right edge, so the
   avatars form a straight vertical column regardless of name length. */
.forum-topic-last { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; white-space: nowrap; font-size: 12px; color: var(--text-faint); }
.forum-topic-last .forum-lastpost-meta { display: flex; flex-direction: column; text-align: right; line-height: 1.25; min-width: 0; }

.forum-toolbar { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; margin: 0 0 14px; font-size: 14px; }
.forum-toolbar .forum-sort { display: flex; gap: 4px; }
.forum-toolbar .forum-sort a { padding: 4px 10px; border-radius: 999px; text-decoration: none; color: var(--text-mute); }
.forum-toolbar .forum-sort a.is-active { background: var(--card); border: 1px solid var(--border); color: var(--text-primary); }

.forum-section-title { margin: 28px 0 12px; font-size: 18px; }
.forum-topic-substats { margin: -10px 0 18px; font-size: 13px; color: var(--text-faint); }
.forum-support-note { margin-top: 20px; color: var(--text-mute); }
.forum-locked-note { margin-top: 14px; padding: 10px 14px; border-radius: var(--radius); background: var(--well); border: 1px solid var(--hairline); color: var(--text-mute); font-size: 14px; }

/* "new since last visit" markers. */
.forum-new-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--brand); margin-right: 6px; vertical-align: 1px; }
.forum-new-tag {
  display: inline-block; margin-left: 8px; padding: 0 7px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .05em; text-transform: uppercase; border-radius: 999px; background: rgba(79,156,255,.16); color: var(--brand);
}

/* ---- Postbit thread: author rail (left) + post (right) ---- */
/* A thread reads as a forum at a roomy width — wider than the 720px narrow
   transactional wrap, so it doesn't float cramped in the centre. */
.forum-thread-wrap { max-width: 960px; }
.forum-posts { list-style: none; margin: 0 0 22px; padding: 0; border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; background: var(--card); }
.forum-post { display: grid; grid-template-columns: 156px 1fr; border-bottom: 1px solid var(--border); }
.forum-post:last-child { border-bottom: none; }
.forum-postbit-aside {
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px;
  padding: 18px 14px; background: var(--well); border-right: 1px solid var(--border);
}
.forum-postbit-author { font-weight: 700; font-size: 14px; }
.forum-postbit-author a { color: var(--text-primary); text-decoration: none; }
.forum-postbit-author a:hover { color: var(--brand); }
.forum-postbit-rank { font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--brand); }
.forum-postbit-stat { font-size: 11.5px; color: var(--text-faint); }
.forum-postbit-main { display: flex; flex-direction: column; min-width: 0; }
.forum-postbit-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 8px 16px; border-bottom: 1px solid var(--hairline); font-size: 12.5px; color: var(--text-faint);
}
.forum-postbit-bar .forum-post-num { font-weight: 600; color: var(--text-mute); }
.forum-postbit-when { color: var(--text-faint); }
.forum-postbit-edited { font-style: italic; }
.forum-postbit-body { padding: 14px 18px; min-width: 0; }
/* Let the post body fill the (now wider) post column instead of the global
   680px UGC cap, with a comfortable readability ceiling. */
.forum-postbit-body .ugc { max-width: 760px; }
.forum-post.is-deleted, .forum-post.is-blocked { display: block; padding: 14px 16px; background: var(--well); }
.forum-post.is-blocked { border-left: 3px solid var(--border); }
.forum-blocked-stub { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; color: var(--text-faint); font-size: 14px; }

.forum-quote-ref {
  display: inline-block; margin: 0 0 8px; padding: 2px 10px; font-size: 12px;
  border-radius: 999px; background: var(--well); border: 1px solid var(--hairline); color: var(--text-mute);
}
.forum-quote-ref:hover { color: var(--brand); }

/* Per-post action links (quote / edit / delete / report) — right-aligned. */
.forum-post-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 16px; padding: 0 16px 14px; font-size: 13px; }
.forum-post-actions a, .forum-post-actions button {
  color: var(--text-mute); text-decoration: none; background: none; border: none; padding: 0; font: inherit; font-size: 13px; cursor: pointer;
}
.forum-post-actions a:hover, .forum-post-actions button:hover { color: var(--brand); }

/* Reaction (like) toggle — a flat per-item count, no leaderboard. */
.reaction-btn {
  display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--card); color: var(--text-mute);
  font: inherit; font-size: 13px; cursor: pointer; transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}
.reaction-btn:hover { border-color: var(--brand-soft); color: var(--text-primary); }
.reaction-btn.is-on { border-color: var(--brand-soft); background: rgba(79,156,255,.12); color: var(--brand); }
.reaction-btn .reaction-count { font-variant-numeric: tabular-nums; }

/* Lighter "comment" style for the inline profile-discussion thread (a
   profile page is narrow; the full postbit rail is overkill there). */
.forum-comments { list-style: none; margin: 0 0 20px; padding: 0; border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; background: var(--card); }
.forum-comment { display: grid; grid-template-columns: auto 1fr; gap: 0 12px; padding: 14px 16px; border-bottom: 1px solid var(--hairline); }
.forum-comment:last-child { border-bottom: none; }
.forum-comment.is-deleted, .forum-comment.is-blocked { display: block; background: var(--well); }
.forum-comment.is-blocked { border-left: 3px solid var(--border); }
.forum-comment-body { min-width: 0; }
.forum-comment-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; margin-bottom: 4px; }
.forum-comment-by { font-weight: 700; font-size: 14px; }
.forum-comment-by a { color: var(--text-primary); text-decoration: none; }
.forum-comment-by a:hover { color: var(--brand); }
.forum-comment-when { font-size: 12.5px; color: var(--text-faint); }

/* The reply / new-post composer. */
.forum-post-form { display: grid; gap: 12px; max-width: 680px; margin-top: 8px; }
.forum-post-form textarea {
  width: 100%; box-sizing: border-box; padding: 10px 12px; border-radius: var(--radius);
  border: 1px solid var(--border); background: var(--well); color: var(--text-primary); font: inherit; resize: vertical;
  transition: border-color .15s ease, background-color .15s ease;
}
.forum-post-form textarea:focus { border-color: var(--brand); background: var(--card-hover); outline: none; }

/* The "Profile discussion" feed (compact topic rows in a board). */
.forum-feed { list-style: none; margin: 0; padding: 0; }
.forum-feed-row { border-bottom: 1px solid var(--hairline); }
.forum-feed-row:last-child { border-bottom: none; }
.forum-feed-row:hover { background: var(--card-hover); }
.forum-feed-row a { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 0 14px; padding: 12px 16px; color: inherit; text-decoration: none; }
.forum-feed-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.forum-feed-aircraft { font-weight: 600; color: var(--text-primary); }
.forum-feed-title { font-size: 12.5px; color: var(--text-mute); }
.forum-feed-meta { font-size: 12.5px; color: var(--text-faint); white-space: nowrap; text-align: right; }

@media (max-width: 600px) {
  /* Postbit collapses to a stacked card with a horizontal author header. */
  .forum-post { grid-template-columns: 1fr; }
  .forum-postbit-aside {
    flex-direction: row; align-items: center; text-align: left; gap: 10px;
    padding: 10px 14px; border-right: none; border-bottom: 1px solid var(--border);
  }
  .forum-postbit-aside .forum-avatar-lg { width: 36px; height: 36px; font-size: 16px; }
  .forum-postbit-stat, .forum-postbit-rank { font-size: 11px; }
  /* Drop the secondary columns on small screens. */
  .forum-cat > a { grid-template-columns: 1fr auto; }
  .forum-lastpost { display: none; }
  .forum-topic > a { grid-template-columns: auto 1fr auto; }
  .forum-topic-last { display: none; }
  .forum-topic-counts { gap: 10px; }
}

/* ============================================================
   FORUM CANVAS — read as a dense, boxed forum app (white panels
   on a faint canvas, compact type, full width, two-column thread)
   rather than an airy marketing page.
   ============================================================ */
.forum-canvas { background: var(--well); }
.forum-canvas.profiles { padding: 26px 0 60px; }
.forum-wide { max-width: 1200px; }

/* Forum headings are forum-sized, not marketing-hero-sized. */
.forum-canvas .profiles-hero { margin-bottom: 16px; }
.forum-canvas .profiles-hero h1 { font-size: 25px; line-height: 1.2; letter-spacing: -0.01em; }
.forum-canvas .profiles-hero .lede { font-size: 14.5px; margin-top: 4px; }
.forum-canvas .forum-section-title { font-size: 16px; margin: 24px 0 10px; }

/* White boards read as panels on the faint canvas. */
.forum-canvas .forum-board,
.forum-canvas .forum-posts,
.forum-canvas .forum-side-box { box-shadow: 0 1px 2px rgba(0,0,0,.05); }

/* ---- Forum header bar: search (left) + member menu (right) ----
   Sits on the forum canvas (var(--well)) as a quiet toolbar, NOT a second white
   nav — so it reads as the top of the forum area, not another header strip. */
.community-bar { background: var(--well); }
.community-bar-inner { display: flex; align-items: center; gap: 16px; min-height: 48px; padding-top: 10px; padding-bottom: 2px; }
.cbar-search { position: relative; flex: 0 1 340px; min-width: 0; display: flex; align-items: center; }
.cbar-search-icon { position: absolute; left: 11px; width: 15px; height: 15px; color: var(--text-faint); pointer-events: none; }
.cbar-search input { width: 100%; box-sizing: border-box; padding: 7px 12px 7px 33px; border: 1px solid var(--border); border-radius: 8px; background: var(--card); color: var(--text-primary); font: inherit; font-size: 13.5px; }
.cbar-search input::placeholder { color: var(--text-faint); }
.cbar-search input:focus { outline: none; border-color: var(--brand); }
.cbar-right { margin-left: auto; display: flex; align-items: center; gap: 14px; }
.cbar-link { color: var(--text-mute); text-decoration: none; font-size: 14px; white-space: nowrap; }
.cbar-link:hover { color: var(--brand); }
.btn.btn-sm { padding: 6px 14px; font-size: 13.5px; }
/* member menu — native <details> disclosure (CSP-safe, no JS to open) */
.cbar-user { position: relative; }
.cbar-user > summary { display: flex; align-items: center; gap: 8px; padding: 4px 8px 4px 4px; border-radius: 999px; cursor: pointer; list-style: none; user-select: none; border: 1px solid transparent; }
.cbar-user > summary::-webkit-details-marker { display: none; }
.cbar-user > summary:hover { background: var(--well); }
.cbar-user[open] > summary { background: var(--well); border-color: var(--border); }
.cbar-user-name { font-size: 14px; font-weight: 600; color: var(--text-primary); max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cbar-caret { width: 11px; height: 11px; color: var(--text-faint); flex: none; }
.cbar-pop { position: absolute; right: 0; top: calc(100% + 6px); min-width: 188px; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 12px 28px rgba(0,0,0,.18); padding: 6px; z-index: 60; display: flex; flex-direction: column; gap: 2px; }
.cbar-pop a, .cbar-pop button { display: block; width: 100%; text-align: left; box-sizing: border-box; padding: 8px 12px; border-radius: var(--radius-sm); background: none; border: none; color: var(--text-dim); font: inherit; font-size: 14px; text-decoration: none; cursor: pointer; }
.cbar-pop a:hover, .cbar-pop button:hover { background: var(--well); color: var(--text-primary); }
.cbar-pop form { margin: 0; padding-top: 6px; border-top: 1px solid var(--hairline); }
@media (max-width: 560px) {
  .cbar-search { flex: 1 1 auto; }
  .cbar-user-name, .cbar-link { display: none; }
}

/* Thread head: a compact title + a Reply action (forum, not blog hero). */
.forum-thread-head { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 8px 20px; margin: 2px 0; }
.forum-thread-head h1 { margin: 0; font-size: 23px; line-height: 1.3; font-weight: 700; letter-spacing: -0.01em; min-width: 0; }
.forum-thread-actions { display: flex; gap: 8px; flex: none; }
.forum-thread-actions .btn { height: 36px; min-width: 0; padding: 0 16px; font-size: 13px; }
.forum-topic-substats { margin: 4px 0 16px; font-size: 13px; color: var(--text-faint); }

/* Two-column thread: posts + an "About this topic" sidebar. */
.forum-thread-layout { display: grid; grid-template-columns: minmax(0, 1fr) 268px; gap: 24px; align-items: start; }
.forum-side-box { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px; position: sticky; top: 84px; }
.forum-side-box h3 { margin: 0 0 6px; font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--text-mute); }
.forum-side-row { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-top: 1px solid var(--hairline); font-size: 13px; }
.forum-side-row .k { color: var(--text-faint); }
.forum-side-row .v { margin-left: auto; text-align: right; font-weight: 600; color: var(--text-dim); font-variant-numeric: tabular-nums; }
.forum-side-person { margin-left: auto; display: flex; align-items: center; gap: 8px; min-width: 0; }
.forum-side-person a { color: var(--text-primary); text-decoration: none; font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
.forum-side-person a:hover { color: var(--brand); }
.forum-side-box form { margin-top: 14px; }
.forum-side-box .btn { width: 100%; }

/* Denser postbit. */
.forum-post { grid-template-columns: 132px 1fr; }
.forum-postbit-aside { padding: 14px 10px; gap: 4px; }
.forum-postbit-aside .forum-avatar-lg { width: 44px; height: 44px; font-size: 18px; }
.forum-postbit-author { font-size: 13.5px; }
.forum-postbit-stat { font-size: 11px; }
.forum-postbit-bar { padding: 7px 16px; font-size: 12px; }
.forum-postbit-body { padding: 12px 16px; font-size: 14px; }
.forum-postbit-body .ugc { font-size: 14px; line-height: 1.55; max-width: none; }
.forum-post-actions { padding: 0 16px 11px; }

/* ---- Markdown composer (reply / new topic / comment) ---- */
/* A white panel so it doesn't vanish into the canvas, a formatting toolbar,
   a clean textarea, and a normal-sized submit button (not a full-width slab). */
.forum-reply-form { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px 18px; max-width: none; }
#reply.profile-section { margin-top: 22px; }
.forum-composer-title { margin: 0 0 12px; font-size: 16px; font-weight: 700; }

/* Forum "compose" page (new topic): a white form panel on the canvas with a
   forum-sized heading + breadcrumb, so it reads as part of the forum rather
   than a generic feedback form. */
.forum-narrow { max-width: 760px; }
.forum-page-title { font-size: 25px; line-height: 1.2; letter-spacing: -0.01em; margin: 2px 0 16px; }
.forum-form-panel { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 20px 22px; display: grid; gap: 16px; }
.forum-form-panel .form-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.forum-form-panel input, .forum-form-panel select, .forum-form-panel textarea {
  width: 100%; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--well); color: var(--text-primary); font: inherit; font-size: 14px; transition: border-color .15s ease, background-color .15s ease;
}
.forum-form-panel textarea { resize: vertical; min-height: 92px; line-height: 1.5; }
.forum-form-panel input:focus, .forum-form-panel select:focus, .forum-form-panel textarea:focus { outline: none; border-color: var(--brand); background: var(--card-hover); }
.forum-form-panel select {
  appearance: none; padding-right: 38px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%237A8089' stroke-width='2'><polyline points='2 4 6 8 10 4'/></svg>");
  background-repeat: no-repeat; background-position: right 13px center;
}
/* The composer inside the form panel shouldn't double up borders. */
.forum-form-panel .forum-composer { margin-top: 0; }
/* Direct-child buttons/links in a form panel are grid items; keep them
   auto-width + left-aligned instead of stretching to the full column. */
.forum-form-panel > .btn, .forum-form-panel > button, .forum-form-panel > a { justify-self: start; }
/* A checkbox row stays horizontal even though the panel's .form-field rule is
   more specific than .form-check-row. */
.forum-form-panel .form-check-row { flex-direction: row; align-items: flex-start; gap: 10px; }
/* Account/settings sections read tighter on the forum canvas. */
.forum-canvas .account-section { margin-top: 26px; padding-top: 22px; }
.forum-canvas .account-section h2 { font-size: 16px; margin: 0 0 6px; }

.forum-composer { display: block; }
.forum-composer-bar { display: flex; flex-wrap: wrap; gap: 3px; padding: 6px; background: var(--well); border: 1px solid var(--border); border-bottom: none; border-radius: var(--radius) var(--radius) 0 0; }
.md-btn { display: inline-flex; align-items: center; justify-content: center; min-width: 32px; height: 30px; padding: 0 9px; border: 1px solid transparent; border-radius: var(--radius-sm); background: none; color: var(--text-mute); font: inherit; font-size: 13.5px; line-height: 1; cursor: pointer; transition: background-color .12s ease, border-color .12s ease, color .12s ease; }
.md-btn:hover { background: var(--card); border-color: var(--border); color: var(--text-primary); }
.forum-composer textarea {
  display: block; width: 100%; box-sizing: border-box; margin: 0; padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 0 0 var(--radius) var(--radius);
  background: var(--card); color: var(--text-primary); font: inherit; font-size: 14px; line-height: 1.6;
  min-height: 160px; resize: vertical; transition: border-color .15s ease;
}
.forum-composer textarea:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px rgba(79,156,255,.12); }
.forum-composer-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 12px; }
.forum-composer-hint { font-size: 12.5px; color: var(--text-faint); line-height: 1.5; }
.forum-composer-hint code { font-size: 12px; }
.forum-composer-submit { min-width: 0; padding: 0 24px; flex: none; }

@media (max-width: 560px) {
  .forum-composer-foot { flex-direction: column; align-items: stretch; }
  .forum-composer-submit { width: 100%; }
}

@media (max-width: 880px) {
  .forum-thread-layout { grid-template-columns: 1fr; }
  .forum-side-box { position: static; }
}

/* ---- Community: pagination (public Pager) ---- */
.pager { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: center; margin: 28px 0 0; }
.pager a, .pager span {
  display: inline-flex; align-items: center; justify-content: center; min-width: 38px; height: 38px;
  padding: 0 12px; border-radius: var(--radius); border: 1px solid var(--border);
  background: var(--card); color: var(--text-dim); text-decoration: none; font-size: 14px;
}
.pager a:hover { border-color: var(--brand-soft); background: var(--card-hover); color: var(--text-primary); }
.pager .is-current { background: var(--brand-fill); border-color: var(--brand-fill); color: #fff; font-weight: 600; }
.pager .pager-gap { border: none; background: none; color: var(--text-faint); min-width: 0; padding: 0 4px; }

/* ---- Community: member profile page ---- */
/* Member profile — two-column forum profile: a profile card in a sticky left
   sidebar + the member's activity on the right. Fills the width cleanly instead
   of one wide, sparse, half-empty card. */
.member-layout { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 28px; align-items: start; }
.member-side { min-width: 0; }
.member-main { min-width: 0; }
.member-main > .forum-section-title:first-child { margin-top: 0; }
.member-pcard { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 22px 20px; text-align: center; position: sticky; top: 84px; }
.member-pcard .forum-avatar-lg { width: 78px; height: 78px; font-size: 32px; margin: 0 auto 12px; }
.member-pcard-name { margin: 0; font-size: 20px; font-weight: 800; line-height: 1.2; letter-spacing: -.01em; word-break: break-word; }
.member-pcard .member-trust { margin-top: 8px; }
.member-pcard-stats { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--hairline); display: flex; flex-direction: column; gap: 7px; font-size: 14px; color: var(--text-mute); }
.member-pcard-stats strong { color: var(--text-primary); font-weight: 700; font-variant-numeric: tabular-nums; }
.member-pcard-joined { font-size: 12.5px; color: var(--text-faint); }
.member-pcard-action { margin-top: 16px; }
.member-pcard-action form { margin: 0; }
.member-pcard-action .btn { width: 100%; }
.member-trust { display: inline-block; padding: 1px 8px; font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; border-radius: 999px; background: var(--well); border: 1px solid var(--hairline); color: var(--text-mute); }
.member-blocked-note { margin: 12px 0 0; padding: 10px 14px; border-radius: 10px; background: var(--well); border: 1px solid var(--hairline); color: var(--text-mute); font-size: 12.5px; }
.member-empty { color: var(--text-faint); font-size: 14px; margin: 0 0 8px; padding: 2px; }
@media (max-width: 760px) {
  .member-layout { grid-template-columns: 1fr; gap: 18px; }
  .member-pcard { position: static; }
}

/* ---- Community: account preferences ---- */
.form-check-row { display: flex; flex-direction: row; align-items: flex-start; gap: 10px; }
.form-check-row input { margin-top: 3px; }
.account-section { margin-top: 30px; padding-top: 26px; border-top: 1px solid var(--hairline); }
.account-block-list { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 8px; }
.account-block-list li { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); }


/* ============================================================
   Community Forum redesign (x- visual system)
   Source: docs/community/forum-redesign/Forum.html
   ============================================================ */
  /* fx-root carries the community accent tokens. It deliberately does NOT
     force a min-height:100vh sticky-footer flex column — the marketing pages
     flow content then footer, and the community pages now match, so a sparse
     page (sign-in, empty search) no longer opens a tall gap before the footer. */
.fx-root { --accent: var(--brand); --accent-hover: var(--brand-hover); --accent-soft: var(--brand-soft); --accent-ink: #fff; }
  .fx-wrap { max-width: 1100px; margin: 0 auto; padding: 0 24px; }
  .fx-page { max-width: 1100px; margin: 0 auto; padding: 32px 24px 72px; }
  /* Narrow pages (forms, articles, threads) keep a comfortable ~820 reading
     column, but it sits LEFT-aligned inside the full 1100 frame rather than
     being a centered 820 page — so every community page's header lines up
     with the sub-nav and the full-width pages (no "shifted in" headers). */
  .fx-page.narrow { max-width: 1100px; }
  .fx-page.narrow > * { max-width: 820px; }
  .fx-link { color: var(--accent); }
  .fx-link:hover { text-decoration: underline; text-underline-offset: 2px; }
  .fx-mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
  .fx-row-gap { display: flex; gap: 10px; }
  .fx-dotsep { width: 3px; height: 3px; border-radius: 999px; background: var(--fg-faint); display: inline-block; flex: none; }
  *:focus-visible { outline: 2px solid var(--accent-soft); outline-offset: 2px; border-radius: 4px; }

  /* ---------- BUTTONS ---------- */
  .fx-btn { display: inline-flex; align-items: center; gap: 7px; font-weight: 500; font-size: 13.5px; padding: 9px 15px;
    border-radius: 7px; border: 1px solid transparent; line-height: 1; transition: all .15s ease-out; white-space: nowrap; }
  .fx-btn-primary { background: var(--brand-fill); color: #fff; }
  .fx-btn-primary:hover { background: var(--brand-fill-hover); color: #fff; transform: translateY(-1px); }
  .fx-btn-primary:disabled { opacity: .45; transform: none; cursor: not-allowed; }
  .fx-btn-ghost { background: var(--card-2); color: var(--fg); border-color: var(--border); }
  .fx-btn-ghost:hover { background: var(--card-hover); border-color: var(--border-hi); }
  .fx-kbd { font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-mute); background: var(--card-2);
    border: 1px solid var(--border); border-bottom-width: 2px; border-radius: 5px; padding: 3px 6px; line-height: 1; }
  .fx-kbd.sm { padding: 1px 4px; font-size: 9.5px; border-bottom-width: 1px; }
  button.fx-kbd:hover { color: var(--fg); border-color: var(--border-hi); }

  /* ---------- NAV ---------- */
  .fx-nav { position: sticky; top: 0; z-index: 50; height: var(--nav-h); background: var(--nav-bg);
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border-bottom: 1px solid var(--border); }
  .fx-nav .fx-wrap { max-width: none; padding: 0 28px; }
  .fx-nav-in { display: flex; align-items: center; gap: 20px; height: 100%; }
  .fx-brand { display: flex; align-items: center; gap: 9px; font-weight: 600; font-size: 16px; letter-spacing: -.01em; flex: none; }
  .fx-nav-links { display: flex; align-items: center; gap: 18px; flex: 1 1 0; min-width: 0; overflow: hidden; }
  .fx-nav-link { font-size: 13.5px; color: var(--fg-dim); transition: color .15s; position: relative; }
  .fx-nav-link:hover { color: var(--fg); }
  .fx-nav-link.active { color: var(--fg); font-weight: 500; }
  .fx-nav-link.active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -22px; height: 2px; background: var(--accent); border-radius: 2px; }
  .fx-nav-cta { display: flex; align-items: center; gap: 12px; flex: none; }
  .fx-icon-btn { display: inline-flex; align-items: center; gap: 5px; background: none; border: 1px solid transparent; color: var(--fg-mute);
    padding: 7px 8px; border-radius: 7px; transition: all .15s; }
  .fx-icon-btn:hover { color: var(--fg); background: var(--card-2); }
  .fx-lang { position: relative; }
  .fx-lang-code { font-family: var(--font-mono); font-size: 11px; font-weight: 500; }
  .fx-menu { position: absolute; top: calc(100% + 8px); left: 0; min-width: 210px; z-index: 60; background: var(--card);
    border: 1px solid var(--border-hi); border-radius: 10px; padding: 6px; box-shadow: var(--shadow-lg); max-height: 340px; overflow: auto; }
  .fx-menu.right { right: 0; left: auto; min-width: 180px; }
  .fx-menu-item { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; text-align: left;
    background: none; border: none; color: var(--fg-dim); font-size: 13px; padding: 8px 10px; border-radius: 7px; transition: all .12s; }
  .fx-menu-item:hover { background: var(--card-2); color: var(--fg); }
  .fx-menu-item.on { color: var(--fg); }
  .fx-scrim-bare { position: fixed; inset: 0; z-index: 40; }

  /* ---------- PAGE HEADER ---------- */
  .fx-pagehead { margin-bottom: 22px; }
  .fx-eyebrow { font-size: 11px; font-weight: 600; letter-spacing: .14em; text-transform: uppercase; color: var(--accent); }
  .fx-h1 { font-size: 30px; font-weight: 700; letter-spacing: -.02em; line-height: 1.1; margin: 8px 0 0; }
  .fx-h1.topic { font-size: 27px; margin-top: 12px; max-width: 800px; text-wrap: balance; }
  .fx-lede { font-size: 15.5px; line-height: 1.55; color: var(--fg-dim); max-width: 620px; margin: 12px 0 0; }
  .fx-crumbs { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--fg-mute); margin-bottom: 6px; }
  .fx-crumbs a { color: var(--fg-mute); }
  .fx-crumbs a:hover { color: var(--accent); }
  .fx-crumb-cur { color: var(--fg-dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 50ch; }

  /* ---------- SEARCH BAR ---------- */
  .fx-searchbar { display: flex; align-items: center; gap: 10px; width: 100%; background: var(--well);
    border: 1px solid var(--border); border-radius: 9px; padding: 0 12px; height: 42px; transition: border-color .15s, box-shadow .15s; }
  .fx-searchbar:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
  .fx-searchbar.trigger { cursor: text; }
  .fx-searchbar.trigger:hover { border-color: var(--border-hi); }
  .fx-search-input { flex: 1; background: none; border: none; outline: none; color: var(--fg); font-size: 14px; font-family: var(--font-ui); }
  .fx-search-input::placeholder { color: var(--fg-mute); }
  .fx-search-ph { flex: 1; color: var(--fg-mute); font-size: 14px; text-align: left; }
  .fx-search-clear { display: inline-flex; background: none; border: none; color: var(--fg-mute); padding: 4px; border-radius: 5px; }
  .fx-search-clear:hover { color: var(--fg); background: var(--card-2); }

  .fx-hero-search { background: var(--section-bg); border: 1px solid var(--border); border-radius: 12px; padding: 22px 22px 18px; margin-bottom: 16px;
    background-image: radial-gradient(circle at 50% -40%, var(--accent-soft) 0%, transparent 60%); }
  .fx-hero-search-inner .fx-searchbar { height: 50px; background: var(--card); font-size: 15px; }
  .fx-hero-search-hint { margin-top: 10px; font-size: 12.5px; color: var(--fg-mute); display: flex; gap: 6px; align-items: center; }
  .fx-hero-search-hint code, .fx-ic { font-family: var(--font-mono); font-size: .88em; background: var(--card-2); border: 1px solid var(--border);
    padding: 1px 6px; border-radius: 5px; color: var(--fg-dim); }

  /* ---------- TOOLBAR ---------- */
  .fx-toolbar { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
  .fx-toolbar-search { flex: 1; min-width: 0; }
  .fx-toolbar-right { display: flex; align-items: center; gap: 10px; flex: none; }
  .fx-sort { position: relative; }
  .fx-sort-cur { font-size: 13.5px; }
  .fx-seeall { font-size: 12.5px; color: var(--fg-mute); }
  .fx-seeall:hover { color: var(--accent); }

  /* ---------- CARD + SECTION ---------- */
  .fx-card { background: var(--card); border: 1px solid var(--border); border-radius: 12px; }
  .fx-cat-wrap, .fx-activity-wrap { margin-bottom: 22px; overflow: hidden; }
  .fx-sec-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; border-bottom: 1px solid var(--border); }
  .fx-sec-title { display: flex; align-items: center; gap: 9px; font-size: 13px; font-weight: 600; letter-spacing: .02em; text-transform: uppercase; color: var(--fg-dim); }
  .fx-sec-count { font-family: var(--font-mono); font-size: 11px; color: var(--fg-mute); background: var(--card-2); border: 1px solid var(--border); border-radius: 999px; padding: 1px 8px; }

  /* ---------- CATEGORY LIST ---------- */
  .fx-cat-list { display: flex; flex-direction: column; }
  .fx-cat-row { display: grid; grid-template-columns: 44px 1fr 130px 250px; align-items: center; gap: 16px; width: 100%; text-align: left;
    background: none; border: none; border-bottom: 1px dashed var(--hairline); padding: 16px 18px; transition: background .15s; }
  .fx-cat-row:last-child { border-bottom: none; }
  .fx-cat-row:hover { background: var(--hover-wash); }
  .fx-cat-ic { width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; border-radius: 10px;
    background: var(--card-2); border: 1px solid var(--border); }
  .fx-cat-ic.lg { width: 48px; height: 48px; }
  .fx-cat-ic.xl { width: 60px; height: 60px; border-radius: 14px; }
  .fx-cat-main { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
  .fx-cat-name-row { display: flex; align-items: center; gap: 9px; }
  .fx-cat-name { font-size: 15.5px; font-weight: 600; color: var(--fg); }
  .fx-cat-desc { font-size: 13px; color: var(--fg-mute); line-height: 1.45; max-width: 60ch;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .fx-pill-ro { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--fg-mute);
    background: var(--card-2); border: 1px solid var(--border); border-radius: 999px; padding: 2px 7px; }
  .fx-cat-stats { display: grid; grid-template-columns: auto 1fr; gap: 1px 8px; align-items: baseline; }
  .fx-stat-num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-weight: 600; font-size: 14px; color: var(--fg); text-align: right; }
  .fx-stat-lab { font-size: 11.5px; color: var(--fg-mute); }
  .fx-cat-last { display: flex; align-items: center; gap: 10px; min-width: 0; }
  .fx-cat-last-main { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .fx-cat-last-title { font-size: 12.5px; color: var(--fg-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .fx-cat-last-meta { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }

  /* ---------- CATEGORY CARDS ---------- */
  .fx-cat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); }
  .fx-cat-card { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; text-align: left; background: var(--card);
    border: none; padding: 20px 20px 16px; transition: background .15s; }
  .fx-cat-card:hover { background: var(--card-hover); }
  .fx-cat-card-head { display: flex; align-items: center; justify-content: space-between; width: 100%; margin-bottom: 4px; }
  .fx-cat-card .fx-cat-name { font-size: 15px; }
  .fx-cat-card .fx-cat-desc { -webkit-line-clamp: 2; min-height: 2.9em; }
  .fx-cat-card-foot { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--fg-mute); margin-top: 8px; width: 100%; }
  .fx-cat-card-foot .fx-stat-num { font-size: 12.5px; }
  .fx-cat-card-last { margin-left: auto; display: flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }

  /* ---------- TOPIC ROWS ---------- */
  .fx-topic-list.pinned { background: color-mix(in srgb, var(--accent-soft) 7%, transparent); border-bottom: 1px solid var(--border); }
  .fx-topic-row { display: grid; grid-template-columns: auto 1fr auto auto; align-items: center; gap: 16px; width: 100%; text-align: left;
    background: none; border: none; border-bottom: 1px dashed var(--hairline); padding: 13px 18px; transition: background .15s; }
  .fx-topic-row:last-child { border-bottom: none; }
  .fx-topic-row:hover { background: var(--hover-wash); }
  .fx-topic-av { flex: none; }
  .fx-topic-main { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
  .fx-topic-titleline { display: flex; align-items: center; gap: 8px; min-width: 0; }
  .fx-topic-title { font-size: 14.5px; font-weight: 500; color: var(--fg); line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-topic-row:hover .fx-topic-title { color: var(--accent); }
  .fx-topic-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; color: var(--fg-mute); }
  .fx-topic-by { color: var(--fg-mute); }
  .fx-topic-author { color: var(--fg-dim); font-weight: 500; }
  .fx-topic-time { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }
  .fx-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 500; color: var(--fg-dim);
    background: var(--card-2); border: 1px solid var(--border); border-radius: 6px; padding: 3px 8px; transition: all .12s; }
  .fx-chip:hover { border-color: var(--accent); color: var(--accent); }
  .fx-chip svg { color: var(--accent); }
  .fx-tag-sm { font-family: var(--font-mono); font-size: 11px; color: var(--fg-mute); background: var(--well); border: 1px solid var(--border); border-radius: 5px; padding: 1px 6px; }
  .fx-flag { display: inline-flex; align-items: center; gap: 4px; flex: none; border-radius: 6px; }
  .fx-flag.pin { color: var(--accent); }
  .fx-flag.solved { color: var(--ok); }
  .fx-flag.ans { color: var(--fg-mute); }
  .fx-flag.lg { font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; padding: 4px 9px; border: 1px solid; }
  .fx-flag.pin.lg { background: var(--accent-soft); border-color: transparent; }
  .fx-flag.solved.lg { background: rgba(108,198,107,.12); border-color: rgba(108,198,107,.3); }
  .fx-topic-counts { display: flex; align-items: center; gap: 14px; flex: none; }
  .fx-count { display: inline-flex; align-items: center; gap: 5px; }
  .fx-count-n { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 13px; font-weight: 500; color: var(--fg-dim); }
  .fx-topic-last { display: flex; align-items: center; gap: 8px; flex: none; width: 92px; }
  .fx-topic-last-time { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }

  /* compact density */
  .fx-root[data-density="compact"] .fx-topic-row { padding: 8px 16px; gap: 12px; }
  .fx-root[data-density="compact"] .fx-topic-meta { gap: 7px; }
  .fx-root[data-density="compact"] .fx-cat-row { padding: 11px 16px; }
  .fx-root[data-density="compact"] .fx-topic-title { font-size: 14px; }

  /* ---------- CATEGORY HERO ---------- */
  .fx-cat-hero { display: flex; gap: 18px; align-items: flex-start; padding: 8px 0 24px; }
  .fx-cat-hero-main { flex: 1; }
  .fx-cat-hero-title { display: flex; align-items: center; gap: 12px; }
  .fx-cat-hero-stats { display: flex; align-items: center; gap: 10px; margin-top: 14px; font-size: 13px; color: var(--fg-mute); }

  /* ---------- PRIVACY NOTE ---------- */
  .fx-privacy-note { display: flex; gap: 10px; align-items: flex-start; background: var(--section-bg); border: 1px solid var(--border);
    border-radius: 10px; padding: 14px 16px; font-size: 13px; color: var(--fg-mute); line-height: 1.5; }
  .fx-privacy-note svg { margin-top: 2px; }

  /* ---------- COMMAND PALETTE ---------- */
  .fx-palette-scrim { position: fixed; inset: 0; z-index: 100; background: rgba(5,7,10,.55); backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px); display: flex; align-items: flex-start; justify-content: center; padding: 12vh 20px 20px; }
  .fx-palette { width: 100%; max-width: 600px; background: var(--card); border: 1px solid var(--border-hi); border-radius: 14px;
    box-shadow: var(--shadow-lg); overflow: hidden; opacity: 1; transform: none; animation: fx-pop .14s ease-out both; }
  @keyframes fx-pop { from { transform: translateY(-8px) scale(.985); opacity: 0; } to { transform: none; opacity: 1; } }
  .fx-palette-top { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--border); }
  .fx-palette-input { flex: 1; background: none; border: none; outline: none; color: var(--fg); font-size: 16px; font-family: var(--font-ui); }
  .fx-palette-input::placeholder { color: var(--fg-mute); }
  .fx-palette-list { max-height: 50vh; overflow: auto; padding: 6px; }
  .fx-palette-label { font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--fg-faint); padding: 8px 10px 4px; }
  .fx-palette-empty { padding: 20px 10px; font-size: 13.5px; color: var(--fg-mute); text-align: center; }
  .fx-palette-row { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: none; border: none;
    padding: 10px 10px; border-radius: 9px; color: var(--fg-dim); }
  .fx-palette-row.active { background: var(--card-2); color: var(--fg); }
  .fx-pal-ic { width: 30px; height: 30px; flex: none; display: inline-flex; align-items: center; justify-content: center;
    border-radius: 7px; background: var(--well); border: 1px solid var(--border); color: var(--fg-mute); }
  .fx-pal-ic.accent { background: var(--accent-soft); border-color: transparent; color: var(--accent); }
  .fx-palette-row.active .fx-pal-ic.accent { color: var(--accent); }
  .fx-pal-main { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fx-pal-sub { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); flex: none; }
  .fx-palette-foot { display: flex; gap: 18px; padding: 10px 16px; border-top: 1px solid var(--border); font-size: 11.5px; color: var(--fg-mute); }
  .fx-palette-foot .fx-kbd { margin-right: 3px; }

  /* ---------- SEARCH RESULTS ---------- */
  .fx-search-hero { margin: 6px 0 18px; }
  .fx-results-head { margin-bottom: 14px; }
  .fx-results-count { font-size: 15px; color: var(--fg-dim); }
  .fx-results-count strong { color: var(--fg); font-family: var(--font-mono); }
  .fx-q { color: var(--accent); }
  .fx-scope-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
  .fx-scope { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--fg-dim); background: var(--card-2);
    border: 1px solid var(--border); border-radius: 999px; padding: 6px 13px; transition: all .12s; }
  .fx-scope:hover { border-color: var(--border-hi); }
  .fx-scope.on { background: var(--accent-soft); border-color: transparent; color: var(--fg); font-weight: 500; }
  .fx-scope-n { font-family: var(--font-mono); font-size: 11px; color: var(--fg-mute); }
  .fx-scope.on .fx-scope-n { color: var(--fg-dim); }
  .fx-result-list { background: var(--card); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
  .fx-result-list .fx-topic-row { border-bottom: 1px solid var(--hairline); }
  .fx-empty { display: flex; gap: 14px; align-items: flex-start; padding: 28px 20px; }
  .fx-empty.pad { justify-content: center; color: var(--fg-mute); font-size: 14px; }
  .fx-empty-ic { width: 44px; height: 44px; flex: none; display: inline-flex; align-items: center; justify-content: center; border-radius: 10px;
    background: var(--well); border: 1px solid var(--border); color: var(--fg-mute); }
  .fx-empty-h { font-size: 15px; font-weight: 600; margin-bottom: 4px; }
  .fx-empty-p { font-size: 13.5px; color: var(--fg-mute); }
  .fx-empty-p code { font-family: var(--font-mono); font-size: .9em; color: var(--accent); }

  /* ---------- TOPIC PAGE ---------- */
  .fx-topic-hero { padding: 6px 0 22px; border-bottom: 1px solid var(--border); margin-bottom: 22px; }
  .fx-topic-hero-flags { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .fx-topic-hero-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 14px; font-size: 13px; color: var(--fg-mute); }
  .fx-topic-hero-meta .fx-mono { color: var(--fg-dim); }
  .fx-tag-cloud { display: flex; flex-wrap: wrap; gap: 6px; }
  .fx-tag-cloud.inline { margin-left: 4px; }
  .fx-topic-grid { display: grid; grid-template-columns: 1fr 280px; gap: 28px; align-items: start; }
  .fx-thread { display: flex; flex-direction: column; gap: 14px; min-width: 0; }

  .fx-post { display: grid; grid-template-columns: 150px 1fr; gap: 4px; background: var(--card); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
  .fx-post.op { border-color: var(--border-hi); }
  .fx-post-author { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 22px 14px; border-right: 1px dashed var(--hairline);
    background: var(--card-2); text-align: center; }
  .fx-post-author-meta { display: flex; flex-direction: column; align-items: center; gap: 3px; }
  .fx-post-name { font-size: 13.5px; font-weight: 600; color: var(--fg); }
  .fx-post-name:hover { color: var(--accent); }
  .fx-post-badges { display: flex; gap: 5px; margin: 2px 0; }
  .fx-badge-op { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .06em; color: var(--accent); background: var(--accent-soft);
    border-radius: 4px; padding: 1px 5px; font-weight: 600; }
  .fx-post-since { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }
  .fx-post-body-wrap { padding: 18px 22px 12px; min-width: 0; }
  .fx-post-head { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
  .fx-post-num { font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); }
  .fx-post-time { display: inline-flex; align-items: center; gap: 5px; font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-mute); margin-left: auto; }
  .fx-post-body { font-size: 15px; line-height: 1.6; color: var(--fg-dim); }
  .fx-post-body code.fx-ic { font-family: var(--font-mono); font-size: .85em; background: var(--well); border: 1px solid var(--border); padding: 1px 6px; border-radius: 5px; color: var(--accent); }
  .fx-quote { margin: 0 0 14px; padding: 10px 14px; background: var(--well); border-left: 2px solid var(--accent); border-radius: 0 8px 8px 0; }
  .fx-quote-head { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--fg-mute); margin-bottom: 5px; }
  .fx-quote-head strong { color: var(--fg-dim); }
  .fx-quote-text { font-size: 13.5px; color: var(--fg-mute); line-height: 1.45; }
  .fx-post-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-top: 16px; padding-top: 12px; border-top: 1px dashed var(--hairline); }
  .fx-post-act { display: inline-flex; align-items: center; gap: 6px; background: none; border: 1px solid transparent; color: var(--fg-mute);
    font-size: 12.5px; padding: 6px 10px; border-radius: 7px; white-space: nowrap; transition: all .12s; }
  .fx-post-act:hover { background: var(--card-2); color: var(--fg); }
  .fx-post-act.on { color: var(--err); }
  .fx-post-act.subtle { margin-left: auto; }

  /* ABOUT sidebar */
  .fx-about { display: flex; flex-direction: column; gap: 14px; position: sticky; top: calc(var(--nav-h) + 18px); }
  .fx-about-card { padding: 16px 18px; }
  .fx-about-h { display: flex; align-items: center; gap: 8px; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--fg-faint); margin: 0 0 14px; font-weight: 600; }
  .fx-about-dl { margin: 0; display: flex; flex-direction: column; gap: 11px; }
  .fx-about-dl > div { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
  .fx-about-dl dt { font-size: 12.5px; color: var(--fg-mute); }
  .fx-about-dl dd { margin: 0; font-size: 12.5px; color: var(--fg-dim); display: flex; align-items: center; gap: 7px; }
  .fx-parts { display: flex; flex-wrap: wrap; gap: 7px; }

  /* SIGN-IN CTA + REPLY */
  .fx-signin-cta { display: flex; align-items: center; justify-content: space-between; gap: 16px; background: var(--section-bg);
    border: 1px solid var(--border); border-radius: 12px; padding: 18px 20px; flex-wrap: wrap; }
  .fx-signin-text { display: flex; flex-direction: column; gap: 3px; }
  .fx-signin-h { font-size: 15px; font-weight: 600; }
  .fx-signin-p { font-size: 13px; color: var(--fg-mute); }
  .fx-signin-acts { display: flex; gap: 10px; }
  .fx-reply { padding: 16px 18px; }
  .fx-reply-head { display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 500; margin-bottom: 12px; }
  .fx-reply-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 12px; flex-wrap: wrap; padding: 0 2px; }
  .fx-reply-hint { font-size: 12px; color: var(--fg-mute); line-height: 1.5; }

  /* EDITOR */
  .fx-editor { border: 1px solid var(--border); border-radius: 9px; overflow: hidden; background: var(--well); }
  .fx-editor-bar { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px; border-bottom: 1px solid var(--border); background: var(--card-2); }
  .fx-editor-tools { display: flex; gap: 2px; }
  .fx-tool { display: inline-flex; align-items: center; justify-content: center; min-height: 30px; background: none; border: none; color: var(--fg-mute); padding: 6px 8px; border-radius: 6px; font: inherit; font-size: 13px; line-height: 1; transition: all .12s; }
  .fx-tool:hover { background: var(--card-hover); color: var(--fg); }
  .fx-editor-tabs { display: flex; gap: 2px; }
  .fx-etab { background: none; border: none; color: var(--fg-mute); font-size: 12.5px; padding: 5px 11px; border-radius: 6px; }
  .fx-etab.on { background: var(--card); color: var(--fg); border: 1px solid var(--border); }
  .fx-textarea { width: 100%; min-height: 130px; resize: vertical; background: var(--well); border: none; outline: none; color: var(--fg);
    font-family: var(--font-ui); font-size: 14.5px; line-height: 1.6; padding: 14px; }
  .fx-textarea::placeholder { color: var(--fg-mute); }
  .fx-preview { min-height: 130px; padding: 14px; font-size: 14.5px; line-height: 1.6; color: var(--fg-dim); }
  .fx-preview.empty { color: var(--fg-faint); font-style: italic; }
  .fx-preview code.fx-ic { font-family: var(--font-mono); font-size: .85em; background: var(--card-2); border: 1px solid var(--border); padding: 1px 6px; border-radius: 5px; color: var(--accent); }

  /* COMPOSER */
  .fx-compose { padding: 22px 24px; display: flex; flex-direction: column; gap: 20px; }
  .fx-field { display: flex; flex-direction: column; gap: 8px; position: relative; }
  fieldset.fx-field { border: 0; margin: 0; padding: 0; min-inline-size: 0; }
  .fx-field-lab { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--fg-mute); }
  .fx-field-opt { text-transform: none; letter-spacing: 0; font-weight: 400; color: var(--fg-faint); }
  .fx-field-hint { font-size: 12px; color: var(--fg-mute); }
  .fx-field > .fx-field-hint { position: absolute; right: 2px; top: 0; font-family: var(--font-mono); }
  .fx-input { width: 100%; min-width: 0; background: var(--well); border: 1px solid var(--border); border-radius: 9px; padding: 12px 14px; font-family: var(--font-ui);
    font-size: 14.5px; color: var(--fg); outline: none; transition: border-color .15s, box-shadow .15s; }
  .fx-input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
  .fx-input::placeholder { color: var(--fg-mute); }
  .fx-cat-picker { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px; }
  .fx-cat-opt { display: inline-flex; align-items: center; justify-content: flex-start; gap: 7px; min-height: 42px; font-size: 13px; color: var(--fg-dim); background: var(--card-2);
    border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px; cursor: pointer; user-select: none; transition: all .12s; }
  .fx-cat-opt svg { color: var(--fg-mute); }
  .fx-cat-opt:hover { border-color: var(--border-hi); }
  .fx-cat-opt.on,
  .fx-cat-picker .fx-cat-opt.on { background: var(--card); border-color: var(--accent); color: var(--fg); font-weight: 500; box-shadow: 0 0 0 2px var(--accent-soft); }
  .fx-cat-opt.on svg,
  .fx-cat-picker .fx-cat-opt.on svg { color: var(--accent); }
  .fx-cat-opt:has(input:focus-visible) { outline: 2px solid var(--accent-soft); outline-offset: 2px; }
  .fx-tag-input { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; background: var(--well); border: 1px solid var(--border);
    border-radius: 9px; padding: 9px 12px; min-height: 44px; }
  .fx-tag-input:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
  .fx-tag-edit { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim);
    background: var(--card-2); border: 1px solid var(--border); border-radius: 6px; padding: 3px 4px 3px 8px; }
  .fx-tag-edit button { display: inline-flex; background: none; border: none; color: var(--fg-mute); padding: 2px; border-radius: 4px; }
  .fx-tag-edit button:hover { color: var(--err); background: var(--card-hover); }
  .fx-tag-field { flex: 1; min-width: 120px; background: none; border: none; outline: none; color: var(--fg); font-size: 13.5px; font-family: var(--font-ui); }
  .fx-tag-field::placeholder { color: var(--fg-mute); }
  .fx-compose-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 4px; flex-wrap: wrap; }

  /* ---------- FOOTER ---------- */
  .fx-footer { border-top: 1px solid var(--border); padding: 48px 0 36px; margin-top: 24px; }
  .fx-foot-grid { display: grid; grid-template-columns: 1.6fr repeat(3, 1fr); gap: 40px; }
  .fx-foot-blurb { font-size: 13.5px; color: var(--fg-dim); line-height: 1.6; max-width: 320px; margin: 12px 0 0; }
  .fx-foot-ln { color: var(--accent); }
  .fx-foot-ln:hover { text-decoration: underline; }
  .fx-skyline { display: flex; align-items: center; gap: 8px; margin-top: 16px; font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-faint); letter-spacing: .08em; }
  .fx-foot-col h5 { font-family: var(--font-mono); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--fg-faint); margin: 0 0 14px; font-weight: 500; }
  .fx-foot-col ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 9px; }
  .fx-foot-col a { font-size: 13.5px; color: var(--fg-dim); transition: color .15s; }
  .fx-foot-col a:hover { color: var(--fg); }
  .fx-foot-meta { font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); }
  .fx-foot-copy { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 36px; padding-top: 22px;
    border-top: 1px solid var(--border); font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); flex-wrap: wrap; }

  /* ---------- USER MENU + BUTTON SIZES ---------- */
  .fx-usermenu-btn { display: inline-flex; align-items: center; gap: 8px; background: var(--card-2); border: 1px solid var(--border);
    border-radius: 999px; padding: 4px 12px 4px 5px; font-size: 13.5px; font-weight: 500; color: var(--fg); transition: all .15s; }
  .fx-usermenu-btn:hover { border-color: var(--border-hi); background: var(--card-hover); }
  .fx-menu-sep { height: 1px; background: var(--border); margin: 5px 2px; }
  .fx-btn-lg { padding: 12px 20px; font-size: 14.5px; }
  .fx-btn-sm { padding: 6px 12px; font-size: 12.5px; }

  /* ---------- SIGN IN ---------- */
  .fx-auth-page { padding-top: 56px; }
  .fx-auth-h { font-size: 42px; margin-bottom: 10px; }
  .fx-auth-card { padding: 26px 28px; margin-top: 28px; }
  .fx-auth-form { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; }
  .fx-auth-form .fx-field { width: 100%; }
  .fx-auth-fine { font-size: 12.5px; color: var(--fg-mute); margin: 2px 0 0; line-height: 1.5; max-width: 52ch; }
  .fx-sent { display: flex; gap: 16px; align-items: flex-start; }
  .fx-sent-ic { width: 40px; height: 40px; flex: none; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px;
    background: rgba(108,198,107,.14); border: 1px solid rgba(108,198,107,.34); color: var(--ok); }
  .fx-sent-h { font-size: 16px; font-weight: 600; margin-bottom: 4px; }
  .fx-sent-p { font-size: 14px; color: var(--fg-dim); line-height: 1.55; }
  .fx-demo-link { display: inline-block; margin-top: 12px; font-size: 13px; background: none; border: none; padding: 0; cursor: pointer; }

  /* ---------- YOUR ACCOUNT ---------- */
  .fx-acct-card { padding: 22px 24px; display: flex; flex-direction: column; gap: 20px; align-items: flex-start; }
  .fx-acct-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 28px; width: 100%; align-items: start; }
  .fx-acct-aside { display: flex; flex-direction: column; gap: 14px; padding-top: 26px; }
  .fx-acct-note { font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--fg-faint); }
  .fx-input-avatar { position: relative; }
  .fx-input-avatar .fx-input { width: 100%; padding-right: 44px; }
  .fx-input-adorn { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); }
  .fx-acct-sec { padding: 24px 0; border-top: 1px solid var(--border); }
  .fx-acct-sec-h { font-size: 17px; font-weight: 600; margin: 0 0 4px; display: flex; align-items: baseline; gap: 8px; }
  .fx-acct-count { font-family: var(--font-mono); font-size: 13px; color: var(--fg-mute); font-weight: 400; }
  .fx-acct-desc { font-size: 13.5px; color: var(--fg-mute); line-height: 1.55; margin: 0 0 16px; max-width: 70ch; }
  .fx-acct-text { font-size: 14px; color: var(--fg-dim); line-height: 1.55; margin: 0; }
  .fx-acct-text.mute { color: var(--fg-mute); }
  .fx-empty-card { background: var(--well); border: 1px dashed var(--border-hi); border-radius: 10px; padding: 26px 20px; text-align: center;
    font-size: 13.5px; color: var(--fg-mute); line-height: 1.55; }
  .fx-quote-inline { color: var(--fg-dim); }
  .fx-acct-foot { padding: 24px 0 0; border-top: 1px solid var(--border); margin-top: 8px; }
  .fx-toggle-row { display: flex; align-items: center; gap: 12px; background: none; border: none; padding: 0; text-align: left; color: var(--fg-dim); font-size: 14px; }
  .fx-switch { width: 38px; height: 22px; flex: none; border-radius: 999px; background: var(--card-hi); border: 1px solid var(--border); position: relative; transition: all .18s; }
  .fx-switch.on { background: var(--accent); border-color: transparent; }
  .fx-switch-knob { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 999px; background: #fff; transition: transform .18s; box-shadow: 0 1px 2px rgba(0,0,0,.3); }
  .fx-switch.on .fx-switch-knob { transform: translateX(16px); }
  .fx-toggle-label { line-height: 1.45; }
  .fx-check-row { display: flex; align-items: flex-start; gap: 10px; background: none; border: none; padding: 0; text-align: left; color: var(--fg-dim); font-size: 14px; line-height: 1.45; }
  .fx-check { width: 18px; height: 18px; flex: none; margin-top: 1px; border-radius: 5px; border: 1px solid var(--border-hi); background: var(--well);
    display: inline-flex; align-items: center; justify-content: center; color: var(--accent-ink); transition: all .15s; }
  .fx-check.on { background: var(--accent); border-color: transparent; }

  /* ---------- USER PROFILE ---------- */
  .fx-profile-grid { display: grid; grid-template-columns: 280px 1fr; gap: 32px; align-items: start; margin-top: 8px; }
  .fx-profile-card { padding: 28px 24px; display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
  .fx-profile-name { font-size: 20px; font-weight: 700; letter-spacing: -.01em; display: flex; align-items: center; gap: 8px; margin-top: 4px; }
  .fx-profile-stats { display: flex; flex-direction: column; gap: 12px; width: 100%; margin-top: 18px; padding-top: 18px; border-top: 1px dashed var(--hairline); font-size: 14px; color: var(--fg-dim); }
  .fx-profile-joined { font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-faint); }
  .fx-prof-h { font-size: 18px; font-weight: 600; margin: 0 0 14px; }
  .fx-prof-posts { overflow: hidden; }
  .fx-prof-post { display: flex; align-items: center; justify-content: space-between; gap: 16px; width: 100%; text-align: left; background: none;
    border: none; border-bottom: 1px dashed var(--hairline); padding: 15px 18px; transition: background .15s; }
  .fx-prof-post:last-child { border-bottom: none; }
  .fx-prof-post:hover { background: var(--hover-wash); }
  .fx-prof-post-title { font-size: 14.5px; font-weight: 500; color: var(--fg); }
  .fx-prof-post:hover .fx-prof-post-title { color: var(--accent); }
  .fx-prof-post-time { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); flex: none; }
  .fx-post-av-btn { background: none; border: none; padding: 0; cursor: pointer; }

  /* ---------- GUIDELINES ---------- */
  .fx-guide { padding: 6px 24px; }
  .fx-guide-row { display: flex; gap: 18px; align-items: flex-start; padding: 20px 0; border-bottom: 1px dashed var(--hairline); }
  .fx-guide-row:last-child { border-bottom: none; }
  .fx-guide-n { font-family: var(--font-mono); font-size: 14px; font-weight: 600; color: var(--accent); flex: none; padding-top: 1px; }
  .fx-guide-h { font-size: 15.5px; font-weight: 600; margin-bottom: 4px; }
  .fx-guide-p { font-size: 13.5px; color: var(--fg-mute); line-height: 1.55; }

  /* ============ PROFILE LIBRARY ============ */
  .fx-lib-actions { display: flex; gap: 12px; margin-top: 18px; flex-wrap: wrap; }
  .fx-statstrip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; margin: 24px 0 10px; }
  .fx-stat { background: var(--card); padding: 16px 18px; display: flex; flex-direction: column; gap: 3px; }
  .fx-stat-v { font-family: var(--font-mono); font-size: 24px; font-weight: 600; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
  .fx-stat-k { font-size: 11px; color: var(--fg-mute); text-transform: uppercase; letter-spacing: .08em; }

  .fx-lib-featured { margin: 28px 0; }
  .fx-feat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 4px; }
  .fx-pcard-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 16px; }
  .fx-accard-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }

  /* profile table (list view) */
  .fx-ptable { --cols: minmax(0,1fr) 150px 200px 116px 96px; padding: 0; overflow: hidden; }
  .fx-ptable-head { display: grid; grid-template-columns: var(--cols); align-items: center; gap: 16px; padding: 11px 18px; border-bottom: 1px solid var(--border); font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--fg-faint); font-weight: 600; background: var(--card-2); }
  .fx-prow-dl-h { text-align: right; }
  .fx-prow { display: grid; grid-template-columns: var(--cols); align-items: center; gap: 16px; width: 100%; text-align: left; background: none; border: none; border-bottom: 1px dashed var(--hairline); padding: 12px 18px; transition: background .15s; }
  .fx-prow:last-child { border-bottom: none; }
  .fx-prow:hover { background: var(--hover-wash); }
  .fx-prow-title { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
  .fx-prow-titlerow { display: flex; align-items: center; gap: 9px; min-width: 0; }
  .fx-prow-name { font-size: 14.5px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .fx-prow:hover .fx-prow-name { color: var(--accent); }
  .fx-prow-ac { font-size: 12px; color: var(--fg-mute); display: inline-flex; align-items: center; gap: 5px; }
  .fx-prow-author { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--fg-dim); min-width: 0; }
  .fx-prow-author-n { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .fx-prow-traits { display: flex; gap: 6px; overflow: hidden; }
  .fx-prow-rating { display: flex; }
  .fx-prow-dl { justify-self: end; display: inline-flex; align-items: center; gap: 5px; font-size: 13px; color: var(--fg-dim); }

  .fx-pgroup-head { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 12px 18px; background: var(--card-2); border: none; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); transition: background .15s; }
  .fx-pgroup-head.first { border-top: none; }
  .fx-pgroup-head:hover { background: var(--card-hi); }
  .fx-pgroup-ic { width: 28px; height: 28px; border-radius: 7px; background: var(--card); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; color: var(--accent); flex: none; }
  .fx-pgroup-name { font-size: 14.5px; font-weight: 600; }
  .fx-chip.sm { padding: 1px 7px; font-size: 10.5px; }
  .fx-pgroup-cat { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-faint); }
  .fx-pgroup-meta { margin-left: auto; display: flex; align-items: center; gap: 16px; font-size: 12.5px; color: var(--fg-mute); }
  .fx-pgroup-rate { display: inline-flex; align-items: center; gap: 4px; }
  .fx-pgroup-count { color: var(--fg-dim); }
  .fx-pgroup-count .fx-mono { color: var(--accent); font-weight: 600; }
  .fx-pgroup-all { display: inline-flex; align-items: center; gap: 3px; color: var(--accent); font-weight: 500; }

  @media (max-width: 880px) {
    .fx-hide-md { display: none !important; }
    .fx-ptable { --cols: minmax(0,1fr) 116px 92px; }
  }

  /* force signature */
  .fx-sig { display: flex; align-items: flex-end; width: 100%; border-bottom: 1px solid var(--hairline); padding-bottom: 1px; }
  .fx-sig-bar { flex: 1; background: var(--accent); border-radius: 2px 2px 0 0; min-height: 6px; }
  .fx-sigpanel { display: flex; flex-direction: column; gap: 9px; margin-top: 6px; }
  .fx-sigrow { display: grid; grid-template-columns: 96px 1fr 30px; align-items: center; gap: 12px; }
  .fx-sigrow-lab { font-size: 12.5px; color: var(--fg-dim); }
  .fx-sigrow-track { height: 8px; border-radius: 999px; background: var(--well); border: 1px solid var(--border); overflow: hidden; }
  .fx-sigrow-fill { display: block; height: 100%; background: var(--accent); border-radius: 999px; }
  .fx-sigrow-val { font-family: var(--font-mono); font-size: 12px; color: var(--fg-mute); text-align: right; }

  /* character traits */
  .fx-traits { display: flex; flex-wrap: wrap; gap: 6px; }
  .fx-trait { font-size: 11.5px; font-weight: 500; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--border); background: var(--card-2); color: var(--fg-dim); white-space: nowrap; }
  .fx-trait.tone-strong, .fx-trait.tone-firm { color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, transparent); border-color: color-mix(in srgb, var(--accent) 30%, transparent); }
  .fx-trait.tone-light, .fx-trait.tone-min { color: var(--fg-mute); }
  .fx-traitlist { display: grid; grid-template-columns: 1fr 1fr; gap: 0 28px; margin-top: 4px; }
  .fx-traitrow { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 0; border-bottom: 1px dashed var(--hairline); }
  .fx-traitrow-lab { font-size: 13.5px; color: var(--fg-mute); }
  .fx-traitrow-word { font-size: 12.5px; font-weight: 400; color: var(--fg-dim); }
  .fx-traitrow-word.tone-strong, .fx-traitrow-word.tone-firm, .fx-traitrow-word.tone-mod { color: var(--fg-dim); }
  .fx-traitrow-word.tone-light { color: var(--fg-mute); }
  .fx-traitrow-word.tone-min { color: var(--fg-faint); }
  .fx-accard-toppick { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; background: var(--well); border: 1px solid var(--border); border-radius: 8px; }
  .fx-accard-tp-lab { font-size: 10px; text-transform: uppercase; letter-spacing: .08em; color: var(--fg-faint); }
  .fx-accard-tp-name { font-size: 13px; font-weight: 500; color: var(--fg-dim); }
  .fx-preview-ph { font-size: 12.5px; color: var(--fg-faint); font-style: italic; padding: 12px 0; border-top: 1px dashed var(--hairline); border-bottom: 1px dashed var(--hairline); }

  /* stars */
  .fx-stars-wrap { display: inline-flex; align-items: center; gap: 6px; }
  .fx-stars { position: relative; display: inline-flex; }
  .fx-stars-bg { display: inline-flex; color: var(--border-hi); }
  .fx-stars-bg svg { fill: none; }
  .fx-stars-fg { position: absolute; top: 0; left: 0; overflow: hidden; white-space: nowrap; }
  .fx-stars-fgrow { display: inline-flex; color: var(--signal); }
  .fx-stars-fgrow svg { fill: currentColor; }
  .fx-stars-num { font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim); }
  .fx-stars-num.muted { color: var(--fg-faint); }
  .fx-stars-ct { color: var(--fg-mute); }

  /* badges */
  .fx-srcbadge { display: inline-flex; align-items: center; gap: 4px; font-size: 10px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; flex: none; }
  .fx-srcbadge.dev { color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 32%, transparent); }
  .fx-srcbadge.comm { color: var(--fg-mute); background: var(--card-2); border: 1px solid var(--border); }
  .fx-cat-tag { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-mute); background: var(--card-2); border: 1px solid var(--border); border-radius: 6px; padding: 3px 8px; }

  /* profile card */
  .fx-pcard { display: flex; flex-direction: column; gap: 14px; text-align: left; background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 18px; transition: all .15s ease-out; }
  .fx-pcard:hover { border-color: var(--accent-soft); transform: translateY(-2px); box-shadow: var(--shadow); }
  .fx-pcard-top { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; }
  .fx-pcard-titles { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
  .fx-pcard-title { font-size: 15.5px; font-weight: 600; line-height: 1.3; }
  .fx-pcard-ac { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--fg-mute); }
  .fx-pcard-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 12px; border-top: 1px dashed var(--hairline); }
  .fx-pcard-by { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--fg-dim); }
  .fx-pcard-dl { display: inline-flex; align-items: center; gap: 5px; }

  /* aircraft card */
  .fx-accard { display: flex; flex-direction: column; gap: 14px; text-align: left; background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 18px; transition: all .15s ease-out; }
  .fx-accard:hover { border-color: var(--accent-soft); transform: translateY(-2px); box-shadow: var(--shadow); }
  .fx-accard-head { display: flex; gap: 12px; align-items: center; }
  .fx-accard-ic { width: 42px; height: 42px; border-radius: 10px; background: var(--card-2); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; color: var(--accent); flex: none; }
  .fx-accard-titles { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
  .fx-accard-name { font-size: 16px; font-weight: 600; }
  .fx-accard-sub { font-size: 12px; color: var(--fg-mute); }
  .fx-accard-count { display: flex; align-items: baseline; gap: 6px; }
  .fx-accard-n { font-family: var(--font-mono); font-size: 26px; font-weight: 600; color: var(--accent); letter-spacing: -.02em; }
  .fx-accard-nlab { font-size: 13px; color: var(--fg-mute); }
  .fx-accard-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 12px; border-top: 1px dashed var(--hairline); }
  .fx-avstack { display: inline-flex; }
  .fx-avstack-i { margin-left: -7px; } .fx-avstack-i:first-child { margin-left: 0; }
  .fx-accard-meta { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--fg-mute); }

  /* filters */
  .fx-lib-filters { display: flex; gap: 14px; align-items: flex-end; padding: 16px 18px; margin: 10px 0 18px; flex-wrap: wrap; }
  .fx-lfield { display: flex; flex-direction: column; gap: 6px; }
  .fx-lfield.grow { flex: 1; min-width: 200px; }
  .fx-lfield-lab { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-mute); }
  .fx-search-inline { display: flex; align-items: center; gap: 8px; background: var(--well); border: 1px solid var(--border); border-radius: 8px; padding: 0 12px; height: 40px; }
  .fx-search-inline:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
  .fx-linput { flex: 1; background: none; border: none; outline: none; color: var(--fg); font-size: 14px; font-family: var(--font-ui); }
  .fx-linput::placeholder { color: var(--fg-mute); }
  .fx-select-wrap { position: relative; }
  .fx-select { appearance: none; -webkit-appearance: none; background: var(--well); border: 1px solid var(--border); border-radius: 8px; height: 40px; padding: 0 34px 0 12px; font-size: 14px; font-family: var(--font-ui); color: var(--fg); min-width: 140px; cursor: pointer; }
  .fx-select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
  .fx-select-caret { position: absolute; right: 11px; top: 50%; transform: translateY(-50%); color: var(--fg-mute); pointer-events: none; }

  /* sub-bar */
  .fx-lib-subbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 16px; flex-wrap: wrap; }
  .fx-lib-count { font-size: 13.5px; color: var(--fg-mute); }
  .fx-lib-count strong { color: var(--fg); font-family: var(--font-mono); }
  .fx-seg { display: inline-flex; background: var(--card-2); border: 1px solid var(--border); border-radius: 8px; padding: 3px; gap: 2px; }
  .fx-seg-btn { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--fg-mute); background: none; border: none; padding: 6px 12px; border-radius: 6px; }
  .fx-seg-btn.on { background: var(--card); color: var(--fg); box-shadow: var(--shadow-sm); }

  /* aircraft hero */
  .fx-ac-hero { display: flex; gap: 18px; align-items: flex-start; padding: 8px 0 22px; border-bottom: 1px solid var(--border); margin-bottom: 20px; }
  .fx-ac-hero-ic { width: 60px; height: 60px; border-radius: 14px; background: var(--card-2); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; color: var(--accent); flex: none; }
  .fx-ac-hero-main { flex: 1; min-width: 0; }
  .fx-ac-hero-titles { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
  .fx-ac-hero-stats { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px; font-size: 13.5px; color: var(--fg-mute); }

  /* profile detail */
  .fx-pd-hero { display: flex; justify-content: space-between; gap: 24px; align-items: flex-start; padding-bottom: 22px; border-bottom: 1px solid var(--border); margin-bottom: 22px; flex-wrap: wrap; }
  .fx-pd-hero-main { min-width: 0; flex: 1; }
  .fx-pd-flags { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .fx-pd-by { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px; font-size: 13.5px; color: var(--fg-mute); }
  .fx-pd-author { display: inline-flex; align-items: center; gap: 7px; background: none; border: none; color: var(--fg-dim); font-size: 13.5px; font-weight: 500; }
  .fx-pd-author:hover { color: var(--accent); }
  .fx-pd-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .fx-pd-report { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; color: var(--fg-mute); font-size: 12.5px; }
  .fx-pd-report:hover { color: var(--err); }
  .fx-pd-license { flex-basis: 100%; margin: 12px 0 0; font-size: 12.5px; color: var(--fg-mute); line-height: 1.55; }
  .fx-pd-grid { display: grid; grid-template-columns: 1fr 300px; gap: 28px; align-items: start; }
  .fx-pd-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
  .fx-pd-side { display: flex; flex-direction: column; gap: 16px; position: sticky; top: calc(var(--nav-h) + 18px); }
  .fx-pd-card { padding: 20px 22px; }
  .fx-pd-h { display: flex; align-items: center; gap: 8px; font-size: 16px; font-weight: 600; margin-bottom: 6px; }
  .fx-pd-sub { font-size: 13px; color: var(--fg-mute); margin: 0 0 16px; line-height: 1.5; }
  .fx-pd-notes { font-size: 14.5px; line-height: 1.65; color: var(--fg-dim); }
  .fx-pd-notes p { margin: 0 0 12px; } .fx-pd-notes p:last-child { margin: 0; }

  .fx-rev-summary { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px dashed var(--hairline); }
  .fx-rev-big { font-family: var(--font-mono); font-size: 40px; font-weight: 600; letter-spacing: -.02em; line-height: 1; }
  .fx-rev-ct { font-size: 12.5px; color: var(--fg-mute); margin-top: 5px; }
  .fx-rev-list { display: flex; flex-direction: column; gap: 16px; margin-bottom: 18px; }
  .fx-rev { display: flex; gap: 12px; }
  .fx-rev-body { flex: 1; min-width: 0; }
  .fx-rev-head { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
  .fx-rev-user { font-size: 13.5px; font-weight: 600; }
  .fx-rev-time { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); margin-left: auto; }
  .fx-rev-text { font-size: 14px; color: var(--fg-dim); line-height: 1.55; margin: 0; }
  .fx-rev-form { padding-top: 16px; border-top: 1px dashed var(--hairline); display: flex; flex-direction: column; gap: 12px; }
  .fx-rev-form-row { display: flex; align-items: center; gap: 14px; }
  .fx-starpick { display: inline-flex; gap: 2px; }
  .fx-starpick-b { background: none; border: none; color: var(--border-hi); padding: 2px; }
  .fx-starpick-b svg { fill: none; }
  .fx-starpick-b.on { color: var(--signal); }
  .fx-starpick-b.on svg { fill: currentColor; }
  .fx-rev-ta { min-height: 80px; }
  .fx-rev-form-foot { display: flex; justify-content: flex-end; }
  .fx-signin-cta.sm { padding: 14px 16px; }

  .fx-cmt-list { display: flex; flex-direction: column; gap: 14px; margin-bottom: 16px; }
  .fx-cmt { display: flex; gap: 12px; }
  .fx-cmt-body { flex: 1; min-width: 0; }
  .fx-cmt-head { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; }
  .fx-cmt-user { font-size: 13px; font-weight: 600; }
  .fx-cmt-time { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); }
  .fx-cmt-text { font-size: 14px; color: var(--fg-dim); line-height: 1.55; margin: 0; }
  .fx-cmt-form { display: flex; flex-direction: column; gap: 10px; }
  .fx-empty-card + .fx-cmt-form { margin-top: 16px; }

  .fx-json { background: var(--well); border: 1px solid var(--border); border-radius: 8px; padding: 14px 16px; overflow: auto; font-family: var(--font-mono); font-size: 12.5px; line-height: 1.6; color: var(--fg-dim); max-height: 360px; margin: 0; }

  .fx-side-list { display: flex; flex-direction: column; }
  .fx-side-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: none; border: none; border-bottom: 1px dashed var(--hairline); padding: 10px 0; text-align: left; }
  .fx-side-row:hover .fx-side-title { color: var(--accent); }
  .fx-side-row-main { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
  .fx-side-title { font-size: 13px; font-weight: 500; }
  .fx-side-by { font-size: 11.5px; color: var(--fg-mute); }
  .fx-side-dl { display: inline-flex; align-items: center; gap: 4px; font-size: 11.5px; color: var(--fg-mute); flex: none; }
  .fx-side-all { display: inline-flex; align-items: center; gap: 6px; background: none; border: none; color: var(--accent); font-size: 13px; font-weight: 500; padding: 12px 0 0; }
  .fx-author-card { display: flex; align-items: center; gap: 12px; background: none; border: none; text-align: left; width: 100%; }
  .fx-author-name { font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 6px; }
  .fx-author-meta { font-size: 12px; color: var(--fg-mute); }
  .fx-author-card:hover .fx-author-name { color: var(--accent); }

  /* share */
  .fx-share-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 28px; align-items: start; }
  .fx-share-form { min-width: 0; padding: 8px 24px 24px; display: flex; flex-direction: column; }
  .fx-share-sec { padding: 20px 0; border-bottom: 1px solid var(--border); }
  .fx-share-sec:last-child { border-bottom: none; }
  .fx-share-sec-h { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-mute); margin-bottom: 16px; }
  .fx-field-row2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: start; }
  .fx-field-row3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
  .fx-field-row2 > .fx-field, .fx-field-row3 > .fx-field { min-width: 0; }
  .fx-field-ok { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--ok); margin-top: 2px; }
  .fx-dropzone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center; border: 1.5px dashed var(--border-hi); border-radius: 12px; padding: 28px 20px; cursor: pointer; transition: all .15s; background: var(--well); }
  .fx-dropzone:hover { border-color: var(--accent); background: var(--card-2); }
  .fx-dropzone.has { border-style: solid; border-color: color-mix(in srgb, var(--ok) 45%, transparent); }
  .fx-dropzone-main { font-size: 14px; font-weight: 500; color: var(--fg); }
  .fx-dropzone-sub { font-size: 12px; color: var(--fg-mute); }
  .fx-or { display: flex; align-items: center; gap: 12px; color: var(--fg-faint); font-size: 11px; text-transform: uppercase; letter-spacing: .1em; margin: 16px 0; }
  .fx-or::before, .fx-or::after { content: ""; flex: 1; height: 1px; background: var(--border); }
  .fx-json-ta { min-height: 120px; font-family: var(--font-mono); font-size: 12.5px; }
  .fx-share-terms { margin: 18px 0 0; padding-top: 16px; border-top: 1px solid var(--border); line-height: 1.55; }
  .fx-share-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 18px; flex-wrap: wrap; }
  .fx-share-preview { position: sticky; top: calc(var(--nav-h) + 18px); display: flex; flex-direction: column; gap: 10px; }
  .fx-preview-label { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--fg-faint); }
  .fx-pcard.preview { cursor: default; }
  .fx-pcard.preview:hover { transform: none; box-shadow: none; border-color: var(--border); }
  .fx-preview-note { font-size: 12px; color: var(--fg-mute); line-height: 1.5; }

  @media (max-width: 900px) {
    .fx-pd-grid { grid-template-columns: 1fr; }
    .fx-pd-side { position: static; flex-direction: row; flex-wrap: wrap; }
    .fx-pd-side .fx-about-card { flex: 1; min-width: 220px; }
    .fx-share-grid { grid-template-columns: 1fr; }
    .fx-share-preview { position: static; }
    .fx-statstrip { grid-template-columns: repeat(2, 1fr); }
    .fx-feat-grid { grid-template-columns: 1fr; }
    .fx-field-row2, .fx-field-row3 { grid-template-columns: 1fr; }
  }

  /* ---------- RESPONSIVE ---------- */
  @media (max-width: 980px) {
    .fx-nav-links { display: none; }
  }
  @media (max-width: 900px) {
    .fx-topic-grid { grid-template-columns: 1fr; }
    .fx-about { position: static; flex-direction: row; flex-wrap: wrap; }
    .fx-about-card { flex: 1; min-width: 220px; }
    .fx-cat-grid { grid-template-columns: repeat(2, 1fr); }
    .fx-cat-row { grid-template-columns: 40px 1fr auto; }
    .fx-cat-last { display: none; }
    .fx-profile-grid { grid-template-columns: 1fr; }
    .fx-acct-grid { grid-template-columns: 1fr; gap: 18px; }
    .fx-acct-aside { padding-top: 0; }
  }
  @media (max-width: 720px) {
    .fx-root,
    .fx-main {
      width: 100%;
      max-width: 100vw;
      overflow-x: clip;
    }
    .fx-page {
      box-sizing: border-box;
      width: 100%;
      max-width: 100vw;
      padding: 28px 16px 64px;
      overflow-x: clip;
    }
    .fx-page > *,
    .fx-card,
    .fx-searchbar,
    .fx-search-inline,
    .fx-lib-filters,
    .fx-statstrip,
    .fx-ptable,
    .fx-pcard,
    .fx-accard,
    .fx-topic-grid,
    .fx-profile-grid,
    .fx-acct-grid,
    .fx-pd-grid,
    .fx-share-grid,
    .fx-topic-hero,
    .fx-ac-hero,
    .fx-pd-hero {
      max-width: 100%;
      min-width: 0;
    }
    .fx-toolbar {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
      align-items: stretch;
      gap: 10px;
    }
    .fx-toolbar-search,
    .fx-toolbar-right,
    .fx-toolbar-right .fx-btn {
      width: 100%;
      min-width: 0;
    }
    .fx-toolbar-right {
      justify-content: stretch;
    }
    .fx-toolbar .fx-searchbar,
    .fx-search-inline,
    .fx-lfield,
    .fx-lfield.grow,
    .fx-select {
      width: 100%;
      min-width: 0;
    }
    .fx-btn {
      max-width: 100%;
      justify-content: center;
    }
    .fx-lib-actions,
    .fx-pd-actions,
    .fx-share-foot {
      width: 100%;
      align-items: stretch;
    }
    .fx-lib-actions .fx-btn,
    .fx-pd-actions .fx-btn,
    .fx-share-foot .fx-btn {
      flex: 1 1 auto;
      min-width: 0;
    }
    .fx-lib-filters {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
      padding: 14px;
    }
    .fx-cat-picker {
      grid-template-columns: minmax(0, 1fr);
    }
    .fx-sec-head,
    .fx-cat-row,
    .fx-topic-row,
    .fx-prow,
    .fx-pgroup-head {
      min-width: 0;
    }
    .fx-cat-name-row {
      flex-wrap: wrap;
    }
    .fx-lede,
    .fx-cat-desc,
    .fx-topic-title,
    .fx-pcard-title,
    .fx-pd-notes,
    .fx-rev-text,
    .fx-cmt-text {
      max-width: 100%;
      overflow-wrap: anywhere;
    }
    .fx-topic-title {
      white-space: normal;
    }
    .fx-topic-counts {
      display: none;
    }
    .fx-nav-links { display: none; }
    .fx-hide-sm { display: none; }
    .fx-cat-grid { grid-template-columns: 1fr; }
    .fx-cat-row { grid-template-columns: 40px minmax(0, 1fr); padding: 16px; gap: 14px; }
    .fx-cat-stats { display: none; }
    .fx-topic-row { grid-template-columns: auto minmax(0, 1fr) auto; padding: 13px 16px; gap: 12px; }
    .fx-prow { grid-template-columns: minmax(0, 1fr) auto auto; padding: 12px 16px; gap: 12px; }
    .fx-ptable-head { display: none; }
    .fx-pgroup-head { flex-wrap: wrap; }
    .fx-pgroup-meta { margin-left: 0; flex: 1 1 100%; flex-wrap: wrap; gap: 8px; }
    .fx-topic-last { display: none; }
    .fx-foot-grid { grid-template-columns: 1fr 1fr; gap: 28px; }
    .fx-post { grid-template-columns: 1fr; }
    .fx-post-author { flex-direction: row; border-right: none; border-bottom: 1px dashed var(--hairline); justify-content: flex-start; gap: 12px; padding: 14px 18px; }
    .fx-post-author-meta { align-items: flex-start; }
    .fx-post-act.subtle { margin-left: 0; }
    .fx-h1 { font-size: 25px; }
  }

/* Community redesign integration on the existing public header */
.community-nav-actions {
  margin-left: auto;
  gap: 10px;
}
.community-guidelines-link {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
}
.fx-usermenu {
  position: relative;
}
.fx-usermenu > summary {
  list-style: none;
  cursor: pointer;
}
.fx-usermenu > summary::-webkit-details-marker {
  display: none;
}
.community-nav-avatar {
  width: 24px;
  height: 24px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--accent-soft);
  color: var(--fg);
  border: 1px solid var(--border);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
}
.community-nav-handle {
  max-width: 140px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.community-user-menu form {
  margin: 0;
}
.community-user-menu .fx-menu-item {
  text-decoration: none;
  cursor: pointer;
}
.top .community-nav-actions .fx-btn {
  text-decoration: none;
}
@media (max-width: 760px) {
  .community-guidelines-link,
  .community-nav-handle {
    display: none;
  }
  .community-nav-actions {
    margin-left: 0;
  }
}

/* Small glue classes used by the Razor implementation */
.fx-crumbs svg {
  flex: none;
  color: var(--fg-faint);
}
.fx-cat-wrap,
.fx-activity-wrap,
.fx-lib-featured {
  padding: 0;
}
.fx-search-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin: 0 0 16px;
  flex-wrap: wrap;
}
.fx-scopes {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.fx-rule-list {
  list-style: none;
  counter-reset: fx-rule;
  margin: 0;
  padding: 0;
}
.fx-rule-list li {
  counter-increment: fx-rule;
  display: grid;
  grid-template-columns: 34px 1fr;
  gap: 12px;
  padding: 16px 0;
  border-bottom: 1px dashed var(--hairline);
}
.fx-rule-list li:last-child {
  border-bottom: none;
}
.fx-rule-list li::before {
  content: counter(fx-rule);
  width: 28px;
  height: 28px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--card-2);
  border: 1px solid var(--border);
  color: var(--accent);
  font-family: var(--font-mono);
  font-size: 12px;
  font-weight: 700;
}
/* The number is the ::before pseudo (auto-placed in column 1). Pin BOTH the
   heading and the body text to column 2 so grid auto-placement can't drop the
   <span> into the narrow 34px first column — which rendered it one word per
   line. */
.fx-rule-list strong {
  grid-column: 2;
  display: block;
  font-size: 14px;
  color: var(--fg);
  margin-bottom: 2px;
}
.fx-rule-list span {
  grid-column: 2;
  color: var(--fg-mute);
  font-size: 13.5px;
  line-height: 1.55;
}
.fx-inline-form {
  display: inline-flex;
  margin: 0;
}
.fx-post-actions.compact {
  align-items: center;
  flex-wrap: wrap;
}
.fx-post-actions.compact .fx-post-act {
  text-decoration: none;
}
.fx-report-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.fx-share-sec > .fx-field + .fx-field,
.fx-share-sec > .fx-field-row2,
.fx-share-sec > .fx-field-row3 {
  margin-top: 14px;
}
.fx-textarea {
  border: 1px solid var(--border);
  border-radius: 9px;
  padding: 12px 14px;
}
.fx-textarea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-soft);
}
.fx-editor .fx-textarea {
  border: none;
  border-radius: 0;
  box-shadow: none;
  padding: 13px 14px;
}
.fx-field-row3 .fx-select {
  width: 100%;
  min-width: 0;
}
.fx-cmt .fx-empty-card {
  padding: 14px 16px;
  text-align: left;
}
.fx-rev-text.ugc,
.fx-cmt-text.ugc {
  max-width: none;
}
.fx-srcbadge,
.fx-chip {
  white-space: nowrap;
}

/* ============================================================
   Unified member page (Account Section handoff): shared header
   + underline tab bar. /community/u/{handle} and /community/account
   both render CommunityMemberPage; Settings is a self-only tab.
   ============================================================ */

/* Header: avatar | name+stats | right-aligned action. */
.fx-uhead {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 22px;
  margin-top: 8px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--border);
}
.fx-uhead-avatar { flex: none; }
.fx-uhead .forum-avatar-lg { width: 76px; height: 76px; font-size: 30px; }
.fx-uhead-main { min-width: 0; }
.fx-uhead-titlerow { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.fx-uhead-name { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
/* "This is you" pill — accent text on a soft accent fill (handoff §6). */
.fx-uhead-you {
  flex: none;
  white-space: nowrap;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
  border-radius: 999px;
  padding: 3px 10px;
}
/* Stats line: dot-separated, mono numerals. */
.fx-uhead-stats {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 0;
  margin-top: 8px;
  font-size: 14px;
  color: var(--fg-mute);
}
.fx-uhead-stats > span + span::before {
  content: "·";
  margin: 0 10px;
  color: var(--fg-faint);
}
.fx-uhead-stats .fx-mono { font-family: var(--font-mono); font-weight: 600; color: var(--fg); }
.fx-uhead-joined { font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-faint); }
.fx-uhead-action { justify-self: end; }

/* Underline tab bar. */
.fx-utabs {
  display: flex;
  gap: 26px;
  margin: 0 0 24px;
  border-bottom: 1px solid var(--border);
}
.fx-utab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 2px;
  margin-bottom: -1px;
  font-size: 14px;
  font-weight: 500;
  color: var(--fg-mute);
  text-decoration: none;
  border-bottom: 2px solid transparent;
}
.fx-utab:hover { color: var(--fg); }
.fx-utab.on { color: var(--fg); border-bottom-color: var(--accent); font-weight: 600; }
/* Count pill: muted by default; accent on the active tab (handoff §6). */
.fx-utab-ct {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--fg-mute);
  background: var(--card-2);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 1px 8px;
}
.fx-utab.on .fx-utab-ct {
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 13%, transparent);
  border-color: color-mix(in srgb, var(--accent) 30%, transparent);
}
.fx-utab-panel { display: block; }
/* Sign out sits in its own bordered footer at the bottom of Settings. */
.fx-utab-signout {
  margin-top: 22px;
  padding-top: 22px;
  border-top: 1px solid var(--border);
}

@media (max-width: 720px) {
  .fx-uhead {
    grid-template-columns: auto 1fr;
    gap: 16px;
  }
  .fx-uhead-action {
    grid-column: 1 / -1;
    justify-self: start;
    margin-top: 4px;
  }
  .fx-utabs { gap: 18px; overflow-x: auto; }
}

/* ============================================================
   Community sub-nav — secondary bar under the main nav, shown only on the
   Community + Profiles surface (rendered by SiteNav). Shares the marketing
   `.wrap` so it lines up with the page content frame. Lives OUTSIDE .fx-root,
   so it uses the global tokens (--brand, not the fx-scoped --accent).
   ============================================================ */
.community-subnav {
  border-bottom: 1px solid var(--border);
  background: var(--card);
}
.community-subnav .wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 46px;
}
.community-subnav-links {
  display: flex;
  align-items: center;
  gap: 24px;
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: none;
}
.community-subnav-links::-webkit-scrollbar { display: none; }
.community-subnav-link {
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
  font-size: 13.5px;
  color: var(--fg-mute);
  text-decoration: none;
  padding: 13px 0;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  transition: color .15s;
}
.community-subnav-link:hover { color: var(--fg); }
.community-subnav-link.active {
  color: var(--fg);
  font-weight: 600;
  border-bottom-color: var(--brand);
}
.community-subnav-auth {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: none;
}
.community-nav-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--brand);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
}
.community-nav-handle {
  font-size: 13px;
  font-weight: 500;
  color: var(--fg);
  max-width: 140px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.community-language-note {
  border-bottom: 1px solid var(--border);
  background: color-mix(in srgb, var(--brand) 10%, var(--bg));
  color: var(--fg);
}
.community-language-note .wrap {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding-top: 9px;
  padding-bottom: 9px;
  font-size: 13.5px;
  line-height: 1.45;
}
.community-language-note strong {
  flex: 0 0 auto;
  color: var(--brand);
}

@media (max-width: 640px) {
  .community-subnav .wrap { gap: 10px; }
  .community-subnav-links { gap: 16px; }
  .community-nav-handle { display: none; }
  .community-language-note .wrap {
    display: block;
    font-size: 13px;
  }
  .community-language-note strong {
    display: block;
    margin-bottom: 2px;
  }
}

/* ============================================================
   1.1 marketing pages (/hardware, /force-model, /accessibility,
   /why-force-feedback). Built on the existing landing-* classes; these
   are the few additions they need.
   ============================================================ */

/* Centered section header (eyebrow + h2 + subhead). */
.section-head { max-width: 720px; margin: 0 auto 38px; text-align: center; }
.section-head .eyebrow { justify-content: center; }
.section-head h2 { margin-bottom: 10px; }
.section-head .subhead { margin: 0 auto; }

/* Plain bulleted lists inside landing cards. */
.hw-list { list-style: none; margin: 4px 0 0; padding: 0; }
.hw-list li {
  position: relative; padding: 6px 0 6px 18px;
  font-size: 14.5px; color: var(--text-dim); line-height: 1.5;
}
.hw-list li::before {
  content: ""; position: absolute; left: 0; top: 13px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--brand);
}
.hw-list code {
  font-family: var(--font-mono); font-size: .85em;
  color: var(--text-primary); background: var(--card-2);
  border: 1px solid var(--border); border-radius: 5px; padding: 1px 5px;
}

/* "new" badge (matches .pill-beta sizing, brand-tinted). */
.pill-new {
  display: inline-block; margin-left: 8px; padding: 2px 7px;
  background: color-mix(in srgb, var(--brand) 16%, transparent);
  color: var(--brand); border: 1px solid color-mix(in srgb, var(--brand) 38%, transparent);
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase; border-radius: 999px;
  vertical-align: 2px;
}

/* Support matrix table (/hardware). */
.hw-matrix-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--radius-lg); }
.hw-matrix { width: 100%; border-collapse: collapse; min-width: 620px; }
.hw-matrix th, .hw-matrix td {
  padding: 14px 18px; text-align: left; font-size: 14.5px;
  border-bottom: 1px solid var(--border);
}
.hw-matrix thead th {
  font-size: 12.5px; letter-spacing: .03em; text-transform: uppercase;
  color: var(--text-dim); font-weight: 600; background: var(--card-2);
}
.hw-matrix tbody th { font-weight: 600; color: var(--text-primary); }
.hw-matrix tbody tr:last-child td, .hw-matrix tbody tr:last-child th { border-bottom: none; }
.hw-matrix td.yes { color: var(--text-primary); font-weight: 500; }
.hw-matrix td.no { color: var(--text-faint, var(--text-dim)); }
.hw-note { color: var(--text-dim); font-weight: 400; font-size: 12.5px; }
.hw-fineprint { margin-top: 16px; font-size: 13.5px; color: var(--text-dim); line-height: 1.6; }

/* Accessibility FAQ (narrow, simple). */
.landing-faq-narrow { max-width: 760px; }
.acc-faq { display: flex; flex-direction: column; gap: 18px; }
.acc-faq-item h3 { font-size: 16px; margin-bottom: 6px; color: var(--text-primary); }
.acc-faq-item p { font-size: 14.5px; color: var(--text-dim); line-height: 1.6; }

/* Clickable pillar cards on Home (whole card is an <a>). */
.landing-card-link { display: flex; flex-direction: column; text-decoration: none; transition: transform .15s ease, box-shadow .15s ease; }
.landing-card-link:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(0,0,0,.14); }
.landing-card-link .landing-card-go { margin-top: auto; padding-top: 14px; color: var(--brand); font-weight: 600; font-size: 14px; }

@media (max-width: 700px) {
  .section-head { margin-bottom: 28px; }
}

/* Testimonials (Home) — approved beta-tester quotes. */
.tcard-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.tcard {
  margin: 0; padding: 24px;
  background: var(--card); border: 1px solid var(--border);
  border-radius: var(--radius-lg); display: flex; flex-direction: column;
}
.tcard blockquote { margin: 0 0 16px; font-size: 15.5px; line-height: 1.55; color: var(--text-primary); }
.tcard blockquote::before { content: "\201C"; }
.tcard blockquote::after { content: "\201D"; }
.tcard figcaption { margin-top: auto; font-size: 14px; font-weight: 600; color: var(--text-primary); }
.tcard-ctx { display: block; font-weight: 400; font-size: 12.5px; color: var(--text-dim); margin-top: 2px; }
/* Pro-waitlist email capture inside the muted pricing card. */
.pricing-pro-signup { margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--border); }
@media (max-width: 900px) { .tcard-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .tcard-grid { grid-template-columns: 1fr; } }

/* Give the CTA breathing room below a lede/subhead (was hugging the text). */
.subhead + .cta-row,
.lede + .cta-row { margin-top: 22px; }

/* Four-up card row (Home pillars, "what you've been missing") — one row on
   desktop, then 2-up / 1-up as it narrows. */
.landing-card-grid.cols-4 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 1000px) { .landing-card-grid.cols-4 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px)  { .landing-card-grid.cols-4 { grid-template-columns: 1fr; } }

/* A single screenshot in a shot grid shouldn't span full width and look
   stranded — cap and centre it as a framed figure. */
.landing-shot-grid:has(> :only-child) { max-width: 920px; margin-left: auto; margin-right: auto; }

