/*
 * Nexus design layer: site-wide rules (docs/design/NEXUS_FOUNDRY_UI_UX_KIT.md; tokens from nexus-tokens.css).
 * 1. BuddyX Pro colour and font variables mapped onto the kit tokens (only with "Apply the kit colours").
 * 2. Page ground, type and focus.  3. Header, sub header and footer chrome.  4. The appearance switch.
 * 5. Kit footer line.  6. Accessibility helpers, reduced motion, print.
 * Rules never target canvas or svg globally and never reset BuddyPress, bbPress or plugin markup.
 */

/* 1. Variable mapping (3.8.7-nexus.20). BuddyX Pro 5.1.8 prints its Customizer colours as variables twice: on :root and
   on :root[data-bx-mode="dark"] / body.buddyx-dark-theme (inline, after this file). Every one of them is pointed at the
   kit tokens here, on a selector that outranks both (two attributes on :root, a class on body), so a site shows its
   institution colours in Light and Dark whatever its old Customizer accents were (the magenta and purple of the
   Essentials-era settings) without changing any site option. Only with "Apply the kit colours" (data-nx-colours). */
:root[data-nx-colours="kit"][data-nx-inst],:root[data-nx-colours="kit"][data-nx-inst] body.nx-site,
:root[data-nx-colours="kit"][data-nx-inst][data-bx-mode="dark"],:root[data-nx-colours="kit"][data-nx-inst] body.nx-site.buddyx-dark-theme{
  --bx-color-bg:var(--nx-bg-canvas);--bx-color-bg-page:var(--nx-bg-canvas);
  --bx-color-bg-elevated:var(--nx-bg-elevated);--bx-color-bg-muted:var(--nx-bg-muted);
  --bx-color-bg-subtle:var(--nx-bg-elevated);--bx-color-bg-overlay:var(--nx-bg-overlay);
  --bx-color-fg:var(--nx-text-secondary);--bx-color-fg-muted:var(--nx-text-muted);
  --bx-color-fg-subtle:var(--nx-text-muted);--bx-color-fg-inverse:var(--nx-bg-canvas);
  --bx-color-heading:var(--nx-text-primary);--bx-color-border:var(--nx-border-hairline);
  --bx-color-border-strong:var(--nx-border-hairline-strong);--bx-color-divider:var(--nx-border-hairline);
  --bx-color-input-bg:var(--nx-bg-canvas);--bx-color-input-border:var(--nx-border-default);
  --bx-color-input-focus-border:var(--nx-focus);--bx-color-accent:var(--nx-accent);
  --bx-color-accent-inverse:var(--nx-primary-ink);--bx-color-link:var(--nx-text-primary);
  --bx-color-link-hover:var(--nx-accent);--bx-color-button-bg:var(--nx-primary-bg);
  --bx-color-button-bg-hover:var(--nx-primary-hover);--bx-color-button-fg:var(--nx-primary-ink);
  --bx-color-button-fg-hover:var(--nx-primary-ink);--bx-color-button-border:var(--nx-primary-bg);
  --bx-color-button-border-hover:var(--nx-primary-hover);--bx-color-topbar-bg:var(--nx-bg-elevated);
  --bx-color-topbar-fg:var(--nx-text-secondary);--bx-color-topbar-link:var(--nx-text-primary);
  --bx-color-topbar-link-hover:var(--nx-accent);--bx-color-header-bg:var(--nx-bg-canvas);
  --bx-color-site-title:var(--nx-text-primary);--bx-color-site-title-hover:var(--nx-accent);
  --bx-color-menu-fg:var(--nx-text-secondary);--bx-color-menu-hover:var(--nx-text-primary);
  --bx-color-menu-active:var(--nx-text-primary);--bx-color-subheader-bg:var(--nx-bg-canvas);
  --bx-color-subheader-fg:var(--nx-text-primary);--bx-color-panel-toggle:var(--nx-text-primary);
  --bx-color-panel-bg:var(--nx-bg-surface);--bx-color-panel-bg-hover:var(--nx-bg-hover);
  --bx-color-panel-bg-active:var(--nx-bg-muted);--bx-color-panel-menu:var(--nx-text-secondary);
  --bx-color-panel-menu-hover:var(--nx-text-primary);--bx-color-panel-menu-active:var(--nx-text-primary);
  --bx-color-loader-bg:var(--nx-accent);--bx-color-footer-bg:var(--nx-bg-canvas);
  --bx-color-footer-title:var(--nx-text-primary);--bx-color-footer-fg:var(--nx-text-secondary);
  --bx-color-footer-link:var(--nx-text-primary);--bx-color-footer-link-hover:var(--nx-accent);
  --bx-color-copyright-bg:var(--nx-bg-canvas);--bx-color-copyright-fg:var(--nx-text-muted);
  --bx-color-copyright-link:var(--nx-text-primary);--bx-color-copyright-link-hover:var(--nx-accent);
  --bx-color-success:var(--nx-positive);--bx-color-warning:var(--nx-caution);--bx-color-error:var(--nx-critical);
  --bx-color-info:var(--nx-info);--bx-radius-card:var(--nx-radius);--color-theme-primary:var(--nx-accent);
  --color-theme-loader:var(--nx-accent);--color-theme-secondary:var(--nx-text-muted);
  --color-theme-body:var(--nx-bg-canvas);--color-layout-boxed:var(--nx-bg-canvas);
  --color-theme-white-box:var(--nx-bg-surface);--color-theme-white:var(--nx-bg-canvas);
  --color-theme-grey:var(--nx-bg-muted);--color-block-bg-subtle:var(--nx-bg-muted);
  --color-secondary-bg:var(--nx-bg-muted);--color-body-text:var(--nx-text-secondary);--color-meta:var(--nx-text-muted);
  --color-neutral:var(--nx-text-muted);--global-body-lightcolor:var(--nx-bg-elevated);
  --global-font-color:var(--nx-text-secondary);--global-border-color:var(--nx-border-hairline);
  --global-title-color:var(--nx-text-primary);--global-heading-color:var(--nx-text-primary);
  --color-hr:var(--nx-border-hairline);--color-header-bg:var(--nx-bg-canvas);--color-site-title:var(--nx-text-primary);
  --color-site-title-hover:var(--nx-accent);--color-site-tagline:var(--nx-text-muted);
  --color-menu:var(--nx-text-secondary);--color-menu-hover:var(--nx-text-primary);
  --color-menu-active:var(--nx-text-primary);--color-subheader-title:var(--nx-text-primary);
  --color-subheader-background:var(--nx-bg-canvas);--color-topbar-bg:var(--nx-bg-elevated);
  --color-topbar-content:var(--nx-text-secondary);--color-topbar-link:var(--nx-text-primary);
  --color-topbar-link-hover:var(--nx-accent);--color-panel-bg:var(--nx-bg-surface);
  --color-panel-bg-hover:var(--nx-bg-hover);--color-panel-bg-active:var(--nx-bg-muted);
  --color-panel-menu:var(--nx-text-secondary);--color-panel-menu-hover:var(--nx-text-primary);
  --color-panel-menu-active:var(--nx-text-primary);--color-panel-toggle:var(--nx-text-primary);
  --color-link:var(--nx-text-primary);--color-link-hover:var(--nx-accent);--color-link-active:var(--nx-accent);
  --color-link-hover-visited:var(--nx-accent);--color-h1:var(--nx-text-primary);--color-h2:var(--nx-text-primary);
  --color-h3:var(--nx-text-primary);--color-h4:var(--nx-text-primary);--color-h5:var(--nx-text-primary);
  --color-h6:var(--nx-text-primary);--button-text-color:var(--nx-primary-ink);
  --button-text-hover-color:var(--nx-primary-ink);--button-background-color:var(--nx-primary-bg);
  --button-background-hover-color:var(--nx-primary-hover);--button-border-color:var(--nx-primary-bg);
  --button-border-hover-color:var(--nx-primary-hover);--color-quote-border:var(--nx-accent);
  --color-quote-citation:var(--nx-text-muted);--color-footer-bg:var(--nx-bg-canvas);
  --color-footer-title:var(--nx-text-primary);--color-footer-content:var(--nx-text-secondary);
  --color-footer-link:var(--nx-text-primary);--color-footer-link-hover:var(--nx-accent);
  --color-copyright-bg:var(--nx-bg-canvas);--color-copyright-content:var(--nx-text-muted);
  --color-copyright-link:var(--nx-text-primary);--color-copyright-link-hover:var(--nx-accent);
  --wp--preset--color--primary:var(--nx-accent);--wp--preset--color--accent:var(--nx-accent);
  --wp--preset--color--base:var(--nx-bg-canvas);--wp--preset--color--contrast:var(--nx-text-primary);
}
body.nx-kit-fonts{--global-font-family:var(--nx-font-sans);--highlight-font-family:var(--nx-font-sans);--bx-font-body:var(--nx-font-sans);--bx-font-heading:var(--nx-font-sans)}

