:root {
	--eduplan-font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
	--eduplan-font-size-xs: 10px;
	--eduplan-font-size-sm: 12px;
	--eduplan-font-size-md: 14px;
	--eduplan-font-size-lg: 18px;
	/* Shared semantic typography. Keep these roles consistent across every module. */
	--eduplan-text-overline: 10px;
	--eduplan-text-caption: 12px;
	--eduplan-text-label: 13px;
	--eduplan-text-body: 14px;
	--eduplan-text-subtitle: 16px;
	--eduplan-text-title: 20px;
	--eduplan-text-page-title: 30px;
	--eduplan-line-height-tight: 1.2;
	--eduplan-line-height-normal: 1.5;
	--eduplan-color-ink: #17233c;
	--eduplan-color-muted: #7a8497;
	--eduplan-color-line: #e5e8ef;
	--eduplan-color-primary: #6651d7;
	--eduplan-color-primary-dark: #5845c0;
	--eduplan-color-primary-dark: color-mix(in srgb, var(--eduplan-color-primary), #000 18%);
	--eduplan-color-primary-soft: #f3f0ff;
	--eduplan-color-primary-soft: color-mix(in srgb, var(--eduplan-color-primary), transparent 88%);
	--eduplan-color-bg: #f6f7fb;
	--eduplan-color-surface: #fff;
	--eduplan-color-surface-raised: #fff;
	--eduplan-color-surface-hover: #faf9ff;
	--eduplan-color-surface-subtle: #fafafe;
	--eduplan-color-control: #fff;
	--eduplan-color-control-border: #dfe2e9;
	--eduplan-color-on-primary: #fff;
	--eduplan-color-danger: #d84949;
	--eduplan-color-warning: #c47a16;
	--eduplan-color-success: #287b60;
	--eduplan-radius-sm: 9px;
	--eduplan-radius-md: 14px;
	--eduplan-radius-lg: 18px;
	--eduplan-shadow-panel: 0 6px 24px #2634570b;
	--eduplan-shadow-overlay: 0 20px 60px #17233c25;
	--eduplan-space-1: 4px;
	--eduplan-space-2: 8px;
	--eduplan-space-3: 12px;
	--eduplan-space-4: 16px;
	--eduplan-space-5: 20px;
	--eduplan-focus: 0 0 0 3px var(--eduplan-color-primary-soft);
	/* Stable aliases consumed by the theme and every EduPlan module. */
	--ept-ink: var(--eduplan-color-ink);
	--ept-muted: var(--eduplan-color-muted);
	--ept-line: var(--eduplan-color-line);
	--ept-primary: var(--eduplan-color-primary);
	--ept-primary-dark: var(--eduplan-color-primary-dark);
	--ept-primary-soft: var(--eduplan-color-primary-soft);
	--ept-bg: var(--eduplan-color-bg);
	--ept-surface: var(--eduplan-color-surface);
	--ept-surface-raised: var(--eduplan-color-surface-raised);
	--ept-surface-hover: var(--eduplan-color-surface-hover);
	--ept-surface-subtle: var(--eduplan-color-surface-subtle);
	--ept-control: var(--eduplan-color-control);
	--ept-control-border: var(--eduplan-color-control-border);
	--ept-on-primary: var(--eduplan-color-on-primary);
	--ept-danger: var(--eduplan-color-danger);
	--ept-warning: var(--eduplan-color-warning);
	--ept-success: var(--eduplan-color-success);
	--ept-shadow: var(--eduplan-shadow-panel);
	--ept-shadow-lg: var(--eduplan-shadow-overlay);
	--ept-radius-sm: var(--eduplan-radius-sm);
	--ept-radius-md: var(--eduplan-radius-md);
	--ept-radius-lg: var(--eduplan-radius-lg);
	--ept-focus: var(--eduplan-focus);
	color-scheme: light;
}

html[data-eduplan-theme="dark"] {
	--eduplan-color-ink: #edf1fb;
	--eduplan-color-muted: #9ca8bd;
	--eduplan-color-line: #2b3650;
	--eduplan-color-bg: #111827;
	--eduplan-color-surface: #182238;
	--eduplan-color-surface-raised: #1b263d;
	--eduplan-color-surface-hover: #222e47;
	--eduplan-color-surface-subtle: #1d2940;
	--eduplan-color-control: #202b43;
	--eduplan-color-control-border: #394660;
	--eduplan-shadow-panel: 0 8px 28px #0003;
	--eduplan-shadow-overlay: 0 22px 65px #0007;
	color-scheme: dark;
}

@media (prefers-color-scheme: dark) {
	html[data-eduplan-theme="system"] {
		--eduplan-color-ink: #edf1fb;
		--eduplan-color-muted: #9ca8bd;
		--eduplan-color-line: #2b3650;
		--eduplan-color-bg: #111827;
		--eduplan-color-surface: #182238;
		--eduplan-color-surface-raised: #1b263d;
		--eduplan-color-surface-hover: #222e47;
		--eduplan-color-surface-subtle: #1d2940;
		--eduplan-color-control: #202b43;
		--eduplan-color-control-border: #394660;
		--eduplan-shadow-panel: 0 8px 28px #0003;
		--eduplan-shadow-overlay: 0 22px 65px #0007;
		color-scheme: dark;
	}
}

.eduplan-ui-panel { border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-md); background: var(--eduplan-color-surface-raised); box-shadow: var(--eduplan-shadow-panel); }
.eduplan-ui-button { display: inline-flex; min-height: 40px; align-items: center; justify-content: center; padding: 8px 16px; border: 0; border-radius: var(--eduplan-radius-sm); background: var(--eduplan-color-primary); color: #fff; font-size: var(--eduplan-text-body); font-weight: 700; text-decoration: none; cursor: pointer; }
.eduplan-ui-icon { display: inline-flex; width: 20px; height: 20px; flex: 0 0 20px; align-items: center; justify-content: center; }
.eduplan-ui-icon > svg { display: block; width: 100%; height: 100%; }
.eduplan-ui-button:has(> .eduplan-ui-icon) { gap: var(--eduplan-space-2); }
.eduplan-ui-button:hover { background: var(--eduplan-color-primary-dark); color: #fff; }
.eduplan-ui-button:focus-visible { outline: 0; box-shadow: var(--eduplan-focus); }
.eduplan-ui-muted { color: var(--eduplan-color-muted); }
.eduplan-ui-sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }

/* Front-end Access Control workspace. */
.epac-shell { width: min(1480px, 100%); margin: 0 auto; padding: 28px; color: var(--eduplan-color-ink); }
.epac-header { margin-bottom: 22px; }
.epac-header > span { color: var(--eduplan-color-primary); font-size: var(--eduplan-text-overline); font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.epac-header h1 { margin: 6px 0; color: var(--eduplan-color-ink); font-size: clamp(25px, 3vw, 36px); }
.epac-header p, .epac-help { margin: 0; color: var(--eduplan-color-muted); }
.epac-tabs { display: flex; gap: 6px; margin-top: 20px; padding: 5px; border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-md); background: var(--eduplan-color-surface-raised); }
.epac-tabs a { display: inline-flex; min-height: 40px; align-items: center; padding: 8px 16px; border-radius: var(--eduplan-radius-sm); color: var(--eduplan-color-muted); font-size: var(--eduplan-text-caption); font-weight: 800; text-decoration: none; }
.epac-tabs a:hover, .epac-tabs a:focus-visible { background: var(--eduplan-color-surface-hover); color: var(--eduplan-color-primary); outline: 0; }
.epac-tabs a[aria-current="page"] { background: var(--eduplan-color-primary-soft); color: var(--eduplan-color-primary); }
.epac-panel { margin-top: 18px; padding: 22px; border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-lg); background: var(--eduplan-color-surface-raised); box-shadow: var(--eduplan-shadow-panel); }
.epac-panel h2 { margin: 0 0 5px; font-size: var(--eduplan-text-title); }
.epac-panel .epac-help { margin-bottom: 18px; font-size: var(--eduplan-text-caption); }
.epac-panel table { width: 100%; margin-top: 16px; border-collapse: collapse; background: transparent; color: var(--eduplan-color-ink); }
.epac-panel th, .epac-panel td { padding: 12px; border-bottom: 1px solid var(--eduplan-color-line); text-align: start; vertical-align: middle; }
.epac-panel thead th { color: var(--eduplan-color-muted); font-size: var(--eduplan-text-overline); letter-spacing: .06em; text-transform: uppercase; }
.epac-panel tbody th { min-width: 210px; font-size: var(--eduplan-text-caption); }
.epac-panel code { color: var(--eduplan-color-muted); font-size: 9px; }
.epac-panel select { min-height: 38px; padding: 6px 30px 6px 10px; border: 1px solid var(--eduplan-color-control-border); border-radius: var(--eduplan-radius-sm); background: var(--eduplan-color-control); color: var(--eduplan-color-ink); }
.epac-panel .submit { margin: 18px 0 0; padding: 0; }
.epac-user-picker { display: flex; align-items: end; gap: 10px; flex-wrap: wrap; }
.epac-user-picker label { display: grid; gap: 6px; color: var(--eduplan-color-muted); font-size: var(--eduplan-text-caption); font-weight: 700; }
.epac-user-picker select { min-width: min(360px, 80vw); }
.epac-notice { margin-bottom: 16px; padding: 12px 14px; border-inline-start: 4px solid var(--eduplan-color-success); border-radius: var(--eduplan-radius-sm); background: color-mix(in srgb, var(--eduplan-color-success), transparent 90%); color: var(--eduplan-color-success); font-weight: 700; }
@media (max-width: 720px) { .epac-shell { padding: 18px 12px; } .epac-panel { padding: 15px; } .epac-panel th, .epac-panel td { padding: 9px; } }

