/* Generated APP token namespace; edit tenant_tokens.css and regenerate. */
:root {
  --nf-t-accent: #b5202e;
  --nf-t-accent-active: #8f1824;
  --nf-t-accent-dim: #d3ddeb;
  --nf-t-accent-hover: #c62838;
  --nf-t-accent-text: #b5202e;
  --nf-t-admin-accent: #6d5cae;
  --nf-t-bg: #e0e9f1;
  --nf-t-border: #b9c5d8;
  --nf-t-control-active: #d3ddeb;
  --nf-t-control-bg: #ffffff;
  --nf-t-control-border: #8595af;
  --nf-t-control-disabled-bg: #edf1f7;
  --nf-t-control-disabled-text: #6f7d98;
  --nf-t-control-hover: #f1f3f9;
  --nf-t-control-min: 44px;
  --nf-t-control-pad-x: 12px;
  --nf-t-control-pad-y: 8px;
  --nf-t-control-shadow: 0 1px 2px rgba(15, 26, 55, 0.12);
  --nf-t-danger: #b54a2a;
  --nf-t-danger-active: #82331d;
  --nf-t-danger-hover: #9d3e23;
  --nf-t-display-1: clamp(3rem, 2.648rem + 1.5vw, 4rem);
  --nf-t-display-2: clamp(2.5rem, 2.324rem + 0.75vw, 3rem);
  --nf-t-display-3: clamp(1.75rem, 1.486rem + 1.13vw, 2.5rem);
  --nf-t-display-4: clamp(1.5rem, 1.324rem + 0.75vw, 2rem);
  --nf-t-display-5: clamp(1.25rem, 1.074rem + 0.75vw, 1.75rem);
  --nf-t-display-6: clamp(1rem, 0.824rem + 0.75vw, 1.5rem);
  --nf-t-elev-hero: 0 12px 30px rgba(15, 26, 55, 0.12);
  --nf-t-elev-panel: 0 1px 2px rgba(15, 26, 55, 0.05);
  --nf-t-focus: #0b6bcb;
  --nf-t-focus-halo: #ffffff;
  --nf-t-focus-ring-inset: -2px;
  --nf-t-focus-ring-offset: 2px;
  --nf-t-focus-ring-width: 2px;
  --nf-t-font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --nf-t-font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --nf-t-font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
  --nf-t-hero-campaigns-a: #d21a42;
  --nf-t-hero-campaigns-b: #892fda;
  --nf-t-hero-catalog-a: #09796f;
  --nf-t-hero-catalog-b: #095e75;
  --nf-t-hero-crm-a: #03679e;
  --nf-t-hero-crm-b: #2461e7;
  --nf-t-hero-docs-a: #4f46e5;
  --nf-t-hero-docs-b: #475569;
  --nf-t-hero-events-a: #0171ab;
  --nf-t-hero-events-b: #1e54cb;
  --nf-t-hero-finances-a: #0e7c37;
  --nf-t-hero-finances-b: #077067;
  --nf-t-hero-insights-a: #2461e7;
  --nf-t-hero-insights-b: #7a39e9;
  --nf-t-hero-listings-a: #bb4507;
  --nf-t-hero-listings-b: #b41538;
  --nf-t-hero-pricing-a: #a35803;
  --nf-t-hero-pricing-b: #b04006;
  --nf-t-hero-solicitations-a: #892fda;
  --nf-t-hero-solicitations-b: #b323c5;
  --nf-t-hero-workspace-a: #475569;
  --nf-t-hero-workspace-b: #334155;
  --nf-t-hue-catalog: #0f766e;
  --nf-t-hue-info: #1668c4;
  --nf-t-hue-live: #0e7490;
  --nf-t-hue-neutral: #475569;
  --nf-t-hue-portfolio: #4f46e5;
  --nf-t-hue-priced: #b45309;
  --nf-t-hue-progress: #c2410c;
  --nf-t-hue-sold: #15803d;
  --nf-t-input-bg: #ffffff;
  --nf-t-layer-chrome: 100;
  --nf-t-layer-overlay: 300;
  --nf-t-layer-raised: 1;
  --nf-t-layer-scrim: 290;
  --nf-t-layer-skip: 400;
  --nf-t-leading-none: 1;
  --nf-t-leading-normal: 1.5;
  --nf-t-leading-relaxed: 1.65;
  --nf-t-leading-snug: 1.35;
  --nf-t-leading-tight: 1.2;
  --nf-t-motion: 0.12s;
  --nf-t-motion-slow: 0.18s;
  --nf-t-nav-bg: #11100f;
  --nf-t-nav-border: #2f2b28;
  --nf-t-nav-hover: #2b2926;
  --nf-t-nav-muted: #aaa399;
  --nf-t-nav-text: #f3f1ec;
  --nf-t-notification-unread: rgba(181, 32, 46, 0.08);
  --nf-t-on-accent: #ffffff;
  --nf-t-on-accent-edge: rgba(255, 255, 255, 0.36);
  --nf-t-on-accent-faint: rgba(255, 255, 255, 0.92);
  --nf-t-on-accent-muted: rgba(255, 255, 255, 0.92);
  --nf-t-on-accent-plate: rgba(20, 16, 26, 0.40);
  --nf-t-on-danger: #ffffff;
  --nf-t-on-plate: #0f1a37;
  --nf-t-overlay-bg: #ffffff;
  --nf-t-plate: #ffffff;
  --nf-t-popover-shadow: 0 14px 36px rgba(15, 26, 55, 0.18);
  --nf-t-radius: 10px;
  --nf-t-radius-lg: 14px;
  --nf-t-radius-md: 12px;
  --nf-t-radius-sm: 6px;
  --nf-t-scrim: rgba(15, 26, 55, 0.38);
  --nf-t-shadow: 0 1px 0 rgba(15, 26, 55, 0.06);
  --nf-t-side-w: 232px;
  --nf-t-space-1: 4px;
  --nf-t-space-2: 8px;
  --nf-t-space-3: 12px;
  --nf-t-space-4: 16px;
  --nf-t-space-5: 24px;
  --nf-t-space-6: 32px;
  --nf-t-spotlight-a: #fff7ed;
  --nf-t-spotlight-b: #f3e8ff;
  --nf-t-spotlight-c: #ddd6fe;
  --nf-t-success: #1f8a4c;
  --nf-t-success-text: #176839;
  --nf-t-surface: #ffffff;
  --nf-t-surface-raised: #ffffff;
  --nf-t-text: #0f1a37;
  --nf-t-text-2xl: 20px;
  --nf-t-text-2xs: 11px;
  --nf-t-text-3xl: 24px;
  --nf-t-text-4xl: 28px;
  --nf-t-text-5xl: 32px;
  --nf-t-text-6xl: 40px;
  --nf-t-text-lg: 16px;
  --nf-t-text-md: 14px;
  --nf-t-text-muted: #4a5878;
  --nf-t-text-sm: 13px;
  --nf-t-text-xl: 18px;
  --nf-t-text-xs: 12px;
  --nf-t-topbar-bg: #ffffff;
  --nf-t-topbar-h: 56px;
  --nf-t-warn: #c98a14;
  --nf-t-warn-text: #81580d;
  --nf-t-weight-black: 800;
  --nf-t-weight-bold: 700;
  --nf-t-weight-medium: 500;
  --nf-t-weight-regular: 400;
  --nf-t-weight-semibold: 600;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --nf-t-accent-dim: #3a1a1e;
    --nf-t-accent-text: #ff5252;
    --nf-t-admin-accent: #9a8dd2;
    --nf-t-bg: #0a1120;
    --nf-t-border: #2b3d60;
    --nf-t-control-active: #2b3d5d;
    --nf-t-control-bg: #1d2d4d;
    --nf-t-control-border: #60779b;
    --nf-t-control-disabled-bg: #152039;
    --nf-t-control-disabled-text: #8794b0;
    --nf-t-control-hover: #253555;
    --nf-t-control-shadow: 0 1px 2px rgba(0, 0, 0, 0.28);
    --nf-t-danger: #d9724c;
    --nf-t-danger-active: #b85737;
    --nf-t-danger-hover: #e78361;
    --nf-t-elev-hero: 0 12px 30px rgba(0, 0, 0, 0.28);
    --nf-t-elev-panel: 0 1px 2px rgba(0, 0, 0, 0.12);
    --nf-t-focus: #8fb0ff;
    --nf-t-focus-halo: #0a1120;
    --nf-t-hue-catalog: #0d9488;
    --nf-t-hue-info: #58a6ff;
    --nf-t-hue-live: #06b6d4;
    --nf-t-hue-neutral: #64748b;
    --nf-t-hue-portfolio: #818cf8;
    --nf-t-hue-priced: #f59e0b;
    --nf-t-hue-progress: #f97316;
    --nf-t-hue-sold: #22c55e;
    --nf-t-input-bg: #0c162a;
    --nf-t-nav-bg: #07090e;
    --nf-t-nav-border: #2b3d60;
    --nf-t-nav-hover: #161c2a;
    --nf-t-nav-muted: #a9b6d1;
    --nf-t-nav-text: #eef2fa;
    --nf-t-on-danger: #000000;
    --nf-t-overlay-bg: #111b30;
    --nf-t-popover-shadow: 0 14px 36px rgba(3, 6, 14, 0.28);
    --nf-t-scrim: rgba(3, 6, 14, 0.72);
    --nf-t-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
    --nf-t-spotlight-a: #88660e;
    --nf-t-spotlight-b: #8e47d1;
    --nf-t-spotlight-c: #4c1d95;
    --nf-t-success-text: #55c98a;
    --nf-t-surface: #111b30;
    --nf-t-surface-raised: #182642;
    --nf-t-text: #eef2fa;
    --nf-t-text-muted: #a9b6d1;
    --nf-t-topbar-bg: #111b30;
    --nf-t-warn-text: #c98a14;
  }
}
:root[data-theme="dark"] {
  --nf-t-accent-dim: #3a1a1e;
  --nf-t-accent-text: #ff5252;
  --nf-t-admin-accent: #9a8dd2;
  --nf-t-bg: #0a1120;
  --nf-t-border: #2b3d60;
  --nf-t-control-active: #2b3d5d;
  --nf-t-control-bg: #1d2d4d;
  --nf-t-control-border: #60779b;
  --nf-t-control-disabled-bg: #152039;
  --nf-t-control-disabled-text: #8794b0;
  --nf-t-control-hover: #253555;
  --nf-t-control-shadow: 0 1px 2px rgba(0, 0, 0, 0.28);
  --nf-t-danger: #d9724c;
  --nf-t-danger-active: #b85737;
  --nf-t-danger-hover: #e78361;
  --nf-t-elev-hero: 0 12px 30px rgba(0, 0, 0, 0.28);
  --nf-t-elev-panel: 0 1px 2px rgba(0, 0, 0, 0.12);
  --nf-t-focus: #8fb0ff;
  --nf-t-focus-halo: #0a1120;
  --nf-t-hue-catalog: #0d9488;
  --nf-t-hue-info: #58a6ff;
  --nf-t-hue-live: #06b6d4;
  --nf-t-hue-neutral: #64748b;
  --nf-t-hue-portfolio: #818cf8;
  --nf-t-hue-priced: #f59e0b;
  --nf-t-hue-progress: #f97316;
  --nf-t-hue-sold: #22c55e;
  --nf-t-input-bg: #0c162a;
  --nf-t-nav-bg: #07090e;
  --nf-t-nav-border: #2b3d60;
  --nf-t-nav-hover: #161c2a;
  --nf-t-nav-muted: #a9b6d1;
  --nf-t-nav-text: #eef2fa;
  --nf-t-on-danger: #000000;
  --nf-t-overlay-bg: #111b30;
  --nf-t-popover-shadow: 0 14px 36px rgba(3, 6, 14, 0.28);
  --nf-t-scrim: rgba(3, 6, 14, 0.72);
  --nf-t-shadow: 0 1px 0 rgba(0, 0, 0, 0.35);
  --nf-t-spotlight-a: #88660e;
  --nf-t-spotlight-b: #8e47d1;
  --nf-t-spotlight-c: #4c1d95;
  --nf-t-success-text: #55c98a;
  --nf-t-surface: #111b30;
  --nf-t-surface-raised: #182642;
  --nf-t-text: #eef2fa;
  --nf-t-text-muted: #a9b6d1;
  --nf-t-topbar-bg: #111b30;
  --nf-t-warn-text: #c98a14;
}
:root[data-theme="light"] { color-scheme: light; }
:root[data-theme="dark"] { color-scheme: dark; }
/* Generated portal aliases from shared_tokens.json; do not edit.
 * Load after the native surface styles and shared/style_tokens.css.
 * Both selectors outrank authored theme roots without changing layout.
 */
