/**
 * Eventonomy UI — single source-of-truth design system (ux-foundation compliant).
 *
 * One file, the entire admin UI vocabulary: 3-layer tokens + 6 component
 * primitives (page shell, card, button, input, badge, empty) + the admin page
 * compositions that build on them (settings sidebar-nav, dashboard stats,
 * health table, list rows). Everything is scoped to `.evnm-admin` so it never
 * leaks into wp-admin chrome.
 *
 * Rules honoured: single CSS file (R9), token-only values (R6), Lucide-sized
 * icons (R5), 40px tap targets (R13), :focus-visible rings (R14), empty-state
 * primitive (R15), logical properties for RTL, dark mode via root token
 * override, exactly two @media blocks at the file bottom.
 */

/* ============================================================
   Layer 2 — semantic tokens (fall back to WP/theme Layer 1)
   Declared on :root so BOTH admin and frontend blocks read the
   same design system (ux-foundation Rule 9 — one source of truth).
   ============================================================ */
:root {
	/* Brand / accent — adopt the host theme's primary colour so plugin
	   buttons and links match the site. Resolution order: BuddyX /
	   BuddyX-Pro (`--bx-color-accent`) -> Reign brand (`--reign-colors-theme`,
	   then its button background) -> WP-admin colour (admin screens) ->
	   default blue. NOTE: Reign's `--reign-accent-color` is the accent *text*
	   colour (white in several schemes), so it is deliberately NOT used here.
	   The theme vars live on `:root`, so this resolves correctly; only the
	   plugin reads --evnm-*, so adopting them never affects the theme's
	   styles. */
	--evnm-accent: var( --bx-color-accent, var( --reign-colors-theme, var( --reign-site-button-bg-color, var( --wp-admin-theme-color, var( --wp--preset--color--primary, #2271b1 ) ) ) ) );
	--evnm-accent-hover: var( --bx-color-accent, var( --reign-site-button-bg-hover-color, var( --reign-accent-hover-color, var( --wp-admin-theme-color-darker-10, #1d6092 ) ) ) );
	--evnm-accent-contrast: var( --bx-color-accent-inverse, var( --reign-site-button-text-color, #fff ) );
	--evnm-accent-soft: #f0f6fc;

	/* Surfaces */
	--evnm-bg: #f6f7f7;
	--evnm-surface: #fff;
	--evnm-surface-alt: #f6f7f7;

	/* Text */
	--evnm-text: #1e1e1e;
	--evnm-text-muted: #50575e;
	--evnm-text-tertiary: #787c82;

	/* Lines */
	--evnm-border: #dcdcde;
	--evnm-border-strong: #c3c4c7;

	/* Status (foreground + soft background pairs, all contrast-verified) */
	--evnm-success: #00733f;
	--evnm-success-soft: #edfaef;
	--evnm-warning: #8a6100;
	--evnm-warning-soft: #fcf3e3;
	--evnm-danger: #b32d2e;
	--evnm-danger-soft: #fcf0f1;
	--evnm-info: #2271b1;
	--evnm-info-soft: #f0f6fc;

	/* Spacing scale (8-step) */
	--evnm-space-xs: 4px;
	--evnm-space-sm: 8px;
	--evnm-space-md: 12px;
	--evnm-space-lg: 16px;
	--evnm-space-xl: 20px;
	--evnm-space-2xl: 24px;
	--evnm-space-3xl: 32px;
	--evnm-space-4xl: 48px;

	/* Radius */
	--evnm-radius-sm: 4px;
	--evnm-radius-md: 8px;
	--evnm-radius-lg: 12px;
	--evnm-radius-full: 9999px;

	/* Shadow */
	--evnm-shadow-sm: 0 1px 2px rgba( 0, 0, 0, 0.05 );
	--evnm-shadow-md: 0 2px 8px rgba( 0, 0, 0, 0.08 );
	--evnm-shadow-lg: 0 12px 28px rgba( 0, 0, 0, 0.12 );
	/* Upward shadow for pinned bottom bars (sticky action/save bars). */
	--evnm-shadow-up: 0 -6px 16px rgba( 0, 0, 0, 0.08 );

	/* Typography — chain to the theme's body font (BuddyX exposes
	   --global-font-family; Reign/others fall through to `inherit` = the theme
	   body font) so event pages match the site. Admin re-defines this token below
	   with a fixed stack, since wp-admin has its own font context. */
	--evnm-font: var( --global-font-family, inherit );
	--evnm-fs-sm: 12px;
	--evnm-fs-base: 13px;
	--evnm-fs-md: 14px;
	--evnm-fs-lg: 16px;
	--evnm-fs-xl: 20px;
	--evnm-fs-2xl: 24px;

	/* Controls */
	--evnm-control-h: 40px;
	--evnm-control-h-sm: 32px;
	--evnm-badge-size: 20px;

	/* Motion */
	--evnm-transition: 160ms cubic-bezier( 0.4, 0, 0.2, 1 );
	--evnm-transition-slow: 300ms cubic-bezier( 0.4, 0, 0.2, 1 );
}

.evnm-admin {
	/* wp-admin has no theme body font to inherit — keep a fixed system stack. */
	--evnm-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-family: var( --evnm-font );
	color: var( --evnm-text );
}

/* ============================================================
   Frontend page shell — the premium container for every
   Eventonomy frontend surface (calendar, list, single, editor).
   ============================================================ */
.evnm-fullwidth {
	width: 100%;
}

.evnm-page {
	max-width: 1200px;
	margin-inline: auto;
	padding: var( --evnm-space-3xl ) var( --evnm-space-xl );
}

/* Shared frontend navigation across event surfaces. */
.evnm-event-nav {
	display: flex;
	flex-wrap: wrap;
	gap: var( --evnm-space-xs );
	margin-block-end: var( --evnm-space-2xl );
	padding-block-end: var( --evnm-space-md );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-event-nav__link {
	display: inline-flex;
	align-items: center;
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-lg );
	border-radius: var( --evnm-radius-md );
	color: var( --evnm-text-muted );
	font-weight: 600;
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition );
}

.evnm-event-nav__link:hover {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text );
}

.evnm-event-nav__link.is-active {
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
}

.evnm-event-nav__link:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

/* Space stacked Eventonomy blocks on a browse page. */
.evnm-page > * + * {
	margin-block-start: var( --evnm-space-2xl );
}

/* Frontend dark mode — switch the plugin's surfaces/text to dark whenever
   the host theme signals dark. The Wbcom family (BuddyX 5.1+, BuddyX-Pro,
   Reign 8+) emits these signals, all covered here:
     - `[data-bx-mode="dark"]`  modern shared toggle on <html> (explicit dark)
     - `[data-bx-mode="auto"]`  modern toggle following the OS (see @media below)
     - `body.dark-scheme`       legacy Reign customizer colour scheme
     - `.dark-mode`             legacy BuddyX html/body dark class
   Only the plugin reads --evnm-*, so overriding them never affects the
   theme's own styles. Mirrors Reign's own `.dark-scheme,[data-bx-mode=dark]`. */
/* Single dark palette for every class-based trigger - the frontend theme
   signals above PLUS the admin's manual [data-theme="dark"] opt-in (we never
   fight wp-admin's light chrome unless the surface explicitly requests it). One
   selector list = one source of truth, so a token change can't drift between
   triggers (the drift that once made Reign dark render light cards). */
.dark-mode,
body.dark-scheme,
[data-bx-mode="dark"],
.evnm-admin[data-theme="dark"] {
	--evnm-bg: #1a1c1f;
	--evnm-surface: #26282b;
	--evnm-surface-alt: #2f3135;
	--evnm-text: #f0f0f1;
	--evnm-text-muted: #c3c4c7;
	--evnm-text-tertiary: #a7aaad;
	--evnm-border: #3c3f44;
	--evnm-border-strong: #4f5359;
	--evnm-accent-soft: #233044;
}

/* Modern toggle set to "auto" follows the operating-system preference. NOTE:
   a media query cannot share a selector list with the class triggers above, so
   these values are duplicated - keep them IN SYNC with the palette above. */
@media ( prefers-color-scheme: dark ) {
	[data-bx-mode="auto"] {
		--evnm-bg: #1a1c1f;
		--evnm-surface: #26282b;
		--evnm-surface-alt: #2f3135;
		--evnm-text: #f0f0f1;
		--evnm-text-muted: #c3c4c7;
		--evnm-text-tertiary: #a7aaad;
		--evnm-border: #3c3f44;
		--evnm-border-strong: #4f5359;
		--evnm-accent-soft: #233044;
	}
}

/* ============================================================
   Page shell
   ============================================================ */
.evnm-admin {
	margin-inline-end: 20px;
}

.evnm-admin .evnm-admin-header {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	gap: var( --evnm-space-md );
	padding: 0 0 var( --evnm-space-lg );
	margin-block-end: var( --evnm-space-xl );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-admin-header__titles {
	min-width: 0;
}

/* Brand bar — consistent across every page; one primary action on the right. */
.evnm-admin .evnm-admin-header__bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-sm );
}

.evnm-admin .evnm-admin-header__brand {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	color: var( --evnm-accent );
}

.evnm-admin .evnm-admin-header__brand-name {
	font-size: var( --evnm-fs-md );
	font-weight: 700;
	letter-spacing: 0.01em;
	color: var( --evnm-text );
}

.evnm-admin .evnm-admin-header__version {
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
	color: var( --evnm-text-muted );
	background: var( --evnm-surface-alt );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-full, 999px );
	padding: 1px 8px;
}

.evnm-admin .evnm-admin-header__action {
	flex: 0 0 auto;
}

.evnm-admin .evnm-admin-header__title {
	margin: 0;
	padding: 0;
	font-size: var( --evnm-fs-2xl );
	font-weight: 600;
	line-height: 1.2;
	color: var( --evnm-text );
}

.evnm-admin .evnm-admin-header__desc {
	margin: var( --evnm-space-xs ) 0 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-admin-body {
	/* Fill the wp-admin content area. A fixed 1180px cap left a large blank
	   column on the right of wide screens (the full-bleed data pages - Events,
	   Attendees - use this body, while the shell pages already fill), so the
	   admin looked half-empty and inconsistent. Fill the width like WP's own
	   list tables; inner forms keep their own readable widths. */
	max-width: none;
}

/* ============================================================
   Operations Console shell (Phase 1 keystone) — authored once in
   AbstractAdminPage::render() + AdminMenu::render_rail(). Top bar +
   left rail + main content slot. Tokens only; logical props for RTL.
   ============================================================ */
.evnm-admin .evnm-shell {
	--evnm-rail-w: 248px;
	--evnm-rail-w-collapsed: 64px;
	--evnm-topbar-h: 56px;
	display: flex;
	flex-direction: column;
	min-height: calc( 100vh - 32px );
	margin-inline-start: -20px; /* bleed to the wp-admin content edge */
	background: var( --evnm-bg );
}

/* Reset the legacy outer margin when the shell is in play. */
.evnm-admin {
	margin-inline-end: 0;
}

/* ---- Top bar ---------------------------------------------------- */
.evnm-admin .evnm-shell__topbar {
	position: sticky;
	inset-block-start: 32px; /* below the wp-admin bar */
	z-index: 20;
	display: flex;
	align-items: center;
	gap: var( --evnm-space-lg );
	min-height: var( --evnm-topbar-h );
	padding: var( --evnm-space-sm ) var( --evnm-space-xl );
	background: var( --evnm-surface );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-shell__rail-toggle {
	display: none; /* shown <=640px */
	align-items: center;
	justify-content: center;
	width: var( --evnm-control-h );
	height: var( --evnm-control-h );
	padding: 0;
	color: var( --evnm-text-muted );
	background: transparent;
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	cursor: pointer;
}

.evnm-admin .evnm-shell__rail-toggle:hover {
	color: var( --evnm-text );
	background: var( --evnm-surface-alt );
}

.evnm-admin .evnm-shell__rail-toggle:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-admin .evnm-shell__brand {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	color: var( --evnm-accent );
	text-decoration: none;
	flex: 0 0 auto;
}

.evnm-admin .evnm-shell__brand-name {
	font-size: var( --evnm-fs-md );
	font-weight: 700;
	letter-spacing: 0.01em;
	color: var( --evnm-text );
}

.evnm-admin .evnm-shell__version {
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
	color: var( --evnm-text-muted );
	background: var( --evnm-surface-alt );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-full );
	padding: 1px 8px;
}

.evnm-admin .evnm-shell__breadcrumb {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	min-width: 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-shell__crumb {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.evnm-admin .evnm-shell__crumb--current {
	color: var( --evnm-text );
	font-weight: 600;
}

.evnm-admin .evnm-shell__crumb-sep {
	color: var( --evnm-border-strong );
}

.evnm-admin .evnm-shell__topbar-actions {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	margin-inline-start: auto;
	flex: 0 0 auto;
}

.evnm-admin .evnm-shell__search {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: var( --evnm-control-h );
	height: var( --evnm-control-h );
	color: var( --evnm-text-muted );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	text-decoration: none;
}

.evnm-admin .evnm-shell__search:hover {
	color: var( --evnm-text );
	background: var( --evnm-surface-alt );
}

.evnm-admin .evnm-shell__search:focus-visible,
.evnm-admin .evnm-shell__create:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

/* ---- Health chip ----------------------------------------------- */
.evnm-admin .evnm-health-chip {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-md );
	font-size: var( --evnm-fs-base );
	font-weight: 600;
	text-decoration: none;
	border: 1px solid transparent;
	border-radius: var( --evnm-radius-full );
}

/* Count badge inside the chip — hidden on wide screens (the full label says
   the number); shown only at <=640px where the label collapses. */
.evnm-admin .evnm-health-chip__count {
	display: none;
	font-weight: 700;
}

.evnm-admin .evnm-health-chip--ok {
	color: var( --evnm-success );
	background: var( --evnm-success-soft );
	border-color: var( --evnm-success-soft );
}

.evnm-admin .evnm-health-chip--warning {
	color: var( --evnm-warning );
	background: var( --evnm-warning-soft );
	border-color: var( --evnm-warning-soft );
}

.evnm-admin .evnm-health-chip:hover {
	border-color: currentColor;
}

.evnm-admin .evnm-health-chip:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

/* ---- Body: rail + main ----------------------------------------- */
.evnm-admin .evnm-shell__body {
	display: grid;
	grid-template-columns: var( --evnm-rail-w ) minmax( 0, 1fr );
	align-items: start;
	flex: 1 1 auto;
}

/* Full-bleed data screens (Events, Attendees & Orders): no rail, single
   column, so the filter bar + table get the whole width at scale (Rule 17). */
.evnm-admin .evnm-shell__body--full {
	grid-template-columns: minmax( 0, 1fr );
}

/* Screen-reader-only utility (visible to AT, hidden visually). */
.evnm-admin .evnm-sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect( 0 0 0 0 );
	white-space: nowrap;
	border: 0;
}

/* ---- Left rail -------------------------------------------------- */
.evnm-admin .evnm-shell__rail {
	position: sticky;
	inset-block-start: calc( 32px + var( --evnm-topbar-h ) );
	align-self: start;
	max-height: calc( 100vh - 32px - var( --evnm-topbar-h ) );
	overflow-y: auto;
	padding: var( --evnm-space-lg ) var( --evnm-space-md );
	background: var( --evnm-surface );
	border-inline-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-rail__group + .evnm-rail__group {
	margin-block-start: var( --evnm-space-lg );
}

.evnm-admin .evnm-rail__group-label {
	margin: 0 0 var( --evnm-space-xs );
	padding-inline: var( --evnm-space-sm );
	font-size: var( --evnm-fs-sm );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-rail__item {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-md );
	margin-block-end: 2px;
	border-radius: var( --evnm-radius-md );
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-md );
	font-weight: 500;
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition );
}

.evnm-admin .evnm-rail__item:hover {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text );
}

.evnm-admin .evnm-rail__item:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-admin .evnm-rail__item.is-active {
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
	font-weight: 600;
}

.evnm-admin .evnm-rail__item.is-locked {
	color: var( --evnm-text-tertiary );
	cursor: not-allowed;
}

.evnm-admin .evnm-rail__item.is-locked:hover {
	background: transparent;
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-rail__label {
	flex: 1 1 auto;
	min-width: 0;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.evnm-admin .evnm-rail__badge {
	flex: 0 0 auto;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.04em;
	color: var( --evnm-accent );
	background: var( --evnm-accent-soft );
	border: 1px solid var( --evnm-accent-soft );
	border-radius: var( --evnm-radius-sm );
	padding: 1px 6px;
}

/* ---- Nested sub-nav (Rule 17): Settings sections inside the one rail ---- */
.evnm-admin .evnm-rail__sub {
	display: flex;
	flex-direction: column;
	gap: 2px;
	margin: var( --evnm-space-xs ) 0 var( --evnm-space-sm );
	/* Indent + guide line align the children under the parent item's label. */
	padding-inline-start: var( --evnm-space-md );
	margin-inline-start: calc( var( --evnm-space-md ) + 9px );
	border-inline-start: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-rail__sub-item {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	min-height: 36px;
	padding: 0 var( --evnm-space-md );
	border-radius: var( --evnm-radius-md );
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-sm );
	font-weight: 500;
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition );
}

.evnm-admin .evnm-rail__sub-item:hover {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text );
}

.evnm-admin .evnm-rail__sub-item:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-admin .evnm-rail__sub-item.is-active {
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
	font-weight: 600;
}

.evnm-admin .evnm-rail__sub-item .evnm-icon {
	color: currentColor;
	opacity: 0.85;
}

.evnm-admin .evnm-rail__sub-label {
	flex: 1 1 auto;
	min-width: 0;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* ---- Main content slot ----------------------------------------- */
.evnm-admin .evnm-shell__main {
	min-width: 0;
	padding: var( --evnm-space-2xl ) var( --evnm-space-3xl );
}

.evnm-admin .evnm-shell__main .evnm-admin-header {
	padding-block-start: 0;
}

/* ============================================================
   Card primitive
   ============================================================ */
.evnm-admin .evnm-card {
	background: var( --evnm-surface );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-lg );
	box-shadow: var( --evnm-shadow-sm );
	padding: var( --evnm-space-2xl );
	margin-block-end: var( --evnm-space-xl );
}

.evnm-admin .evnm-card__title,
.evnm-admin .evnm-card-title {
	margin: 0 0 var( --evnm-space-xs );
	padding: 0;
	font-size: var( --evnm-fs-lg );
	font-weight: 600;
	line-height: 1.3;
	color: var( --evnm-text );
}

.evnm-admin .evnm-card__desc {
	margin: 0 0 var( --evnm-space-lg );
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-card__title + .evnm-card__desc {
	margin-block-start: calc( -1 * var( --evnm-space-xs ) );
}

/* Auto-wrap legacy WP markup (h2 + form-table) so it inherits card rhythm. */
.evnm-admin .evnm-card > h2:first-child {
	margin-block-start: 0;
}

/* Premium form card (Learnomy/Jetonomy form-table): a tinted section head over
   divided 2-column rows. The fields are direct children of the card. */
.evnm-admin .evnm-card--form {
	padding: 0;
	overflow: hidden;
}

.evnm-admin .evnm-card--form .evnm-card__head {
	padding: var( --evnm-space-lg ) var( --evnm-space-2xl );
	background: var( --evnm-surface-alt );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-card--form .evnm-card__title {
	margin: 0;
	font-size: var( --evnm-fs-sm );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
}

.evnm-admin .evnm-card--form .evnm-card__desc {
	margin: 4px 0 0;
}

/* Each direct-child field is a divided form-table row. */
.evnm-admin .evnm-card--form > .evnm-field {
	padding: var( --evnm-space-lg ) var( --evnm-space-2xl );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-card--form > .evnm-field:last-child {
	border-block-end: 0;
}

/* Standalone notes inside a form card (e.g. live preview, Pro note) get row padding. */
.evnm-admin .evnm-card--form > .evnm-note {
	margin: 0;
	padding: var( --evnm-space-md ) var( --evnm-space-2xl );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-card--form > .evnm-note:last-child {
	border-block-end: 0;
}

/* ============================================================
   Button primitive (+ restyle native WP buttons inside our scope)
   ============================================================ */
.evnm-btn,
.evnm-admin .button,
.evnm-admin .button-primary,
.evnm-admin .button-secondary {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var( --evnm-space-sm );
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-lg );
	border: 1px solid var( --evnm-border-strong );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface );
	color: var( --evnm-text );
	font-size: var( --evnm-fs-md );
	font-weight: 500;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
	transition: background var( --evnm-transition ), border-color var( --evnm-transition ), box-shadow var( --evnm-transition );
}

.evnm-btn:hover,
.evnm-admin .button:hover,
.evnm-admin .button-secondary:hover {
	background: var( --evnm-surface-alt );
	border-color: var( --evnm-accent );
	color: var( --evnm-accent );
}

/* Disabled state: dim, block the pointer, and suppress the hover lift so a
   disabled button (e.g. a full event's RSVP) reads and behaves as inert. */
.evnm-btn:disabled,
.evnm-btn[disabled],
.evnm-btn[aria-disabled="true"] {
	opacity: 0.5;
	cursor: not-allowed;
	box-shadow: none;
}

.evnm-btn:disabled:hover,
.evnm-btn[disabled]:hover,
.evnm-btn[aria-disabled="true"]:hover {
	box-shadow: none;
	transform: none;
}

.evnm-btn--primary,
.evnm-admin .button-primary,
.evnm-admin input[type="submit"].button-primary,
.evnm-admin .button.button-primary {
	background: var( --evnm-accent );
	border-color: var( --evnm-accent );
	color: var( --evnm-accent-contrast );
}

.evnm-btn--primary:hover,
.evnm-admin .button-primary:hover,
.evnm-admin .button.button-primary:hover {
	background: var( --evnm-accent-hover );
	border-color: var( --evnm-accent-hover );
	color: var( --evnm-accent-contrast );
}

.evnm-btn--ghost {
	background: transparent;
	border-color: transparent;
	color: var( --evnm-accent );
}

.evnm-btn--danger {
	background: var( --evnm-danger );
	border-color: var( --evnm-danger );
	color: var( --evnm-accent-contrast, #fff );
}

/* Compact button for inline table actions (e.g. the Events row "Edit"). */
.evnm-btn--sm {
	min-height: var( --evnm-control-h-sm );
	padding: 0 var( --evnm-space-md );
	font-size: var( --evnm-fs-sm );
}

/* Theme-bleed guard (frontend): aggressive host themes (notably BuddyX) skin
   every bare <button> with a very high-specificity, non-!important rule -
   `button:not([class*=wp-])…{ background: var(--bx-color-accent); color:#fff }`
   (~9 negations) - which repaints our <button>-based .evnm-btn elements
   (ghost/neutral/danger) as solid brand pills, white text. A plain (0,2,0)
   class can't out-specify ~(0,9,1), so re-assert the plugin's button component
   inside our frontend block wrappers (.evnm-dash, .evnm-event-editor) with
   !important on the colour-bearing properties. The theme rule is NOT !important,
   so this wins cleanly; values stay token-driven (so a primary button still
   adopts the host brand accent, dark mode still adapts); wp-admin has no theme
   to fight, so the global, non-!important rules above suffice there. */
.evnm-dash .evnm-btn,
.evnm-event-editor .evnm-btn {
	background: var( --evnm-surface ) !important;
	border: 1px solid var( --evnm-border-strong ) !important;
	color: var( --evnm-text ) !important;
	box-shadow: none !important;
	text-shadow: none !important;
}

.evnm-dash .evnm-btn:hover,
.evnm-event-editor .evnm-btn:hover {
	background: var( --evnm-surface-alt ) !important;
	border-color: var( --evnm-accent ) !important;
	color: var( --evnm-accent ) !important;
}

.evnm-dash .evnm-btn--primary,
.evnm-event-editor .evnm-btn--primary {
	background: var( --evnm-accent ) !important;
	border-color: var( --evnm-accent ) !important;
	color: var( --evnm-accent-contrast ) !important;
}

.evnm-dash .evnm-btn--primary:hover,
.evnm-event-editor .evnm-btn--primary:hover {
	background: var( --evnm-accent-hover ) !important;
	border-color: var( --evnm-accent-hover ) !important;
	color: var( --evnm-accent-contrast ) !important;
}

.evnm-dash .evnm-btn--ghost,
.evnm-event-editor .evnm-btn--ghost {
	background: transparent !important;
	border-color: transparent !important;
	color: var( --evnm-accent ) !important;
}

.evnm-dash .evnm-btn--danger,
.evnm-event-editor .evnm-btn--danger {
	background: var( --evnm-danger ) !important;
	border-color: var( --evnm-danger ) !important;
	color: var( --evnm-accent-contrast, #fff ) !important;
}

/* ============================================================
   Input primitive (+ restyle WP form controls inside our scope)
   ============================================================ */
.evnm-admin .evnm-input,
.evnm-admin input[type="text"],
.evnm-admin input[type="email"],
.evnm-admin input[type="url"],
.evnm-admin input[type="number"],
.evnm-admin input[type="search"],
.evnm-admin input[type="password"],
.evnm-admin select,
.evnm-admin textarea,
.evnm-admin .regular-text {
	box-sizing: border-box;
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-md );
	border: 1px solid var( --evnm-border-strong );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface );
	color: var( --evnm-text );
	font-size: var( --evnm-fs-md );
	line-height: var( --evnm-control-h );
	box-shadow: none;
	transition: border-color var( --evnm-transition ), box-shadow var( --evnm-transition );
}

.evnm-admin textarea {
	min-height: calc( var( --evnm-control-h ) * 2 );
	padding-block: var( --evnm-space-sm );
	line-height: 1.5;
}

.evnm-admin .evnm-input:focus,
.evnm-admin input[type="text"]:focus,
.evnm-admin input[type="number"]:focus,
.evnm-admin select:focus,
.evnm-admin textarea:focus,
.evnm-admin .regular-text:focus {
	border-color: var( --evnm-accent );
	box-shadow: 0 0 0 1px var( --evnm-accent );
	outline: 2px solid transparent;
}

/* Field grouping */
/* Form row — Learnomy/Jetonomy 2-column form-table: label left, control right,
   help under the control. Used in plain form cards AND feature config blocks. */
.evnm-admin .evnm-field {
	display: grid;
	grid-template-columns: minmax( 150px, 220px ) minmax( 0, 1fr );
	column-gap: var( --evnm-space-2xl );
	align-items: start;
	margin: 0;
	/* Universal fallback spacing so any .evnm-field (including Pro-rendered ones
	   outside a --form card) never touches its neighbour. Form/feature cards
	   override this with their own divided-row padding below. */
	padding-block: var( --evnm-space-md );
}

/* "A key is saved: ••••" confirmation under a secret/API-key field. */
.evnm-admin .evnm-field__saved {
	grid-column: 2;
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-2xs, 4px );
	margin-block-start: var( --evnm-space-2xs, 4px );
	font-size: var( --evnm-fs-sm );
	color: var( --evnm-success, #1a7f37 );
}

.evnm-admin .evnm-field__saved code {
	color: var( --evnm-text-muted );
	letter-spacing: 0.05em;
}

.evnm-admin .evnm-field > label {
	grid-column: 1;
	grid-row: 1;
	padding-block-start: 7px;
	font-size: var( --evnm-fs-md );
	font-weight: 600;
	line-height: 1.4;
	color: var( --evnm-text );
}

.evnm-admin .evnm-field > .evnm-input,
.evnm-admin .evnm-field > select,
.evnm-admin .evnm-field > input,
.evnm-admin .evnm-field > textarea {
	grid-column: 2;
	grid-row: 1;
	width: 100%;
	max-width: 460px;
}

.evnm-admin .evnm-field > input[type="number"] {
	max-width: 180px;
}

.evnm-admin .evnm-field > textarea {
	max-width: 560px;
}

/* Pro email-template groups (Notifications tab). The fieldset is a plain
   grouping wrapper around stacked .evnm-field rows; the legend titles each
   template. Reset native fieldset chrome so it sits flush in the card. */
.evnm-admin .evnm-email-tpl {
	margin: 0;
	padding: var( --evnm-space-md ) 0 0;
	border: 0;
	border-block-start: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-email-tpl:first-of-type {
	border-block-start: 0;
}

.evnm-admin .evnm-email-tpl__title {
	float: none;
	width: auto;
	padding: 0;
	margin-block-end: var( --evnm-space-xs );
	font-size: var( --evnm-fs-md );
	font-weight: 600;
	color: var( --evnm-text );
}

.evnm-admin .evnm-field > .evnm-note {
	grid-column: 2;
	grid-row: 2;
	margin-block-start: var( --evnm-space-xs );
}

/* Checkbox row: label left (like every other row), the box in the control column. */
.evnm-admin .evnm-field--checkbox > label {
	cursor: pointer;
	padding-block-start: 0;
}

.evnm-admin .evnm-field--checkbox > input[type="checkbox"] {
	grid-column: 2;
	grid-row: 1;
	width: 20px;
	height: 20px;
	min-height: 20px;
	max-width: none;
	margin: 0;
	cursor: pointer;
}

/* A fieldset of related checkboxes (e.g. enabled views) spans the control col.
   Each choice is a neat inline-flex chip that wraps with clear spacing instead
   of running together on one cramped line. */
.evnm-admin .evnm-field--checkgroup {
	display: block;
}

.evnm-admin .evnm-field--checkgroup > .evnm-note {
	display: block;
	margin-block: var( --evnm-space-xs ) var( --evnm-space-sm );
}

.evnm-admin .evnm-field--checkgroup .evnm-field--checkbox {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	margin-inline-end: var( --evnm-space-lg );
	margin-block-end: var( --evnm-space-xs );
	cursor: pointer;
}

.evnm-admin .evnm-field--checkgroup .evnm-field--checkbox > input[type="checkbox"] {
	grid-column: auto;
	grid-row: auto;
	width: 18px;
	height: 18px;
	margin: 0;
}

/* Pro-locked field on Free: visibly inert (the Pro note above explains why). */
.evnm-admin .evnm-field--disabled {
	opacity: 0.55;
}

.evnm-admin .evnm-field--disabled .evnm-input {
	cursor: not-allowed;
}

/* Capability (feature) card — identical form-table shell as plain cards: a
   tinted head whose toggle turns the feature on/off, then divided config rows. */
.evnm-admin .evnm-feature__row {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	margin: 0;
	cursor: pointer;
}

.evnm-admin .evnm-feature__input {
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
	min-height: 20px;
	margin: 0;
}

/* Pro-only capability with Pro inactive: the toggle is disabled (does nothing
   without the add-on). Dim the head and show a not-allowed cursor so it reads
   as locked rather than broken; the "Pro" badge + note explain why. */
.evnm-admin .evnm-feature.is-pro-locked .evnm-feature__head {
	opacity: 0.65;
}

.evnm-admin .evnm-feature.is-pro-locked .evnm-feature__row,
.evnm-admin .evnm-feature.is-pro-locked .evnm-feature__input {
	cursor: not-allowed;
}

.evnm-admin .evnm-feature__pro {
	margin-inline-start: var( --evnm-space-xs );
	vertical-align: middle;
}

.evnm-admin .evnm-feature__label {
	font-size: var( --evnm-fs-sm );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var( --evnm-text );
}

.evnm-admin .evnm-feature__desc {
	/* Align under the label text, past the checkbox + gap. */
	margin: var( --evnm-space-xs ) 0 0;
	padding-inline-start: calc( 20px + var( --evnm-space-sm ) );
}

/* Collapsed feature: the head carries no bottom divider (nothing below it). */
.evnm-admin .evnm-feature:not( .is-open ) .evnm-feature__head {
	border-block-end: 0;
}

/* Inline capability settings — revealed on the same screen when enabled, as a
   plain body of divided form-table rows (no nested accent box). */
.evnm-admin .evnm-feature__config {
	display: none;
	padding: 0;
	margin: 0;
	border: 0;
	background: transparent;
}

.evnm-admin .evnm-feature.is-open .evnm-feature__config {
	display: block;
}

.evnm-admin .evnm-feature__config > .evnm-field {
	padding: var( --evnm-space-lg ) var( --evnm-space-2xl );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-feature__config > .evnm-field:last-child {
	border-block-end: 0;
}

/* Non-field config content (questions repeater, notes, gateway panels, Pro
   slots) keeps comfortable padding so it isn't flush to the card edge. */
.evnm-admin .evnm-feature__config > :not( .evnm-field ) {
	padding-inline: var( --evnm-space-2xl );
}

.evnm-admin .evnm-feature__config > :not( .evnm-field ):first-child {
	padding-block-start: var( --evnm-space-lg );
}

.evnm-admin .evnm-feature__config > :not( .evnm-field ):last-child {
	padding-block-end: var( --evnm-space-lg );
}

/* Questions tab previews its example even while the feature is off, so the
   section is never blank. Keep the head divider since a body follows. */
.evnm-admin .evnm-feature[ data-evnm-feature="custom_questions" ] .evnm-feature__config {
	display: block;
}

.evnm-admin .evnm-feature[ data-evnm-feature="custom_questions" ]:not( .is-open ) .evnm-feature__head {
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-questions--preview {
	opacity: 0.65;
}

/* Custom-questions repeater (Settings → Registration). */
.evnm-admin .evnm-question {
	margin-block-end: var( --evnm-space-md );
	padding: var( --evnm-space-md );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface );
}

.evnm-admin .evnm-question__actions {
	margin-block-end: 0;
}

.evnm-admin .evnm-questions__actions {
	margin-block-start: var( --evnm-space-md );
}

/* Payment gateway panels — only the selected gateway is shown. */
.evnm-admin .evnm-gateway {
	display: none;
}

.evnm-admin .evnm-gateway.is-active {
	display: block;
}

.evnm-admin .evnm-input--readonly {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
	font-family: var( --evnm-font-mono, monospace );
	font-size: var( --evnm-fs-sm );
}

.evnm-admin .evnm-gateway__guide {
	margin-block-start: var( --evnm-space-md );
	padding: var( --evnm-space-md ) var( --evnm-space-lg );
	background: var( --evnm-accent-soft );
	border-radius: var( --evnm-radius-md );
}

.evnm-admin .evnm-gateway__guide-title {
	margin: 0 0 var( --evnm-space-xs );
	font-weight: 600;
	font-size: var( --evnm-fs-sm );
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-gateway__guide-steps {
	margin: 0 0 var( --evnm-space-sm );
	padding-inline-start: var( --evnm-space-lg );
	color: var( --evnm-text );
}

.evnm-admin .evnm-gateway__guide-steps li {
	margin-block-end: var( --evnm-space-xs );
}

.evnm-admin .evnm-gateway__guide-link {
	font-weight: 600;
	font-size: var( --evnm-fs-sm );
}

.evnm-admin fieldset {
	border: 0;
	margin: 0;
	padding: 0;
}

/* ============================================================
   Badge primitive
   ============================================================ */
.evnm-admin .evnm-badge {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	padding: 2px var( --evnm-space-sm );
	border-radius: var( --evnm-radius-full );
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
	line-height: 1.6;
	text-transform: capitalize;
}

.evnm-admin .evnm-badge--ok,
.evnm-admin .evnm-badge--success {
	background: var( --evnm-success-soft );
	color: var( --evnm-success );
}

.evnm-admin .evnm-badge--missing,
.evnm-admin .evnm-badge--danger {
	background: var( --evnm-danger-soft );
	color: var( --evnm-danger );
}

.evnm-admin .evnm-badge--warning {
	background: var( --evnm-warning-soft );
	color: var( --evnm-warning );
}

.evnm-admin .evnm-badge--info {
	background: var( --evnm-info-soft );
	color: var( --evnm-info );
}

/* ============================================================
   Empty-state primitive
   ============================================================ */
.evnm-admin .evnm-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var( --evnm-space-sm );
	padding: var( --evnm-space-3xl ) var( --evnm-space-xl );
	border: 1px dashed var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
	text-align: center;
	font-size: var( --evnm-fs-md );
}

.evnm-admin .evnm-empty__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	border-radius: var( --evnm-radius-full, 999px );
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
}

.evnm-admin .evnm-empty__title {
	margin: 0;
	font-size: var( --evnm-fs-lg );
	font-weight: 600;
	color: var( --evnm-text );
}

.evnm-admin .evnm-empty__body {
	margin: 0;
	max-width: 32rem;
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-empty__cta {
	margin-block-start: var( --evnm-space-xs );
}

/* ============================================================
   Settings — sidebar nav layout (Pattern A)
   ============================================================ */
/* Shared Lucide icon primitive (inherits color via currentColor). */
.evnm-icon {
	display: inline-block;
	flex: 0 0 auto;
	vertical-align: middle;
}

/* Rule 17: the settings section nav lives in the shell rail (.evnm-rail__sub),
   not in a second sidebar here. The pane is a single full-width column; only
   the ?tab= panel shows (server-driven, so it works with JS off too). */
.evnm-admin .evnm-settings__pane {
	min-width: 0;
}

.evnm-admin .evnm-settings__panel {
	display: none;
}

.evnm-admin .evnm-settings__panel.is-active {
	display: block;
}

.evnm-admin .evnm-settings__pane .submit {
	margin: 0;
	padding: var( --evnm-space-lg ) 0 0;
}

/* ============================================================
   Dashboard — stat cards (Pattern B)
   ============================================================ */
.evnm-admin .evnm-stats-row {
	display: grid;
	grid-template-columns: repeat( 4, 1fr );
	gap: var( --evnm-space-lg );
}

.evnm-admin .evnm-stat {
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-xs );
	padding: var( --evnm-space-lg );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface-alt );
}

.evnm-admin .evnm-stat__count {
	font-size: var( --evnm-fs-2xl );
	font-weight: 700;
	line-height: 1.1;
	color: var( --evnm-text );
}

.evnm-admin .evnm-stat__label {
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

/* Recent list */
.evnm-admin .evnm-recent-list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.evnm-admin .evnm-recent-list__item {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-md );
	padding: var( --evnm-space-md ) 0;
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-recent-list__item:last-child {
	border-block-end: 0;
}

.evnm-admin .evnm-recent-list__title {
	font-weight: 500;
	color: var( --evnm-text );
}

.evnm-admin .evnm-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var( --evnm-space-sm );
	margin: 0;
}

/* ============================================================
   Command Center — KPI grid (Pattern B, linked stat cards)
   ============================================================ */
.evnm-admin .evnm-kpi-grid {
	display: grid;
	grid-template-columns: repeat( 4, 1fr );
	gap: var( --evnm-space-lg );
	margin-block-end: var( --evnm-space-xl );
}

.evnm-admin .evnm-kpi {
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-xs );
	padding: var( --evnm-space-xl );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-lg );
	background: var( --evnm-surface );
	box-shadow: var( --evnm-shadow-sm );
	color: var( --evnm-text );
	text-decoration: none;
	transition: border-color var( --evnm-transition ), box-shadow var( --evnm-transition ), transform var( --evnm-transition );
}

.evnm-admin .evnm-kpi:hover,
.evnm-admin .evnm-kpi:focus-visible {
	border-color: var( --evnm-accent );
	box-shadow: var( --evnm-shadow-md );
}

.evnm-admin .evnm-kpi__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	margin-block-end: var( --evnm-space-xs );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
}

.evnm-admin .evnm-kpi__value {
	font-size: var( --evnm-fs-2xl );
	font-weight: 700;
	line-height: 1.1;
	color: var( --evnm-text );
}

.evnm-admin .evnm-kpi__label {
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

/* ============================================================
   Setup & Health — setup-state banner
   ============================================================ */
.evnm-admin .evnm-setup-banner {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-lg );
	border-inline-start-width: 3px;
}

.evnm-admin .evnm-setup-banner.is-incomplete {
	border-inline-start-color: var( --evnm-warning );
	background: var( --evnm-warning-soft );
}

.evnm-admin .evnm-setup-banner.is-complete {
	border-inline-start-color: var( --evnm-success );
	background: var( --evnm-success-soft );
}

.evnm-admin .evnm-setup-banner__icon {
	display: inline-flex;
	flex-shrink: 0;
	align-items: center;
	justify-content: center;
}

.evnm-admin .evnm-setup-banner.is-incomplete .evnm-setup-banner__icon {
	color: var( --evnm-warning );
}

.evnm-admin .evnm-setup-banner.is-complete .evnm-setup-banner__icon {
	color: var( --evnm-success );
}

.evnm-admin .evnm-setup-banner__text {
	flex: 1 1 auto;
	min-width: 0;
}

.evnm-admin .evnm-setup-banner__title {
	margin: 0 0 var( --evnm-space-xs );
	font-size: var( --evnm-fs-lg );
	font-weight: 600;
	color: var( --evnm-text );
}

.evnm-admin .evnm-setup-banner__body {
	margin: 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-setup-banner__action {
	flex-shrink: 0;
}

/* ============================================================
   Command Center — Needs attention panel (signature feature)
   ============================================================ */
.evnm-admin .evnm-attention__list {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-sm );
}

.evnm-admin .evnm-attention__row {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-md );
	padding: var( --evnm-space-md ) var( --evnm-space-lg );
	border: 1px solid var( --evnm-border );
	border-inline-start-width: 3px;
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface-alt );
}

.evnm-admin .evnm-attention__row.is-warning {
	border-inline-start-color: var( --evnm-warning );
	background: var( --evnm-warning-soft );
}

.evnm-admin .evnm-attention__row.is-info {
	border-inline-start-color: var( --evnm-info );
	background: var( --evnm-info-soft );
}

.evnm-admin .evnm-attention__icon {
	display: inline-flex;
	flex-shrink: 0;
	align-items: center;
	justify-content: center;
}

.evnm-admin .evnm-attention__row.is-warning .evnm-attention__icon {
	color: var( --evnm-warning );
}

.evnm-admin .evnm-attention__row.is-info .evnm-attention__icon {
	color: var( --evnm-info );
}

.evnm-admin .evnm-attention__message {
	flex: 1 1 auto;
	min-width: 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text );
}

.evnm-admin .evnm-attention__action {
	display: inline-flex;
	flex-shrink: 0;
	align-items: center;
	gap: var( --evnm-space-xs );
	min-height: var( --evnm-control-h );
	padding-inline: var( --evnm-space-sm );
	font-size: var( --evnm-fs-md );
	font-weight: 600;
	color: var( --evnm-accent );
	text-decoration: none;
	white-space: nowrap;
}

.evnm-admin .evnm-attention__action:hover,
.evnm-admin .evnm-attention__action:focus-visible {
	color: var( --evnm-accent-hover );
	text-decoration: underline;
}

/* ============================================================
   Command Center — Recent activity feed
   ============================================================ */
.evnm-admin .evnm-activity__list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.evnm-admin .evnm-activity__row {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-md );
	padding: var( --evnm-space-md ) 0;
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-activity__row:last-child {
	border-block-end: 0;
}

.evnm-admin .evnm-activity__icon {
	display: inline-flex;
	flex-shrink: 0;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border-radius: var( --evnm-radius-full );
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-activity__text {
	flex: 1 1 auto;
	min-width: 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text );
}

.evnm-admin .evnm-activity__time {
	flex-shrink: 0;
	font-size: var( --evnm-fs-sm );
	color: var( --evnm-text-tertiary );
	white-space: nowrap;
}

/* ============================================================
   Tab nav (Tools) — restyle native nav-tab-wrapper to pill tabs
   ============================================================ */
.evnm-admin .evnm-tab-nav.nav-tab-wrapper {
	margin: 0 0 var( --evnm-space-xl );
	padding: 0;
	border-block-end: 1px solid var( --evnm-border );
	display: flex;
	gap: var( --evnm-space-xs );
}

.evnm-admin .evnm-tab-nav .nav-tab {
	margin: 0;
	padding: var( --evnm-space-sm ) var( --evnm-space-lg );
	border: 0;
	border-block-end: 2px solid transparent;
	background: none;
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-md );
	font-weight: 500;
	border-radius: 0;
	transition: color var( --evnm-transition ), border-color var( --evnm-transition );
}

.evnm-admin .evnm-tab-nav .nav-tab:hover {
	color: var( --evnm-text );
}

.evnm-admin .evnm-tab-nav .nav-tab-active,
.evnm-admin .evnm-tab-nav .nav-tab-active:focus {
	color: var( --evnm-accent );
	border-block-end-color: var( --evnm-accent );
	background: none;
}

/* ============================================================
   Tables (health, events, attendees) — token-styled WP tables
   ============================================================ */
.evnm-admin .evnm-table-wrap {
	overflow-x: auto;
}

.evnm-admin .evnm-table,
.evnm-admin .evnm-health__table,
.evnm-admin table.widefat {
	width: 100%;
	border-collapse: collapse;
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	overflow: hidden;
	background: var( --evnm-surface );
}

.evnm-admin .evnm-table th,
.evnm-admin .evnm-health__table th,
.evnm-admin table.widefat th {
	padding: var( --evnm-space-md );
	text-align: start;
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.02em;
	color: var( --evnm-text-tertiary );
	background: var( --evnm-surface-alt );
	border-block-end: 1px solid var( --evnm-border );
}

.evnm-admin .evnm-table td,
.evnm-admin .evnm-health__table td,
.evnm-admin table.widefat td {
	padding: var( --evnm-space-md );
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text );
	border-block-end: 1px solid var( --evnm-border );
}

