/* Nexus Access screens, in the estate chrome. 1.9.0 (owner 2026-11-09): the frontier sign-in. One centred narrow
   column on a calm background, the site's mark at the top and one heading; providers first as full-width quiet buttons,
   "or", then one large email field with a subtle fill and "Continue"; the password or an email link on the same card.
   No side panel, no boxed card, no bordered box, square corners (the estate rule). The --nx-* tokens of the estate
   (nexus-chrome.css and the theme's tokens) come first, the same values as fallbacks when a theme does not load them;
   IBM Plex Sans and Mono; light and dark through html[data-theme], as the estate prepaint resolves it; logical
   properties only, so right-to-left mirrors by construction; sizes in rem and em, so Readabler's font size, spacing and
   readable-font settings scale everything. The theme's header and footer stay around it. Contrast of every text pair
   is at least 4.5:1 (WCAG 2.2 AA); targets are 44px tall. */
/* Dark by default (R-076); light when html[data-theme] says so. */
.nxa-shell {
	--nxa-canvas: var(--nx-bg-canvas, var(--nxc-canvas, #000000));
	--nxa-elevated: var(--nx-bg-elevated, var(--nxc-elevated, #111111));
	--nxa-surface: var(--nx-bg-surface, var(--nxc-elevated, #111111));
	--nxa-hover: var(--nx-bg-hover, var(--nxc-hover, #1a1a1a));
	--nxa-line: var(--nx-border-hairline, var(--nxc-line, rgba(255, 255, 255, .10)));
	--nxa-line-strong: var(--nx-border-hairline-strong, var(--nxc-line-strong, rgba(255, 255, 255, .20)));
	--nxa-line-field: var(--nx-border-default, var(--nxc-line-strong, rgba(255, 255, 255, .28)));
	--nxa-text: var(--nx-text-primary, var(--nxc-text, #ffffff));
	--nxa-secondary: var(--nx-text-secondary, var(--nxc-secondary, #d4d4d4));
	--nxa-muted: var(--nx-text-muted, var(--nxc-muted, #a3a3a3));
	--nxa-accent: var(--nx-accent, var(--nxc-accent, #ffffff));
	/* the primary action and the site's mark take the network's own accent (R-076; the estate tokens, per brand) */
	--nxa-primary-bg: var(--nx-accent, var(--nx-primary-bg, var(--nxc-primary-bg, #ffffff)));
	--nxa-primary-ink: var(--nx-accent-ink, var(--nx-primary-ink, var(--nxc-primary-ink, #000000)));
	--nxa-primary-hover: var(--nx-accent-strong, var(--nx-primary-hover, var(--nxc-primary-hover, #e5e5e5)));
	--nxa-focus: var(--nx-focus, var(--nxc-focus, #8ab4f8));
	--nxa-bad: var(--nx-critical, #f28b82);
	--nxa-good: var(--nx-positive, #81c995);
	--nxa-sans: var(--nx-font-sans, var(--nxc-sans, "IBM Plex Sans", "IBM Plex Sans Variable", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif));
	--nxa-mono: var(--nx-font-mono, var(--nxc-mono, "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace));
	--nxa-radius: 0;
	--nxa-fast: var(--nx-motion-fast, var(--nxc-fast, 150ms));
	color-scheme: dark;
}
html[data-theme="light"] .nxa-shell {
	--nxa-canvas: var(--nx-bg-canvas, var(--nxc-canvas, #ffffff));
	--nxa-elevated: var(--nx-bg-elevated, var(--nxc-elevated, #fafafa));
	--nxa-surface: var(--nx-bg-surface, var(--nxc-elevated, #f5f5f5));
	--nxa-hover: var(--nx-bg-hover, var(--nxc-hover, #ededed));
	--nxa-line: var(--nx-border-hairline, var(--nxc-line, rgba(0, 0, 0, .10)));
	--nxa-line-strong: var(--nx-border-hairline-strong, var(--nxc-line-strong, rgba(0, 0, 0, .20)));
	--nxa-line-field: var(--nx-border-default, var(--nxc-line-strong, rgba(0, 0, 0, .28)));
	--nxa-text: var(--nx-text-primary, var(--nxc-text, #000000));
	--nxa-secondary: var(--nx-text-secondary, var(--nxc-secondary, #404040));
	--nxa-muted: var(--nx-text-muted, var(--nxc-muted, #525252));
	--nxa-accent: var(--nx-accent, var(--nxc-accent, #000000));
	--nxa-primary-bg: var(--nx-accent, var(--nx-primary-bg, var(--nxc-primary-bg, #000000)));
	--nxa-primary-ink: var(--nx-accent-ink, var(--nx-primary-ink, var(--nxc-primary-ink, #ffffff)));
	--nxa-primary-hover: var(--nx-accent-strong, var(--nx-primary-hover, var(--nxc-primary-hover, #262626)));
	--nxa-focus: var(--nx-focus, var(--nxc-focus, #1a73e8));
	--nxa-bad: var(--nx-critical, #c62828);
	--nxa-good: var(--nx-positive, #1e7e46);
	color-scheme: light;
}

/* Full width on every theme (owner 2026-11-02: sign-in and registration pages "show full width"). The theme's boxed
   content wrappers that hold the screen give it their whole width; a theme header or footer is never touched.
   Not under the native Nexus parent (body.nx-parent-nexus): it renders app screens full width with its own gutter, and
   this override would fight that gutter (native themes lane, 2026-11-02). Drop the rule when the vendor parents retire. */
body:not(.nx-parent-nexus) :is(.page-container, .page-content, .container, .site-container, .content-area, .site-main, #primary, #main, .entry-content, .wp-block-post-content, .is-layout-constrained):has(.nxa-shell):not(:is(header, footer, #masthead, #colophon) *) {
	max-inline-size: none !important;
	inline-size: auto !important;
	margin-inline: 0 !important;
	padding-inline: 0 !important;
}

/* Layout: one grid column (the account screen); the sign-in screens are one centred column (.nxa-shell--auth, end of file). */
.nxa-shell {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 1.5rem;
	inline-size: 100%;
	max-inline-size: 73.75rem;
	margin-block: 0;
	margin-inline: auto;
	padding-inline: clamp(1rem, 4vw, 4rem);
	padding-block: clamp(1.25rem, 4vw, 4rem) clamp(2rem, 6vw, 6rem);
	color: var(--nxa-text);
	background: var(--nxa-canvas);
	border-radius: 0;
	font-family: var(--nxa-sans);
	font-size: 1rem;
	line-height: 1.5;
	box-sizing: border-box;
}
.nxa-shell *,
.nxa-shell *::before,
.nxa-shell *::after {
	box-sizing: border-box;
}
.nxa-shell--wide {
	max-inline-size: 60rem;
	grid-template-columns: minmax(0, 1fr) !important;
	grid-template-areas: none !important;
}
/* the card is no box: no fill, no border, no corner */
.nxa-card {
	background: transparent;
	border: 0;
	border-radius: 0;
	padding-block: clamp(0.5rem, 2vw, 1.5rem) 0;
	padding-inline: 0;
	max-inline-size: 31rem;
	inline-size: 100%;
	margin-inline: 0;
}
.nxa-card--wide {
	max-inline-size: none;
}
@media (max-width: 30em) {
	.nxa-shell { padding-inline: 1rem; gap: 1.5rem; }
	.nxa-card { padding-block-start: 0.25rem; }
}

/* Type. */
.nxa-shell p { margin-block: 0 1rem; }
/* the line above the title: the accent dash, then the words (approved: "— Welcome back") */
.nxa-eyebrow {
	display: flex;
	align-items: center;
	gap: 0.625rem;
	margin-block: 0 0.875rem !important;
	font-family: var(--nxa-sans);
	font-size: 0.8125rem;
	line-height: 1.3;
	letter-spacing: 0;
	text-transform: none;
	color: var(--nxa-muted);
}
.nxa-card .nxa-eyebrow::before {
	content: "";
	flex: none;
	inline-size: 0.875rem;
	block-size: 2px;
	background: var(--nxa-accent);
}
.nxa-title {
	margin-block: 0 2rem;
	font-family: var(--nxa-sans);
	font-size: clamp(1.75rem, 1.6vw + 1.125rem, 2.375rem);
	line-height: 1.1;
	font-weight: 600;
	color: var(--nxa-text);
	letter-spacing: -0.015em;
	text-wrap: balance;
}
.nxa-subtitle {
	margin-block: 1.5rem 0.5rem;
	font-size: 0.9375rem;
	font-weight: 600;
	color: var(--nxa-text);
}
.nxa-lede { font-size: 0.9375rem; line-height: 1.55; color: var(--nxa-secondary); }
/* :not(#nxa-0) outranks BuddyPress's "body #buddypress * a" on its own register page. */
.nxa-shell a:not(#nxa-0) {
	color: var(--nxa-text);
	text-decoration-line: underline;
	text-underline-offset: 0.2em;
}
.nxa-shell a:not(#nxa-0):hover { text-decoration-thickness: 2px; }
.nxa-sr {
	position: absolute !important;
	inline-size: 1px;
	block-size: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	margin: 0 !important;
}
/* decorative line icons (the panel's lines, the sign-in arrow) */
.nxa-i {
	flex: none;
	inline-size: 1.25rem;
	block-size: 1.25rem;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.6;
	stroke-linecap: round;
	stroke-linejoin: round;
}

/* Fields: the label above, one hairline under the field and no box (2px focus line), help under the label. Form
   controls and buttons carry :not(#nxa-0), an id-level weight, because themes style every input and button with long
   selectors (BuddyX: input:not(...)x5); the screen keeps its own look inside any theme. */
.nxa-form { margin: 0; }
.nxa-field { margin-block: 0 1.25rem !important; }
.nxa-field label,
.nxa-group legend,
.nxa-label {
	display: block;
	margin-block-end: 0.375rem;
	font-weight: 500;
	font-size: 0.875rem;
	color: var(--nxa-text);
}
.nxa-label-row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 0.75rem;
}
.nxa-label-row label { margin-block-end: 0.375rem; }
.nxa-shell a.nxa-inline-link:not(#nxa-0) { font-size: 0.84375rem; font-weight: 400; color: var(--nxa-secondary); }
.nxa-shell a.nxa-inline-link:not(#nxa-0):hover { color: var(--nxa-text); }
.nxa-required,
.nxa-help {
	font-weight: 400;
	color: var(--nxa-muted);
}
.nxa-required { font-size: 0.8125rem; }
.nxa-help {
	display: block;
	font-size: 0.84375rem;
	line-height: 1.5;
	margin-block-end: 0.375rem;
}
.nxa-shell input.nxa-input:not(#nxa-0),
.nxa-shell select.nxa-input:not(#nxa-0),
.nxa-shell textarea.nxa-input:not(#nxa-0) {
	display: block;
	inline-size: 100%;
	min-block-size: 2.75rem;
	margin: 0;
	padding-block: 0.625rem 0.6875rem;
	padding-inline: 0;
	font: 400 1rem/1.4 var(--nxa-sans);
	color: var(--nxa-text);
	background: transparent;
	border: 0;
	border-block-end: 1px solid var(--nxa-line-field);
	border-radius: 0;
	box-shadow: none;
	transition: border-color var(--nxa-fast) ease;
}
/* a text area and a list box keep one hairline round them: an underline alone does not show where they end */
.nxa-shell textarea.nxa-input:not(#nxa-0),
.nxa-shell select.nxa-input:not(#nxa-0)[multiple] {
	border: 1px solid var(--nxa-line-strong);
	padding-inline: 0.625rem;
}
.nxa-shell select.nxa-input:not(#nxa-0)[multiple] { padding-block: 0.25rem; }
.nxa-shell .nxa-input:not(#nxa-0):hover { border-color: var(--nxa-muted); }
.nxa-shell :focus-visible,
.nxa-shell .nxa-button:focus-visible {
	outline: 2px solid var(--nxa-focus);
	outline-offset: 2px;
}
.nxa-shell .nxa-input:not(#nxa-0):focus,
.nxa-shell .nxa-input:not(#nxa-0):focus-visible {
	outline: none;
	border-block-end: 2px solid var(--nxa-focus);
	padding-block-end: 0.625rem;
	background: transparent;
	color: var(--nxa-text);
}
.nxa-shell textarea.nxa-input:not(#nxa-0):focus,
.nxa-shell select.nxa-input:not(#nxa-0)[multiple]:focus { border: 1px solid var(--nxa-focus); outline: 1px solid var(--nxa-focus); outline-offset: 0; }
.nxa-shell .nxa-input:not(#nxa-0)[aria-invalid="true"] { border-block-end: 2px solid var(--nxa-bad); padding-block-end: 0.625rem; }
.nxa-error {
	display: block;
	margin-block: 0.25rem 0.375rem;
	font-size: 0.875rem;
	font-weight: 500;
	line-height: 1.45;
	color: var(--nxa-bad);
}
.nxa-error:empty { display: none; }
.nxa-password {
	display: flex;
	align-items: stretch;
	gap: 0;
	position: relative;
}
.nxa-shell .nxa-password .nxa-input:not(#nxa-0) { padding-inline-end: 4.5rem; }
.nxa-shell button.nxa-reveal:not(#nxa-0) {
	position: absolute;
	inset-inline-end: 0;
	inset-block: 0;
	min-inline-size: 3.75rem;
	padding-inline: 0.5rem;
	font: 500 0.8125rem/1 var(--nxa-sans);
	color: var(--nxa-muted);
	background: transparent;
	border: 0;
	border-radius: 0;
	cursor: pointer;
}
.nxa-shell button.nxa-reveal:not(#nxa-0):hover,
.nxa-shell button.nxa-reveal:not(#nxa-0)[aria-pressed="true"] { color: var(--nxa-text); background: transparent; }
.nxa-strength {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	margin-block-start: 0.5rem;
	font-size: 0.8125rem;
	color: var(--nxa-muted);
	min-block-size: 1.25rem;
}
.nxa-strength:not([data-score]) meter,
.nxa-strength[data-score="0"] meter { visibility: hidden; }
.nxa-strength meter {
	inline-size: 6rem;
	block-size: 0.25rem;
	flex: none;
}
.nxa-check,
.nxa-choice {
	display: flex;
	gap: 0.625rem;
	align-items: flex-start;
	min-block-size: 2.75rem;
	padding-block: 0.625rem;
	margin-block: 0 0.25rem !important;
	font-size: 0.90625rem;
	line-height: 1.45;
}
.nxa-check { flex-wrap: wrap; }
.nxa-check .nxa-error { flex-basis: 100%; }
.nxa-choice { min-block-size: 2.25rem; padding-block: 0.375rem; }
/* the box is the estate control standard (.nx-check, .nx-radio; kits/controls, block at the end of this file), square
   here (approved design: no rounded corners; the radio stays a circle, as the standard says) */
.nxa-shell {
	--nx-ctl-ink: var(--nxa-primary-bg);
	--nx-ctl-canvas: var(--nxa-primary-ink);
	--nx-ctl-line: var(--nxa-line-field);
	--nx-ctl-hover: var(--nxa-hover);
	--nx-ctl-focus: var(--nxa-focus);
	--nx-ctl-critical: var(--nxa-bad);
	--nx-ctl-radius: 0;
	--nx-ctl-radius-xs: 0;
}
.nxa-check input,
.nxa-choice input { margin: 0; margin-block-start: 0.0625rem; flex: none; }
.nxa-check label,
.nxa-choice label { font-weight: 400; color: var(--nxa-secondary); }
.nxa-choice:has(input:checked) label { color: var(--nxa-text); }
/* the checklist's boxes (Onboarding\Checklist) are the browser's own: the same size, in the primary ink */
.nxa-check input[type="checkbox"]:not(.nx-check) { inline-size: 1.125rem; block-size: 1.125rem; accent-color: var(--nxa-primary-bg); }
.nxa-group { border: 0; padding: 0; margin-inline: 0; }

/* Buttons: square; one solid primary per screen; every other control quiet (a surface fill, no border). */
.nxa-submit { margin-block: 1.5rem 0 !important; }
.nxa-shell button.nxa-button:not(#nxa-0),
.nxa-shell a.nxa-button:not(#nxa-0) {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.625rem;
	min-block-size: 2.75rem;
	padding-block: 0.5rem;
	padding-inline: 1.125rem;
	font: 500 0.9375rem/1.2 var(--nxa-sans);
	letter-spacing: 0;
	text-transform: none;
	text-decoration: none;
	color: var(--nxa-primary-ink);
	background: var(--nxa-primary-bg);
	border: 1px solid transparent;
	border-radius: 0;
	box-shadow: none;
	cursor: pointer;
	transition: background-color var(--nxa-fast) ease;
}
.nxa-shell button.nxa-button:not(#nxa-0):hover,
.nxa-shell a.nxa-button:not(#nxa-0):hover { background: var(--nxa-primary-hover); color: var(--nxa-primary-ink); }
.nxa-shell .nxa-button--wide:not(#nxa-0) { inline-size: 100%; }
.nxa-shell button.nxa-button--quiet:not(#nxa-0),
.nxa-shell a.nxa-button--quiet:not(#nxa-0) {
	color: var(--nxa-text);
	background: var(--nxa-surface);
	border-color: transparent;
}
.nxa-shell button.nxa-button--quiet:not(#nxa-0):hover,
.nxa-shell a.nxa-button--quiet:not(#nxa-0):hover { background: var(--nxa-hover); color: var(--nxa-text); }
.nxa-shell .nxa-button[disabled]:not(#nxa-0) { opacity: 0.55; cursor: progress; }
.nxa-submit .nxa-i { display: none; inline-size: 1.125rem; block-size: 1.125rem; }
.nxa-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.625rem;
	margin-block-start: 1.5rem;
}
.nxa-actions > .nxa-button { flex: 1 1 12rem; }
.nxa-actions .nxa-more { flex-basis: 100%; margin-block: 0; }

/* Lines under the form. */
.nxa-switch {
	margin-block: 2rem 0 !important;
	padding-block-start: 1.5rem;
	border-block-start: 1px solid var(--nxa-line);
	color: var(--nxa-muted);
	font-size: 0.90625rem;
}
.nxa-shell .nxa-switch a:not(#nxa-0) { font-weight: 500; }
.nxa-or {
	display: flex;
	align-items: center;
	gap: 1rem;
	margin-block: 1.25rem !important;
	color: var(--nxa-muted);
	font-family: var(--nxa-sans);
	font-size: 0.8125rem;
	letter-spacing: 0;
	text-transform: none;
}
.nxa-or::before,
.nxa-or::after { content: ""; flex: 1; block-size: 1px; background: var(--nxa-line); }
.nxa-more { margin-block-start: 1.25rem; font-size: 0.90625rem; color: var(--nxa-muted); }
.nxa-more summary {
	cursor: pointer;
	color: var(--nxa-secondary);
	text-decoration-line: underline;
	text-underline-offset: 0.2em;
	min-block-size: 1.5rem;
}
.nxa-more summary:hover { color: var(--nxa-text); }
.nxa-more .nxa-form { margin-block-start: 0.875rem; }
.nxa-links { margin-block: 1rem 0; padding-inline-start: 0; list-style: none; }
.nxa-links li { margin-block: 0.375rem; min-block-size: 1.5rem; }

/* Messages and result screens: a bar on the start edge and a light tint, no box; words say whether it is a problem,
   never colour alone. */
.nxa-message {
	margin-block: 0 1.25rem;
	padding-block: 0.75rem;
	padding-inline: 0.875rem;
	border: 0;
	border-inline-start: 2px solid var(--nxa-line-strong);
	border-radius: 0;
	background: var(--nxa-surface);
	font-size: 0.90625rem;
	line-height: 1.5;
}
.nxa-message:focus,
.nxa-message:focus-visible { outline: none; }
.nxa-message--bad { border-inline-start-color: var(--nxa-bad); background: color-mix(in srgb, var(--nxa-bad) 7%, transparent); }
.nxa-message--good { border-inline-start-color: var(--nxa-good); background: color-mix(in srgb, var(--nxa-good) 8%, transparent); }
.nxa-message p { margin: 0 !important; }
.nxa-message-kind { font-weight: 600; }
.nxa-message--bad .nxa-message-kind { color: var(--nxa-bad); }
.nxa-message--good .nxa-message-kind { color: var(--nxa-good); }
.nxa-state .nxa-eyebrow::before { background: var(--nxa-muted); }
.nxa-state--good .nxa-eyebrow::before { background: var(--nxa-good); }
.nxa-state--bad .nxa-eyebrow::before { background: var(--nxa-bad); }
.nxa-ref {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: 0.5rem;
	padding: 0.625rem 0.75rem;
	border: 0;
	border-radius: 0;
	background: var(--nxa-surface);
	font-size: 0.875rem;
	color: var(--nxa-muted);
}
.nxa-ref strong {
	font-family: var(--nxa-mono);
	font-size: 0.875rem;
	font-weight: 500;
	color: var(--nxa-text);
	letter-spacing: 0.04em;
}
.nxa-next {
	margin-block: 0;
	padding-inline-start: 1.25rem;
	color: var(--nxa-secondary);
	font-size: 0.90625rem;
}
.nxa-next li { margin-block: 0.375rem; }

/* The account screen. */
.nxa-section {
	margin-block-start: 2rem;
	padding-block-start: 1.5rem;
	border-block-start: 1px solid var(--nxa-line);
}
.nxa-section h3 { margin-block: 0 1rem; font-size: 1.0625rem; font-weight: 600; color: var(--nxa-text); }
.nxa-section h4 { margin-block: 1.25rem 0.5rem; font-size: 0.9375rem; font-weight: 600; color: var(--nxa-text); }
.nxa-section .nxa-form + .nxa-form { margin-block-start: 0.75rem; }
.nxa-section .nxa-submit { margin-block-start: 0.75rem !important; }

/* The anti-spam field: never visible. */
.nxa-hp {
	position: absolute !important;
	inset-inline-start: -10000px !important;
	inline-size: 1px;
	block-size: 1px;
	overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
	.nxa-shell *,
	.nxa-shell *::before { transition: none !important; }
}
@media (forced-colors: active) {
	.nxa-input { border-block-end: 1px solid CanvasText; }
	.nxa-button { border: 1px solid ButtonText; }
	.nxa-eyebrow::before, .nxa-or::before, .nxa-or::after { background: CanvasText; }
}

/* Arabic script (Persian, Arabic, Sorani, Urdu): no letter-spacing, no capitals and no mono for words. */
:root:is([data-script="Arab"], :lang(ar), :lang(fa), :lang(ckb), :lang(ur)) .nxa-shell :is(.nxa-title, .nxa-mission, .nxa-eyebrow, .nxa-or, .nxa-step > legend, .nxa-legal__title, .nxa-legalset > legend, .nxa-button) {
	letter-spacing: 0;
	text-transform: none;
	font-family: var(--nxa-sans);
}

/* BuddyPress's own register page: its wrapper (narrowed by some themes, e.g. 460px) gives the screen the full width. */
body #buddypress.buddypress-wrap:has(> .nxa-shell) {
	max-inline-size: none;
	inline-size: auto;
	margin-inline: 0;
	padding: 0;
}

/* nx-controls:begin */
.nx-switch, .nx-check, .nx-radio {
  --_ink: var(--nx-ctl-ink, var(--nx-text-primary, CanvasText));
  --_canvas: var(--nx-ctl-canvas, var(--nx-bg-canvas, Canvas));
  --_line: var(--nx-ctl-line, var(--nx-border-hairline-strong, GrayText));
  --_hover: var(--nx-ctl-hover, var(--nx-bg-hover, transparent));
  --_focus: var(--nx-ctl-focus, var(--nx-focus, Highlight));
  --_crit: var(--nx-ctl-critical, var(--nx-critical, CanvasText));
  --_r: var(--nx-ctl-radius, var(--nx-radius, 5px));
  --_rs: var(--nx-ctl-radius-xs, var(--nx-radius-chip, 4px));
  --_fast: var(--nx-ctl-fast, var(--nx-motion-fast, 120ms));
  --_ease: var(--nx-ctl-ease, cubic-bezier(.2, 0, 0, 1));
}

/* ---- checkbox: 18px box, 4px corners, a drawn tick; indeterminate is a bar. */
input[type="checkbox"].nx-check,
input[type="radio"].nx-radio {
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  display: inline-block;
  flex: none;
  box-sizing: border-box;
  inline-size: 18px;
  block-size: 18px;
  min-inline-size: 18px;
  margin: 0;
  padding: 0;
  border: 1px solid var(--_line);
  border-radius: var(--_rs);
  background: transparent;
  box-shadow: none;
  cursor: pointer;
  vertical-align: middle;
  transition: background-color var(--_fast) var(--_ease), border-color var(--_fast) var(--_ease);
}
input[type="checkbox"].nx-check::before {
  content: "";
  position: absolute;
  inset-block-start: 2px;
  inset-inline-start: 5px;
  inline-size: 5px;
  block-size: 9px;
  margin: 0;
  border: solid var(--_canvas);
  border-width: 0 2px 2px 0;
  background: none;
  transform: rotate(45deg) scale(0);
  transition: transform var(--_fast) var(--_ease);
  filter: none;
}
input[type="checkbox"].nx-check:is(:checked, :indeterminate) {
  background: var(--_ink);
  border-color: var(--_ink);
}
input[type="checkbox"].nx-check:checked::before {
  content: "";
  transform: rotate(45deg) scale(1);
}
input[type="checkbox"].nx-check:indeterminate::before {
  content: "";
  inset-block-start: 7px;
  inset-inline-start: 3px;
  inline-size: 10px;
  block-size: 0;
  border-width: 2px 0 0;
  transform: none;
}
/* radio: the one circle in the set (a dot, as in the kit) */
input[type="radio"].nx-radio { border-radius: 50%; }
input[type="radio"].nx-radio::before {
  content: "";
  position: absolute;
  inset: 3px;
  margin: 0;
  inline-size: auto;
  block-size: auto;
  border-radius: 50%;
  background: var(--_canvas);
  transform: scale(0);
  transition: transform var(--_fast) var(--_ease);
  line-height: 0;
}
input[type="radio"].nx-radio:checked { background: var(--_ink); border-color: var(--_ink); }
input[type="radio"].nx-radio:checked::before { content: ""; transform: scale(1); }
input.nx-check:hover:not(:disabled),
input.nx-radio:hover:not(:disabled) { border-color: var(--_ink); }
input.nx-check:focus-visible,
input.nx-radio:focus-visible { outline: 2px solid var(--_focus); outline-offset: 2px; }
input.nx-check:disabled,
input.nx-radio:disabled { opacity: .45; cursor: not-allowed; }
input.nx-check[aria-invalid="true"],
input.nx-radio[aria-invalid="true"] { border-color: var(--_crit); }
/* the labelled row: box, then text; the whole row is the target */
.nx-ctl { display: flex; align-items: flex-start; gap: 10px; min-block-size: 24px; color: var(--nx-ctl-ink, var(--nx-text-primary, CanvasText)); font: inherit; line-height: 1.4; cursor: pointer; }
.nx-ctl > :is(.nx-check, .nx-radio) { margin-block-start: 1px; }
.nx-ctl__hint { display: block; color: var(--nx-ctl-muted, var(--nx-text-muted, GrayText)); font-size: .8125em; }

/* ---- switch: an input[type=checkbox][role=switch] or a button[role=switch][aria-checked]. Off = line track and
   canvas thumb; on = ink track and canvas-coloured thumb; mixed = thumb centred over a half-ink track. */
:is(input, button).nx-switch {
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  display: inline-block;
  flex: none;
  box-sizing: border-box;
  inline-size: 40px;
  min-inline-size: 40px;
  block-size: 24px;
  margin: 0;
  padding: 0;
  border: 1px solid var(--_line);
  border-radius: var(--_r);
  background: var(--_line);
  color: inherit;
  box-shadow: none;
  cursor: pointer;
  vertical-align: middle;
  transition: background-color var(--_fast) var(--_ease), border-color var(--_fast) var(--_ease);
}
:is(input, button).nx-switch::before {
  content: "";
  position: absolute;
  inset-block-start: 2px;
  inset-inline-start: 2px;
  inline-size: 18px;
  block-size: 18px;
  margin: 0;
  border: 0;
  border-radius: var(--nx-radius-sm, 2px);
  background: var(--_canvas);
  box-shadow: 0 1px 2px color-mix(in srgb, var(--_ink) 28%, transparent);
  transform: none;
  filter: none;
  transition: inset-inline-start var(--_fast) var(--_ease), background-color var(--_fast) var(--_ease);
}
/* a 44px-tall target around the 24px track (WCAG 2.5.8) without growing the layout */
:is(input, button).nx-switch::after {
  content: "";
  position: absolute;
  inset: -10px -4px;
}
:is(input, button).nx-switch:is(:checked, [aria-checked="true"]) {
  background: var(--_ink);
  border-color: var(--_ink);
}
:is(input, button).nx-switch:is(:checked, [aria-checked="true"])::before {
  content: "";
  inset-inline-start: calc(100% - 20px);
  background: var(--_canvas);
  transform: none;
}
:is(input, button).nx-switch:is([aria-checked="mixed"], :indeterminate) {
  background: color-mix(in srgb, var(--_ink) 45%, var(--_line));
  border-color: color-mix(in srgb, var(--_ink) 45%, var(--_line));
}
:is(input, button).nx-switch:is([aria-checked="mixed"], :indeterminate)::before { inset-inline-start: calc(50% - 10px); }
:is(input, button).nx-switch:hover:not(:disabled) { border-color: var(--_ink); }
:is(input, button).nx-switch:focus-visible { outline: 2px solid var(--_focus); outline-offset: 2px; }
:is(input, button).nx-switch:is(:disabled, [aria-disabled="true"]) { opacity: .45; cursor: not-allowed; }
:is(input, button).nx-switch[aria-invalid="true"] { border-color: var(--_crit); }
/* compact: 34x20 */
:is(input, button).nx-switch.nx-switch--sm { inline-size: 34px; min-inline-size: 34px; block-size: 20px; }
:is(input, button).nx-switch.nx-switch--sm::before { inline-size: 14px; block-size: 14px; }
:is(input, button).nx-switch.nx-switch--sm:is(:checked, [aria-checked="true"])::before { inset-inline-start: calc(100% - 16px); }
:is(input, button).nx-switch.nx-switch--sm:is([aria-checked="mixed"], :indeterminate)::before { inset-inline-start: calc(50% - 8px); }

@media (prefers-reduced-motion: reduce) {
  .nx-switch, .nx-switch::before, .nx-check, .nx-check::before, .nx-radio, .nx-radio::before { transition: none; }
}
@media (forced-colors: active) {
  :is(input, button).nx-switch { border-color: CanvasText; }
  :is(input, button).nx-switch:is(:checked, [aria-checked="true"]) { background: Highlight; border-color: Highlight; }
  :is(input, button).nx-switch::before { background: ButtonText; }
  input.nx-check:checked,
  input.nx-radio:checked { background: Highlight; border-color: Highlight; }
}
/* nx-controls:end */

/* 1.4.0: the legal links, the checklist, the refusal screen. 1.8.17: the register screen takes the same 31rem form
   column as sign-in (approved design); the checklist's groups are separated by one hairline each, no box. */
.nxa-shell--register .nxa-step > :where(.nxa-field, .nxa-check, .nxa-help) { max-inline-size: 44rem; }
.nxa-legal {
	grid-column: 1 / -1;
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 0.5rem 1.5rem;
	padding-block-start: 1.25rem;
	border-block-start: 1px solid var(--nxa-line);
	font-size: 0.84375rem;
	color: var(--nxa-muted);
}
.nxa-legal__title {
	font-family: var(--nxa-mono);
	font-size: 0.6875rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.nxa-legal__list {
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem 1.25rem;
	list-style: none;
	margin: 0;
	padding: 0;
}
.nxa-legal__list li { margin: 0; }
.nxa-legal__credit { margin-inline-start: auto; }
/* wp-login.php keeps its own box; the links sit under it, centred in its column. */
body.login .nxa-legal { max-inline-size: 20rem; margin: 1.5rem auto 0; padding-inline: 0; justify-content: center; border-block-start: 0; }
.nxa-where { margin-block-end: 0.5rem; }
.nxa-checklist { display: grid; gap: 1.25rem; }
.nxa-legalset {
	min-inline-size: 0;
	margin: 0;
	padding: 1rem 0 0.25rem;
	border: 0;
	border-block-start: 1px solid var(--nxa-line-strong);
	border-radius: 0;
}
.nxa-legalset > legend {
	float: inline-start;
	inline-size: 100%;
	margin-block-end: 0.5rem;
	padding: 0;
	font-family: var(--nxa-mono);
	font-size: 0.6875rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--nxa-muted);
}
.nxa-legalset > legend + * { clear: both; }
.nxa-legalset--required { border-block-start-color: var(--nxa-text); }
.nxa-checklist .nxa-check label { flex: 1 1 0; min-inline-size: 0; }
.nxa-legal-link { white-space: nowrap; }
.nxa-optional { font-size: 0.8125rem; font-weight: 400; color: var(--nxa-muted); }
.nxa-legal-notice { margin-block: 0 0.875rem !important; font-size: 0.90625rem; color: var(--nxa-text); }
.nxa-check input[aria-invalid="true"] { outline: 2px solid var(--nxa-bad); outline-offset: 2px; }
.nxa-appeal { margin-block: 1.5rem; padding-block-start: 1rem; border-block-start: 1px solid var(--nxa-line); max-inline-size: 36rem; }
.nxa-state--bad .nxa-title { color: var(--nxa-text); }

/* 1.5.0: sign-in providers. Owner 2026-11-09 (as the frontier sign-ins): one row of icon-only square buttons, equal
   width, 44px or more tall, the kit's 5px corner, a surface fill, no border, never a brand colour; the full sentence is
   the accessible name and the tooltip. NXS Passport first (the estate's hex mark), then the providers set up here. The
   row mirrors right to left by construction (flex, logical properties). */
.nxa-providers { display: flex; gap: 0.625rem; margin-block: 0; }
.nxa-shell a.nxa-provider:not(#nxa-0) {
	display: flex;
	flex: 1 1 0;
	align-items: center;
	justify-content: center;
	min-inline-size: 2.75rem;
	min-block-size: 3rem;
	padding: 0.5rem;
	text-decoration: none;
	color: var(--nxa-text);
	background: var(--nxa-surface);
	border: 0;
	border-radius: var(--nx-radius, 5px);
	transition: background-color var(--nxa-fast) ease;
}
.nxa-shell a.nxa-provider:not(#nxa-0):hover { background: var(--nxa-hover); text-decoration: none; }
.nxa-shell a.nxa-provider:not(#nxa-0):focus-visible { outline: 2px solid var(--nxa-focus); outline-offset: 2px; }
.nxa-provider__mark { flex: none; inline-size: 1.5rem; block-size: 1.5rem; }
.nxa-social-banner .nxa-provider__mark { inline-size: 1.125rem; block-size: 1.125rem; }
.nxa-social-banner {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: 0.75rem;
	margin-block: 1rem;
	padding-block: 0.875rem;
	padding-inline: 1rem;
	border-inline-start: 2px solid var(--nxa-text);
	background: var(--nxa-surface);
}
.nxa-social-banner p { margin: 0; flex: 1 1 14rem; }
.nxa-social-banner .nxa-provider__mark { margin-block-start: 0.125rem; }
.nxa-readonly { display: block; padding-block: 0.625rem 0.6875rem; border-block-end: 1px solid var(--nxa-line); font-family: var(--nxa-sans); font-size: 1rem; color: var(--nxa-text); overflow-wrap: anywhere; }
.nxa-methods { list-style: none; margin: 0.75rem 0 0; padding: 0; }
.nxa-method {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem 0.75rem;
	min-block-size: 3rem;
	padding-block: 0.5rem;
	border-block-end: 1px solid var(--nxa-line);
}
.nxa-method__name { font-weight: 600; }
.nxa-method__state { display: inline-flex; align-items: center; gap: 0.375rem; color: var(--nxa-muted); font-size: 0.875rem; flex: 1 1 12rem; }
.nxa-method form, .nxa-social-banner form { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin: 0; }
.nxa-inline { display: flex; gap: 0.5rem; margin: 0 !important; }
.nxa-dot { display: inline-block; inline-size: 0.5rem; block-size: 0.5rem; border-radius: 0; background: var(--nxa-line-strong); }
.nxa-dot--on { background: var(--nxa-good); }
.nxa-shell .nxa-input--inline:not(#nxa-0) { inline-size: 12rem; max-inline-size: 100%; min-block-size: 2.75rem; }

/* 1.7.0: the screen keeps clear of the floating Nexus dock (inline start, from tablets up). */
@media (min-width: 641px) {
	html:has(.nxd[data-ready]:not([hidden])) .nxa-shell {
		padding-inline-start: max(clamp(1rem, 4vw, 4rem), calc(var(--nexus-dock-w, var(--nx-dock-reserve, 72px)) + 8px));
	}
}
/* 1.8.15 (RTL sweep): a free-text field starts in the page's direction and follows what is typed (dir="auto" made an
   empty field left to right on a right-to-left page). E-mail and user-name fields keep dir="auto". */
:is(textarea, input[type="text"]:not([dir])).nxa-input { unicode-bidi: plaintext; }

/* ---- 1.9.0: the frontier sign-in (owner 2026-11-09). Sign-in, register, forgot, reset and verify: one centred
   column of 25rem on the page's own calm canvas, the site's mark, one heading, large filled fields. The account screen
   keeps its wide column (.nxa-shell--wide). */
.nxa-shell--auth {
	display: block;
	max-inline-size: none;
	padding-inline: 1rem;
	padding-block: clamp(2rem, 8vh, 6rem) clamp(2.5rem, 10vh, 7rem);
}
.nxa-shell--auth > .nxa-card {
	max-inline-size: 25rem;
	margin-inline: auto;
	padding-block: 0;
}
.nxa-shell--auth > .nxa-legal {
	max-inline-size: 25rem;
	margin-block: 3rem 0;
	margin-inline: auto;
	justify-content: center;
	text-align: center;
	border-block-start: 0;
}
.nxa-shell--auth .nxa-legal__credit { margin-inline-start: 0; }
.nxa-head { margin-block: 0 1.75rem; text-align: center; }
.nxa-brand { display: grid; justify-items: center; gap: 0.625rem; margin-block: 0 1.5rem; }
.nxa-mark {
	display: grid;
	place-items: center;
	inline-size: 2.5rem;
	block-size: 2.5rem;
	overflow: hidden;
	border-radius: 0;
	color: var(--nxa-primary-ink);
	background: var(--nxa-primary-bg);
	font: 600 1.125rem/1 var(--nxa-sans);
}
.nxa-mark img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; border-radius: 0; }
.nxa-shell .nxa-site:not(#nxa-0) { margin: 0; font-size: 0.8125rem; line-height: 1.3; color: var(--nxa-muted); }
.nxa-shell--auth .nxa-title {
	margin-block: 0;
	font-size: clamp(1.625rem, 1vw + 1.25rem, 2rem);
	line-height: 1.15;
	letter-spacing: -0.01em;
}
.nxa-head .nxa-lede { margin-block: 0.75rem 0; }
.nxa-shell--auth .nxa-state { text-align: center; }
.nxa-shell--auth .nxa-state .nxa-eyebrow { justify-content: center; }
.nxa-shell--auth .nxa-state .nxa-eyebrow::before { display: none; }
.nxa-shell--auth .nxa-state .nxa-title { margin-block-end: 0.75rem; }
/* Fields: the label above, a large field with a subtle fill and no border; focus draws a 2px line under it. */
.nxa-shell--auth .nxa-field { margin-block: 0 1rem !important; }
.nxa-shell--auth .nxa-field label,
.nxa-shell--auth .nxa-label { font-size: 0.875rem; font-weight: 500; color: var(--nxa-secondary); }
.nxa-shell--auth input.nxa-input:not(#nxa-0),
.nxa-shell--auth select.nxa-input:not(#nxa-0) {
	min-block-size: 3rem;
	padding-block: 0.75rem;
	padding-inline: 0.875rem;
	background: var(--nxa-surface);
	border: 0;
	border-block-end: 2px solid transparent;
	border-radius: 0;
}
.nxa-shell--auth .nxa-input:not(#nxa-0):hover { background: var(--nxa-hover); border-color: transparent; }
.nxa-shell--auth .nxa-input:not(#nxa-0):focus,
.nxa-shell--auth .nxa-input:not(#nxa-0):focus-visible {
	padding-block-end: 0.75rem;
	background: var(--nxa-surface);
	border-block-end: 2px solid var(--nxa-focus);
}
.nxa-shell--auth .nxa-input:not(#nxa-0)[aria-invalid="true"] { padding-block-end: 0.75rem; border-block-end: 2px solid var(--nxa-bad); }
.nxa-shell--auth .nxa-password .nxa-input:not(#nxa-0) { padding-inline-end: 4.5rem; }
.nxa-shell--auth .nxa-help { margin-block: 0.375rem 0; }
/* a problem: one calm sentence under the field, no banner */
.nxa-shell--auth .nxa-error { margin-block: 0.375rem 0; font-weight: 400; }
.nxa-note {
	margin-block: 0 1.25rem !important;
	font-size: 0.90625rem;
	line-height: 1.5;
	text-align: center;
	color: var(--nxa-secondary);
}
.nxa-note--bad { color: var(--nxa-bad); }
/* the primary action: one solid, full-width, 3rem button; the second way quiet under it */
.nxa-shell--auth .nxa-submit { margin-block: 1.25rem 0 !important; }
.nxa-shell--auth .nxa-submit--then { margin-block-start: 0.625rem !important; }
.nxa-shell--auth button.nxa-button:not(#nxa-0),
.nxa-shell--auth a.nxa-button:not(#nxa-0) { min-block-size: 3rem; }
.nxa-shell--auth .nxa-check { min-block-size: 2.75rem; padding-block: 0.5rem; }
.nxa-shell--auth .nxa-or { margin-block: 1.25rem !important; }
/* the address being signed in with, and "Change" */
.nxa-who {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem 1rem;
	margin-block: 0 1.25rem !important;
	padding-block: 0.75rem;
	padding-inline: 0.875rem;
	background: var(--nxa-surface);
	font-size: 0.9375rem;
}
.nxa-who__id { min-inline-size: 0; overflow-wrap: anywhere; color: var(--nxa-text); }
/* the passkey: the browser offers it in the email field; the hub's button stays one quiet line under the form */
.nxa-passkey { margin-block-start: 0.75rem; text-align: center; }
.nxa-passkey p { margin-block: 0 !important; }
.nxa-shell .nxa-passkey :is(a, button).nxa-button:not(#nxa-0) {
	inline-size: auto;
	min-block-size: 2.75rem;
	padding-inline: 0.5rem;
	font-weight: 400;
	color: var(--nxa-secondary);
	background: transparent;
}
.nxa-shell .nxa-passkey :is(a, button).nxa-button:not(#nxa-0):hover { color: var(--nxa-text); background: transparent; text-decoration: underline; text-underline-offset: 0.25em; }
.nxa-shell--auth .nxa-switch { margin-block: 1.75rem 0 !important; padding-block-start: 0; border-block-start: 0; text-align: center; }
.nxa-shell--auth .nxa-more { text-align: center; }
.nxa-shell--auth .nxa-more .nxa-form { text-align: start; }
.nxa-shell--auth .nxa-actions { justify-content: center; }
.nxa-shell--auth .nxa-profile { margin-block: 0.5rem 0; }
.nxa-shell--auth .nxa-where { margin-block: 0.5rem 0.5rem; }