html:root[data-theme],
html:root:not([data-theme]) {
  --nf-accent: var(--nf-t-accent-text);
  --nf-accent-fg: var(--nf-t-on-accent);
  --nf-band: var(--nf-t-surface-raised);
  --nf-bg: var(--nf-t-bg);
  --nf-bg-deep: var(--nf-t-bg);
  --nf-border: var(--nf-t-border);
  --nf-card: var(--nf-t-surface-raised);
  --nf-chip: var(--nf-t-control-bg);
  --nf-chip-ink: var(--nf-t-text-muted);
  --nf-control-border: var(--nf-t-control-border);
  --nf-control-min: var(--nf-t-control-min);
  --nf-control-pad-x: var(--nf-t-control-pad-x);
  --nf-control-pad-y: var(--nf-t-control-pad-y);
  --nf-cream: var(--nf-t-bg);
  --nf-cta-bg: var(--nf-t-accent);
  --nf-cta-edge: var(--nf-t-accent);
  --nf-cta-fg: var(--nf-t-on-accent);
  --nf-cta-plate: var(--nf-t-surface-raised);
  --nf-display-1: var(--nf-t-display-1);
  --nf-display-2: var(--nf-t-display-2);
  --nf-display-3: var(--nf-t-display-3);
  --nf-display-4: var(--nf-t-display-4);
  --nf-display-5: var(--nf-t-display-5);
  --nf-display-6: var(--nf-t-display-6);
  --nf-display-ink: var(--nf-t-text);
  --nf-fg: var(--nf-t-text);
  --nf-focus: var(--nf-t-focus);
  --nf-focus-halo: var(--nf-t-focus-halo);
  --nf-focus-ring-inset: var(--nf-t-focus-ring-inset);
  --nf-focus-ring-offset: var(--nf-t-focus-ring-offset);
  --nf-focus-ring-width: var(--nf-t-focus-ring-width);
  --nf-font-body: var(--nf-t-font-body);
  --nf-font-mono: var(--nf-t-font-mono);
  --nf-footer-bg: var(--nf-t-surface);
  --nf-footer-ink: var(--nf-t-text);
  --nf-footer-muted: var(--nf-t-text-muted);
  --nf-frame-line: var(--nf-t-border);
  --nf-gutter: var(--nf-t-bg);
  --nf-hero-ink: var(--nf-t-text);
  --nf-hero-ink-soft: var(--nf-t-text-muted);
  --nf-hero-plane: var(--nf-t-surface);
  --nf-hero-plate: var(--nf-t-surface-raised);
  --nf-ink: var(--nf-t-text);
  --nf-ink-soft: var(--nf-t-text-muted);
  --nf-layer-chrome: var(--nf-t-layer-chrome);
  --nf-layer-overlay: var(--nf-t-layer-overlay);
  --nf-layer-raised: var(--nf-t-layer-raised);
  --nf-layer-skip: var(--nf-t-layer-skip);
  --nf-leading-none: var(--nf-t-leading-none);
  --nf-leading-normal: var(--nf-t-leading-normal);
  --nf-leading-relaxed: var(--nf-t-leading-relaxed);
  --nf-leading-snug: var(--nf-t-leading-snug);
  --nf-leading-tight: var(--nf-t-leading-tight);
  --nf-motion: var(--nf-t-motion);
  --nf-motion-slow: var(--nf-t-motion-slow);
  --nf-muted: var(--nf-t-text-muted);
  --nf-plate-ink: var(--nf-t-text);
  --nf-plate-ink-soft: var(--nf-t-text-muted);
  --nf-plate-red-text: var(--nf-t-accent-text);
  --nf-plate-stock: var(--nf-t-surface-raised);
  --nf-radius-card: var(--nf-t-radius-lg);
  --nf-radius-ctl: var(--nf-t-radius);
  --nf-radius-panel: var(--nf-t-radius-lg);
  --nf-red-text: var(--nf-t-accent-text);
  --nf-shadow-panel: var(--nf-t-elev-panel);
  --nf-space-1: var(--nf-t-space-1);
  --nf-space-2: var(--nf-t-space-2);
  --nf-space-3: var(--nf-t-space-3);
  --nf-space-4: var(--nf-t-space-4);
  --nf-space-5: var(--nf-t-space-5);
  --nf-space-6: var(--nf-t-space-6);
  --nf-step-bg: var(--nf-t-surface-raised);
  --nf-stroke: var(--nf-t-border);
  --nf-surface: var(--nf-t-surface);
  --nf-surface-2: var(--nf-t-surface-raised);
  --nf-text-2xl: var(--nf-t-text-2xl);
  --nf-text-2xs: var(--nf-t-text-2xs);
  --nf-text-3xl: var(--nf-t-text-3xl);
  --nf-text-4xl: var(--nf-t-text-4xl);
  --nf-text-5xl: var(--nf-t-text-5xl);
  --nf-text-6xl: var(--nf-t-text-6xl);
  --nf-text-lg: var(--nf-t-text-lg);
  --nf-text-md: var(--nf-t-text-md);
  --nf-text-sm: var(--nf-t-text-sm);
  --nf-text-xl: var(--nf-t-text-xl);
  --nf-text-xs: var(--nf-t-text-xs);
  --nf-weight-black: var(--nf-t-weight-black);
  --nf-weight-bold: var(--nf-t-weight-bold);
  --nf-weight-medium: var(--nf-t-weight-medium);
  --nf-weight-regular: var(--nf-t-weight-regular);
  --nf-weight-semibold: var(--nf-t-weight-semibold);
}
/* Canonical universal site bar. Stack adapters only place this component. */
:root {
  /* The physical gap on every main-content edge is intentionally larger than
     the interior rhythm. Keeping this separate prevents a wider canvas from
     inflating card gaps while the rail, topbar and content edges stay aligned. */
  --nf-content-edge-gap: var(--nf-t-space-6);
  --nf-layout-gap: var(--nf-t-space-4);
  /* Card collections use this shared floor instead of fixed column counts.
     The browser adds tracks when space permits and wraps whole cards before
     their content becomes cramped. */
  --nf-content-card-min: 18rem;
  --nf-content-card-max: 25rem;
  /* Stable surface and ink for reviewed dark photos and illustration plates.
     They are intentionally independent of page and accent palettes. */
  --nf-graphic-surface: #060e1b;
  --nf-graphic-ink: #fff5e8;
  --nf-graphic-ink-muted: #ddd2e2;
}