/* Table links (e.g. Reports event names) read as clean accent links, not raw
   underlined blue, so admin data tables look finished. */
.evnm-admin .evnm-table a {
	color: var( --evnm-accent );
	text-decoration: none;
	font-weight: 500;
}

.evnm-admin .evnm-table a:hover,
.evnm-admin .evnm-table a:focus-visible {
	text-decoration: underline;
}

.evnm-admin .evnm-table tr:last-child td,
.evnm-admin .evnm-health__table tr:last-child td {
	border-block-end: 0;
}

/* Status pills (health check) */
.evnm-admin .evnm-status {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	padding: 2px var( --evnm-space-sm );
	border-radius: var( --evnm-radius-full );
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
}

.evnm-admin .evnm-status--ok {
	background: var( --evnm-success-soft );
	color: var( --evnm-success );
}

.evnm-admin .evnm-status--warn {
	background: var( --evnm-warning-soft );
	color: var( --evnm-warning );
}

.evnm-admin .evnm-status--fail {
	background: var( --evnm-danger-soft );
	color: var( --evnm-danger );
}

/* ============================================================
   Misc list compositions (pages list, moderation, chips)
   ============================================================ */
.evnm-admin .evnm-pages-list,
.evnm-admin .evnm-moderation-list {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-sm );
}