/* 2. Ground, type, focus. */
:root[data-nx-colours="kit"]{background-color:var(--nx-bg-canvas)}
:root[data-nx-colours="kit"] body.nx-site{background-color:var(--nx-bg-canvas);color:var(--nx-text-secondary)}
body.nx-kit-fonts{font-family:var(--nx-font-sans);font-feature-settings:"kern";-webkit-font-smoothing:antialiased}
body.nx-kit-fonts :where(h1,h2,h3,h4,h5,h6,.site-title,.entry-title,.page-title){font-family:var(--nx-font-sans);font-weight:500;letter-spacing:-.02em}
body.nx-kit-fonts :where(code,kbd,pre,samp){font-family:var(--nx-font-mono)}
:root[data-nx-colours="kit"] body.nx-site :where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid var(--nx-focus);outline-offset:2px}

/* The BuddyX header logo in Dark (inc/nexus-parent-compat.php): the site's light variant when set, else a light
   silhouette of the mark. Light shows the logo as uploaded. */
.site-branding .nx-logo-dark{display:none}
:root[data-theme="dark"] body.nx-has-logo-dark .site-branding .custom-logo:not(.nx-logo-dark){display:none}
:root[data-theme="dark"] body.nx-has-logo-dark .site-branding .nx-logo-dark{display:inline-block}
:root[data-theme="dark"] body.nx-site:not(.nx-has-logo-dark) .site-branding :where(.custom-logo,.site-logo-wrapper img){filter:brightness(0) invert(1)}