/* #9495 — left navigation remains pure black in light, dark, and device
 * appearance. This shared shell source is emitted into APP, TALK, CP, SHOP,
 * Demo, portal, and gallery theme assets, so no surface can keep a faded rail. */
:root { --nf-global-navigation-bg: #000000; }
:root,
:root[data-theme],
:root[data-theme="light"],
:root[data-theme="dark"],
:root:not([data-theme]) {
  --nf-t-nav-bg: var(--nf-global-navigation-bg);
  --nav-bg: var(--nf-global-navigation-bg);
  --nf-rail: var(--nf-global-navigation-bg);
  --d-sidebar-background: var(--nf-global-navigation-bg);
}
@media (max-width: 820px) {
  :root { --nf-layout-gap: var(--nf-t-space-3); }
}

/* SHOP shares the rail-to-content geometry of every authenticated shell.
   These rules stay here rather than in the storefront sheet so the global
   layout contract has one owner. */
.nf-public-store__main {
  width: calc(100% - (2 * var(--nf-content-edge-gap)));
  margin-inline: var(--nf-content-edge-gap);
  padding-block: var(--nf-content-edge-gap);
}
/* At most three flexible cards per row: a fixed 25rem track left a two-card
   row and an empty third of the canvas when the width fell just short. The
   track floor is a third of the row, so a fourth card never fits. */
.nf-public-store__grid {
  --nf-public-store-grid-gap: var(--nf-t-space-5);
  gap: var(--nf-public-store-grid-gap);
  grid-template-columns: repeat(auto-fill, minmax(max(min(100%, var(--nf-content-card-min)), calc(((100% - (2 * var(--nf-public-store-grid-gap))) / 3) - 1px)), 1fr));
}
@media (max-width: 820px) {
  .nf-public-store__main {
    gap: var(--nf-t-space-5);
  }
  .nf-public-store__grid { --nf-public-store-grid-gap: var(--nf-t-space-4); }
}

/* One outer rhythm: the rail-to-content gap is a physical four-edge inset.
   Route blocks may arrange their children but cannot add a second outer margin. */
body #nf-tenant-app[data-nf-shell-structure="static"] .nf-content > main#nf-main {
  box-sizing: border-box;
  padding: var(--nf-content-edge-gap);
}
#nf-tenant-app :is(#nf-view-root, .nf-page-rhythm, [data-nf3615-home],
  [data-nf3983-marketing-body], [data-nf4001-finances-body],
  [data-nf3992-insights-body], [data-nf4018-crm-body].nf-crm-body--rhythm) {
  gap: var(--nf-layout-gap);
}
#nf-tenant-app :is(#nf-view-root, .nf-page-rhythm,
  [data-nf3983-marketing-body], [data-nf4001-finances-body],
  [data-nf3992-insights-body], [data-nf4018-crm-body].nf-crm-body--rhythm) > * {
  margin-block: 0;
}
#nf-tenant-app .nf-drill-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) max-content;
  gap: var(--nf-t-space-3);
  align-items: start;
}
#nf-tenant-app .nf-drill-val {
  white-space: nowrap;
  min-width: max-content;
}
#nf-tenant-app .nf-drill-val--muted { white-space: normal; min-width: 0; }
#nf-tenant-app :is(.nf-field textarea, textarea.nf-input, textarea.nf-textarea) {
  min-block-size: 6em;
  padding-block: var(--nf-t-space-2);
  resize: vertical;
}
#nf-tenant-app .nf-drill-row:has(> .nf-drill-val--muted) {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
@media (max-width: 600px) {
  #nf-tenant-app .nf-drill-row:has(> .nf-drill-val--muted) {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--nf-t-space-1);
  }
  #nf-tenant-app .nf-drill-val--muted { text-align: start; }
  #nf-tenant-app .nf-ebaystore-card {
    flex-direction: column;
    align-items: stretch;
    gap: var(--nf-layout-gap);
    padding: var(--nf-home-card-pad, var(--nf-t-space-3));
  }
  #nf-tenant-app .nf-ebaystore-main,
  #nf-tenant-app .nf-ebaystore-main > div { min-width: 0; }
  #nf-tenant-app .nf-ebaystore-btn {
    align-self: stretch;
    width: auto;
    text-align: center;
    justify-content: center;
  }
  #nf-tenant-app .nf-drill-panel { padding: var(--nf-home-card-pad, var(--nf-t-space-3)); }
}

body[data-nf-navigation-open="true"],
body:has([data-nf-navigation-open="true"]) { overflow: hidden; }