.evnm-admin .evnm-pages-list__item,
.evnm-admin .evnm-moderation-item {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-md );
	padding: var( --evnm-space-md );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface-alt );
}

/* Status chip — SINGLE SOURCE consumed by BOTH the admin console and the
   front-end blocks (My Events). Unscoped on purpose: exactly one lifecycle
   palette, never re-authored per surface. */
.evnm-chip {
	display: inline-flex;
	align-items: center;
	padding: 2px var( --evnm-space-sm );
	border-radius: var( --evnm-radius-full );
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
}

.evnm-chip--published {
	background: var( --evnm-success-soft );
	color: var( --evnm-success );
}

.evnm-chip--pending {
	background: var( --evnm-warning-soft );
	color: var( --evnm-warning );
}

.evnm-chip--cancelled,
.evnm-chip--failed {
	background: var( --evnm-danger-soft );
	color: var( --evnm-danger );
}

.evnm-chip--paid {
	background: var( --evnm-success-soft );
	color: var( --evnm-success );
}

.evnm-chip--draft,
.evnm-chip--private,
.evnm-chip--past,
.evnm-chip--refunded {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-note,
.evnm-admin .description {
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-events-filter {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-md );
	margin-block-end: var( --evnm-space-lg );
}

/* Search (Events) — sits at the end of the filter bar (Learnomy pattern). */
.evnm-admin .evnm-events-search {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	margin-inline-start: auto;
}

.evnm-admin .evnm-events-search .evnm-input {
	min-width: 220px;
	max-width: 320px;
}

/* Pagination below the table. */
.evnm-admin .evnm-pagination {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-md );
	margin-block-start: var( --evnm-space-lg );
}

