/*
 * The community hub (nexus-community Ui\Hub; docs/estate/OWNER_DESIGN_ACCEPTANCE.md). Layout only: the parts are the
 * theme's shared components (nx-btn, nx-stat, nx-row, nx-chip, nx-pulse) and every value is a shared --nx-* token, with no
 * private namespace and no colour literal. The site container (--nx-wide, --nx-gutter), full width like every page.
 * Mobile-first, logical properties (RTL), hairlines, corners 5px or less, chips 2px, no pattern, no shadow.
 */
.nxh:not(#nx-shield):not(#nx-shield) { padding-block-end: var(--nx-space-16, 64px); color: var(--nx-text-secondary); font-family: var(--nx-font-sans); }
.nxh > *:not(#nx-shield):not(#nx-shield) { max-inline-size: var(--nx-wide, 1180px); margin-inline: auto; padding-inline: var(--nx-gutter, 16px); box-sizing: content-box; }
.nxh *:not(#nx-shield):not(#nx-shield), .nxh *:not(#nx-shield):not(#nx-shield)::before, .nxh *:not(#nx-shield):not(#nx-shield)::after { box-sizing: border-box; }
.nxh-sr:not(#nx-shield):not(#nx-shield) { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.nxh a:not(.nx-btn):not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); text-underline-offset: .2em; }
/* Buttons keep their own ink in every state: the build's shield raises the hub's rules above the theme's, so the hub states the
   shared button tokens itself (build31 P0: a link colour rule made "Sign in to take part" black on black). */
.nxh a.nx-btn[data-variant="primary"]:not(#nx-shield):not(#nx-shield), .nxh a.nx-btn[data-variant="primary"]:visited:not(#nx-shield):not(#nx-shield), .nxh button.nx-btn[data-variant="primary"]:not(#nx-shield):not(#nx-shield) { background: var(--nx-primary-bg); border-color: var(--nx-primary-bg); color: var(--nx-primary-ink); }
.nxh a.nx-btn[data-variant="primary"]:hover:not(#nx-shield):not(#nx-shield), .nxh button.nx-btn[data-variant="primary"]:hover:not(#nx-shield):not(#nx-shield) { background: var(--nx-primary-hover, var(--nx-primary-bg)); color: var(--nx-primary-ink); }
.nxh a.nx-btn[data-variant="primary"]:active:not(#nx-shield):not(#nx-shield), .nxh button.nx-btn[data-variant="primary"]:active:not(#nx-shield):not(#nx-shield) { background: var(--nx-primary-active, var(--nx-primary-bg)); color: var(--nx-primary-ink); }
/* A theme's link colour never reaches the hub's controls: the secondary button and the navigation keep the text ink. */
.nxh a.nx-btn[data-variant="secondary"]:not(#nx-shield):not(#nx-shield), .nxh a.nx-btn[data-variant="secondary"]:visited:not(#nx-shield):not(#nx-shield), .nxh a.nx-btn[data-variant="secondary"]:hover:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); }
.nxh a.nxh-nav__link:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-secondary); }

/* Hero: the words and the tools on the left, the live visual on the right; a clean surface, no pattern. */
.nxh-hero:not(#nx-shield):not(#nx-shield) { display: grid; gap: var(--nx-space-8, 32px); padding-block: var(--nx-space-10, 40px) var(--nx-space-6, 24px); }
.nxh-eyebrow:not(#nx-shield):not(#nx-shield) { margin: 0 0 var(--nx-space-3, 12px); font: var(--nx-w-medium, 500) var(--nx-t-eyebrow, 11px)/1.2 var(--nx-font-mono); letter-spacing: var(--nx-track-eyebrow, .06em); text-transform: uppercase; color: var(--nx-text-muted); }
.nxh-title:not(#nx-shield):not(#nx-shield) { margin: 0; color: var(--nx-text-primary); font: var(--nx-w-strong, 600) var(--nx-fs-display, 48px)/var(--nx-lh-title, 1.1) var(--nx-font-sans); letter-spacing: -.02em; }
.nxh-lede:not(#nx-shield):not(#nx-shield) { margin: var(--nx-space-4, 16px) 0 0; max-inline-size: var(--nx-content, 72ch); font-size: var(--nx-fs-md, 18px); line-height: 1.5; }
.nxh-actions:not(#nx-shield):not(#nx-shield) { display: flex; flex-wrap: wrap; gap: var(--nx-space-3, 12px); margin-block-start: var(--nx-space-6, 24px); }
.nxh .nx-btn:not(#nx-shield):not(#nx-shield) { min-block-size: 44px; block-size: auto; padding-inline: var(--nx-space-5, 20px); text-decoration: none; }

.nxh-search:not(#nx-shield):not(#nx-shield) { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--nx-space-2, 8px); margin-block-start: var(--nx-space-6, 24px); }
.nxh-search__field:not(#nx-shield):not(#nx-shield) { position: relative; display: block; min-inline-size: 0; margin: 0 !important; line-height: 0; }
.nxh-search__field > svg:not(#nx-shield):not(#nx-shield) { position: absolute; inset-inline-start: 14px; inset-block-start: 50%; transform: translateY(-50%); color: var(--nx-text-muted); pointer-events: none; }
.nxh input.nxh-search__input[type="search"]:not(#nx-shield):not(#nx-shield) {
	display: block;
	inline-size: 100%;
	block-size: 48px !important; /* a theme's own field rules never win here */
	margin: 0 !important;
	padding-block: 0 !important;
	padding-inline: 44px 16px !important;
	border: 1px solid var(--nx-border-hairline-strong);
	border-radius: var(--nx-radius, 5px);
	background: var(--nx-bg-surface);
	color: var(--nx-text-primary);
	font: 400 var(--nx-fs-base, 16px)/1 var(--nx-font-sans);
	box-shadow: none;
}
.nxh .nxh-search__go:not(#nx-shield):not(#nx-shield) { block-size: 48px; min-block-size: 48px; margin: 0 !important; }
.nxh-search__field .nxc-suggest:not(#nx-shield):not(#nx-shield) { inset-inline: 0; }

/* The live visual: the 12-week pulse and the consortium strip. */
.nxh-visual:not(#nx-shield):not(#nx-shield) { display: grid; gap: var(--nx-space-6, 24px); align-content: start; }
.nxh-visual__label:not(#nx-shield):not(#nx-shield) { margin: 0 0 var(--nx-space-2, 8px); font-size: var(--nx-t-meta, 12px); font-weight: var(--nx-w-medium, 500); color: var(--nx-text-muted); }
.nxh-pulse:not(#nx-shield):not(#nx-shield) { margin: 0; }
.nxh-net ul:not(#nx-shield):not(#nx-shield) { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; border-block-start: 1px solid var(--nx-border-hairline); }
.nxh-net li:not(#nx-shield):not(#nx-shield) { border-block-end: 1px solid var(--nx-border-hairline); }
.nxh-net__link:not(#nx-shield):not(#nx-shield) { display: grid; grid-template-columns: 10px minmax(0, auto) minmax(0, 1fr); align-items: center; column-gap: var(--nx-space-3, 12px); min-block-size: 44px; text-decoration: none; }
.nxh-net__mark:not(#nx-shield):not(#nx-shield) { inline-size: 6px; block-size: 6px; border-radius: 2px; background: var(--nx-border-hairline-strong); }
.nxh-net__link[aria-current] .nxh-net__mark:not(#nx-shield):not(#nx-shield) { background: var(--nx-text-primary); }
.nxh-net__name:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); font-size: var(--nx-t-row, 15px); font-weight: var(--nx-w-medium, 500); white-space: nowrap; }
.nxh-net__what:not(#nx-shield):not(#nx-shield) { overflow: hidden; color: var(--nx-text-muted); font-size: var(--nx-t-meta, 12px); text-overflow: ellipsis; white-space: nowrap; }
.nxh-net__link:hover .nxh-net__name:not(#nx-shield):not(#nx-shield) { text-decoration: underline; }

/* The ruled grid (stat row, Start here, How it works): no card boxes. Each cell rules its own end and bottom edge in the 1px
   gap (the outer ones are clipped), so an empty grid cell stays the page itself. Solid --nx-border-subtle, the hairline's
   opaque twin, so crossings never darken. RTL mirrors. */
.nxh-ruled:not(#nx-shield):not(#nx-shield) { display: grid; gap: 1px; grid-template-columns: minmax(0, 1fr); margin: 0; padding: 0; list-style: none; overflow: hidden; border-block: 1px solid var(--nx-border-subtle); }
.nxh-ruled > *:not(#nx-shield):not(#nx-shield) { display: grid; gap: var(--nx-space-2, 8px); align-content: start; min-inline-size: 0; margin: 0; padding: var(--nx-space-5, 20px) var(--nx-space-4, 16px); box-shadow: 1px 0 0 0 var(--nx-border-subtle), 0 1px 0 0 var(--nx-border-subtle), 1px 1px 0 0 var(--nx-border-subtle); }
[dir="rtl"] .nxh-ruled > *:not(#nx-shield):not(#nx-shield) { box-shadow: -1px 0 0 0 var(--nx-border-subtle), 0 1px 0 0 var(--nx-border-subtle), -1px 1px 0 0 var(--nx-border-subtle); }
.nxh-eyebrow2:not(#nx-shield):not(#nx-shield) { display: flex; align-items: center; gap: var(--nx-space-2, 8px); margin-block-end: var(--nx-space-1, 4px); font: var(--nx-w-medium, 500) var(--nx-t-eyebrow, 11px)/1.2 var(--nx-font-mono); letter-spacing: var(--nx-track-eyebrow, .06em); text-transform: uppercase; color: var(--nx-text-muted); }
.nxh-eyebrow2__n:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); }
.nxh-eyebrow2 svg:not(#nx-shield):not(#nx-shield) { flex: none; inline-size: 14px; block-size: 14px; }
.nxh a.nxh-act:not(#nx-shield):not(#nx-shield) { justify-self: start; display: inline-block; padding-block: 12px; line-height: 20px; color: var(--nx-text-primary); font-size: var(--nx-t-body, 14px); font-weight: var(--nx-w-strong, 600); text-decoration: none; }
.nxh-ruled > .nxh-start__item:not(#nx-shield):not(#nx-shield) { display: flex; flex-direction: column; align-items: flex-start; }
.nxh-start__item > .nxh-act:not(#nx-shield):not(#nx-shield) { margin-block-start: auto; }
.nxh a.nxh-act:hover:not(#nx-shield):not(#nx-shield) { text-decoration: underline; }
.nxh a.nxh-act:focus-visible:not(#nx-shield):not(#nx-shield) { outline: 2px solid var(--nx-focus); outline-offset: 2px; }

/* The numbers: the ruled grid, two per row on a phone. A count under 5 is left out: an action line takes its place. */
.nxh-statband:not(#nx-shield):not(#nx-shield) { padding-block-end: var(--nx-space-6, 24px); }
.nxh-stats.nxh-ruled:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.nxh-stats.nxh-ruled > *:not(#nx-shield):not(#nx-shield) { padding: var(--nx-space-4, 16px); }
.nxh-stats > :last-child:nth-child(odd):not(#nx-shield):not(#nx-shield) { grid-column: 1 / -1; }
.nxh-stats .nx-stat__label:not(#nx-shield):not(#nx-shield) { margin: 0; font-size: var(--nx-t-meta, 12px); font-weight: var(--nx-w-medium, 500); color: var(--nx-text-muted); }
.nxh-stat__body:not(#nx-shield):not(#nx-shield) { margin: 0; }
.nxh-stats .nx-stat__value:not(#nx-shield):not(#nx-shield) { display: block; color: var(--nx-text-primary); font: var(--nx-w-strong, 600) var(--nx-fs-xl, 28px)/1.1 var(--nx-font-sans); font-variant-numeric: tabular-nums; }
.nxh-stat__link:not(#nx-shield):not(#nx-shield) { text-decoration: none; }
.nxh-stat__link:hover .nx-stat__value:not(#nx-shield):not(#nx-shield) { text-decoration: underline; }
.nxh a.nxh-stat__act:not(#nx-shield):not(#nx-shield), .nxh-stat__act:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); font-size: var(--nx-t-body, 14px); font-weight: var(--nx-w-medium, 500); line-height: 1.4; text-decoration: none; }
.nxh a.nxh-stat__act:hover:not(#nx-shield):not(#nx-shield) { text-decoration: underline; }
.nxh-stat__act:focus-visible:not(#nx-shield):not(#nx-shield), .nxh-stat__link:focus-visible:not(#nx-shield):not(#nx-shield) { outline: 2px solid var(--nx-focus); outline-offset: 2px; }

/* Community navigation: one row, swipes on a phone, counts as chips. */
.nxh-nav ul:not(#nx-shield):not(#nx-shield) { border-block: 1px solid var(--nx-border-hairline); display: flex; gap: var(--nx-space-1, 4px); margin: 0; padding: 0; list-style: none; overflow-x: auto; scrollbar-width: none; }
.nxh-nav ul:not(#nx-shield):not(#nx-shield)::-webkit-scrollbar { display: none; }
.nxh-nav li:not(#nx-shield):not(#nx-shield) { flex: none; }
.nxh-nav__link:not(#nx-shield):not(#nx-shield) { display: inline-flex; align-items: center; gap: var(--nx-space-2, 8px); min-block-size: 48px; padding-inline: var(--nx-space-3, 12px); border-block-end: 2px solid transparent; color: var(--nx-text-secondary); font-size: var(--nx-t-row, 15px); font-weight: var(--nx-w-medium, 500); text-decoration: none; white-space: nowrap; transition: border-color var(--nx-motion-fast, 150ms) var(--nx-ease, ease); }
.nxh .nxh-nav__link:hover:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); border-block-end-color: var(--nx-text-primary); }
.nxh-nav__link svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-muted); }

/* Bands */
.nxh-band:not(#nx-shield):not(#nx-shield) { padding-block-start: var(--nx-space-12, 48px); }
.nxh-h2:not(#nx-shield):not(#nx-shield) { margin: 0 0 var(--nx-space-4, 16px); color: var(--nx-text-primary); font: var(--nx-w-strong, 600) var(--nx-t-section, 20px)/1.25 var(--nx-font-sans); }
.nxh h3.nxh-h3:not(#nx-shield):not(#nx-shield), .nxh-h3:not(#nx-shield):not(#nx-shield) { margin: 0; color: var(--nx-text-primary); font: var(--nx-w-strong, 600) var(--nx-fs-base, 16px)/1.3 var(--nx-font-sans); }
.nxh p.nxh-muted:not(#nx-shield):not(#nx-shield), .nxh-muted:not(#nx-shield):not(#nx-shield) { margin: 0; color: var(--nx-text-muted); font-size: var(--nx-t-body, 14px); }
.nxh-rows:not(#nx-shield):not(#nx-shield) { margin: 0; padding: 0; list-style: none; }
.nxh-rows > .nx-row + .nx-row:not(#nx-shield):not(#nx-shield) { border-block-start: 1px solid var(--nx-border-hairline); }
.nxh .nx-row__title a:not(#nx-shield):not(#nx-shield) { color: var(--nx-text-primary); text-decoration: none; }
.nxh .nx-row__title a:hover:not(#nx-shield):not(#nx-shield) { text-decoration: underline; }
.nxh .nx-row__title:not(#nx-shield):not(#nx-shield) { display: flex; align-items: center; gap: var(--nx-space-2, 8px); }
.nxh .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { flex: none; }
.nxh-initials:not(#nx-shield):not(#nx-shield) { flex: none; display: inline-grid; place-items: center; inline-size: 24px; block-size: 24px; border-radius: var(--nx-radius-chip, 2px); background: var(--nx-bg-elevated); color: var(--nx-text-secondary); font-size: 11px; font-weight: var(--nx-w-strong, 600); }

/* What is happening: the feed and its side panels, each at its own height. */
.nxh-now:not(#nx-shield):not(#nx-shield) { display: grid; gap: var(--nx-space-4, 16px); align-items: start; }
.nxh-side:not(#nx-shield):not(#nx-shield) { display: grid; gap: var(--nx-space-4, 16px); align-content: start; }
/* Panels are ruled lists, not boxed cards: a rule above the heading, rows ruled between them, no frame, no fill. */
.nxh-panel:not(#nx-shield):not(#nx-shield) { padding: var(--nx-space-4, 16px) 0 0; border: 0; border-block-start: 1px solid var(--nx-border-subtle); border-radius: 0; background: none; }
.nxh-panel__line:not(#nx-shield):not(#nx-shield) { margin: 0; }
.nxh-panel__head:not(#nx-shield):not(#nx-shield) { display: flex; flex-wrap: wrap; align-items: center; gap: var(--nx-space-3, 12px); margin-block-end: var(--nx-space-3, 12px); }
.nxh-panel__more:not(#nx-shield):not(#nx-shield) { margin-inline-start: auto; font-size: var(--nx-t-body, 14px); color: var(--nx-text-secondary); }
.nxh-seg:not(#nx-shield):not(#nx-shield) { display: inline-flex; flex-wrap: wrap; border: 1px solid var(--nx-border-hairline-strong); border-radius: var(--nx-radius, 5px); overflow: hidden; }
.nxh-seg__btn:not(#nx-shield):not(#nx-shield) { min-block-size: 32px; padding: 0 var(--nx-space-3, 12px); border: 0; border-inline-end: 1px solid var(--nx-border-hairline); background: transparent; color: var(--nx-text-secondary); font: var(--nx-w-medium, 500) var(--nx-t-meta, 12px)/1 var(--nx-font-sans); cursor: pointer; }
.nxh-seg__btn:last-child:not(#nx-shield):not(#nx-shield) { border-inline-end: 0; }
.nxh-seg__btn[aria-pressed="true"]:not(#nx-shield):not(#nx-shield) { background: var(--nx-text-primary); color: var(--nx-bg-canvas); }
.nxh-seg__btn:focus-visible:not(#nx-shield):not(#nx-shield), .nxh-nav__link:focus-visible:not(#nx-shield):not(#nx-shield), .nxh-net__link:focus-visible:not(#nx-shield):not(#nx-shield) { outline: 2px solid var(--nx-focus); outline-offset: 2px; }
.nxh [data-nxh-feed] > [hidden]:not(#nx-shield):not(#nx-shield) { display: none; }

/* Start here: one row of actions. */
.nxh-keys:not(#nx-shield):not(#nx-shield) { margin-block-start: var(--nx-space-4, 16px); font-size: var(--nx-t-body, 14px); color: var(--nx-text-muted); }
.nxh-keys summary:not(#nx-shield):not(#nx-shield) { cursor: pointer; }
.nxh-keys dl:not(#nx-shield):not(#nx-shield) { display: flex; flex-wrap: wrap; gap: var(--nx-space-2, 8px) var(--nx-space-5, 20px); margin: var(--nx-space-3, 12px) 0 0; }
.nxh-keys dl > div:not(#nx-shield):not(#nx-shield) { display: flex; gap: var(--nx-space-2, 8px); align-items: center; }
.nxh-keys dt:not(#nx-shield):not(#nx-shield), .nxh-keys dd:not(#nx-shield):not(#nx-shield) { margin: 0; }
.nxh-keys kbd:not(#nx-shield):not(#nx-shield) { display: inline-grid; place-items: center; min-inline-size: 24px; block-size: 24px; padding: 0 6px; border: 1px solid var(--nx-border-hairline-strong); border-radius: var(--nx-radius-chip, 2px); font: var(--nx-w-medium, 500) var(--nx-t-meta, 12px)/1 var(--nx-font-mono); color: var(--nx-text-primary); }

@media (min-width: 48em) {
	.nxh-stats.nxh-ruled:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.nxh-stats > :last-child:nth-child(odd):not(#nx-shield):not(#nx-shield) { grid-column: auto; }
	.nxh-start.nxh-ruled:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
	.nxh-steps.nxh-ruled:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 64em) {
	.nxh-hero:not(#nx-shield):not(#nx-shield) { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); column-gap: var(--nx-space-12, 48px); align-items: start; }
	.nxh-now:not(#nx-shield):not(#nx-shield) { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); }
	.nxh-now--side:not(#nx-shield):not(#nx-shield), .nxh-now--feed:not(#nx-shield):not(#nx-shield) { grid-template-columns: minmax(0, 1fr); }
	.nxh-now--side .nxh-side:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr)); }
}
@media (prefers-reduced-motion: reduce) {
	.nxh-nav__link:not(#nx-shield):not(#nx-shield) { transition: none; }
}

/* Type colour: the theme's shared category tokens, on the icon only (text keeps the ink); a near deadline uses the
   shared chip's warning mark (nx-chip[data-tone="warning"]). */
.nxh .nx-row[data-type="question"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield), .nxh .nx-row[data-type="discussion"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-discuss-from); }
.nxh .nx-row[data-type="idea"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-learn-from); }
.nxh .nx-row[data-type="proposal"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-decide-from); }
.nxh .nx-row[data-type="call"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-declare-from); }
.nxh .nx-row[data-type="review"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-review-from); }
.nxh .nx-row[data-type="project"] .nx-row__kind svg:not(#nx-shield):not(#nx-shield) { color: var(--nx-cat-data-from); }
.nxh-arrow:not(#nx-shield):not(#nx-shield) { display: inline-block; }
.nxh-nowrap:not(#nx-shield):not(#nx-shield) { white-space: nowrap; }
[dir="rtl"] .nxh-arrow:not(#nx-shield):not(#nx-shield) { transform: scaleX(-1); } /* the arrow points the way the line reads */

/* The numbers at full width: every cell on one row from 80em (1280px); 3 per row below, 2 on phones. */
@media (min-width: 80em) {
	.nxh-stats.nxh-ruled:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(6, minmax(0, 1fr)); }
	.nxh-stats.nxh-ruled[data-n="5"]:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(5, minmax(0, 1fr)); }
	.nxh-stats.nxh-ruled[data-n="4"]:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.nxh-stats.nxh-ruled[data-n="3"]:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* Start here: every cell on one row from 64em (4 or 5 cells). */
@media (min-width: 64em) {
	.nxh-start.nxh-ruled[data-n="4"]:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.nxh-start.nxh-ruled[data-n="5"]:not(#nx-shield):not(#nx-shield) { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