/* Discourse landing pages consume the same outer rhythm as APP. */
body:is(.navigation-topics, .navigation-categories, .navigation-category) #main-outlet {
  padding-block: var(--nf-content-edge-gap);
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) #nf-module-hero {
  margin-block: 0 var(--nf-layout-gap);
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) .list-controls > .container::before,
body:is(.navigation-topics, .navigation-categories, .navigation-category) .list-controls > .container::after {
  /* Native clearfix boxes become empty, spaced items in the flex toolbar. */
  content: none;
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) .navigation-container {
  margin-block: 0;
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) #category-events-calendar {
  margin-block: var(--nf-layout-gap);
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) #category-events-calendar:not(:has(.fc-event)) {
  min-block-size: 0;
  padding: var(--nf-t-space-3) var(--nf-t-space-4);
}
body:is(.navigation-topics, .navigation-categories, .navigation-category) #list-area { margin-bottom: 0; }
body .search-container button.btn.advanced-filters__toggle {
  /* Discourse marks this text-labelled button as no-text. */
  width: auto;
  inline-size: auto;
  min-width: var(--nf-t-control-min);
  max-width: 100%;
  padding-inline: var(--nf-t-space-3);
  gap: var(--nf-t-space-2);
}
@media (max-width: 820px) {
  body.navigation-categories .category-list.with-topics table.topic-list {
    table-layout: fixed;
    width: 100%;
  }
  body.navigation-categories .category-list.with-topics table.topic-list th.main-link {
    width: 85%;
  }
  body.navigation-categories .category-list :is(.badge-category__wrapper,
    .badge-category, .badge-category__name) {
    min-width: 0;
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  body.navigation-categories .category-list .badge-category {
    border-radius: var(--nf-t-radius);
  }
}

#nf-crossnav {
  /* The product switcher is intentionally quieter than a workspace toolbar.
     Its logo and account outlet stay full-size internally, while the bar itself
     uses the compact desktop rhythm that frames the app and forum chrome.
     Owner 2026-09-12: the strip is black on every site and in every theme, so
     it reads as the one global bar above each product's own header. */
  --nf-crossnav-bg: #000;
  --nf-crossnav-control: var(--nf-t-control-min);
  --nf-crossnav-identity-aperture: 44%;
  --nf-crossnav-ring-inset: 1px;
  /* This bar is black in every appearance. Keep its ink local to the black
     surface instead of inheriting page text roles from Light or seasonal
     palettes. These two graphic-ink roles are also available to reviewed dark
     artwork elsewhere in the shared UI. */
  --nf-t-nav-text: var(--nf-graphic-ink);
  --nf-t-nav-muted: var(--nf-graphic-ink-muted);
  --nf-t-nav-hover: #171717;
  --nf-t-nav-border: #383838;
  --nav-text: var(--nf-t-nav-text);
  --nav-muted: var(--nf-t-nav-muted);
  background: var(--nf-crossnav-bg);
  background-image: var(--nf-crossnav-art, none);
  background-position: var(--nf-crossnav-art-x, 50%) var(--nf-crossnav-art-y, 50%);
  background-size: cover;
  background-repeat: no-repeat;
  color: var(--nf-t-nav-text);
  font-family: var(--nf-t-font-body);
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: var(--nf-t-space-1);
  min-block-size: calc(var(--nf-crossnav-control) + var(--nf-t-space-1));
  padding: calc(var(--nf-t-space-1) * 0.5) var(--nf-t-space-3);
  font-size: var(--nf-t-text-sm);
  line-height: var(--nf-t-leading-none);
  border-bottom: 1px solid var(--nf-t-nav-border);
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  overflow-x: auto;
  scroll-padding-inline: calc(var(--nf-crossnav-control) + var(--nf-t-space-2));
  scrollbar-width: none;
}
#nf-crossnav::-webkit-scrollbar { display: none; }
#nf-crossnav a {
  color: var(--nf-t-nav-muted);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  min-width: var(--nf-t-space-5);
  min-height: var(--nf-crossnav-control);
  padding-inline: var(--nf-t-space-2);
  font-weight: var(--nf-t-weight-medium);
  white-space: nowrap;
}
#nf-crossnav a[hidden],
#nf-crossnav [data-nf-admin-link][hidden],
#nf-crossnav [data-nf-demo-link][hidden] { display: none; }
/* Guest discovery links also occur in public menus and page CTAs. */
a[data-nf-demo-link][hidden] { display: none !important; }
#nf-crossnav a:hover { color: var(--nf-t-nav-text); }
#nf-crossnav .nf-crossnav-label-short { display: none; }
#nf-crossnav > a:not(.nf-x-logo):not([hidden]):has(~ a:not(.nf-x-logo):not([hidden])) {
  position: relative;
}
#nf-crossnav > a:not(.nf-x-logo):not([hidden]):has(~ a:not(.nf-x-logo):not([hidden]))::before {
  /* These separators belong to their preceding visible link, so access-based
     hidden destinations never leave a dangling mark in the product switcher. */
  content: "";
  position: absolute;
  inset-inline-end: calc(var(--nf-t-space-1) * -0.5);
  inset-block-start: 50%;
  inline-size: 1px;
  block-size: var(--nf-t-space-3);
  transform: translateY(-50%);
  background: color-mix(in srgb, var(--nf-t-nav-muted) 42%, transparent);
}
/* Brand and account are the same circular control; only their content and
   destinations differ. Keep the frame and interaction ring in one rule. */
#nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button)) {
  position: relative;
  box-sizing: border-box;
  flex: 0 0 var(--nf-crossnav-control);
  width: var(--nf-crossnav-control);
  min-width: var(--nf-crossnav-control);
  height: var(--nf-crossnav-control);
  min-height: var(--nf-crossnav-control);
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  outline: none;
  box-shadow: none;
}
#nf-crossnav .nf-x-logo + a {
  /* Equal automatic gutters center product links between the two icons. */
  margin-inline-start: auto;
}
#nf-crossnav > .nf-x-logo {
  /* Keep the brand boundary stable while only the product destinations scroll. */
  position: sticky;
  inset-inline-start: 0;
  z-index: 2;
  /* The themed rail artwork must remain visible around the circular mark. */
  background: transparent;
}
#nf-crossnav .nf-x-logo img {
  position: relative;
  z-index: 1;
  display: block;
  width: var(--nf-crossnav-control);
  height: var(--nf-crossnav-control);
  object-fit: contain;
  /* The aperture hides only the PNG rim; the Trove mark stays within it.
     The one live ring belongs to CSS. */
  clip-path: circle(var(--nf-crossnav-identity-aperture));
  animation: none;
  transform: none;
}
#nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button))::after {
  content: "";
  position: absolute;
  inset: var(--nf-crossnav-ring-inset);
  z-index: 2;
  border: 1px solid color-mix(in srgb, var(--nf-t-nav-text) 32%, transparent);
  border-radius: 50%;
  pointer-events: none;
}
/* Both identity controls share readiness and interaction feedback. Animate
   their rings only, never the LN artwork, portrait or bar. */
html:not([data-nf-site-ready="true"]) #nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button))::after,
#nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button)):is(:hover, :focus-visible, :active)::after {
  border-top-color: var(--nf-t-accent);
  animation: nf-crossnav-loader-spin 900ms linear infinite;
}
#nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button)):focus-visible::after {
  /* The same single ring supplies a complete, persistent focus boundary. */
  border-color: var(--nf-t-accent);
}
#nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button)):focus-visible {
  outline: none;
  box-shadow: none;
}
@keyframes nf-crossnav-loader-spin {
  to { transform: rotate(1turn); }
}
/* The 44px control and existing bar height are shared in every appearance.
   At rest the ring is muted; document readiness ends only the loading state.
   Hover, keyboard focus and press remain usable after the page is ready.
   Reduced motion below retains the highlight without any rotation. */