.evnm-admin .evnm-pagination__summary {
	margin: 0;
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-sm );
}

.evnm-admin .evnm-pagination__links {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 2px;
	margin-inline-start: auto;
}

.evnm-admin .evnm-pagination__links .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 34px;
	min-height: 34px;
	padding: 0 var( --evnm-space-sm );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md );
	color: var( --evnm-text );
	font-size: var( --evnm-fs-sm );
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition ), border-color var( --evnm-transition );
}

.evnm-admin .evnm-pagination__links a.page-numbers:hover {
	background: var( --evnm-surface-alt );
	border-color: var( --evnm-accent );
	color: var( --evnm-accent );
}

.evnm-admin .evnm-pagination__links a.page-numbers:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-admin .evnm-pagination__links .page-numbers.current {
	background: var( --evnm-accent );
	border-color: var( --evnm-accent );
	color: var( --evnm-accent-contrast, #fff );
	font-weight: 600;
}

.evnm-admin .evnm-pagination__links .page-numbers.dots {
	border-color: transparent;
	min-width: 0;
}

/* Status filter nav (Events) */
.evnm-admin .evnm-status-nav {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var( --evnm-space-xs );
	font-size: var( --evnm-fs-md );
}

.evnm-admin .evnm-status-link {
	padding: var( --evnm-space-xs ) var( --evnm-space-md );
	border-radius: var( --evnm-radius-full );
	color: var( --evnm-text-muted );
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition );
}