/* Front-end Navigation Manager workspace. */
.epnav-shell { width: min(1480px, 100%); margin: 0 auto; padding: 28px; color: var(--eduplan-color-ink); }
.epnav-header { margin-bottom: 22px; }
.epnav-header > span { color: var(--eduplan-color-primary); font-size: var(--eduplan-text-overline); font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
.epnav-header h1 { margin: 6px 0; color: var(--eduplan-color-ink); font-size: clamp(25px, 3vw, 36px); }
.epnav-header p, .epnav-help { margin: 0; color: var(--eduplan-color-muted); }
.epnav-panel { padding: 22px; border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-lg); background: var(--eduplan-color-surface-raised); box-shadow: var(--eduplan-shadow-panel); }
.epnav-help { margin-bottom: 18px; font-size: var(--eduplan-text-caption); }
.epnav-table-wrap { overflow: auto; }
.epnav-panel table { width: 100%; border-collapse: collapse; color: var(--eduplan-color-ink); }
.epnav-panel th, .epnav-panel td { padding: 12px; border-bottom: 1px solid var(--eduplan-color-line); text-align: start; vertical-align: middle; }
.epnav-panel thead th { color: var(--eduplan-color-muted); font-size: var(--eduplan-text-overline); letter-spacing: .06em; text-transform: uppercase; }
.epnav-panel tbody th { min-width: 150px; font-size: var(--eduplan-text-caption); }
.epnav-panel tbody th small { display: block; margin-top: 3px; color: var(--eduplan-color-muted); font-size: 9px; font-weight: 500; }
.epnav-panel input[type=text], .epnav-panel input[type=number], .epnav-panel select { min-height: 38px; padding: 6px 10px; border: 1px solid var(--eduplan-color-control-border); border-radius: var(--eduplan-radius-sm); background: var(--eduplan-color-control); color: var(--eduplan-color-ink); }
.epnav-panel input[type=text] { min-width: 180px; }
.epnav-panel select { min-width: 150px; }
.epnav-panel .epnav-order { width: 74px; min-width: 74px; }
.epnav-tabs { display: inline-flex; gap: 4px; margin: 2px 0 20px; padding: 5px; border-radius: var(--eduplan-radius-md); background: var(--eduplan-color-control); }
.epnav-tabs button { min-height: 42px; padding: 8px 20px; border: 0; border-radius: calc(var(--eduplan-radius-md) - 4px); background: transparent; color: var(--eduplan-color-muted); font: inherit; font-weight: 750; cursor: pointer; }
.epnav-tabs button[aria-selected=true] { background: var(--eduplan-color-primary); color: #fff; box-shadow: var(--eduplan-shadow-panel); }
.epnav-tabs button:focus-visible { outline: 3px solid var(--eduplan-color-primary-soft); outline-offset: 2px; }
.epnav-tab-panel > h2 { margin-top: 0; }
.epnav-tab-panel[hidden] { display: none; }
.epnav-links-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.epnav-links-toolbar .epnav-help { margin: 0; }
.epnav-panel .epnav-link-url { min-width: 260px; }
.epnav-remove { width: 34px; height: 34px; border: 1px solid var(--eduplan-color-line); border-radius: 9px; background: transparent; color: var(--eduplan-color-muted); font-size: 22px; cursor: pointer; }
.epnav-remove:hover { border-color: #e05f6f; color: #b33c4c; }
.epnav-icon-picker { position: relative; width: 44px; }
.epnav-icon-picker summary { display: grid; width: 42px; height: 42px; place-items: center; border: 1px solid var(--eduplan-color-control-border); border-radius: var(--eduplan-radius-sm); background: var(--eduplan-color-control); color: var(--eduplan-color-primary); cursor: pointer; list-style: none; }
.epnav-icon-picker summary::-webkit-details-marker { display: none; }
.epnav-icon-picker summary svg, .epnav-icon-grid svg { width: 22px; height: 22px; }
.epnav-icon-picker[open] summary { border-color: var(--eduplan-color-primary); box-shadow: var(--eduplan-focus); }
.epnav-icon-grid { position: fixed; z-index: 100000; display: grid; width: 232px; max-height: min(360px, calc(100vh - 16px)); grid-template-columns: repeat(5, 38px); gap: 6px; margin: 0; padding: 10px; overflow-y: auto; border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-md); background: var(--eduplan-color-surface-raised); box-shadow: var(--eduplan-shadow-overlay); }
.epnav-icon-grid input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.epnav-icon-grid label { display: grid; width: 38px; height: 38px; place-items: center; border: 1px solid transparent; border-radius: var(--eduplan-radius-sm); color: var(--eduplan-color-muted); cursor: pointer; }
.epnav-icon-grid label:hover { background: var(--eduplan-color-surface-hover); color: var(--eduplan-color-primary); }
.epnav-icon-grid input:checked + label { border-color: var(--eduplan-color-primary); background: var(--eduplan-color-primary-soft); color: var(--eduplan-color-primary); }
.epnav-icon-grid input:focus-visible + label { outline: 3px solid var(--eduplan-color-primary-soft); outline-offset: 1px; }
.epnav-drawer-layer[hidden] { display: none; }
.epnav-drawer-layer { position: fixed; z-index: 99990; inset: 0; display: flex; justify-content: flex-end; }
.epnav-drawer-backdrop { position: absolute; inset: 0; width: 100%; border: 0; background: #17233c66; cursor: default; }
.epnav-drawer { position: relative; z-index: 1; display: flex; width: min(440px, 100vw); height: 100%; flex-direction: column; background: var(--eduplan-color-surface-raised); box-shadow: var(--eduplan-shadow-overlay); animation: epnav-drawer-in .2s ease-out; }
.epnav-drawer header, .epnav-drawer footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 20px 22px; border-bottom: 1px solid var(--eduplan-color-line); }
.epnav-drawer footer { margin-top: auto; justify-content: flex-end; border-top: 1px solid var(--eduplan-color-line); border-bottom: 0; }
.epnav-drawer header span { color: var(--eduplan-color-primary); font-size: var(--eduplan-text-overline); font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
.epnav-drawer header h2 { margin: 4px 0 0; font-size: var(--eduplan-text-title); }
.epnav-drawer-close { width: 40px; height: 40px; border: 1px solid var(--eduplan-color-line); border-radius: var(--eduplan-radius-sm); background: transparent; color: var(--eduplan-color-muted); font-size: 25px; cursor: pointer; }
.epnav-drawer-body { display: grid; gap: 18px; padding: 22px; overflow-y: auto; }
.epnav-drawer-body > label, .epnav-drawer-field { display: grid; gap: 7px; color: var(--eduplan-color-ink); font-size: var(--eduplan-text-label); font-weight: 750; }
.epnav-drawer-body input[type=text], .epnav-drawer-body input[type=number], .epnav-drawer-body select { width: 100%; min-height: 44px; padding: 8px 11px; border: 1px solid var(--eduplan-color-control-border); border-radius: var(--eduplan-radius-sm); background: var(--eduplan-color-control); color: var(--eduplan-color-ink); font: inherit; }
.epnav-drawer-body .epnav-drawer-check { display: flex; grid-template-columns: none; align-items: center; }
body.epnav-drawer-open { overflow: hidden; }
@keyframes epnav-drawer-in { from { transform: translateX(100%); } to { transform: translateX(0); } }
html[dir=rtl] .epnav-drawer-layer { justify-content: flex-start; }
html[dir=rtl] .epnav-drawer { animation-name: epnav-drawer-in-rtl; }
@keyframes epnav-drawer-in-rtl { from { transform: translateX(-100%); } to { transform: translateX(0); } }
@media (max-width: 720px) { .epnav-shell { padding: 18px 12px; } .epnav-panel { padding: 14px; } .epnav-tabs { display: flex; } .epnav-tabs button { flex: 1; } }