#nf-crossnav .nf-crossnav-account-slot {
  /* Keep the signed-in outlet usable when the product links need their
     horizontal overflow region. It remains in normal flow (so it still
     reserves the same compact control footprint), but sticks to the bar's
     inline end instead of disappearing past that region at intermediate
     desktop widths. A guest intentionally keeps this reserved slot blank. */
  position: sticky;
  inset-inline-end: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 var(--nf-crossnav-control);
  width: var(--nf-crossnav-control);
  min-width: var(--nf-crossnav-control);
  min-height: var(--nf-crossnav-control);
  margin: 0;
  margin-inline-start: auto;
  padding: 0;
  list-style: none;
  /* Do not paint a square plate behind the circular avatar. Product links
     reserve this slot in normal flow, so the transparent edge remains safe. */
  background: transparent;
}
#nf-crossnav .nf-crossnav-account-slot > li {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--nf-crossnav-control);
  min-width: var(--nf-crossnav-control);
  min-height: var(--nf-crossnav-control);
  margin: 0;
  padding: 0;
  list-style: none;
}
#nf-crossnav .nf-crossnav-account-slot > li[hidden] { display: none; }
#nf-crossnav .nf-crossnav-account-slot :is(a, button) {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: var(--nf-crossnav-control);
  min-width: var(--nf-crossnav-control);
  height: var(--nf-crossnav-control);
  min-height: var(--nf-crossnav-control);
  margin: 0;
  padding: 0;
  overflow: visible;
  background: transparent;
  color: var(--nf-t-nav-text);
  border: 0;
  border-radius: 999px;
  box-shadow: none;
  cursor: pointer;
  text-decoration: none;
}
#nf-crossnav .nf-crossnav-account-slot :is(a, button):hover {
  background: transparent;
  color: var(--nf-t-nav-text);
}
#nf-crossnav .nf-crossnav-account-slot img,
#nf-crossnav .nf-crossnav-account-slot .avatar,
#nf-crossnav .nf-crossnav-account-slot svg,
#nf-crossnav .nf-crossnav-account-initials {
  display: block;
  flex: 0 0 var(--nf-crossnav-control);
  width: var(--nf-crossnav-control);
  height: var(--nf-crossnav-control);
  max-width: var(--nf-crossnav-control);
  max-height: var(--nf-crossnav-control);
  border-radius: 50%;
  object-fit: cover;
  clip-path: circle(var(--nf-crossnav-identity-aperture));
  animation: none;
  transform: none;
  border: 0;
  box-shadow: none;
  outline: none;
}
/* APP wraps its portrait and presence indicator together. Clip only the
   artwork, so the independent presence badge stays readable. */
#nf-crossnav .nf-crossnav-account-initials:has(.nf-own-avatar) {
  clip-path: none;
  background: transparent;
}
#nf-crossnav .nf-own-avatar--header {
  background: transparent;
}
#nf-crossnav .nf-own-avatar__fallback:not([hidden]) {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  clip-path: circle(var(--nf-crossnav-identity-aperture));
  background: var(--nf-t-accent-dim);
}
#nf-crossnav .nf-shell-account-avatar > .nf-shell-account-presence {
  z-index: 3;
}
#nf-crossnav .nf-crossnav-account-slot svg {
  padding: 7px;
  box-sizing: border-box;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  background: color-mix(in srgb, var(--nf-t-nav-text) 10%, transparent);
}
#nf-crossnav .nf-crossnav-account-initials {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: color-mix(in srgb, var(--nf-t-accent) 62%, var(--nf-crossnav-bg));
  color: var(--nf-t-nav-text);
  font-size: var(--nf-t-text-xs);
  font-weight: var(--nf-t-weight-semibold);
  line-height: var(--nf-t-leading-none);
  letter-spacing: 0.02em;
}

/* Community remains in the shared product bar. Theme now stays in each
   product's own sub-navigation, including this public portal header. */
.site-header .nav-primary > a[href="/community/"] { display: none; }

/* The bar scrolls horizontally, and overflow-x: auto also computes
   overflow-y to auto, so it clips at its padding box: 2px above and below the
   44px controls. An outward ring loses its top and bottom edges; draw it
   inward, as the account chip below does. */
#nf-crossnav > a:focus-visible {
  outline: var(--nf-t-focus-ring-width) solid var(--nf-t-nav-text);
  outline-offset: var(--nf-t-focus-ring-inset);
}
#nf-crossnav > a:not(.nf-x-logo):focus-visible {
  border-radius: var(--nf-t-space-1);
}
#nf-crossnav > a:not(.nf-x-logo)[aria-current="location"] {
  position: relative;
  color: var(--nf-t-nav-text);
  font-weight: var(--nf-t-weight-semibold);
}
#nf-crossnav > a:not(.nf-x-logo)[aria-current="location"]::after {
  content: "";
  position: absolute;
  inset-inline: var(--nf-t-space-2);
  /* Lift only the accent rule for optical centering; labels stay put. */
  inset-block-end: calc(var(--nf-t-space-1) + 5px);
  block-size: 2px;
  border-radius: 999px;
  background: var(--nf-t-accent);
}
@media (max-width: 820px) {
  #nf-crossnav {
    --nf-crossnav-control: var(--nf-t-control-min);
    gap: var(--nf-t-space-1);
    padding-inline: var(--nf-t-space-3);
    font-size: var(--nf-t-text-xs);
  }
  #nf-crossnav a {
    min-width: var(--nf-t-control-min);
    min-height: var(--nf-t-control-min);
    padding-inline: var(--nf-t-space-2);
  }
  #nf-crossnav > a:not(.nf-x-logo):not([hidden]):not(:has(~ a:not(.nf-x-logo):not([hidden]))) {
    margin-inline-end: 0;
  }
  #nf-crossnav .nf-crossnav-label-full { display: none; }
  #nf-crossnav .nf-crossnav-label-short { display: inline; }
}
@media (max-width: 480px) {
  #nf-crossnav {
    gap: var(--nf-t-space-1);
    padding-inline: var(--nf-t-space-2);
  }
  #nf-crossnav > a:not(.nf-x-logo):not([hidden]) {
    /* At phone widths, five short product labels plus two identity controls
       use equal columns. The labels remain centered while the identity slots
       retain their full 44px pointer and touch targets. */
    flex: 0 0 var(--nf-crossnav-control);
    inline-size: var(--nf-crossnav-control);
    min-inline-size: var(--nf-crossnav-control);
    padding-inline: 0;
  }
  #nf-crossnav .nf-x-logo + a { margin-inline-start: 0; }
}
@media (max-width: 360px) {
  #nf-crossnav {
    gap: calc(var(--nf-t-space-1) * 0.5);
    padding-inline: var(--nf-t-space-1);
  }
}
@media (max-width: 340px) {
  #nf-crossnav {
    gap: 0;
    padding-inline: var(--nf-t-space-1);
  }
}
@media (prefers-reduced-motion: reduce) {
  html:not([data-nf-site-ready="true"]) #nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button))::after,
  #nf-crossnav :is(.nf-x-logo, .nf-crossnav-account-slot :is(a, button)):is(:hover, :focus-visible, :active)::after {
    animation: none;
    border-color: var(--nf-t-accent);
  }
  /* The untouched resting rule stays muted. Highlight only real loading or
     interaction; motion preference does not hide readiness or focus feedback.
     Neither identity image animates in either motion setting. */
}

/* APP and TALK share footer presentation; their adapters retain rail placement. */
body #nf-footer,
#nf-tenant-app .nf-tenant-footer {
  margin-block-start: var(--nf-shell-footer-margin-top);
  border-top: 1px solid var(--nf-t-border);
  background: transparent;
  color: var(--nf-t-text);
  font-family: var(--nf-t-font-body);
  font-size: var(--nf-t-text-xs);
  font-weight: var(--nf-t-weight-regular);
  line-height: var(--nf-t-leading-normal);
  letter-spacing: normal;
  box-sizing: border-box;
  min-width: 0;
}
body #nf-footer,
#nf-tenant-app .nf-tenant-footer > nav {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--nf-shell-footer-gap);
  padding: var(--nf-shell-footer-padding-block-start) var(--nf-shell-footer-padding-inline) var(--nf-shell-footer-padding-block-end);
}
#nf-tenant-app .nf-tenant-footer > nav {
  color: inherit;
  font: inherit;
}
body #nf-footer a,
#nf-tenant-app .nf-tenant-footer > nav a {
  color: inherit;
  font: inherit;
  font-weight: var(--nf-t-weight-regular);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  min-height: var(--nf-shell-footer-target);
  min-width: var(--nf-shell-footer-target);
  min-block-size: var(--nf-shell-footer-target);
  min-inline-size: var(--nf-shell-footer-target);
}
body #nf-footer a:hover,
body #nf-footer a:focus-visible,
#nf-tenant-app .nf-tenant-footer > nav a:hover,
#nf-tenant-app .nf-tenant-footer > nav a:focus-visible {
  color: var(--nf-t-text);
  text-decoration: underline;
}
body #nf-footer a:focus-visible,
#nf-tenant-app .nf-tenant-footer > nav a:focus-visible {
  outline: var(--nf-t-focus-ring-width) solid var(--nf-t-focus);
  outline-offset: var(--nf-t-focus-ring-offset);
  box-shadow: 0 0 0 calc(var(--nf-t-focus-ring-width) + var(--nf-t-space-1)) var(--nf-t-focus-halo);
}