.evnm-admin .evnm-status-link:hover {
	background: var( --evnm-surface-alt );
	color: var( --evnm-text );
}

.evnm-admin .evnm-status-link.is-active {
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
	font-weight: 600;
}

.evnm-admin .evnm-status-sep {
	color: var( --evnm-border-strong );
}

/* Inline counter (e.g. moderation queue) */
.evnm-admin .evnm-count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 22px;
	height: 22px;
	padding: 0 var( --evnm-space-xs );
	border-radius: var( --evnm-radius-full );
	background: var( --evnm-accent-soft );
	color: var( --evnm-accent );
	font-size: var( --evnm-fs-sm );
	font-weight: 700;
	vertical-align: middle;
}

.evnm-admin .evnm-moderation-author {
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-sm );
}

.evnm-admin .evnm-moderation-actions {
	display: flex;
	gap: var( --evnm-space-sm );
	flex-shrink: 0;
}

.evnm-admin .evnm-events-toolbar {
	justify-content: flex-end;
}

/* ============================================================
   Events lifecycle pipeline + per-event health (Events screen)
   ============================================================ */
.evnm-admin .evnm-pipeline {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: var( --evnm-space-xs );
	width: 100%;
}

.evnm-admin .evnm-pipeline__stage {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-xs );
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-md );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-full );
	color: var( --evnm-text-muted );
	background: var( --evnm-surface );
	font-size: var( --evnm-fs-md );
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition ), border-color var( --evnm-transition );
}