/* BuddyPress (Nouveau) and BuddyX community screens on the kit tokens (3.8.7-nexus.20): member and group tabs, sub
   tabs, counts, names, meta and the BuddyX breadcrumb keep their own light grounds and greys otherwise, which fail in
   Dark. Only with "Apply the kit colours"; layout and markup stay BuddyPress's own. */
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs,#object-nav,#subnav),
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs) :is(ul,li){background-color:transparent}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs) li a{background-color:transparent;color:var(--nx-text-secondary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs) li:is(.current,.selected) a,
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs) li a:hover{background-color:var(--nx-bg-muted);color:var(--nx-text-primary);box-shadow:inset 0 -2px 0 var(--nx-accent)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs) :is(.count,span.count){background-color:var(--nx-bg-muted);color:var(--nx-text-primary);border-color:var(--nx-border-hairline)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.user-nicename,.item-title,.list-title,.group-name,#item-header-content h2,.activity-header a){color:var(--nx-text-primary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.item-meta,.item-meta .activity,.time-since,.last-activity,.activity-time-since,.member-meta,.activity-header,.description,.bp-member-type,.group-status){color:var(--nx-text-muted)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.bp-list>li,.activity-list>li,.activity-update-form,.bp-feedback,.item-list-tabs,.bp-dir-search-form input){background-color:var(--nx-bg-surface);border-color:var(--nx-border-hairline);color:var(--nx-text-secondary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.generic-button a,.generic-button button,button.button,input[type="submit"]){background-color:var(--nx-primary-bg);border-color:var(--nx-primary-bg);color:var(--nx-primary-ink)}
:root[data-nx-colours="kit"] body.nx-site :is(.site-sub-header,.buddyx-breadcrumbs,.buddyx-breadcrumbs ul,.buddyx-breadcrumbs li){background-color:transparent}
:root[data-nx-colours="kit"] body.nx-site #buddypress div#item-header-cover-image :is(h2,h2 a,.user-nicename){color:var(--nx-text-primary)} /* BuddyX sets them by two ids */
:root[data-nx-colours="kit"] body.nx-site .site-sub-header{background-color:var(--nx-bg-canvas);border-block-end:1px solid var(--nx-border-hairline)}
:root[data-nx-colours="kit"] body.nx-site .buddyx-breadcrumbs :is(a,span){color:var(--nx-text-secondary)}
:root[data-nx-colours="kit"] body.nx-site .buddyx-breadcrumbs .trail-end :is(a,span){color:var(--nx-text-primary)}

/* 3. Chrome: the parent theme's header and footer are left exactly as the theme draws them (3.8.7-nexus.15). */
:root[data-nx-colours="kit"] body.nx-site :where(.wp-block-button__link,.button:not(.bp-tooltip),input[type="submit"]){border-radius:var(--nx-radius)}
#masthead .desktop-icons:has([data-nx-switch]){display:flex;flex-wrap:nowrap;align-items:center;gap:8px}
/* One switch on the page: the Nexus article's own toggle gives way to the site switch (they share one state). */
body.nx-one-switch .nx-article .nx-theme-toggle{display:none!important}

/* 4. The appearance switch (kit segmented control, 5px frame, active segment inverted). */
.nx-switch{display:inline-flex;align-items:center;margin:0 12px 0 0;padding:0;border:1px solid var(--nx-border-hairline-strong);border-radius:var(--nx-radius);background:var(--nx-bg-canvas);vertical-align:middle;flex:none}
.nx-switch[hidden]{display:none}
.nx-switch .nx-switch__btn{appearance:none;-webkit-appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;margin:0;border:0;border-radius:2px;background:transparent;color:var(--nx-text-muted);font:500 10.5px/1 var(--nx-font-mono);letter-spacing:.12em;text-transform:uppercase;min-height:30px;min-width:32px;padding:0 8px;cursor:pointer;box-shadow:none}
.nx-switch .nx-switch__i{display:block;width:16px;height:16px;flex:none}
/* In the parent header the switch is icons only (labels stay as the accessible names and titles). */
#masthead .nx-switch .nx-switch__t{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.nx-switch--floating .nx-switch__i{display:none}
.nx-switch .nx-switch__btn:hover{color:var(--nx-text-primary);background:transparent}
.nx-switch .nx-switch__btn[aria-pressed="true"]{background:var(--nx-primary-bg);color:var(--nx-primary-ink)}
.nx-switch .nx-switch__btn:focus-visible{outline:2px solid var(--nx-focus);outline-offset:2px}
.nx-switch--floating{position:fixed;inset-inline-end:16px;bottom:16px;z-index:9990;box-shadow:var(--nx-shadow)}
@media (max-width:1023px){.nx-switch{margin:0 8px 0 0}.nx-switch .nx-switch__btn{min-width:36px;padding:0 8px;min-height:36px}}
.nx-switch .nx-switch__btn[aria-pressed="true"] .nx-switch__i{stroke:currentColor}

/* 5. Kit footer line: institution mark, mono line, hairline above. */
.nx-footline{background:var(--nx-bg-canvas);border-top:1px solid var(--nx-border-hairline)}
.nx-footline__in{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px;max-width:var(--nx-wide);margin:0 auto;padding:20px var(--nx-gutter)}
.nx-footline__brand{display:flex;align-items:center;gap:12px;color:var(--nx-text-primary);text-decoration:none}
.nx-footline__tile{display:inline-grid;place-items:center;min-width:32px;height:32px;padding:0 6px;box-sizing:border-box;border-radius:var(--nx-radius-chip);background:var(--nx-primary-bg);color:var(--nx-primary-ink);font:600 12px/1 var(--nx-font-sans);letter-spacing:.04em}
.nx-footline__name{font:600 13px/1.2 var(--nx-font-sans);letter-spacing:.04em;text-transform:uppercase}
.nx-footline__meta,.nx-footline__nav a{font:500 11px/1.4 var(--nx-font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--nx-text-muted)}
.nx-footline__meta{display:flex;align-items:center;gap:10px}
.nx-footline__meta::before{content:"";width:20px;height:2px;background:var(--nxi-grad)}
.nx-footline__nav{display:flex;gap:16px}
.nx-footline__nav a{text-decoration:none}
.nx-footline__nav a:hover{color:var(--nx-text-primary)}

/* 5b. Nonprofit trust block: support, funding, independence, licence and permissions. */
.nx-trust{display:grid;grid-template-columns:minmax(0,1fr);gap:24px 40px;max-width:var(--nx-wide);margin:0 auto;padding:28px var(--nx-gutter) 36px;border-top:1px solid var(--nx-border-hairline)}
.nx-trust__col{min-width:0}
.nx-footline .nx-trust__k{margin:0 0 10px;letter-spacing:.16em;font:500 11px/1.3 var(--nx-font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--nx-text-muted)}
.nx-trust p{margin:0;font-size:14px;line-height:1.55;color:var(--nx-text-secondary)}
.nx-trust a{color:var(--nx-text-primary)}
.nx-trust p a{text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:.2em} /* links inside a sentence are told apart by more than colour (WCAG 1.4.1) */
.nx-trust__col--lead p:first-of-type{font-size:16px;color:var(--nx-text-primary)}
.nx-trust__act{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px!important}
.nx-trust__btn{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border:1px solid var(--nx-border-hairline-strong);border-radius:var(--nx-radius);font:500 14px/1 var(--nx-font-sans);text-decoration:none}
.nx-trust__btn[data-variant="primary"]{background:var(--nx-primary-bg);border-color:var(--nx-primary-bg);color:var(--nx-primary-ink)!important}
.nx-trust__btn:hover{border-color:var(--nx-text-primary)}
.nx-trust__links{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:10px!important}
@media (min-width:900px){.nx-trust{grid-template-columns:minmax(0,4fr) repeat(3,minmax(0,3fr))}}

/* WebGL and maps in Nexus articles: undo parent rules that resize or filter canvases (scoped, never global). */
.nx-article :where(.maplibregl-map,.nxa-map,.nxt-twin) canvas{max-width:none;filter:none}
.nx-article :where(.maplibregl-map,.nxa-map,.nxt-twin){transform:none}

/* 6. Accessibility helpers, reduced motion, print. */
.nx-sr,.nx-visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.nx-skip{position:absolute;inset-inline-start:-9999px;top:8px;z-index:100000;padding:8px 12px;background:var(--nx-primary-bg);color:var(--nx-primary-ink);border-radius:var(--nx-radius)}
.nx-skip:focus{inset-inline-start:8px}
@media (prefers-reduced-motion:reduce){body.nx-site *{scroll-behavior:auto!important}}
@media print{.nx-trust__act,.nx-switch,.nx-footline__nav,.nx-progress,.bx-color-mode-toggle{display:none!important}:root[data-nx-colours="kit"],:root[data-nx-colours="kit"] body.nx-site{background:#fff!important;color:#000!important}.site-header-wrapper{border-bottom:1px solid #000}}

/* 3.8.7-nexus.11: BuddyX Pro's reading progress as a 2px line across the top of the window, not a box in the header */
.buddyx-progress-bar{position:fixed;top:0;inset-inline:0;height:2px;z-index:100001;pointer-events:none;background:transparent}
.admin-bar .buddyx-progress-bar{top:32px}
#progressBar{-webkit-appearance:none;appearance:none;display:block;width:100%;height:2px;border:0;margin:0;background:transparent;color:var(--nx-accent,#999)}
#progressBar::-webkit-progress-bar{background:transparent}
#progressBar::-webkit-progress-value{background:linear-gradient(90deg,var(--nxd-a,var(--nx-accent)),var(--nxd-b,var(--nx-accent)))}
#progressBar::-moz-progress-bar{background:linear-gradient(90deg,var(--nxd-a,var(--nx-accent)),var(--nxd-b,var(--nx-accent)))}
/* the floating theme switch sits bottom left, clear of the help, cookie and back-to-top buttons on the right */
.nx-switch--floating{inset-inline-end:auto;inset-inline-start:16px;bottom:16px}
/* nexus.23: hidden while the consent card covers that corner */
body:has(#nexus-consent-banner:not([hidden])) .nx-switch--floating{visibility:hidden}

/* 3.8.7-nexus.13: a Nexus article package carries its own section index; BuddyX Pro's automatic table of contents is not printed above it */
.nx-entry:has(.nx-article) .bx-toc,article:has(.nx-article) .bx-toc{display:none}

/* 3.8.7-nexus.16 (owner approved 2026-10-28): on phones a long site title ran under the header icons. The BuddyX header
   row may wrap: title and tagline on their own line, the icons, Log in and Register on the next. Nothing hidden or moved
   out of the header; desktop unchanged. */
@media (max-width:767px){header#masthead.site-header{flex-wrap:wrap;row-gap:6px}header#masthead .site-branding{flex:1 1 100%;max-width:100%}header#masthead .site-title{overflow-wrap:break-word}}

/* the no-script sign-in links under the estate header (nexus-pages-header.php); they only exist inside <noscript> */
.nx-noscript-account{display:flex;gap:var(--nx-space-4);padding:var(--nx-space-2) var(--nx-gutter,var(--nx-space-4));border-block-end:1px solid var(--nx-border-hairline);background-color:var(--nx-bg-surface);font-size:var(--nx-fs-sm)}

/* form pages (nexus-forms owns the markup and its own CSS; the theme owns the page container, themes lane R-053, 2026-11-04):
   the intro card (.nxf-page) and the form (.nxf-form) share one reading width, centred inside the page's own gutters. The forms
   sheet gives them 45rem and 48rem and no shared edge, so the page container sets the width and they fill it. */
body .entry-content:has(.nxf-form, .nxf-page){max-inline-size:47.5rem;margin-inline:auto}
body .entry-content:has(.nxf-form, .nxf-page) :is(.nxn.nxf-page,.nxn.nxf-root.nxf-form,.nxn.nxf-root.nxf-status){max-inline-size:none;inline-size:100%;margin-inline:0;box-sizing:border-box}

/* the kit card (R-055; docs/estate/KIT_CARD.md): .nx-card[data-variant] in a .nx-cards--tiles grid. The article card (.nx-card
   without a variant, in the flat .nx-cards) keeps nexus-templates.css. One radius, one border, a 2px hover lift, equal heights. */
.nx-cards-wrap{container-type:inline-size}
.nx-cards.nx-cards--tiles{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--nx-space-4);margin:var(--nx-space-8) 0 0;border:0}
/* columns follow the width of the grid's wrapper, so a narrow column of a page gets one card per row and a full-width page three */
@container (min-width:35rem){.nx-cards.nx-cards--tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
@container (min-width:56rem){.nx-cards.nx-cards--tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
.nx-card[data-variant]{position:relative;display:flex;flex-direction:column;gap:var(--nx-space-2);margin:0;padding:var(--nx-space-5);min-inline-size:0;border:1px solid var(--nx-border-hairline);border-radius:var(--nx-radius);background-color:var(--nx-bg-surface);color:var(--nx-text-primary);transition:transform var(--nx-motion-fast,.15s) var(--nx-ease,ease),border-color var(--nx-motion-fast,.15s) var(--nx-ease,ease),background-color var(--nx-motion-fast,.15s) var(--nx-ease,ease)}
.nx-card[data-variant]:hover{transform:translateY(-2px);border-color:var(--nx-border-default);background-color:var(--nx-bg-elevated)}
@media (prefers-reduced-motion:reduce){.nx-card[data-variant]{transition:none}.nx-card[data-variant]:hover{transform:none}}
.nx-card[data-variant] .nx-card__head{display:flex;align-items:center;gap:var(--nx-space-2);margin:0;color:var(--nx-text-secondary);font:500 var(--nx-fs-xs)/1.3 var(--nx-font-mono);letter-spacing:.08em;text-transform:uppercase}
.nx-card[data-variant] .nx-card__head .nx-ico{inline-size:1rem;block-size:1rem;color:var(--nx-accent)}
.nx-card[data-variant] .nx-card__num{color:var(--nx-text-primary)}
.nx-card[data-variant] .nx-card__title{margin:0;font-size:var(--nx-fs-lg);line-height:1.25;font-weight:600;letter-spacing:-.01em;text-wrap:balance;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.nx-card[data-variant] .nx-card__link{color:inherit;text-decoration:none}
.nx-card[data-variant] .nx-card__link::after{content:"";position:absolute;inset:0;border-radius:inherit}
.nx-card[data-variant]:has(.nx-card__link:focus-visible){outline:2px solid var(--nx-focus);outline-offset:2px}
.nx-card[data-variant] .nx-card__purpose{margin:0;color:var(--nx-text-secondary);font-size:var(--nx-fs-sm);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nx-card[data-variant] .nx-card__stats{margin:0;color:var(--nx-text-muted);font:var(--nx-fs-xs)/1.4 var(--nx-font-mono)}
.nx-card[data-variant] .nx-card__chips{position:relative;z-index:2;display:flex;flex-wrap:wrap;gap:var(--nx-space-2);align-items:center;margin-block-start:auto;padding-block-start:var(--nx-space-2)}
.nx-card[data-variant] .nx-card__chiplist{display:contents;list-style:none;margin:0;padding:0}
.nx-card[data-variant] .nx-card__chip,.nx-card[data-variant] .nx-card__chip-more{margin:0;padding:2px var(--nx-space-2);border:1px solid var(--nx-border-hairline);border-radius:var(--nx-radius-chip);background-color:var(--nx-bg-muted);color:var(--nx-text-secondary);font-size:var(--nx-fs-xs);line-height:1.4;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-card[data-variant] .nx-card__chip-more{cursor:pointer;font-family:inherit;color:var(--nx-text-primary)}
.nx-card[data-variant] .nx-card__chip-more:focus-visible{outline:2px solid var(--nx-focus);outline-offset:2px}
.nx-card[data-variant] .nx-card__pop{position:absolute;inset-inline:0;inset-block-end:calc(100% + var(--nx-space-1));z-index:3;display:none;padding:var(--nx-space-3) var(--nx-space-4);border:1px solid var(--nx-border-default);border-radius:var(--nx-radius);background-color:var(--nx-bg-elevated);box-shadow:var(--nx-shadow);color:var(--nx-text-primary);font-size:var(--nx-fs-sm)}
.nx-card[data-variant] .nx-card__pop ul{margin:0;padding:0;list-style:none;display:grid;gap:var(--nx-space-1)}
.nx-card[data-variant] .nx-card__chip-more:is(:hover,:focus-visible)+.nx-card__pop,.nx-card[data-variant] .nx-card__chips:focus-within .nx-card__pop{display:block}

/* R-074: the public BuddyPress directories (groups, members, activity) sit in the estate's content column, level with the header and footer. The member's own screens keep the full-width console. */
body.directory.nx-community-screen #nxc-member:not(#nx-shield):not(#nx-shield):not(#nx-shield){box-sizing:border-box;max-inline-size:calc(var(--nx-wide) + 2 * var(--nx-gutter));margin-inline:auto;padding-inline:var(--nx-gutter)}
/* R-074: on phones the community filter segments keep their full labels and scroll sideways instead of squeezing into equal columns */
@media (max-width:639px){body #nxc-member:not(#nx-shield):not(#nx-shield):not(#nx-shield) .nxc-seg--filters{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:max-content;overflow-x:auto;scrollbar-width:thin}body #nxc-member:not(#nx-shield):not(#nx-shield):not(#nx-shield) .nxc-seg--filters .nx-seg__btn{white-space:nowrap;padding-inline:var(--nx-space-4)}}

/* R-076 contrast fixes (audit 2026-11-04). The skip link keeps its ink over a parent theme's link colour; the BuddyX login widget uses the page tokens in both modes. */
body a.nx-skip:not(#nx-shield),body a.nx-skip:not(#nx-shield):visited,body a.nx-skip:not(#nx-shield):hover{color:var(--nx-primary-ink);background:var(--nx-primary-bg)}
body :is(#bp-login-widget-form,.bp-login-widget-form) input:is(#bp-login-widget-user-login,#bp-login-widget-user-pass,[type=text],[type=password]):not(#nx-shield){background-color:var(--nx-bg-canvas);color:var(--nx-text-primary);border:1px solid var(--nx-border-default);border-radius:var(--nx-radius)}
body :is(#bp-login-widget-form,.bp-login-widget-form) input#bp-login-widget-submit:not(#nx-shield){background-color:var(--nx-primary-bg);color:var(--nx-primary-ink);border:1px solid var(--nx-primary-bg);border-radius:var(--nx-radius)}
/* Nexus 39 (product lane render, 2026-11-04): BuddyPress's own sub-navigation bars (profile edit, the directory filters, messages,
   the group menu) keep light borders, light glows and light field blocks in Dark. Every BuddyPress nav variant, the profile-edit
   fields and the directory filter blocks take the kit's hairlines and surfaces; no shadows (hairline cards, kit 5.1). */
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(nav,.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.subnav-filters,.dir-component-filters,.item-list-tabs,#object-nav,#subnav,.bp-messages-nav,.messages-nav,.bp-priv-nav,.bp-dir-hori-nav){border-color:var(--nx-border-hairline);box-shadow:none;outline-color:var(--nx-border-hairline)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.subnav-filters,.item-list-tabs) :is(ul,li,a,.count){border-color:var(--nx-border-hairline);box-shadow:none}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.editfield,.field-visibility-settings,.field-visibility-settings-toggle,fieldset,.bp-profile-field){background-color:transparent;border-color:var(--nx-border-hairline);color:var(--nx-text-primary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap :is(.dir-search,.bp-dir-search-form,.subnav-search,.bp-search) :is(form,input[type="search"],input[type="text"],select){border-color:var(--nx-border-hairline-strong);background-color:var(--nx-bg-surface);color:var(--nx-text-primary)}
/* bbPress on the kit's tokens (product lane render 2026-11-04: the site forum and the group forums stayed light in Dark). bbPress's
   own sheet sets #bbpress-forums rules with light literals; this block sits above them (two ids) and uses tokens only, so it is
   right in Light and Dark and in every network accent. Tables are hairline lists, never shadowed cards. */
body.nx-site #bbpress-forums:not(#nx-shield){color:var(--nx-text-primary);background:transparent}
body.nx-site #bbpress-forums:not(#nx-shield) :is(ul.bbp-forums,ul.bbp-topics,ul.bbp-replies,ul.bbp-lead-topic,ul.forums,ul.topics,.bbp-forums,.bbp-topics,.bbp-replies,div.bbp-reply-header,div.bbp-reply-content,div.bbp-reply-author,div.bbp-topic-content,ul.bbp-reply-header){border-color:var(--nx-border-hairline);background-color:transparent;color:var(--nx-text-primary);box-shadow:none}
body.nx-site #bbpress-forums:not(#nx-shield) :is(li.bbp-header,li.bbp-footer){background-color:var(--nx-bg-muted);border-color:var(--nx-border-hairline);color:var(--nx-text-secondary);font:500 var(--nx-fs-xs,.75rem)/1.4 var(--nx-font-mono,inherit);letter-spacing:.06em;text-transform:uppercase}
body.nx-site #bbpress-forums:not(#nx-shield) :is(li.bbp-body,li.bbp-body ul.forum,li.bbp-body ul.topic,div.bbp-forum-header,div.bbp-topic-header,div.bbp-reply-header){border-color:var(--nx-border-hairline);background-color:transparent}
body.nx-site #bbpress-forums:not(#nx-shield) :is(div.odd,ul.odd,div.even,ul.even,li.odd,li.even,.bbp-body .odd,.bbp-body .even){background-color:var(--nx-bg-surface);border-color:var(--nx-border-hairline);color:var(--nx-text-primary)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(div.bbp-template-notice,div.bbp-template-notice.info,div.bbp-template-notice.error,div.indicator-hint,.bbp-template-notice li){background-color:var(--nx-bg-muted);border:1px solid var(--nx-border-hairline-strong);color:var(--nx-text-primary);box-shadow:none}
body.nx-site #bbpress-forums:not(#nx-shield) :is(div.bbp-template-notice a,.bbp-forum-title,.bbp-topic-permalink,.bbp-reply-permalink,.bbp-author-name,.bbp-breadcrumb a){color:var(--nx-accent);text-decoration:underline;text-underline-offset:.2em}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.bbp-forum-info,.bbp-topic-meta,.bbp-forum-content,.bbp-topic-freshness,.bbp-forum-freshness,.bbp-topic-started-by,.bbp-meta,.bbp-forum-topic-count,.bbp-forum-reply-count,.bbp-topic-voice-count,.bbp-topic-reply-count,.bbp-author-role,.bbp-reply-post-date,.bbp-topic-post-date){color:var(--nx-text-secondary)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(fieldset.bbp-form,fieldset.bbp-form legend){background-color:transparent;border-color:var(--nx-border-hairline);color:var(--nx-text-primary)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(input[type="text"],input[type="url"],input[type="email"],input[type="password"],input[type="search"],select,textarea,.bbp-form textarea,.wp-editor-container,.wp-editor-container textarea){background-color:var(--nx-bg-surface);border:1px solid var(--nx-border-hairline-strong);border-radius:var(--nx-radius);color:var(--nx-text-primary);box-shadow:none}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.quicktags-toolbar,.wp-editor-tools,.mce-toolbar-grp,.wp-switch-editor){background-color:var(--nx-bg-muted);border-color:var(--nx-border-hairline);color:var(--nx-text-primary);box-shadow:none}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.quicktags-toolbar input.button,.wp-switch-editor){background-color:transparent;border:1px solid var(--nx-border-hairline-strong);color:var(--nx-text-primary)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(button.button,input.button,button.submit,a.button){background-color:var(--nx-primary-bg);border:1px solid var(--nx-primary-bg);border-radius:var(--nx-radius);color:var(--nx-primary-ink);text-shadow:none;box-shadow:none}
body.nx-site #bbpress-forums:not(#nx-shield) :is(button.button,input.button,button.submit,a.button):is(:hover,:focus-visible){background-color:var(--nx-primary-hover,var(--nx-primary-bg));color:var(--nx-primary-ink)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.bbp-topic-title a:focus-visible,a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible){outline:2px solid var(--nx-focus);outline-offset:2px}
body.nx-site #bbpress-forums:not(#nx-shield) :is(img.avatar){border:1px solid var(--nx-border-hairline);border-radius:var(--nx-radius);background-color:var(--nx-bg-muted)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.bbp-pagination-links a,.bbp-pagination-links span.current,div.bbp-breadcrumb){border-color:var(--nx-border-hairline-strong);background-color:transparent;color:var(--nx-text-primary)}
body.nx-site #bbpress-forums:not(#nx-shield) .bbp-pagination-links span.current{background-color:var(--nx-bg-muted)}
body.nx-site #bbpress-forums:not(#nx-shield) :is(.status-closed,.sticky,.super-sticky,.bbp-topic-status){border-color:var(--nx-border-hairline);background-color:var(--nx-bg-muted)}
/* The accessibility dock publishes its width (--nexus-dock-w, nexus-accessibility). A BuddyPress member or group page keeps its
   content, and above all the group menu, clear of the dock's start edge: the larger of the page gutter and the dock plus 12 px
   (the floating-controls rule, docs/estate/LANDING_KIT.md). No effect where the dock is not drawn. */
body.nx-site:is(.buddypress,.bp-user,.bp-single-item,.groups,.group-home,.single-item) :is(main#main,#primary,.nx-main,.page-container){padding-inline-start:max(var(--nx-gutter,1rem),calc(var(--nexus-dock-w,0px) + var(--nx-space-3,.75rem)))}
/* bbPress: room under the estate header, and the search field and its button one height (both 36 px, border-box). */
body.nx-site #bbpress-forums:not(#nx-shield){padding-block-start:var(--nx-space-6,1.5rem)}
body.nx-site #bbp-search-form:not(#nx-shield){display:flex;align-items:stretch;gap:var(--nx-space-2,.5rem);justify-content:flex-end}
body.nx-site #bbp-search-form:not(#nx-shield) :is(input[type="text"],input[type="search"],input.button,button){box-sizing:border-box;block-size:2.25rem;min-block-size:2.25rem;margin:0;padding-block:0;padding-inline:var(--nx-space-3,.75rem);font:400 var(--nx-fs-sm,.875rem)/1 var(--nx-font-sans,inherit)}
body.nx-site #bbp-search-form:not(#nx-shield) :is(input.button,button){display:inline-flex;align-items:center;justify-content:center;font-weight:500}
/* BuddyPress sub-navigation as the estate's underline tabs (owner 2026-11-04: "what the fuc is this border and style"). Every variant
   BuddyPress and its themes print: .bp-subnavs, #subnav, .item-list-tabs, .bp-navs, .main-navs, .sub-navs, #object-nav,
   .bp-priority-subnav-nav-items, .bp-priority-object-nav-nav-items, .bp-dir-hori-nav nav, the messages and friends bars.
   No box, no border, no shadow, no glow: one hairline under the row, our type, the accent underline on the current item only. */
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav,.bp-dir-hori-nav>nav,nav.bp-navs,nav.bp-subnavs){margin:0;padding:0;border:0;border-block-end:1px solid var(--nx-border-hairline);border-radius:0;background:transparent;box-shadow:none;outline:0;filter:none}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) ul{display:flex;flex-wrap:wrap;gap:0;margin:0;padding:0;list-style:none;border:0;background:transparent;box-shadow:none}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li{float:none;margin:0;padding:0;border:0;background:transparent;box-shadow:none}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li>a{display:inline-flex;align-items:center;gap:.5rem;box-sizing:border-box;min-block-size:2.75rem;margin:0 0 -1px;padding:0 var(--nx-space-4,1rem);border:0;border-block-end:2px solid transparent;border-radius:0;background:transparent;box-shadow:none;color:var(--nx-text-secondary);font:500 var(--nx-fs-sm,.875rem)/1.2 var(--nx-font-sans,inherit);letter-spacing:0;text-decoration:none;text-transform:none;transition:color var(--nx-motion-fast,150ms) var(--nx-ease-out,ease-out),border-color var(--nx-motion-fast,150ms) var(--nx-ease-out,ease-out)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li>a:is(:hover,:focus-visible){background:transparent;box-shadow:none;color:var(--nx-text-primary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li:is(.current,.selected,.current-menu-item)>a,
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li>a[aria-current]{background:transparent;box-shadow:none;border-block-end-color:var(--nx-accent);color:var(--nx-text-primary)}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) li>a:focus-visible{outline:2px solid var(--nx-focus);outline-offset:-2px}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.main-navs,.bp-navs,.bp-subnavs,.sub-navs,.item-list-tabs,#object-nav,#subnav,.bp-priority-subnav-nav-items,.bp-priority-object-nav-nav-items,.bp-messages-nav,.messages-nav,.bp-priv-nav) :is(.count,span.count){min-inline-size:1.25rem;padding:0 .25rem;border:1px solid var(--nx-border-hairline);border-radius:var(--nx-radius);background:transparent;box-shadow:none;color:var(--nx-text-muted);font:500 var(--nx-fs-xs,.75rem)/1.2 var(--nx-font-mono,inherit);font-variant-numeric:tabular-nums;text-align:center}
:root[data-nx-colours="kit"] body.nx-site .buddypress-wrap:not(#nx-shield) :is(.bp-priority-nav-more,.hidden-items,ul.hidden-items){background-color:var(--nx-bg-elevated);border:1px solid var(--nx-border-hairline-strong);border-radius:var(--nx-radius);box-shadow:none}
/* the plugin's own in-page sub-tabs (View, Edit, Change profile photo): the row keeps its hairline under it and drops the one above */
body #nxc-member:not(#nx-shield):not(#nx-shield) .nxc-tabs{border-block-start:0;border-radius:0;background:transparent;box-shadow:none}
body #nxc-member:not(#nx-shield):not(#nx-shield) .nxc-tabs__item{text-transform:none;letter-spacing:0}
body #nxc-member:not(#nx-shield):not(#nx-shield) .nxc-tabs__item{position:relative}
body #nxc-member:not(#nx-shield):not(#nx-shield) .nxc-tabs__item[aria-current]{color:var(--nx-text-primary)}
/* the plugin zeroes its tab borders with !important, so the accent underline is a pseudo-element on the current tab */
body #nxc-member:not(#nx-shield):not(#nx-shield) .nxc-tabs__item[aria-current]::after{content:"";position:absolute;inset-inline:0;inset-block-end:-1px;block-size:2px;background-color:var(--nx-accent)}

/* The language switch mounted in the header, drawer and footer slots (hosting lead 2026-11-05). nexus-translate owns the markup
   (details.nxtr-sw > summary.nxtr-sw-btn > span.nxtr-sw-cur, ul.nxtr-sw-list > li > a.nxtr-sw-link); the theme owns how it looks in the
   estate: in the header a quiet chip with a globe and the current language as its 2-letter code (nexus-lang-slots.js sets data-code),
   in the drawer a full-width row, in the footer the same chip opening upward. Native names in the menu, the current language marked,
   logical properties (RTL mirrors), tokens only, 5px and 2px corners, keyboard (it is a details element), forced colours. */
[data-nx-lang-slot] .nxtr-sw { position: relative; display: inline-block; font: 500 13px/1 var(--nx-font-sans, inherit); color: var(--nx-text-secondary); }
[data-nx-lang-slot] .nxtr-sw-btn { list-style: none; display: inline-flex; align-items: center; gap: .375rem; block-size: 2rem; min-block-size: 2rem; min-inline-size: 0; padding-inline: .5rem .5625rem; border: 0; border-radius: var(--nx-radius-sm, 2px); background: var(--nx-surface-2, var(--nx-bg-muted)); color: inherit; cursor: pointer; }
[data-nx-lang-slot] .nxtr-sw-btn::-webkit-details-marker { display: none; }
[data-nx-lang-slot] .nxtr-sw-btn::before { content: ""; inline-size: 14px; block-size: 14px; flex: none; background: currentColor; -webkit-mask: var(--nx-globe) center / contain no-repeat; mask: var(--nx-globe) center / contain no-repeat; --nx-globe: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18M12 3c3 3 3 15 0 18M12 3c-3 3-3 15 0 18'/%3E%3C/svg%3E"); }
[data-nx-lang-slot] .nxtr-sw-btn::after { inline-size: .4em; block-size: .4em; opacity: .7; }
/* the plugin draws the chevron from its inline-end and block-end borders turned 45 degrees: on the start side it points sideways, so the turn is mirrored there */
[dir="rtl"] [data-nx-lang-slot] .nxtr-sw-btn::after { transform: rotate(-45deg) translateY(-2px); }
[dir="rtl"] [data-nx-lang-slot] .nxtr-sw[open] > .nxtr-sw-btn::after { transform: rotate(135deg); }
[data-nx-lang-slot] .nxtr-sw-btn:hover, [data-nx-lang-slot] .nxtr-sw[open] > .nxtr-sw-btn { background: var(--nx-bg-hover); color: var(--nx-text-primary); }
[data-nx-lang-slot] .nxtr-sw-btn:focus-visible, [data-nx-lang-slot] .nxtr-sw-link:focus-visible { outline: 2px solid var(--nx-focus, var(--nx-accent)); outline-offset: 2px; }
/* header and footer: the code, not the name (the name stays in the menu and in the button's accessible text) */
[data-nx-lang-slot="header"] .nxtr-sw-cur, [data-nx-lang-slot="footer"] .nxtr-sw-cur { font-size: 0; }
[data-nx-lang-slot="header"] .nxtr-sw-cur::after, [data-nx-lang-slot="footer"] .nxtr-sw-cur::after { content: attr(data-code); font-size: 12.5px; letter-spacing: .06em; text-transform: uppercase; font-variant-numeric: tabular-nums; }
[data-nx-lang-slot] .nxtr-sw-list { position: absolute; inset-inline-end: 0; inset-block-start: calc(100% + .375rem); z-index: 70; min-inline-size: 13rem; max-block-size: 60vh; overflow: auto; margin: 0; padding: .25rem; list-style: none; background: var(--nx-bg-elevated, var(--nx-bg-surface)); color: var(--nx-text-primary); border: 1px solid var(--nx-border-hairline-strong); border-radius: var(--nx-radius, 5px); }
[data-nx-lang-slot] .nxtr-sw-link { display: flex; align-items: center; min-block-size: 2.25rem; padding-inline: .625rem; border-radius: var(--nx-radius-sm, 2px); color: var(--nx-text-secondary); font-size: 13.5px; text-decoration: none; }
[data-nx-lang-slot] .nxtr-sw-link:hover { background: var(--nx-bg-hover); color: var(--nx-text-primary); }
[data-nx-lang-slot] .nxtr-sw-link[aria-current="true"] { color: var(--nx-text-primary); font-weight: 600; text-decoration: none; box-shadow: inset 2px 0 0 var(--nx-accent); }
[dir="rtl"] [data-nx-lang-slot] .nxtr-sw-link[aria-current="true"] { box-shadow: inset -2px 0 0 var(--nx-accent); }
[data-nx-lang-slot] .nxtr-sw-help { border-block-start: 1px solid var(--nx-border-hairline); margin-block-start: .25rem; padding-block-start: .25rem; }
[data-nx-lang-slot] .nxtr-sw-help .nxtr-sw-link { color: var(--nx-text-muted); font-size: 12.5px; }
[data-nx-lang-slot="footer"] .nxtr-sw-list { inset-block-start: auto; inset-block-end: calc(100% + .375rem); inset-inline-end: auto; inset-inline-start: 0; }
[data-nx-lang-slot="drawer"] .nxtr-sw { display: block; }
[data-nx-lang-slot="drawer"] .nxtr-sw-btn { inline-size: 100%; block-size: 2.75rem; justify-content: space-between; }
[data-nx-lang-slot="drawer"] .nxtr-sw-list { position: static; margin-block-start: .375rem; max-block-size: 40vh; inset-inline-end: auto; }
/* Ohio keeps its own header on some pages: the slot is a list item in its icon row, and a row of the slide-in menu */
li.icon-button-holder[data-nx-lang-slot="header"] { display: inline-flex; align-items: center; }
.nx-lang-drawer[data-nx-lang-slot="drawer"] { padding: var(--nx-space-4, 1rem) var(--nx-gutter); }
@media (forced-colors: active) { [data-nx-lang-slot] .nxtr-sw-btn, [data-nx-lang-slot] .nxtr-sw-list { border: 1px solid CanvasText; background: Canvas; color: CanvasText; } [data-nx-lang-slot] .nxtr-sw-btn::before { background: CanvasText; } }

/* A page that prints its own <main> after an overlay theme header (Ohio header-4 is position:absolute, 101 to 108px tall) starts below
   it: the translate site page and any page that adds .nx-below-header. Pages drawn in the estate frame are not affected. */
body.nx-site:not(:has(nexus-header[data-nxh])) :is(main#main.nxtr-site-main, main#main.nx-below-header) { padding-block-start: calc(7rem + var(--nx-space-6, 1.5rem)); }
body.nx-site:has(nexus-header[data-nxh]) :is(main#main.nxtr-site-main, main#main.nx-below-header) { padding-block-start: var(--nx-space-8, 2rem); }

/* The floating dock and switch keep a safe inset from the window edge (notches, rounded corners, scrollbars on the start side). */
@media (min-width: 40rem) {
	body.nx-site :is(.nxd, .nx-switch--floating) { inset-inline-start: max(12px, env(safe-area-inset-left, 0px)); }
}

/* Ohio hover fix (themes lane 2026-11-05): the parent's animated link underline
   (.links-underline a:hover, a gradient background-image of currentcolor) filled the whole box of any link that is a button, a
   chip or a help control, so the label vanished on hover. The underline is replaced by a plain one on text links only, and
   never on a control. The cursor follower (.circle-cursor) is never shown: it sat over the label it was following. */
body.nx-site .links-underline a:not(.button):not(.tag):not(.-undash):hover { animation: none; background-image: none; }
body.nx-site .links-underline a:not(.button):not(.tag):not(.-undash):not(.nx-btn):not(.nxl-btn):not(.nx-chip):not(.nxtr-help):not([class*="btn"]):hover { text-decoration: underline; text-underline-offset: .2em; }
body.nx-site .circle-cursor { display: none !important; }

/* Header menu hover and focus take the institution accent token, which is contrast-tested on both modes. Ohio's own hover
   colour is the customizer accent (a fixed red on every site), 3.7 to 4.2:1 on the dark header (hover audit, 2026-11-05). */
body.nx-site .menu-link:is(:hover, :focus-visible), body.nx-site .menu-link:is(:hover, :focus-visible) .text { color: var(--nx-accent); }