/* Keep data columns readable inside Catalog's existing keyboard-scrollable region. */
#nf-view-root .nf-catalog-table { min-width: 1100px; table-layout: auto; }
#nf-view-root .nf-catalog-table :is(th, td) { overflow-wrap: normal; word-break: normal; }
#nf-view-root .nf-catalog-table th,
#nf-view-root .nf-catalog-table :is(th, td):last-child { white-space: nowrap; }
#nf-view-root .nf-catalog-table .nf-catalog-col-title { min-width: 200px; }
#nf-view-root .nf-catalog-table .nf-catalog-col-publisher { min-width: 144px; }
#nf-view-root .nf-catalog-table .nf-catalog-col-issue,
#nf-view-root .nf-catalog-table .nf-catalog-col-year { min-width: 56px; }
#nf-view-root .nf-catalog-table td:last-child > .nf-btn + .nf-btn { margin-inline-start: var(--nf-t-space-2); }
body.navigation-category .category-heading:not(:has(> *)) { display: none; }

/* Native TALK forms and profile summaries adapt to their available width. */
@media (max-width: 767px) {
  body .user-main .summary-category-list table {
    width: 100%;
    table-layout: fixed;
  }
  body .user-main .summary-category-list th.topic-count,
  body .user-main .summary-category-list td.topic-count,
  body .user-main .summary-category-list th.reply-count,
  body .user-main .summary-category-list td.reply-count {
    width: 32px;
    padding-inline: var(--nf-t-space-1);
    font-size: var(--nf-t-text-xs);
    white-space: nowrap;
  }
  body .user-main .summary-category-list td.category-link { padding-inline: var(--nf-t-space-1); }
  body .user-main .summary-category-list .badge-category__wrapper,
  body .user-main .summary-category-list .badge-category {
    max-width: 100%;
    white-space: normal;
  }
  body .user-main .summary-category-list .badge-category { flex-wrap: wrap; }
  body .user-main .summary-category-list .badge-category__name {
    min-width: 0;
    white-space: normal;
    overflow-wrap: anywhere;
    font-size: var(--nf-t-text-xs);
  }
  body #user-content .badge-group-list {
    grid-template-columns: minmax(0, 1fr);
    min-width: 0;
  }
  body #user-content .badge-card {
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }
  body .user-preferences .control-group.color-scheme > .controls {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    gap: var(--nf-t-space-3);
  }
  body .user-preferences .control-group.color-scheme > .controls > .control-subgroup {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    margin: 0;
    flex: 0 0 auto;
  }
  body .user-preferences .control-group.color-scheme .control-subgroup .select-kit {
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }
  body #reply-control.open .composer-fields,
  body #reply-control.open .composer-fields > div.title-and-category {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    height: auto;
    min-height: 0;
    flex-shrink: 0;
    gap: var(--nf-t-space-2);
  }
  body #reply-control.open .title-and-category > div.title-input,
  body #reply-control.open .title-and-category > div.category-input,
  body #reply-control.open .title-and-category > div.tags-input {
    flex: 0 0 auto;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    margin: 0;
  }
  body #reply-control.open .title-input #reply-title {
    flex: 1 1 auto;
    height: var(--nf-t-control-min);
    min-height: var(--nf-t-control-min);
    margin: 0;
  }
  body #reply-control.open .category-input .select-kit,
  body #reply-control.open .tags-input .select-kit {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    flex: 1 1 auto;
  }
}

@media (min-width: 768px) {
  body .user-main .top-section:has(> .top-sub-section + .top-sub-section)::before,
  body .user-main .top-section:has(> .top-sub-section + .top-sub-section)::after {
    content: none;
    display: none;
  }
  body .user-main .top-section:has(> .top-sub-section + .top-sub-section) {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--nf-t-space-4);
    align-items: start;
  }
  body .user-main .top-section:has(> .top-sub-section + .top-sub-section) > .top-sub-section {
    float: none;
    width: auto;
    min-width: 0;
    margin: 0;
  }
}

/* Opt-in scrolling for long selection lists; every row stays mounted. */
.nf-scroll-region--bounded {
  min-inline-size: 0;
  max-inline-size: 100%;
  max-block-size: min(60vh, 32rem);
  max-block-size: min(60dvh, 32rem);
  overflow: auto;
  overscroll-behavior-block: contain;
  scrollbar-gutter: stable;
  padding: var(--nf-t-space-2);
  scroll-padding-block: var(--nf-t-space-2);
}

#nf-tenant-app [data-nf4044-help-body] .nf-help-controls > .nf-btn {
  align-self: end;
}

/* An explicit grid rhythm replaces the panel's child margins. */
.nf-panel.nf-page-rhythm > *:not(:first-child),
.nf-panel.nf-form-stack > *:not(:first-child) {
  margin-block-start: 0;
}

/* Empty deferred status mounts and action groups do not reserve a grid row. */
.nf-form-stack > div:not([class]):empty,
.nf-form-stack > section:not([class]):empty,
.nf-form-stack > .nf-actions:empty {
  display: none;
}

/* Wide data tables scroll within their wrapper; mobile card tables stay fluid. */
.nf-table-wrap > table.nf-table:where(:not(.nf4286-batch-table)) {
  table-layout: auto;
  min-width: max(100%, 640px);
}
.nf-table-wrap > table.nf-table:where(:not(.nf4286-batch-table)) :is(th, td) {
  overflow-wrap: normal;
  word-break: normal;
}
.nf-table-wrap > table.nf-table:where(:not(.nf4286-batch-table)) th {
  white-space: nowrap;
}
.nf-solicitations {
  grid-template-columns: minmax(0, 1fr);
}
.nf-solicitations > * {
  min-width: 0;
}
.nf-solicitations[data-nf3568-tab="order"] .nf-table {
  min-width: max(100%, 1000px);
}
.nf-solicitations[data-nf3568-tab="order"] .nf-table :is(th, td):first-child {
  min-width: 220px;
}

/* Stacked event headings use the available mobile width. */
@media (max-width: 700px) {
  .nf-events-feed__heading > p {
    max-width: none;
    width: 100%;
  }
}
.nf-events-discovery__error:empty {
  display: none;
}

/* Keep the Guest heading outside the separately scrolling dialog body. */
body .nf-guest-modal {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
body .nf-guest-modal__header {
  position: static;
  flex: none;
}
body .nf-guest-modal__content {
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
}

/* Native TALK calendar, navigation and viewport adapters. */
#main-outlet .event-date.event-relative-date.future {
  color: var(--nf-t-text);
}

/* Native topic cells use the control-hover surface while retaining visited
   and metadata ink. Light palettes make that pairing fall below AA, so the
   hovered cell and its compact metadata return to the primary text role. */
body .topic-list .topic-list-data:hover :is(
  .raw-topic-link,
  .raw-topic-link .sr-only,
  .badge-category__name,
  .relative-date,
  .badge-posts .number
) {
  color: var(--nf-t-text);
}

/* Chat core paints the active compact footer label with the raw brand fill.
   Use the theme's contrast-safe accent text role on the dark chat ground. */
body.has-full-page-chat .c-footer .c-footer__item.--active :is(.d-icon, .d-button-label) {
  color: var(--nf-red-text);
}

#main-outlet .fc button.fc-button-primary:not(:disabled).fc-button-active,
#main-outlet .fc button.fc-button-primary:not(:disabled):active {
  /* The installed calendar theme has an !important color using this variable. */
  --d-button-primary-text-color: var(--nf-t-text);
  --fc-button-text-color: var(--nf-t-text);
  color: var(--nf-t-text);
}

/* The calendar plugin fades past events to opacity 0.3, which leaves their
   titles at about 1.7:1 on the dark ground while they remain links. Mark them
   past with the muted text token at full opacity; the category dot stays dim. */
#main-outlet .fc .fc-event-past { opacity: 1; }
#main-outlet .fc .fc-event-past :is(.fc-event-title, .fc-event-time, .fc-list-event-title, .fc-list-event-time) {
  color: var(--nf-t-text-muted);
}
#main-outlet .fc .fc-event-past .fc-daygrid-event-dot { opacity: 0.5; }