.evnm-admin .evnm-pipeline__stage:hover {
	color: var( --evnm-text );
	background: var( --evnm-surface-alt );
	border-color: var( --evnm-border-strong );
}

.evnm-admin .evnm-pipeline__stage.is-active {
	color: var( --evnm-accent );
	background: var( --evnm-accent-soft );
	border-color: var( --evnm-accent );
	font-weight: 600;
}

.evnm-admin .evnm-pipeline__count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: var( --evnm-badge-size );
	height: var( --evnm-badge-size );
	padding: 0 var( --evnm-space-xs );
	border-radius: var( --evnm-radius-full );
	background: var( --evnm-surface-alt );
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-sm );
	font-weight: 700;
	line-height: 1;
}

.evnm-admin .evnm-pipeline__stage.is-active .evnm-pipeline__count {
	background: var( --evnm-accent );
	color: var( --evnm-accent-contrast );
}

/* Per-event health cells */
.evnm-admin .evnm-events-table__muted {
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-cap {
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
	color: var( --evnm-text );
}

.evnm-admin .evnm-cap--high {
	color: var( --evnm-warning );
	font-weight: 600;
}

.evnm-admin .evnm-cap--full {
	color: var( --evnm-danger );
	font-weight: 600;
}

.evnm-admin .evnm-events-table__actions {
	/* Flex row so the mix of <a> links and inline <form> buttons (Verify /
	   Delete) sits on one aligned line - block-level forms used to break onto
	   their own lines, staggering the actions and inflating row height. */
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: flex-end;
	gap: var( --evnm-space-xs );
}

/* ============================================================
   Focus-visible rings (R14) — every interactive element
   ============================================================ */
.evnm-admin a:focus-visible,
.evnm-admin button:focus-visible,
.evnm-admin .button:focus-visible,
.evnm-btn:focus-visible,
.evnm-admin input:focus-visible,
.evnm-admin select:focus-visible,
.evnm-admin textarea:focus-visible,
.evnm-admin [tabindex]:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
	box-shadow: none;
}

@media ( prefers-reduced-motion: reduce ) {
	.evnm-admin * {
		transition: none !important;
	}
}

/* ============================================================
   Responsive — exactly two breakpoints, anchored at file bottom
   ============================================================ */
@media ( max-width: 1024px ) {
	/* Rail collapses to icon-only. */
	.evnm-admin .evnm-shell__body {
		grid-template-columns: var( --evnm-rail-w-collapsed ) minmax( 0, 1fr );
	}

	.evnm-admin .evnm-shell__rail {
		padding-inline: var( --evnm-space-xs );
	}

	.evnm-admin .evnm-rail__group-label,
	.evnm-admin .evnm-rail__label,
	.evnm-admin .evnm-rail__badge {
		/* Visually hidden but kept for AT (logical, no left/right). */
		position: absolute;
		width: 1px;
		height: 1px;
		padding: 0;
		margin: -1px;
		overflow: hidden;
		clip: rect( 0 0 0 0 );
		white-space: nowrap;
		border: 0;
	}

	.evnm-admin .evnm-rail__item {
		justify-content: center;
		padding-inline: 0;
	}

	.evnm-admin .evnm-shell__breadcrumb {
		display: none;
	}

	.evnm-admin .evnm-shell__main {
		padding: var( --evnm-space-xl );
	}

	/* Rule 17 sub-nav collapses to icon-only with the rail at this width. */
	.evnm-admin .evnm-rail__sub {
		margin-inline-start: 0;
		padding-inline-start: 0;
		border-inline-start: 0;
		align-items: center;
	}

	.evnm-admin .evnm-rail__sub-label {
		position: absolute;
		width: 1px;
		height: 1px;
		padding: 0;
		margin: -1px;
		overflow: hidden;
		clip: rect( 0 0 0 0 );
		white-space: nowrap;
		border: 0;
	}

	.evnm-admin .evnm-rail__sub-item {
		justify-content: center;
		padding-inline: 0;
	}

	.evnm-admin .evnm-stats-row,
	.evnm-admin .evnm-kpi-grid {
		grid-template-columns: repeat( 2, 1fr );
	}

	.evnm-admin .evnm-card {
		padding: var( --evnm-space-lg );
	}
}

@media ( max-width: 640px ) {
	.evnm-admin .evnm-admin-header__title {
		font-size: var( --evnm-fs-xl );
	}

	.evnm-admin .evnm-stats-row,
	.evnm-admin .evnm-kpi-grid {
		grid-template-columns: 1fr;
	}

	/* Attention rows stack vertically so the action link gets its own line. */
	.evnm-admin .evnm-attention__row {
		flex-wrap: wrap;
	}

	.evnm-admin .evnm-attention__message {
		flex-basis: calc( 100% - var( --evnm-space-2xl ) );
	}

	.evnm-admin .evnm-attention__action {
		margin-inline-start: calc( 18px + var( --evnm-space-md ) );
	}

	/* Setup banner stacks: icon+text on top, full-width action below. */
	.evnm-admin .evnm-setup-banner {
		flex-wrap: wrap;
	}

	.evnm-admin .evnm-setup-banner__action {
		flex-basis: 100%;
		justify-content: center;
	}

	.evnm-admin .evnm-field {
		max-width: none;
	}

	/* Off-canvas rail: single column; rail slides in over the content. */
	.evnm-admin .evnm-shell__body {
		grid-template-columns: minmax( 0, 1fr );
	}

	.evnm-admin .evnm-shell__rail-toggle {
		display: inline-flex;
	}

	.evnm-admin .evnm-shell__rail {
		position: fixed;
		inset-block: 0;
		inset-inline-start: 0;
		z-index: 30;
		width: var( --evnm-rail-w );
		max-height: 100vh;
		padding: var( --evnm-space-lg ) var( --evnm-space-md );
		box-shadow: var( --evnm-shadow-md );
		transform: translateX( -100% );
		transition: transform var( --evnm-transition );
	}

	/* RTL: slide in from the opposite edge. */
	[dir="rtl"] .evnm-admin .evnm-shell__rail {
		transform: translateX( 100% );
	}

	.evnm-admin .evnm-shell.is-rail-open .evnm-shell__rail {
		transform: translateX( 0 );
	}

	/* Restore full labels when the off-canvas rail is open. */
	.evnm-admin .evnm-shell__rail .evnm-rail__group-label,
	.evnm-admin .evnm-shell__rail .evnm-rail__label,
	.evnm-admin .evnm-shell__rail .evnm-rail__badge {
		position: static;
		width: auto;
		height: auto;
		margin: 0;
		clip: auto;
		overflow: visible;
	}

	.evnm-admin .evnm-shell__rail .evnm-rail__item {
		justify-content: flex-start;
		padding-inline: var( --evnm-space-md );
	}

	/* Rule 17: restore the nested Settings sub-nav (labels + indent guide)
	   when the off-canvas rail is open on mobile. */
	.evnm-admin .evnm-shell__rail .evnm-rail__sub-label {
		position: static;
		width: auto;
		height: auto;
		margin: 0;
		clip: auto;
		overflow: visible;
	}

	.evnm-admin .evnm-shell__rail .evnm-rail__sub {
		align-items: stretch;
		margin-inline-start: var( --evnm-space-md );
		padding-inline-start: var( --evnm-space-lg );
		border-inline-start: 1px solid var( --evnm-border );
	}

	.evnm-admin .evnm-shell__rail .evnm-rail__sub-item {
		justify-content: flex-start;
		padding-inline: var( --evnm-space-sm );
	}

	.evnm-admin .evnm-shell__rail-backdrop {
		position: fixed;
		inset: 0;
		z-index: 29;
		background: rgba( 15, 23, 42, 0.45 );
		border: 0;
		padding: 0;
		margin: 0;
		cursor: pointer;
	}

	.evnm-admin .evnm-shell__brand-name {
		display: none;
	}

	/* ---- 390px top-bar polish ----------------------------------------
	   Fit the rail-toggle + brand + health chip + Create button on one
	   row at 390px with no horizontal scroll. Tokens only. */
	.evnm-admin .evnm-shell__topbar {
		gap: var( --evnm-space-sm );
		padding-inline: var( --evnm-space-md );
	}

	/* The breadcrumb + version chip would crowd the row — drop them; the
	   per-page heading still names the screen below the bar. */
	.evnm-admin .evnm-shell__breadcrumb,
	.evnm-admin .evnm-shell__version,
	.evnm-admin .evnm-shell__search {
		display: none;
	}

	/* Brand collapses to the icon only (name already hidden above). */
	.evnm-admin .evnm-shell__brand {
		margin-inline-end: auto;
	}

	.evnm-admin .evnm-shell__topbar-actions {
		gap: var( --evnm-space-xs );
		margin-inline-start: 0;
	}

	/* Health chip keeps its icon + count, drops the wordy label so it
	   reads as a compact signal instead of a full sentence. The aria-label
	   on the chip preserves the accessible name. */
	.evnm-admin .evnm-health-chip {
		padding-inline: var( --evnm-space-sm );
	}

	.evnm-admin .evnm-health-chip__label {
		position: absolute;
		width: 1px;
		height: 1px;
		margin: -1px;
		padding: 0;
		overflow: hidden;
		clip: rect( 0, 0, 0, 0 );
		white-space: nowrap;
		border: 0;
	}

	/* Surface the compact count next to the icon (warning chip only — the
	   "ok" chip has no count and stays icon-only). */
	.evnm-admin .evnm-health-chip__count {
		display: inline-flex;
	}

	/* Create button shrinks to a compact icon + short label. */
	.evnm-admin .evnm-shell__create {
		padding-inline: var( --evnm-space-md );
	}

	.evnm-admin .evnm-shell__create-label {
		position: absolute;
		width: 1px;
		height: 1px;
		margin: -1px;
		padding: 0;
		overflow: hidden;
		clip: rect( 0, 0, 0, 0 );
		white-space: nowrap;
		border: 0;
	}
}

/* ============================================================
   Shared confirm modal (window.evnmConfirm — ux-foundation Rule 8)
   Mounted inside .evnm-admin so tokens + .evnm-btn apply.
   ============================================================ */
.evnm-admin .evnm-modal-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var( --evnm-space-lg );
	background: rgba( 15, 23, 42, 0.55 );
}

.evnm-admin .evnm-modal {
	width: 100%;
	max-width: 28rem;
	padding: var( --evnm-space-xl );
	background: var( --evnm-surface, #fff );
	border-radius: var( --evnm-radius-lg );
	box-shadow: 0 10px 40px rgba( 0, 0, 0, 0.25 );
}

.evnm-admin .evnm-modal__message {
	margin: 0 0 var( --evnm-space-lg );
	font-size: var( --evnm-fs-md );
	line-height: 1.5;
	color: var( --evnm-text );
}

.evnm-admin .evnm-modal__actions {
	display: flex;
	justify-content: flex-end;
	gap: var( --evnm-space-sm );
}

@media ( prefers-reduced-motion: no-preference ) {
	.evnm-admin .evnm-modal-overlay {
		animation: evnm-fade-in var( --evnm-transition, 200ms ) ease;
	}
	.evnm-admin .evnm-modal {
		animation: evnm-pop-in var( --evnm-transition, 200ms ) ease;
	}
	@keyframes evnm-fade-in {
		from { opacity: 0; }
		to { opacity: 1; }
	}
	@keyframes evnm-pop-in {
		from { opacity: 0; transform: translateY( 8px ) scale( 0.98 ); }
		to { opacity: 1; transform: none; }
	}
}

/* ------------------------------------------------------------
   Frontend confirm modal — window.evnmConfirm mounts the overlay
   in <body> on the frontend (no .evnm-admin scope). These base
   selectors give it the same tokenised look there; the more
   specific .evnm-admin rules above still win inside wp-admin.
   ------------------------------------------------------------ */
.evnm-modal-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var( --evnm-space-lg );
	background: rgba( 15, 23, 42, 0.55 );
}

.evnm-modal {
	width: 100%;
	max-width: 28rem;
	padding: var( --evnm-space-xl );
	font-family: var( --evnm-font );
	background: var( --evnm-surface );
	border-radius: var( --evnm-radius-lg );
	box-shadow: var( --evnm-shadow-md );
}

.evnm-modal__message {
	margin: 0 0 var( --evnm-space-lg );
	font-size: var( --evnm-fs-md );
	line-height: 1.5;
	color: var( --evnm-text );
}

.evnm-modal__actions {
	display: flex;
	justify-content: flex-end;
	gap: var( --evnm-space-sm );
}

.evnm-modal .evnm-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-lg );
	border: 1px solid var( --evnm-border-strong );
	border-radius: var( --evnm-radius-md );
	background: var( --evnm-surface );
	color: var( --evnm-text );
	font-family: var( --evnm-font );
	font-size: var( --evnm-fs-md );
	font-weight: 500;
	line-height: 1;
	cursor: pointer;
	transition: background var( --evnm-transition ), border-color var( --evnm-transition ), color var( --evnm-transition );
}

.evnm-modal .evnm-btn:hover {
	border-color: var( --evnm-accent );
	color: var( --evnm-accent );
}

.evnm-modal .evnm-btn:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-modal .evnm-btn--primary {
	background: var( --evnm-accent );
	border-color: var( --evnm-accent );
	color: var( --evnm-accent-contrast );
}

.evnm-modal .evnm-btn--primary:hover {
	background: var( --evnm-accent-hover );
	border-color: var( --evnm-accent-hover );
	color: var( --evnm-accent-contrast );
}

.evnm-modal .evnm-btn--danger {
	background: var( --evnm-danger );
	border-color: var( --evnm-danger );
	color: var( --evnm-accent-contrast );
}

.evnm-modal .evnm-btn--danger:hover {
	background: var( --evnm-danger );
	border-color: var( --evnm-danger );
	color: var( --evnm-accent-contrast );
	opacity: 0.92;
}

.evnm-modal .evnm-btn--ghost {
	background: transparent;
	border-color: transparent;
	color: var( --evnm-text-muted );
}

.evnm-modal .evnm-btn--ghost:hover {
	border-color: transparent;
	color: var( --evnm-text );
}

@media ( prefers-reduced-motion: no-preference ) {
	.evnm-modal-overlay {
		animation: evnm-fade-in var( --evnm-transition, 200ms ) ease;
	}
	.evnm-modal {
		animation: evnm-pop-in var( --evnm-transition, 200ms ) ease;
	}
}

/* Importer — confirm form spacing */
.evnm-import-confirm-form {
	margin-top: 1em;
}

/* ============================================================
   Event Workspace (Phase 2 Stage B) — per-event console
   ============================================================ */

/* Event header: title + status badge + meta. */
.evnm-admin .evnm-workspace__header {
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-md );
}

.evnm-admin .evnm-workspace__heading {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var( --evnm-space-md );
}

.evnm-admin .evnm-workspace__title {
	margin: 0;
	font-size: var( --evnm-fs-xl, 20px );
	font-weight: 700;
	color: var( --evnm-text );
}

.evnm-admin .evnm-workspace__meta {
	display: flex;
	flex-wrap: wrap;
	gap: var( --evnm-space-2xl );
	margin: 0;
}

.evnm-admin .evnm-workspace__meta-item {
	display: flex;
	flex-direction: column;
	gap: var( --evnm-space-xs );
}