/* FullCalendar dims the day numbers of the leading and trailing other-month
   cells to opacity 0.3, about 2.5:1 on dark and 1.9:1 on light, and they
   remain links. Show them in the muted text token at full opacity instead. */
#main-outlet .fc .fc-day-other .fc-daygrid-day-top { opacity: 1; }
#main-outlet .fc .fc-day-other .fc-daygrid-day-number { color: var(--nf-t-text-muted); }

/* Core colours the notifications Filter By value with --tertiary, the brand
   fill (#b5202e), which is 2.6:1 as text on the dark panel. */
body .select-kit.dropdown-select-box.notifications-filter .notifications-filter-header .header-text {
  color: var(--nf-t-accent-text);
}

@media (min-width: 768px) {
  html.has-full-page-chat #main-chat-outlet { grid-template-rows: minmax(0, 1fr); }
  html.has-full-page-chat .full-page-chat .c-routes.--channel {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
  }
  html.has-full-page-chat .full-page-chat .c-routes.--channel > .chat-channel {
    flex: 1 1 auto;
    height: auto;
    min-height: 0;
  }
  html.has-full-page-chat body #main-outlet-wrapper {
    height: calc(100dvh - var(--header-offset, 95px));
    min-height: 0;
    grid-template-rows: minmax(0, 1fr) auto;
  }
  html.has-full-page-chat body #main-outlet { min-height: 0; }
  html.has-full-page-chat body #main-outlet-wrapper > .sidebar-wrapper {
    height: calc(100dvh - var(--header-offset, 95px) + var(--header-height, 56px));
    min-height: 0;
  }
}
@media (max-width: 767px) {
  body.tags-page .tag-box {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }
  body .user-main .user-navigation { min-width: 0; max-width: 100%; margin-block: 0 12px; }
  body .user-main .user-navigation .horizontal-overflow-nav { min-width: 0; max-width: 100%; }
  body .user-main .user-navigation .nav-pills {
    display: flex;
    flex-wrap: nowrap;
    gap: var(--nf-t-space-2);
    overflow-x: auto;
    max-width: 100%;
    padding-block: 0 4px;
    margin: 0;
  }
  body .user-main .user-navigation .nav-pills > li { flex: 0 0 auto; width: auto; min-width: 0; }
  body .user-main .user-navigation .nav-pills > li > a {
    display: inline-flex;
    align-items: center;
    min-height: var(--nf-t-control-min);
    min-width: var(--nf-t-control-min);
    width: auto;
    white-space: nowrap;
    gap: var(--nf-t-space-2);
  }
  body .user-main .user-navigation-primary .nav-pills.main-nav > li > a > span { display: inline; }
  body .fc .fc-col-header-cell { padding: 0; }
  body .fc .fc-col-header-cell-cushion {
    padding: 2px 1px;
    font-size: var(--nf-t-text-xs);
    white-space: normal;
    overflow-wrap: normal;
    word-break: normal;
  }
  body .fc .fc-header-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--nf-t-space-2);
    align-items: center;
  }
  body .fc .fc-header-toolbar .fc-toolbar-chunk { display: contents; }
  body .fc .fc-header-toolbar .fc-toolbar-title { flex: 1 0 100%; margin: 0; }
  body .fc .fc-header-toolbar .fc-button-group { flex: 0 0 auto; max-width: 100%; margin: 0; }
  body .fc .fc-header-toolbar .fc-button {
    flex: 0 0 auto;
    min-width: var(--nf-t-control-min);
    min-height: var(--nf-t-control-min);
    font-size: var(--nf-t-text-md);
    padding-inline: var(--nf-t-space-2);
    white-space: nowrap;
  }
}

/* The in-flow cross-product bar occupies viewport space only while visible.
   The rail stays sticky at zero and expands as that bar scrolls out of view. */
@media (min-width: 821px) {
  #nf-tenant-app[data-nf-shell-structure="static"] .nf-side {
    height: calc(100vh - var(--nf-shell-visible-crossnav, 0px));
    height: calc(var(--nf-shell-rail-height, 100dvh) - var(--nf-shell-visible-crossnav, 0px));
  }
}

/* Only native single-cell Discourse rows use the stacked mobile layout.
   A compressed desktop window can retain multi-cell rows below767px. */
@media (max-width: 767px) {
  body:is(.navigation-topics, .navigation-category) .topic-list:has(> tbody > tr > .topic-list-data:only-child),
  body:is(.navigation-topics, .navigation-category) .topic-list:has(> tbody > tr > .topic-list-data:only-child) > tbody,
  body:is(.navigation-topics, .navigation-category) .topic-list:has(> tbody > tr > .topic-list-data:only-child) > tbody > tr,
  body:is(.navigation-topics, .navigation-category) .topic-list:has(> tbody > tr > .topic-list-data:only-child) > tbody > tr > td {
    display: block;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
  }
  body.navigation-topics .topic-list .badge-category__wrapper,
  body.navigation-topics .topic-list .badge-category,
  body.navigation-topics .topic-list .badge-category__name,
  body.navigation-category .topic-list .badge-category__wrapper,
  body.navigation-category .topic-list .badge-category,
  body.navigation-category .topic-list .badge-category__name {
    max-width: 100%;
    min-width: 0;
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* Keep specialized data-table width floors above the ordinary table baseline. */
[data-nf4100-definition-table] table.nf-table { min-width: 960px; }
table.nf-table.nf-solicitations__table { min-width: 900px; }

/* Checkbox labels remain one wrapping row with a full touch target. */
.nf-field.nf-field--checkbox {
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  min-block-size: var(--nf-t-control-min);
}
.nf-field.nf-field--checkbox > .nf-checkbox { margin: 0; }

/* Live-previewed at320,390 and1440px. Hide only the redundant page-title link;
   retain native header actions, sidebar navigation and topic controls. */
@media (max-width: 379px) {
  .d-header .title > a:has(> .nf-talk-page-title) {
    display: none;
  }

  .d-header .title:has(> a > .nf-talk-page-title) {
    min-width: 0;
  }
}

/* Three-child catalog choices: checkbox, identity, publisher metadata. */
#nf-tenant-app [data-nf4357-existing-list] > .nf-drill-row {
  grid-template-columns: var(--nf-t-control-min) minmax(0, 1fr);
  column-gap: var(--nf-t-space-2);
  row-gap: var(--nf-t-space-1);
  min-block-size: var(--nf-t-control-min);
  align-items: start;
}
#nf-tenant-app [data-nf4357-existing-list] > .nf-drill-row > input {
  grid-column: 1;
  grid-row: 1 / span 2;
  justify-self: center;
  margin: 0;
}
#nf-tenant-app [data-nf4357-existing-list] > .nf-drill-row > span {
  min-inline-size: 0;
  max-inline-size: 100%;
  white-space: normal;
  overflow-wrap: break-word;
  word-break: normal;
}
#nf-tenant-app [data-nf4357-existing-list] > .nf-drill-row > span:first-of-type {
  grid-column: 2;
  grid-row: 1;
}
#nf-tenant-app [data-nf4357-existing-list] > .nf-drill-row > span:last-of-type {
  grid-column: 2;
  grid-row: 2;
}

/* A closed off-screen drawer must not shade the visible mobile page. */
#nf-tenant-app[data-nf-navigation-open="false"] #nf-primary-navigation[aria-hidden="true"] {
  box-shadow: none;
}

/* Admitted action links in a Settings card grid use its existing title roles. */
#nf-tenant-app [data-sf1023-settings-links] > a.nf-btn {
  justify-content: flex-start;
  align-items: flex-start;
  min-width: 0;
  padding: var(--nf-t-space-3) var(--nf-t-space-4);
  border-color: var(--nf-t-border);
  background: var(--nf-t-surface-raised);
  color: var(--nf-t-text);
  font-family: var(--nf-t-font-heading);
  font-size: var(--nf-t-display-5);
  font-weight: var(--nf-t-weight-black);
  line-height: var(--nf-t-leading-tight);
  text-align: left;
  white-space: normal;
  overflow-wrap: break-word;
  box-shadow: none;
}
#nf-tenant-app [data-sf1023-settings-links] > a.nf-btn:hover {
  background: var(--nf-t-control-hover);
  border-color: var(--nf-t-accent);
}