.evnm-admin .evnm-workspace__meta-item dt {
	margin: 0;
	font-size: var( --evnm-fs-sm );
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-workspace__meta-item dd {
	margin: 0;
	font-size: var( --evnm-fs-md );
	color: var( --evnm-text );
}

/* Tab bar — scrolls horizontally on narrow viewports (no overflow break). */
.evnm-admin .evnm-workspace-tabs {
	display: flex;
	gap: var( --evnm-space-xs );
	margin-block: var( --evnm-space-xl );
	padding-block-end: var( --evnm-space-xs );
	border-block-end: 1px solid var( --evnm-border );
	overflow-x: auto;
	scrollbar-width: thin;
}

.evnm-admin .evnm-workspace-tabs__tab {
	display: inline-flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	min-height: var( --evnm-control-h );
	padding: 0 var( --evnm-space-lg );
	border: 1px solid transparent;
	border-radius: var( --evnm-radius-md );
	color: var( --evnm-text-muted );
	font-size: var( --evnm-fs-md );
	font-weight: 500;
	white-space: nowrap;
	text-decoration: none;
	transition: background var( --evnm-transition ), color var( --evnm-transition ), border-color var( --evnm-transition );
}

.evnm-admin .evnm-workspace-tabs__tab:hover {
	color: var( --evnm-text );
	background: var( --evnm-surface-alt );
}

.evnm-admin .evnm-workspace-tabs__tab.is-active {
	color: var( --evnm-accent );
	background: var( --evnm-accent-soft );
	border-color: var( --evnm-accent );
	font-weight: 600;
}

.evnm-admin .evnm-workspace-tabs__tab:focus-visible {
	outline: 2px solid var( --evnm-accent );
	outline-offset: 2px;
}

.evnm-admin .evnm-workspace-tabs__icon {
	display: inline-flex;
	align-items: center;
}

/* Overview KPIs reuse the shared .evnm-kpi-grid / .evnm-kpi primitives. */
.evnm-admin .evnm-workspace__kpis {
	margin-block-start: var( --evnm-space-xl );
}

.evnm-admin .evnm-workspace__actions-card {
	margin-block-end: var( --evnm-space-xl );
}

/* Promote tab — let the read-only URL/embed fields span the card. */
.evnm-admin .evnm-workspace__field {
	max-width: none;
}

.evnm-admin .evnm-workspace__embed {
	font-family: var( --evnm-font-mono, monospace );
	resize: vertical;
}

/* Rail collapsed / off-canvas breakpoints already shrink .evnm-shell__main;
   the tab bar's own overflow-x handles the narrow case. At <=640 tighten the
   tab padding so all six fit the scroll comfortably. */
@media ( max-width: 640px ) {
	.evnm-admin .evnm-workspace-tabs__tab {
		padding: 0 var( --evnm-space-md );
	}

	.evnm-admin .evnm-workspace__meta {
		gap: var( --evnm-space-lg );
	}
}

/* Tools — Demo data action row (Load + Remove side by side). */
.evnm-admin .evnm-tools-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var( --evnm-space-md );
	margin: var( --evnm-space-lg ) 0 0;
}

.evnm-admin .evnm-inline-form {
	margin: 0;
	display: inline-flex;
}

/* Blocks reference list (admin → Blocks): a clean card row per block. */
.evnm-admin .evnm-block-list {
	margin: 0 0 var( --evnm-space-lg );
	padding: 0;
	list-style: none;
	display: grid;
	gap: var( --evnm-space-sm );
}

.evnm-admin .evnm-block-list__item {
	padding: var( --evnm-space-md );
	border: 1px solid var( --evnm-border );
	border-radius: var( --evnm-radius-md, 8px );
	background: var( --evnm-surface );
}

.evnm-admin .evnm-block-list__head {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: var( --evnm-space-xs );
}

.evnm-admin .evnm-block-list__title {
	font-weight: 600;
	color: var( --evnm-text );
}

.evnm-admin .evnm-block-list__name {
	font-size: var( --evnm-fs-sm );
	color: var( --evnm-text-muted );
	background: var( --evnm-surface-alt );
	padding: 2px 6px;
	border-radius: var( --evnm-radius-sm, 4px );
}

.evnm-admin .evnm-block-list__desc {
	margin: var( --evnm-space-xs ) 0 0;
	color: var( --evnm-text-muted );
}

/* Pro blocks shown as an upsell on a Free-only install: dimmed to read as
   not-yet-available while still legible. */
.evnm-admin .evnm-block-list.is-pro-locked {
	opacity: 0.6;
}

/* Free vs Pro comparison table. */
.evnm-admin .evnm-compare__col {
	inline-size: 88px;
	text-align: center;
}

.evnm-admin .evnm-mark {
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.evnm-admin .evnm-mark--yes {
	color: var( --evnm-accent );
}

.evnm-admin .evnm-mark--no {
	color: var( --evnm-text-tertiary );
}

.evnm-admin .evnm-upgrade__status {
	margin: 0;
}

/* Command Center "Getting started" checklist. */
.evnm-admin .evnm-getting-started__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var( --evnm-space-sm );
	margin-block-end: var( --evnm-space-md );
}

.evnm-admin .evnm-getting-started__dismiss {
	font-size: var( --evnm-fs-sm );
	color: var( --evnm-text-muted );
	text-decoration: none;
}

.evnm-admin .evnm-getting-started__dismiss:hover {
	color: var( --evnm-accent );
}

.evnm-admin .evnm-checklist {
	margin: 0;
	padding: 0;
	list-style: none;
	display: grid;
	gap: var( --evnm-space-sm );
}

.evnm-admin .evnm-checklist__item {
	display: flex;
	align-items: center;
	gap: var( --evnm-space-sm );
	font-size: var( --evnm-fs-md );
}

.evnm-admin .evnm-checklist__item a {
	color: var( --evnm-accent );
	text-decoration: none;
	font-weight: 500;
}

.evnm-admin .evnm-checklist__item a:hover {
	text-decoration: underline;
}

.evnm-admin .evnm-checklist__item.is-done a {
	color: var( --evnm-text-muted );
}

.evnm-admin .evnm-checklist__done {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 20px;
	block-size: 20px;
	border-radius: 50%;
	background: var( --evnm-accent );
	color: var( --evnm-accent-contrast, #fff );
	font-size: 12px;
	flex-shrink: 0;
}

.evnm-admin .evnm-checklist__todo {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 20px;
	block-size: 20px;
	color: var( --evnm-text-tertiary );
	font-size: 16px;
	flex-shrink: 0;
}

/* ── Setup wizard: step progress tracker ─────────────────────────────────── */
.evnm-setup-tracker {
	display: flex;
	flex-wrap: wrap;
	gap: var(--evnm-space-sm);
	list-style: none;
	margin: 0 0 var(--evnm-space-lg);
	padding: 0;
	counter-reset: evnm-step;
}
.evnm-setup-tracker__item {
	display: flex;
	align-items: center;
	gap: var(--evnm-space-xs);
	flex: 1 1 auto;
	min-width: 0;
}
.evnm-setup-tracker__link {
	display: flex;
	align-items: center;
	gap: var(--evnm-space-xs);
	text-decoration: none;
	color: var(--evnm-text-muted);
	min-width: 0;
}
.evnm-setup-tracker__num {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	flex: 0 0 28px;
	border-radius: var(--evnm-radius-full);
	border: 1px solid var(--evnm-border-strong);
	background: var(--evnm-surface);
	color: var(--evnm-text-muted);
	font-size: 13px;
	font-weight: 600;
	line-height: 1;
}
.evnm-setup-tracker__label {
	font-size: 13px;
	font-weight: 500;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}
.evnm-setup-tracker__item:not(:last-child)::after {
	content: "";
	flex: 1 1 auto;
	height: 2px;
	min-width: 12px;
	background: var(--evnm-border);
	margin: 0 var(--evnm-space-xs);
}
.evnm-setup-tracker__item.is-done .evnm-setup-tracker__num {
	background: var(--evnm-success);
	border-color: var(--evnm-success);
	color: var( --evnm-accent-contrast, #fff );
}
.evnm-setup-tracker__item.is-done .evnm-setup-tracker__label { color: var(--evnm-text); }
.evnm-setup-tracker__item.is-done:not(:last-child)::after { background: var(--evnm-success); }
.evnm-setup-tracker__item.is-current .evnm-setup-tracker__num {
	background: var(--evnm-accent);
	border-color: var(--evnm-accent);
	color: var(--evnm-accent-contrast);
}
.evnm-setup-tracker__item.is-current .evnm-setup-tracker__label { color: var(--evnm-text); font-weight: 600; }
.evnm-setup-tracker__link:focus-visible {
	outline: 2px solid var(--evnm-accent);
	outline-offset: 2px;
	border-radius: var(--evnm-radius-sm);
}
.evnm-admin .evnm-setup-step { max-width: 760px; }
/* Padded body for wizard steps (the card--form itself is padding:0). */
.evnm-admin .evnm-setup-step__body { padding: var(--evnm-space-2xl); }
.evnm-admin .evnm-setup-step__intro {
	margin: 0 0 var(--evnm-space-lg);
	color: var(--evnm-text-muted);
	font-size: var(--evnm-fs-md);
	line-height: 1.6;
}
.evnm-admin .evnm-setup-step__body .evnm-field { margin: 0 0 var(--evnm-space-lg); }
.evnm-admin .evnm-setup-step__body .evnm-field:last-of-type { margin-bottom: 0; }
.evnm-admin .evnm-setup-step__body .evnm-input { min-width: 280px; max-width: 100%; }
.evnm-admin .evnm-setup-nav {
	display: flex;
	flex-wrap: wrap;
	gap: var(--evnm-space-sm);
	align-items: center;
	margin: var(--evnm-space-xl) 0 0;
}
/* INTENTIONAL EXEMPTION to the 640/1024 breakpoint contract: the setup tracker
   is a wp-admin-only surface and this 782px is WordPress admin's own responsive
   breakpoint (the admin menu/bar collapse width, `$breakpoint-medium`). Aligning
   the step-label collapse to WP's breakpoint keeps the wizard in step with the
   surrounding admin chrome; it is deliberately not one of the plugin's own two
   frontend breakpoints. */
@media (max-width: 782px) {
	.evnm-setup-tracker__item:not(:last-child)::after { display: none; }
	.evnm-setup-tracker__label { display: none; }
	.evnm-setup-tracker__item.is-current .evnm-setup-tracker__label { display: inline; }
}