/* Wide aging rows retain readable identity and a44px action without a full row of button. */
@media (min-width: 761px) {
  #nf-insights-aging-records > li {
    grid-template-columns: minmax(0, 1fr) auto;
    column-gap: var(--nf-t-space-4);
    align-items: center;
  }
  #nf-insights-aging-records > li > strong {
    grid-column: 1;
    grid-row: 1;
    min-width: 0;
  }
  #nf-insights-aging-records > li > span {
    grid-column: 1;
    grid-row: 2;
    min-width: 0;
  }
  #nf-insights-aging-records > li > a {
    grid-column: 2;
    grid-row: 1 / span 2;
    white-space: nowrap;
  }

  /* Keep countdown identity in flow, clear of the event's route controls. */
  #nf-tenant-app .nf-event-countdown-tile:not([hidden]) {
    position: relative;
    inset: auto;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--nf-t-space-2);
    width: max-content;
    min-width: 0;
    min-height: 0;
    max-width: calc(100% - 2 * var(--nf-t-space-5));
    margin: var(--nf-t-space-5) var(--nf-t-space-5) 0 auto;
    padding: var(--nf-t-space-2) var(--nf-t-space-3);
    border-width: 3px;
    border-radius: var(--nf-t-radius-lg);
  }
  #nf-tenant-app .nf-event-countdown-tile .nf-event-countdown__value {
    font-size: var(--nf-t-text-3xl);
  }
  #nf-tenant-app .nf-event-countdown-tile .nf-event-countdown__label {
    margin: 0;
  }
  #nf-tenant-app .nf-event-countdown-tile:not([hidden]) + .nf-event-card__content {
    padding: var(--nf-t-space-4) var(--nf-t-space-5) var(--nf-t-space-5);
    max-width: none;
  }
}

/* Browser-previewed Tracking preferences at320/390/1440px. */
.user-preferences__tracking-topics-wrapper {
  margin-bottom: var(--nf-t-space-4);
}

.user-preferences__tracking-categories-tags-wrapper {
  gap: var(--nf-t-space-4);
}

.user-preferences__tracking-categories-tags-wrapper > div {
  display: flex;
  flex-direction: column;
  min-width: 0;
  max-width: 100%;
}

/* Native blank line between currently empty plugin mounts. The mounts remain. */
.user-preferences__tracking-categories-tags-wrapper > div > br {
  display: none;
}

@media (max-width: 767px) {
  .user-preferences__tracking-topics-wrapper {
    margin-bottom: var(--nf-t-space-3);
  }

  .user-preferences__tracking-categories-tags-wrapper {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--nf-t-space-3);
  }

  .user-preferences__tracking-categories-tags-wrapper :is(.category-notifications, .tag-notifications) {
    min-width: 0;
    max-width: 100%;
  }
}

/* Browser-previewed About hierarchy at320/390/1440px. */
.body-page .about__main-content {
  gap: var(--nf-t-space-4);
  align-items: flex-start;
}

.body-page .about__left-side {
  display: flex;
  flex-direction: column;
  gap: var(--nf-t-space-4);
}

.body-page section.about__admins,
.body-page section.about__moderators,
.body-page .about__right-side,
.body-page .about__stats,
.body-page .about__activities {
  margin-block: 0;
}

.body-page .about__stats,
.body-page .about__activities {
  gap: var(--nf-t-space-4);
}

.body-page .about__stats > .about__stats-item,
.body-page .about__activities > .about__activities-item {
  margin: 0;
}

@media (max-width: 767px) {
  .body-page .about__main-content,
  .body-page .about__left-side,
  .body-page .about__stats,
  .body-page .about__activities {
    gap: var(--nf-t-space-3);
  }
}

/* Product-owned scroll regions retain wheel, touch, keyboard and focus
   scrolling. The document root stays outside this selector, leaving the
   browser viewport scrollbar as the only visible scrollbar. */
body :where(*) {
  scrollbar-width: none !important;
  -ms-overflow-style: none !important;
  scrollbar-gutter: auto !important;
}

body :where(*)::-webkit-scrollbar {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}

/* A route focused into view stopped flush with the rail's clip edge, which
   cut its ring and halo on that side (#7893). Reserve the ring's full reach
   whenever focus scrolls a rail. */
body .sidebar-wrapper .sidebar-sections,
body .sidebar-hamburger-dropdown .sidebar-sections,
body .hamburger-panel .panel-body {
  scroll-padding-block: calc(var(--nf-t-focus-ring-width) + var(--nf-t-space-1));
}

/* Keep native dark icon treatment while mapping every rail paint layer to
   the same global navigation role used by APP. */
body .sidebar-wrapper {
  --nf-rail: var(--nf-t-nav-bg);
}

body .sidebar-wrapper,
body .sidebar-wrapper .sidebar-container {
  background: var(--nf-t-nav-bg);
  --d-sidebar-background: var(--nf-t-nav-bg);
}

@media (min-width: 821px) {
  body #nf-footer::before {
    background: var(--nf-t-nav-bg);
    top: -1px;
  }
}

/* #10094 — shared Support Session banner foundation for APP, SHOP, and portal
   projections. Canonical shared tokens keep future registry themes aligned. */
.nf-support-session {
  position: sticky;
  inset-block-start: 0;
  z-index: 11;
  background: var(--nf-t-surface-raised);
  border-block: 1px solid var(--nf-t-warn);
  color: var(--nf-t-text);
}

html[data-nf-support-visible] {
  scroll-padding-top: calc(
    var(--nf-support-banner-height, 0px) + var(--nf-t-topbar-h) + var(--nf-t-space-2)
  );
}

.nf-support-session__content {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--nf-t-space-2) var(--nf-t-space-3);
  max-width: 960px;
  min-block-size: var(--nf-t-control-min);
  margin: 0 auto;
  padding: var(--nf-t-space-2) var(--nf-t-space-4);
  font-size: var(--nf-t-text-sm);
  line-height: var(--nf-t-leading-normal);
}

.nf-support-session__label {
  color: var(--nf-t-warn-text);
  font-weight: var(--nf-t-weight-bold);
}

.nf-support-session__target {
  font-weight: var(--nf-t-weight-semibold);
}

.nf-support-session__mode,
.nf-support-session__countdown {
  color: var(--nf-t-text-muted);
  font-variant-numeric: tabular-nums;
}

.nf-support-session__mode::before,
.nf-support-session__countdown::before {
  content: "·";
  color: var(--nf-t-border);
  margin-inline-end: var(--nf-t-space-2);
}

.nf-support-session__exit {
  min-inline-size: 44px;
  min-block-size: var(--nf-t-control-min);
  padding: var(--nf-t-control-pad-y) var(--nf-t-control-pad-x);
  border: 1px solid var(--nf-t-control-border);
  border-radius: var(--nf-t-radius-sm);
  background: var(--nf-t-control-bg);
  color: var(--nf-t-text);
  cursor: pointer;
  font: inherit;
  font-weight: var(--nf-t-weight-semibold);
}

.nf-support-session__exit:hover:not(:disabled) {
  background: var(--nf-t-control-hover);
}

.nf-support-session__exit:disabled {
  cursor: wait;
  color: var(--nf-t-control-disabled-text);
}

.nf-support-session__exit:focus-visible {
  outline: var(--nf-t-focus-ring-width) solid var(--nf-t-focus);
  outline-offset: var(--nf-t-focus-ring-offset);
}

.nf-support-session__problem {
  color: var(--nf-t-danger);
}

.nf-support-session__target,
.nf-support-session__workspace {
  min-inline-size: 0;
  overflow-wrap: anywhere;
}

.nf-support-session__content > span {
  max-inline-size: 100%;
}

.nf-support-session__exit {
  flex-shrink: 0;
}

.nf-support-session__announcement {
  position: absolute;
  inline-size: 1px;
  block-size: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

@media (max-width: 320px) {
  .nf-support-session__content {
    flex-direction: column;
    align-items: stretch;
    gap: var(--nf-t-space-1);
    padding-inline: var(--nf-t-space-3);
  }

  .nf-support-session__mode::before,
  .nf-support-session__countdown::before {
    content: "";
    margin: 0;
  }

  .nf-support-session__exit {
    align-self: flex-start;
  }
}
