:root {
	--portal-ink: #13211d;
	--portal-muted: #62746e;
	--portal-line: #dce6df;
	--portal-bg: #f5f7f6;
	--portal-panel: #ffffff;
	--portal-accent: #15986f;
	--portal-accent-dark: #0f6f53;
	--portal-warn: #b8652d;
	--portal-error: #a53b33;
	--portal-shadow: 0 18px 45px rgba(19, 33, 29, 0.08);
}

body.portal-auth,
body.portal-app {
	min-height: 100vh;
	margin: 0;
	background: var(--portal-bg);
	color: var(--portal-ink);
	font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	letter-spacing: 0;
}

body.portal-auth *,
body.portal-app * {
	box-sizing: border-box;
}

.portal-brand {
	display: inline-flex;
	align-items: center;
	gap: 11px;
	color: inherit;
	text-decoration: none;
}

.portal-brand .brand-mark {
	display: grid;
	width: 38px;
	height: 38px;
	place-items: center;
	border-radius: 8px;
	background: #063f39;
	overflow: hidden;
	box-shadow: 0 10px 22px rgba(21, 152, 111, 0.24);
}

.portal-brand .brand-mark img {
	display: block;
	width: 78%;
	height: 78%;
	object-fit: contain;
	border-radius: 6px;
}

.portal-brand strong,
.portal-brand small {
	display: block;
	line-height: 1.05;
}

.portal-brand strong {
	font-size: 16px;
	font-weight: 950;
}

.portal-brand small {
	margin-top: 3px;
	color: var(--portal-muted);
	font-size: 11px;
	font-weight: 850;
	text-transform: uppercase;
}

.eyebrow {
	margin: 0 0 8px;
	color: var(--portal-accent-dark);
	font-size: 12px;
	font-weight: 950;
	text-transform: uppercase;
}

.auth-layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(340px, 430px);
	gap: clamp(24px, 5vw, 72px);
	align-items: center;
	min-height: 100vh;
	padding: clamp(22px, 5vw, 62px);
}

.auth-visual {
	display: grid;
	align-content: space-between;
	min-height: min(720px, calc(100vh - 96px));
	padding: clamp(24px, 4vw, 46px);
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background:
		linear-gradient(135deg, rgba(21, 152, 111, 0.12), transparent 38%),
		linear-gradient(315deg, rgba(29, 108, 227, 0.1), transparent 42%),
		#fff;
	box-shadow: var(--portal-shadow);
}

.login-layout {
	grid-template-columns: minmax(0, 1fr) minmax(360px, 460px);
}

.login-visual {
	position: relative;
	overflow: hidden;
	background:
		linear-gradient(135deg, rgba(21, 152, 111, 0.14), transparent 36%),
		linear-gradient(315deg, rgba(29, 108, 227, 0.12), transparent 42%),
		repeating-linear-gradient(90deg, rgba(19, 33, 29, 0.035) 0 1px, transparent 1px 52px),
		#fff;
}

.login-visual::before {
	position: absolute;
	right: clamp(18px, 4vw, 54px);
	bottom: clamp(18px, 4vw, 54px);
	width: min(360px, 44vw);
	aspect-ratio: 1.3;
	border: 1px solid rgba(21, 152, 111, 0.2);
	border-radius: 8px;
	background:
		linear-gradient(90deg, rgba(21, 152, 111, 0.18) 0 18%, transparent 18% 100%),
		linear-gradient(180deg, rgba(29, 108, 227, 0.12) 0 22%, transparent 22% 100%),
		rgba(255, 255, 255, 0.72);
	box-shadow: 0 28px 70px rgba(19, 33, 29, 0.1);
	content: "";
}

.login-visual::after {
	position: absolute;
	right: clamp(42px, 7vw, 92px);
	bottom: clamp(54px, 8vw, 118px);
	width: min(220px, 30vw);
	height: 12px;
	border-radius: 999px;
	background: linear-gradient(90deg, var(--portal-accent), #1d6ce3);
	box-shadow:
		0 30px 0 rgba(19, 33, 29, 0.12),
		0 60px 0 rgba(19, 33, 29, 0.08);
	content: "";
}

.login-visual > * {
	position: relative;
	z-index: 1;
}

.login-visual-rack {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
	max-width: 420px;
}

.login-visual-rack span {
	display: block;
	height: 8px;
	border-radius: 999px;
	background: rgba(21, 152, 111, 0.2);
}

.login-visual-rack span:nth-child(2) {
	background: rgba(29, 108, 227, 0.18);
}

.login-visual-rack span:nth-child(3) {
	background: rgba(184, 101, 45, 0.18);
}

.login-card {
	position: relative;
	overflow: hidden;
	align-self: center;
	border-color: rgba(21, 152, 111, 0.24);
	box-shadow: 0 24px 70px rgba(19, 33, 29, 0.12);
}

.login-card::before {
	display: block;
	width: calc(100% + 68px);
	height: 6px;
	margin: calc(clamp(22px, 4vw, 34px) * -1) calc(clamp(22px, 4vw, 34px) * -1) 24px;
	background: linear-gradient(90deg, var(--portal-accent), #1d6ce3, var(--portal-warn));
	content: "";
}

.login-card h2 {
	margin-bottom: 24px;
	font-size: 28px;
}

.login-card .portal-form {
	gap: 16px;
}

.login-card .portal-form input {
	min-height: 50px;
	background: #fff;
	box-shadow: inset 0 1px 0 rgba(19, 33, 29, 0.03);
}

.login-card .button.primary {
	min-height: 50px;
	margin-top: 4px;
}

.auth-title,
.portal-title {
	margin: 0;
	max-width: 780px;
	color: var(--portal-ink);
	font-weight: 950;
	line-height: 0.98;
	letter-spacing: 0;
}

.auth-title {
	font-size: clamp(42px, 6vw, 86px);
}

.portal-title {
	font-size: clamp(38px, 4.2vw, 68px);
}

.auth-visual p:not(.eyebrow),
.portal-sidebar p:not(.eyebrow) {
	max-width: 660px;
	margin: 16px 0 0;
	color: var(--portal-muted);
	font-size: 17px;
	line-height: 1.55;
}

.auth-card,
.portal-panel,
.portal-grid article,
.portal-sidebar,
.portal-metrics article {
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: var(--portal-panel);
	box-shadow: var(--portal-shadow);
}

.auth-card {
	padding: clamp(22px, 4vw, 34px);
}

.register-card {
	width: min(860px, 100%);
}

.register-card .auth-links {
	margin-top: 24px;
}

.register-progress {
	display: grid;
	gap: 10px;
	margin: 0 0 18px;
}

.register-progress span {
	color: var(--portal-muted);
	font-size: 13px;
	font-weight: 950;
	text-transform: uppercase;
}

.register-progress div {
	overflow: hidden;
	height: 9px;
	border-radius: 999px;
	background: #eef2ef;
}

.register-progress i {
	display: block;
	width: 20%;
	height: 100%;
	border-radius: inherit;
	background: linear-gradient(90deg, var(--portal-accent), #1d6ce3);
	transition: width 220ms ease;
}

.auth-card h2,
.portal-panel h2,
.portal-grid article h2 {
	margin: 0 0 18px;
	font-size: 24px;
	line-height: 1.15;
}

.portal-form {
	display: grid;
	gap: 14px;
}

.portal-form fieldset {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 14px;
	margin: 0;
	padding: 16px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fbfcfb;
}

.portal-form .register-step {
	display: none;
}

.portal-form .register-step.is-active {
	display: grid;
	position: relative;
	z-index: 1;
}

.portal-form legend {
	padding: 0 6px;
	color: var(--portal-accent-dark);
	font-size: 12px;
	font-weight: 950;
	text-transform: uppercase;
}

.portal-form .confirmations {
	grid-template-columns: 1fr;
}

.portal-form .confirmations label {
	display: grid;
	grid-template-columns: 18px minmax(0, 1fr);
	gap: 10px;
	align-items: start;
}

.portal-form .confirmations input[type="checkbox"] {
	width: 18px;
	min-height: 18px;
	margin: 1px 0 0;
}

.portal-form .confirmations label span {
	margin: 0;
	color: var(--portal-ink);
	font-size: 14px;
	font-weight: 800;
	line-height: 1.35;
	text-transform: none;
}

.portal-form .confirmations .password-row {
	display: block;
	padding-top: 10px;
	border-top: 1px solid var(--portal-line);
}

.portal-form .confirmations .password-row span {
	display: block;
	margin-bottom: 7px;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 900;
	text-transform: uppercase;
}

.portal-form .confirmations .password-row input {
	width: 100%;
	min-height: 44px;
	margin: 0;
}

.register-nav {
	display: flex;
	position: relative;
	z-index: 2;
	flex-wrap: wrap;
	gap: 12px;
	align-items: center;
	justify-content: space-between;
	margin-top: 18px;
	padding-top: 16px;
	border-top: 1px solid var(--portal-line);
}

.register-nav .button.primary {
	min-width: 180px;
}

.register-nav .button.primary[hidden],
.register-nav .portal-ghost[hidden] {
	display: none;
}

.register-nav .portal-ghost:disabled {
	opacity: 0.45;
	cursor: not-allowed;
	transform: none;
}

.register-card .portal-message {
	margin-top: 16px;
}

.register-plan-intro {
	margin: 0;
	color: var(--portal-muted);
	font-size: 14px;
	line-height: 1.55;
}

.register-plan-options {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
}

.register-plan-options label {
	display: flex;
	gap: 10px;
	align-items: flex-start;
	padding: 14px;
	border: 1px solid var(--portal-line);
	border-radius: 10px;
	background: #fbfcfb;
	cursor: pointer;
}

.register-plan-options input,
.register-trial-consent input {
	flex: 0 0 auto;
	width: 18px;
	min-height: 18px;
	margin-top: 2px;
}

.register-plan-options strong,
.register-plan-options small {
	display: block;
}

.register-plan-options small {
	margin-top: 5px;
	color: var(--portal-muted);
	font-size: 12px;
	line-height: 1.4;
}

.register-plan-options label:has(input:checked) {
	border-color: var(--portal-accent);
	box-shadow: 0 0 0 3px rgba(21, 152, 111, .12);
}

.register-trial-consent {
	display: flex;
	gap: 10px;
	align-items: flex-start;
	padding: 14px;
	border: 1px solid #d5b65a;
	border-radius: 10px;
	background: #fff9e8;
}

@media (max-width: 760px) {
	.register-plan-options { grid-template-columns: 1fr; }
}

.portal-form label span,
.identity-list dt {
	display: block;
	margin-bottom: 7px;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 900;
	text-transform: uppercase;
}

.portal-form input,
.portal-form select,
.portal-form textarea {
	width: 100%;
	padding: 0 12px;
	border: 1px solid #cbd8d0;
	border-radius: 8px;
	background: #fbfcfb;
	color: var(--portal-ink);
	font: inherit;
}

.portal-form input,
.portal-form select {
	min-height: 44px;
}

.portal-form textarea {
	min-height: 118px;
	padding: 11px 12px;
	resize: vertical;
	line-height: 1.45;
}

.portal-form input:focus,
.portal-form select:focus,
.portal-form textarea:focus {
	outline: 3px solid rgba(21, 152, 111, 0.18);
	border-color: var(--portal-accent);
}

.button,
.portal-ghost,
.portal-table button,
.teacher-actions button {
	min-height: 42px;
	border-radius: 8px;
	font: inherit;
	font-weight: 900;
	cursor: pointer;
	transition: transform 160ms ease, border-color 160ms ease, background 160ms ease, color 160ms ease, box-shadow 160ms ease;
}

.button:hover,
.portal-ghost:hover,
.portal-table button:hover,
.teacher-actions button:hover {
	transform: translateY(-1px);
}

.button.primary {
	border: 0;
	background: var(--portal-ink);
	color: #fff;
	box-shadow: 0 12px 24px rgba(19, 33, 29, 0.15);
}

.button.primary:hover {
	background: #0b1512;
}

.portal-ghost,
.portal-table button {
	border: 1px solid var(--portal-line);
	background: #fff;
	color: var(--portal-ink);
	padding: 0 13px;
}

.portal-ghost:hover,
.portal-table button:hover {
	border-color: rgba(21, 152, 111, 0.48);
	color: var(--portal-accent-dark);
}

.auth-links {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	justify-content: space-between;
	margin-top: 18px;
	font-size: 14px;
	font-weight: 850;
}

.auth-links a {
	color: var(--portal-accent-dark);
	text-decoration: none;
}

.portal-message {
	min-height: 22px;
	margin: 12px 0 0;
	color: var(--portal-muted);
	font-size: 14px;
	font-weight: 800;
}

.portal-message.is-ok {
	color: var(--portal-accent-dark);
}

.portal-message.is-error {
	color: var(--portal-error);
}

.portal-header {
	position: sticky;
	top: 0;
	z-index: 20;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	padding: 12px clamp(16px, 3vw, 34px);
	border-bottom: 1px solid var(--portal-line);
	background: rgba(245, 247, 246, 0.94);
	backdrop-filter: blur(14px);
}

.portal-session {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	color: var(--portal-muted);
	font-size: 13px;
	font-weight: 850;
}

.portal-layout {
	display: grid;
	grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
	gap: 20px;
	padding: 20px;
}

.portal-sidebar {
	position: sticky;
	top: 84px;
	align-self: start;
	padding: 24px;
}

.portal-main {
	display: grid;
	align-content: start;
	gap: 18px;
	min-width: 0;
}

.portal-metrics {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 12px;
}

.portal-metrics article {
	min-height: 118px;
	padding: 18px;
}

.portal-metrics strong {
	display: block;
	font-size: 32px;
	line-height: 1;
}

.portal-metrics span {
	display: block;
	margin-top: 9px;
	color: var(--portal-muted);
	font-size: 13px;
	font-weight: 850;
}

.portal-grid {
	display: grid;
	gap: 14px;
}

.portal-grid.three {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.portal-grid.charts-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.portal-grid.two {
	grid-template-columns: minmax(320px, 0.85fr) minmax(0, 1.4fr);
}

.portal-grid.teacher {
	grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
}

.portal-grid.ai-integrity-layout {
	grid-template-columns: minmax(320px, 1fr) minmax(260px, 0.62fr);
}

.portal-grid article,
.portal-panel {
	padding: 20px;
	min-width: 0;
}

.signal-list,
.identity-list {
	display: grid;
	gap: 10px;
}

.signal-list div,
.identity-list div {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 12px 0;
	border-bottom: 1px solid #eef2ef;
}

.signal-list div:last-child,
.identity-list div:last-child {
	border-bottom: 0;
}

.signal-list span,
.identity-list dd {
	margin: 0;
	color: var(--portal-muted);
	font-size: 14px;
	font-weight: 800;
}

.signal-list strong {
	text-align: right;
	font-size: 15px;
}

.compact-rack {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 14px;
}

.compact-rack span,
.segmented-filters button {
	display: inline-flex;
	align-items: center;
	min-height: 34px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fbfcfb;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 900;
}

.compact-rack span {
	gap: 7px;
	padding: 0 10px;
}

.compact-rack strong {
	color: var(--portal-ink);
}

.class-server-rack {
	display: grid;
	gap: 10px;
}

.class-server-item {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 14px;
	align-items: center;
	padding: 13px;
	border: 1px solid var(--portal-line);
	border-left: 4px solid var(--portal-accent);
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 10px 24px rgba(19, 33, 29, 0.05);
}

.class-server-item h3 {
	margin: 0 0 5px;
	font-size: 15px;
	line-height: 1.2;
}

.class-server-item p {
	margin: 0;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 800;
	line-height: 1.35;
	overflow-wrap: anywhere;
}

.class-server-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-end;
	gap: 8px;
}

.class-server-actions button {
	min-height: 32px;
	padding: 0 10px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fbfcfb;
	color: var(--portal-ink);
	font-size: 12px;
	font-weight: 900;
	cursor: pointer;
}

.sysadmin-layout article,
.sysadmin-status article {
	align-content: start;
}

body.portal-app .portal-metrics.sysadmin-metrics {
	grid-template-columns: repeat(6, minmax(0, 1fr));
}

body.portal-app .portal-grid.sysadmin-detail-grid {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.sysadmin-detail-grid article {
	align-content: start;
}

@media (max-width: 1050px) {
	body.portal-app .portal-metrics.sysadmin-metrics {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	body.portal-app .portal-grid.sysadmin-detail-grid {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 620px) {
	body.portal-app .portal-metrics.sysadmin-metrics {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.sys-server-item {
	grid-template-columns: minmax(180px, 1fr) minmax(240px, auto);
}

.sys-console {
	width: 100%;
	min-height: 280px;
	max-height: 520px;
	margin: 0;
	padding: 14px;
	overflow: auto;
	border: 1px solid #20342f;
	border-radius: 8px;
	background: #08110f;
	color: #d7f8e8;
	font: 12px/1.55 "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
	white-space: pre-wrap;
	word-break: break-word;
}

.chart-box {
	display: grid;
	min-height: 214px;
	align-content: center;
	gap: 16px;
}

.donut-chart {
	position: relative;
	display: grid;
	width: min(168px, 52vw);
	aspect-ratio: 1;
	place-items: center;
	justify-self: center;
	border-radius: 50%;
	box-shadow: inset 0 0 0 1px rgba(19, 33, 29, 0.08);
}

.donut-chart::after {
	position: absolute;
	inset: 31%;
	border-radius: 50%;
	background: var(--portal-panel);
	box-shadow: inset 0 0 0 1px #eef2ef;
	content: "";
}

.donut-chart strong {
	position: relative;
	z-index: 1;
	font-size: 24px;
	line-height: 1;
}

.stack-chart {
	display: flex;
	overflow: hidden;
	width: 100%;
	height: 42px;
	border: 1px solid #dce6df;
	border-radius: 8px;
	background: #eef2ef;
}

.stack-chart span {
	display: block;
	width: var(--chart-size);
	min-width: 4px;
	background: var(--chart-color);
}

.bar-chart {
	display: grid;
	gap: 12px;
}

.bar-row {
	display: grid;
	grid-template-columns: minmax(92px, 0.82fr) minmax(120px, 1.5fr) minmax(36px, auto);
	gap: 10px;
	align-items: center;
}

.bar-row span,
.chart-legend span {
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 900;
}

.bar-row div {
	overflow: hidden;
	height: 12px;
	border-radius: 999px;
	background: #eef2ef;
}

.bar-row i {
	display: block;
	width: var(--chart-size);
	height: 100%;
	border-radius: inherit;
	background: var(--chart-color);
}

.bar-row strong {
	text-align: right;
	font-size: 13px;
}

.gauge-chart {
	display: grid;
	width: min(176px, 54vw);
	aspect-ratio: 1;
	place-items: center;
	justify-self: center;
	border-radius: 50%;
	background:
		radial-gradient(circle at center, var(--portal-panel) 0 56%, transparent 57%),
		conic-gradient(var(--gauge-color) 0 var(--gauge-size), #eef2ef var(--gauge-size) 100%);
	box-shadow: inset 0 0 0 1px rgba(19, 33, 29, 0.08);
}

.gauge-chart strong,
.gauge-chart span {
	grid-area: 1 / 1;
}

.gauge-chart strong {
	margin-top: -12px;
	font-size: 28px;
	line-height: 1;
}

.gauge-chart span {
	margin-top: 36px;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 900;
}

.chart-legend {
	display: grid;
	gap: 8px;
}

.chart-legend span {
	display: grid;
	grid-template-columns: 10px minmax(0, 1fr) auto auto;
	gap: 8px;
	align-items: center;
}

.chart-legend i {
	width: 10px;
	height: 10px;
	border-radius: 999px;
}

.chart-legend strong {
	color: var(--portal-ink);
	font-size: 13px;
}

.chart-legend em {
	color: var(--portal-muted);
	font-size: 12px;
	font-style: normal;
	font-weight: 900;
	text-align: right;
}

.chart-empty {
	display: grid;
	min-height: 156px;
	place-items: center;
	border: 1px dashed var(--portal-line);
	border-radius: 8px;
	color: var(--portal-muted);
	font-size: 13px;
	font-weight: 900;
	text-align: center;
}

.segmented-filters {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.segmented-filters button {
	padding: 0 11px;
	cursor: pointer;
	transition: border-color 160ms ease, color 160ms ease, background 160ms ease, transform 160ms ease;
}

.segmented-filters button:hover,
.segmented-filters button.is-active {
	border-color: rgba(21, 152, 111, 0.55);
	background: rgba(21, 152, 111, 0.08);
	color: var(--portal-accent-dark);
	transform: translateY(-1px);
}

.identity-list dl {
	margin: 0;
}

.identity-list dt {
	margin-bottom: 2px;
}

.table-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 14px;
}

.table-head h2 {
	margin: 0;
}

.portal-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 14px;
}

.portal-table th,
.portal-table td {
	padding: 12px 10px;
	border-bottom: 1px solid #eef2ef;
	text-align: left;
	vertical-align: middle;
}

.portal-table th {
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 950;
	text-transform: uppercase;
}

.portal-table td:last-child {
	text-align: right;
}

.compact-table th,
.compact-table td {
	padding: 10px 8px;
}

.teacher-actions {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
}

.action-level-head {
	display: flex;
	grid-column: 1 / -1;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 2px;
}

.action-level-head h2,
.action-level-head p { margin: 0; }

body:not(.show-advanced-actions) #actionFilters { display: none; }

.activity-form-section {
	display: grid;
	gap: 14px;
	margin: 0;
	padding: 20px;
	border: 1px solid var(--portal-line);
	border-radius: 4px;
	background: #fbfcfb;
}

.activity-form-section legend {
	padding: 0 8px;
	color: var(--portal-ink);
	font-size: 15px;
	font-weight: 900;
}

.action-delivery { min-height: 0; }
.action-delivery summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; cursor: pointer; list-style: none; }
.action-delivery summary::-webkit-details-marker { display: none; }
.action-delivery summary > span { display: grid; gap: 6px; }
.action-delivery summary em { color: var(--portal-muted); font-size: 11px; font-style: normal; font-weight: 900; text-transform: uppercase; }
.technical-details { display: grid; gap: 8px; margin: 14px 0 0; padding-top: 12px; border-top: 1px solid var(--portal-line); }
.technical-details div { display: grid; grid-template-columns: 90px 1fr; gap: 10px; }
.technical-details dt { color: var(--portal-muted); font-size: 11px; font-weight: 900; text-transform: uppercase; }
.technical-details dd { margin: 0; overflow-wrap: anywhere; font: 12px/1.4 ui-monospace, monospace; }
.student-row-status { margin-right: 10px; }
.student-more-button { min-width: 38px; min-height: 34px; padding: 4px 9px !important; font-weight: 900; letter-spacing: 2px; }

.dashboard-toasts { position: fixed; right: 22px; bottom: 22px; z-index: 1000; display: grid; gap: 10px; width: min(380px, calc(100vw - 32px)); }
.dashboard-toast { padding: 14px 16px; border: 1px solid var(--portal-line); border-left: 4px solid var(--portal-accent); border-radius: 4px; background: #fff; box-shadow: 0 16px 42px rgba(18,39,32,.18); color: var(--portal-ink); font-weight: 800; animation: toast-in 160ms ease-out; }
.dashboard-toast.error { border-left-color: var(--portal-danger); }
@keyframes toast-in { from { opacity: 0; transform: translateY(8px); } }

.teacher-actions button {
	display: grid;
	align-content: start;
	min-height: 112px;
	padding: 14px;
	border: 1px solid var(--portal-line);
	background: #fff;
	color: var(--portal-ink);
	text-align: left;
	box-shadow: 0 10px 28px rgba(19, 33, 29, 0.06);
}

.teacher-actions button:hover {
	border-color: rgba(21, 152, 111, 0.55);
	box-shadow: 0 14px 32px rgba(21, 152, 111, 0.11);
}

.teacher-actions strong {
	display: block;
	font-size: 14px;
	line-height: 1.2;
}

.teacher-actions small {
	display: block;
	margin-top: 8px;
	color: var(--portal-muted);
	font-size: 12px;
	line-height: 1.35;
}

.teacher-actions em {
	display: block;
	margin-top: 10px;
	color: var(--portal-accent-dark);
	font-size: 11px;
	font-style: normal;
	font-weight: 950;
	text-transform: uppercase;
}

.minecraft-actions {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 10px;
}

.minecraft-action {
	display: grid;
	gap: 7px;
	min-height: 92px;
	padding: 13px;
	border: 1px solid var(--portal-line);
	border-left: 4px solid #8b9a95;
	background: #fff;
	box-shadow: 0 10px 24px rgba(19, 33, 29, 0.05);
}

.minecraft-action strong,
.minecraft-action span,
.minecraft-action small {
	overflow-wrap: anywhere;
}

.minecraft-action strong {
	font-size: 13px;
}

.minecraft-action span,
.minecraft-action small {
	color: var(--portal-muted);
	font-size: 12px;
	line-height: 1.35;
}

.minecraft-action.sent {
	border-left-color: #1d6ce3;
}

.minecraft-action.completed {
	border-left-color: #15986f;
}

.minecraft-action.failed {
	border-left-color: #c84f6a;
}

.empty-actions {
	display: grid;
	min-height: 112px;
	place-items: center;
	padding: 18px;
	border: 1px dashed var(--portal-line);
	border-radius: 8px;
	color: var(--portal-muted);
	font-weight: 850;
}

@media (max-width: 1180px) {
	.auth-layout {
		grid-template-columns: 1fr;
	}

	.portal-metrics,
	.portal-grid.three,
	.portal-grid.charts-grid,
	.minecraft-actions,
	.teacher-actions {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.portal-grid.two,
	.portal-grid.teacher,
	.portal-grid.ai-integrity-layout {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 820px) {
	.auth-layout,
	.login-layout,
	.portal-layout {
		grid-template-columns: 1fr;
	}

	.auth-visual {
		min-height: auto;
	}

	.login-visual::before,
	.login-visual::after {
		display: none;
	}

	.portal-sidebar {
		position: static;
	}

	.portal-header {
		align-items: flex-start;
	}
}

@media (max-width: 620px) {
	.auth-layout,
	.portal-layout {
		padding: 14px;
	}

	.portal-header,
	.portal-session,
	.table-head {
		align-items: stretch;
		flex-direction: column;
	}

	.teacher-page-tabs {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.portal-form fieldset {
		grid-template-columns: 1fr;
	}

	.register-nav {
		display: grid;
		grid-template-columns: 1fr;
	}

	.register-nav .button.primary,
	.register-nav .portal-ghost {
		width: 100%;
		min-width: 0;
	}

	.portal-metrics,
	.portal-grid.three,
	.portal-grid.charts-grid,
	.minecraft-actions,
	.teacher-actions {
		grid-template-columns: 1fr;
	}

	.bar-row {
		grid-template-columns: 1fr;
	}

	.bar-row strong {
		text-align: left;
	}

	.portal-table {
		display: block;
		overflow-x: auto;
		white-space: nowrap;
	}

	.action-level-head { align-items: stretch; flex-direction: column; }
	.dashboard-toasts { right: 16px; bottom: 16px; }
}

/* 2026 dashboard polish: dense, role-first, operational UI. */
:root {
	--portal-bg: #f4f6f5;
	--portal-panel: #ffffff;
	--portal-ink: #111c18;
	--portal-muted: #5f6f69;
	--portal-line: #d9e2dd;
	--portal-soft: #edf3ef;
	--portal-accent: #14966e;
	--portal-blue: #286fe3;
	--portal-gold: #c99528;
	--portal-danger: #b5433d;
	--portal-shadow: 0 10px 28px rgba(18, 31, 26, 0.07);
	--portal-shadow-hover: 0 16px 40px rgba(18, 31, 26, 0.1);
}

body.portal-app {
	background:
		linear-gradient(180deg, rgba(20, 150, 110, 0.06), transparent 320px),
		var(--portal-bg);
}

.portal-header {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	min-height: 66px;
	padding: 10px clamp(14px, 2.6vw, 30px);
	background: rgba(255, 255, 255, 0.86);
	box-shadow: 0 1px 0 rgba(17, 28, 24, 0.04);
}

.portal-session {
	justify-self: end;
}

.portal-layout {
	grid-template-columns: minmax(250px, 300px) minmax(0, 1fr);
	gap: 18px;
	max-width: 1560px;
	margin: 0 auto;
	padding: 18px;
}

.portal-sidebar {
	top: 86px;
	overflow: hidden;
	padding: 20px;
	background:
		linear-gradient(180deg, rgba(20, 150, 110, 0.08), transparent 180px),
		#fff;
}

.portal-sidebar::before {
	display: block;
	width: 42px;
	height: 4px;
	margin-bottom: 18px;
	border-radius: 999px;
	background: linear-gradient(90deg, var(--portal-accent), var(--portal-blue));
	content: "";
}

.portal-title {
	font-size: clamp(31px, 3vw, 48px);
	line-height: 1.02;
}

.portal-sidebar p:not(.eyebrow) {
	margin-top: 14px;
	font-size: 14px;
	line-height: 1.55;
}

.workspace-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 18px 20px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fff;
	box-shadow: var(--portal-shadow);
}

.workspace-head h2 {
	margin: 0;
	font-size: clamp(24px, 2.2vw, 34px);
	line-height: 1.08;
}

.status-chip {
	display: inline-flex;
	align-items: center;
	min-height: 32px;
	padding: 0 11px;
	border: 1px solid rgba(20, 150, 110, 0.28);
	border-radius: 999px;
	background: rgba(20, 150, 110, 0.08);
	color: #0d6d50;
	font-size: 12px;
	font-weight: 950;
	text-transform: uppercase;
}

.portal-metrics {
	grid-template-columns: repeat(4, minmax(145px, 1fr));
}

.portal-metrics article,
.portal-grid article,
.portal-panel,
.auth-card,
.portal-sidebar {
	border-color: rgba(17, 28, 24, 0.1);
	box-shadow: var(--portal-shadow);
}

.portal-metrics article {
	position: relative;
	overflow: hidden;
	min-height: 104px;
	padding: 16px 17px;
}

.portal-metrics article::after {
	position: absolute;
	right: 14px;
	bottom: 14px;
	width: 34px;
	height: 34px;
	border-radius: 8px;
	background: var(--portal-soft);
	content: "";
}

.portal-metrics article:nth-child(2)::after {
	background: #e8f0ff;
}

.portal-metrics article:nth-child(3)::after {
	background: #fff3d8;
}

.portal-metrics article:nth-child(4)::after {
	background: #f4eefe;
}

.portal-metrics strong {
	font-size: 34px;
	letter-spacing: 0;
}

.portal-metrics span {
	max-width: 150px;
	font-size: 12px;
	text-transform: uppercase;
}

.portal-grid {
	gap: 12px;
}

.portal-grid article,
.portal-panel {
	padding: 18px;
}

.auth-card h2,
.portal-panel h2,
.portal-grid article h2 {
	margin-bottom: 14px;
	font-size: 19px;
}

.charts-grid article {
	min-height: 310px;
}

.chart-box {
	min-height: 224px;
}

.signal-list div,
.identity-list div {
	min-height: 43px;
	padding: 10px 0;
}

.signal-list span,
.identity-list dd {
	font-size: 13px;
}

.signal-list strong {
	max-width: 58%;
	font-size: 14px;
	overflow-wrap: anywhere;
}

.identity-list dt,
.portal-form label span {
	font-size: 11px;
	letter-spacing: 0;
}

.portal-form input,
.portal-form select,
.portal-form textarea {
	border-color: #ccd8d2;
	background: #fff;
}

.portal-form input:hover,
.portal-form select:hover,
.portal-form textarea:hover {
	border-color: #aebfb7;
}

.import-panel {
	display: grid;
	align-content: start;
	gap: 14px;
}

.import-note {
	margin: 0;
	padding: 11px 12px;
	border: 1px solid rgba(20, 150, 110, 0.2);
	border-radius: 8px;
	background: rgba(20, 150, 110, 0.07);
	color: var(--portal-muted);
	font-size: 13px;
	font-weight: 850;
	line-height: 1.42;
}

.import-panel .status-chip {
	border-radius: 8px;
	white-space: nowrap;
}

.import-preview {
	display: grid;
	gap: 10px;
	min-width: 0;
}

.import-preview .portal-table {
	margin-top: 0;
}

.import-preview p {
	margin: 0;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 850;
}

.portal-table {
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	border-collapse: separate;
	border-spacing: 0;
	overflow: hidden;
	background: #fff;
}

.portal-table th {
	background: #f7faf8;
}

.portal-table tbody tr:hover {
	background: #fbfdfb;
}

.portal-table td,
.portal-table th {
	padding: 13px 12px;
}

.portal-table button {
	min-height: 34px;
}

.compact-rack span,
.segmented-filters button {
	background: #fff;
}

.segmented-filters {
	gap: 7px;
}

.teacher-actions {
	grid-template-columns: repeat(auto-fit, minmax(178px, 1fr));
}

.teacher-actions button {
	min-height: 104px;
	box-shadow: none;
}

.teacher-actions button:hover {
	box-shadow: var(--portal-shadow-hover);
}

.minecraft-actions {
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}

.minecraft-action {
	border-radius: 8px;
	box-shadow: none;
}

.minecraft-action:hover {
	box-shadow: var(--portal-shadow);
}

.teacher-page-tabs {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: 8px;
	padding: 6px;
	border: 1px solid rgba(17, 28, 24, 0.1);
	border-radius: 8px;
	background: #f6faf8;
}

.teacher-page-tabs.tic-page-tabs {
	grid-template-columns: repeat(6, minmax(0, 1fr));
}

.teacher-page-tabs button,
.teacher-page-tabs a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 46px;
	border: 1px solid transparent;
	border-radius: 7px;
	background: transparent;
	color: var(--portal-muted);
	font: inherit;
	font-size: 13px;
	font-weight: 900;
	text-align: center;
	text-decoration: none;
}

.teacher-page-tabs button:hover,
.teacher-page-tabs button.is-active,
.teacher-page-tabs a:hover,
.teacher-page-tabs a.is-active {
	border-color: rgba(20, 150, 110, 0.48);
	background: #fff;
	color: var(--portal-ink);
	box-shadow: 0 10px 22px rgba(17, 28, 24, 0.06);
}

.teacher-page-panel {
	display: grid;
	gap: 14px;
}

.teacher-page-panel[hidden] {
	display: none;
}

.tracking-summary {
	margin-bottom: 16px;
}

.tracking-grid + .tracking-grid {
	margin-top: 16px;
}

.tracking-grid > article {
	overflow: hidden;
}

#trackingStudentTableBody {
	overflow-wrap: anywhere;
}

#trackingStudentTableBody > tr > td:first-child {
	word-break: break-word;
}

.tracking-grid .portal-table {
	table-layout: fixed;
}

.tracking-grid .portal-table th:nth-child(1) { width: 52%; }
.tracking-grid .portal-table th:nth-child(2) { width: 18%; }
.tracking-grid .portal-table th:nth-child(3) { width: 16%; }
.tracking-grid .portal-table th:nth-child(4) { width: 14%; }

.tracking-grid .portal-table th,
.tracking-grid .portal-table td {
	white-space: normal;
	overflow-wrap: anywhere;
}

.tracking-list {
	max-height: 430px;
	overflow: auto;
	padding-right: 2px;
}

.class-chat-help { margin: 8px 0 16px; color: var(--portal-muted); font-size: 13px; line-height: 1.5; }
.class-chat-list { display: grid; gap: 0; max-height: 360px; overflow-y: auto; border: 1px solid var(--portal-line); background: #fbfcfb; }
.class-chat-message { display: grid; grid-template-columns: minmax(150px, 220px) minmax(0, 1fr); gap: 18px; padding: 13px 15px; border-bottom: 1px solid var(--portal-line); }
.class-chat-message:last-child { border-bottom: 0; }
.class-chat-message > div { display: grid; align-content: start; gap: 4px; }
.class-chat-message strong { overflow-wrap: anywhere; font-size: 13px; }
.class-chat-message span { color: var(--portal-muted); font-size: 11px; font-weight: 800; }
.class-chat-message p { margin: 0; overflow-wrap: anywhere; color: var(--portal-ink); font-size: 14px; line-height: 1.5; }
.class-chat-empty { display: grid; min-height: 130px; place-content: center; gap: 6px; padding: 24px; color: var(--portal-muted); text-align: center; }
.class-chat-empty strong { color: var(--portal-ink); }
.policy-control { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 13px 0; border-bottom: 1px solid var(--portal-line); cursor: pointer; }
.policy-control > span:first-child { display: grid; gap: 4px; }
.policy-control strong { color: var(--portal-ink); font-size: 14px; }
.policy-control small { color: var(--portal-muted); font-size: 12px; line-height: 1.35; }
#clientPolicyMessage { margin-top: 12px; }
.resource-pack-config { display: grid; gap: 11px; margin-top: 14px; padding: 15px; border: 1px solid var(--portal-line); background: #f7faf8; }
.resource-pack-config > div { display: grid; gap: 4px; }
.resource-pack-config small { color: var(--portal-muted); font-size: 12px; line-height: 1.4; }
.resource-pack-config label { display: grid; gap: 6px; color: var(--portal-muted); font-size: 12px; font-weight: 900; }
.resource-pack-config input { width: 100%; min-height: 42px; padding: 9px 11px; border: 1px solid var(--portal-line); background: #fff; color: var(--portal-ink); font: inherit; }
.resource-pack-drop { padding: 16px; border: 1px dashed var(--portal-accent) !important; background: #fff; cursor: pointer; }
.resource-pack-drop input { padding: 8px 0; border: 0; }
.resource-pack-advanced { margin-top: 10px; border: 1px solid var(--portal-line); background: #fff; }
.resource-pack-advanced > summary { padding: 12px 14px; cursor: pointer; color: var(--portal-muted); font-size: 12px; font-weight: 900; }
.resource-pack-advanced .resource-pack-config { margin: 0; border: 0; border-top: 1px solid var(--portal-line); }
.protected-region-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 16px; }
.protected-region-form > label { display: grid; gap: 6px; color: var(--portal-muted); font-size: 12px; font-weight: 900; }
.protected-region-form input { width: 100%; min-height: 42px; padding: 9px 11px; border: 1px solid var(--portal-line); background: #fff; color: var(--portal-ink); font: inherit; }
.protected-region-form fieldset { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 0; padding: 13px; border: 1px solid var(--portal-line); }
.protected-region-form legend { padding: 0 6px; color: var(--portal-muted); font-size: 12px; font-weight: 900; }
.protected-region-form .builder-actions, .protected-region-form .portal-message { grid-column: 1 / -1; }
.portal-ghost.danger { border-color: #d8aaa7 !important; color: var(--portal-danger) !important; }
@media (max-width: 760px) { .protected-region-form { grid-template-columns: 1fr; } }

@media (max-width: 660px) {
	.class-chat-message { grid-template-columns: 1fr; gap: 7px; }
}

/* Clearer dashboard hierarchy and section navigation */
body.portal-app .portal-layout { grid-template-columns: 260px minmax(0, 1fr); }
body.portal-app .portal-sidebar { padding: 32px 24px; }
body.portal-app .portal-sidebar .portal-title { font-size: clamp(34px, 3vw, 46px); line-height: .96; }
body.portal-app .portal-sidebar p:not(.eyebrow) { font-size: 14px; line-height: 1.55; }
body.portal-app .workspace-head h2 { font-size: clamp(30px, 3vw, 44px); }
body.portal-app .portal-main { gap: 18px; }

body.portal-app .teacher-page-tabs { gap: 5px; padding: 6px; }
body.portal-app .teacher-page-tabs a {
	position: relative;
	gap: 8px;
	justify-content: flex-start;
	min-height: 48px;
	padding: 9px 12px;
	font-size: 12px;
}
body.portal-app .teacher-page-tabs a > span { display: grid; gap: 3px; min-width: 0; }
body.portal-app .teacher-page-tabs a strong { color: inherit; font-size: 12px; line-height: 1.2; }
body.portal-app .teacher-page-tabs a small { color: #718079; font-size: 10px; font-weight: 750; line-height: 1.25; }
body.portal-app .teacher-page-tabs a::before {
	display: grid;
	width: 24px;
	height: 24px;
	flex: 0 0 24px;
	place-items: center;
	border-radius: 50%;
	background: #e7efeb;
	color: #315148;
	font-size: 12px;
	content: "•";
}
body.portal-app [data-teacher-page="info"]::before,
body.portal-app [data-tic-page="resumen"]::before { content: "⌂"; }
body.portal-app [data-teacher-page="clases"]::before { content: "✎"; }
body.portal-app [data-teacher-page="control"]::before,
body.portal-app [data-tic-page="operacion"]::before { content: "▶"; }
body.portal-app [data-teacher-page="seguimiento"]::before { content: "✓"; }
body.portal-app [data-teacher-page="integridad"]::before { content: "◇"; }
body.portal-app [data-tic-page="alumnos"]::before { content: "A"; }
body.portal-app [data-tic-page="profesores"]::before { content: "P"; }
body.portal-app [data-tic-page="horario"]::before { content: "▦"; }
body.portal-app [data-tic-page="facturacion"]::before { content: "€"; }
body.portal-app .teacher-page-tabs a.is-active::before { background: #cdff55; color: #13211d; }
body.portal-app .teacher-page-tabs a.is-active::after {
	position: absolute;
	right: 9px;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: #cdff55;
	content: "";
}

.section-guide {
	display: flex;
	gap: 14px;
	align-items: center;
	padding: 14px 18px;
	border: 1px solid #cfe0d8;
	border-left: 4px solid var(--portal-accent);
	border-radius: 4px;
	background: #f8fbf9;
}
.section-guide > span { flex: 0 0 auto; color: var(--portal-accent-dark); font-size: 10px; font-weight: 950; letter-spacing: .12em; text-transform: uppercase; }
.section-guide div { display: flex; gap: 10px; align-items: baseline; min-width: 0; }
.section-guide strong { font-size: 15px; }
.section-guide p { margin: 0; color: var(--portal-muted); font-size: 13px; line-height: 1.45; }

.role-quick-start { display: grid; grid-template-columns: minmax(180px, .65fr) minmax(0, 2fr); gap: 18px; align-items: center; padding: 18px 20px; border: 1px solid #cfe0d8; border-radius: 8px; background: linear-gradient(135deg, #fff, #f2f8f5); box-shadow: var(--portal-shadow); }
.role-quick-start h2 { margin: 3px 0 0; font-size: 21px; }
.role-quick-start > div:last-child { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 9px; }
.role-quick-start a { position: relative; display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 2px 10px; align-items: center; min-height: 70px; padding: 11px 12px; border: 1px solid #d6e2dc; border-radius: 7px; background: #fff; color: var(--portal-ink); text-decoration: none; }
.role-quick-start a:hover, .role-quick-start a:focus-visible { border-color: var(--portal-accent); box-shadow: 0 8px 20px rgba(18,31,26,.09); transform: translateY(-1px); }
.role-quick-start a > span { grid-row: 1 / 3; display: grid; width: 32px; height: 32px; place-items: center; border-radius: 50%; background: #cdff55; color: #13211d; font-size: 13px; font-weight: 950; }
.role-quick-start a strong { align-self: end; font-size: 13px; line-height: 1.2; }
.role-quick-start a small { align-self: start; overflow: hidden; color: var(--portal-muted); font-size: 10px; font-weight: 750; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }

body.portal-app .portal-table { display: block; max-width: 100%; overflow-x: auto; }
body.portal-app .portal-grid article > h2,
body.portal-app .portal-panel > h2 { margin-top: 0; }

@media (max-width: 980px) {
	body.portal-app .portal-layout { grid-template-columns: 1fr; }
	body.portal-app .portal-sidebar { padding-block: 22px; }
	body.portal-app .portal-sidebar .identity-list { margin-top: 18px; }
	.role-quick-start { grid-template-columns: 1fr; }
}

@media (max-width: 760px) {
	body.portal-app .workspace-head { align-items: flex-start; }
	body.portal-app .teacher-page-tabs { grid-template-columns: repeat(5, minmax(132px, 1fr)); }
	body.portal-app .teacher-page-tabs.tic-page-tabs { grid-template-columns: repeat(5, minmax(132px, 1fr)); }
	.section-guide { align-items: flex-start; }
	.section-guide div { display: grid; gap: 3px; }
}

/* Readable live log terminal */
.log-terminal {
	max-height: 560px;
	padding: 8px 0;
	overflow: auto;
	background: #07100d;
	color: #d9e4df;
	font: 12px/1.55 "Cascadia Code", "JetBrains Mono", Consolas, monospace;
	white-space: normal;
	tab-size: 4;
}
.log-line {
	display: grid;
	grid-template-columns: 72px 62px minmax(120px, 210px) minmax(320px, 1fr);
	gap: 10px;
	align-items: baseline;
	min-width: 760px;
	padding: 4px 14px;
	border-left: 3px solid transparent;
}
.log-line:nth-child(even) { background: rgba(255,255,255,.018); }
.log-line:hover { background: rgba(103,213,255,.07); }
.log-line time { color: #748b82; font-variant-numeric: tabular-nums; }
.log-level { font-size: 10px; font-weight: 950; letter-spacing: .08em; }
.log-source { overflow: hidden; color: #8fa69d; text-overflow: ellipsis; white-space: nowrap; }
.log-message { color: #dce7e2; overflow-wrap: anywhere; white-space: pre-wrap; }
.level-info .log-level { color: #67d5ff; }
.level-info { border-left-color: rgba(103,213,255,.28); }
.level-warn { border-left-color: #ffc857; background: rgba(255,200,87,.055); }
.level-warn .log-level, .level-warn .log-message { color: #ffd77d; }
.level-error { border-left-color: #ff6b6b; background: rgba(255,107,107,.07); }
.level-error .log-level, .level-error .log-message { color: #ff9898; }
.level-debug .log-level { color: #b597ff; }
.log-line.is-stack { padding-block: 2px; opacity: .68; }
.log-line.is-stack .log-message { color: #aabbb4; }
.log-line.is-plain { display: block; min-width: 760px; padding-left: 161px; }
.log-file-marker { position: sticky; top: 0; z-index: 2; padding: 8px 14px; border-block: 1px solid #294239; background: #101e19; color: #cdff55; font-weight: 900; letter-spacing: .06em; }
.log-file-marker span::before { margin-right: 8px; color: #67d5ff; content: "◆"; }
.log-empty { padding: 30px 16px; color: #80948c; text-align: center; }

@media (max-width: 760px) {
	.log-line { grid-template-columns: 66px 54px 150px minmax(280px, 1fr); gap: 7px; min-width: 650px; padding-inline: 10px; }
	.log-line.is-plain { min-width: 650px; padding-left: 137px; }
}

.activity-ai-panel {
	display: grid;
	gap: 12px;
	padding: 18px;
	border: 1px solid rgba(29, 108, 227, 0.18);
	border-radius: 8px;
	background: #f8fbff;
	box-shadow: var(--portal-shadow);
}

.activity-ai-form {
	display: grid;
	grid-template-columns: 1.4fr repeat(4, minmax(100px, 1fr));
	gap: 10px;
}

.activity-ai-form.chat-mode {
	grid-template-columns: 1fr;
}

.activity-ai-chat {
	display: grid;
	gap: 10px;
	max-height: 320px;
	overflow: auto;
	padding: 12px;
	border: 1px solid rgba(29, 108, 227, 0.16);
	border-radius: 8px;
	background: #fff;
}

.ai-disclosure {
	margin: 0;
	padding: 12px 14px;
	border: 1px solid rgba(21, 152, 111, 0.22);
	border-radius: 8px;
	background: rgba(21, 152, 111, 0.08);
	color: #244238;
	font-size: 13px;
	line-height: 1.45;
}

.activity-chat-message {
	display: grid;
	gap: 4px;
	max-width: min(760px, 92%);
	padding: 10px 12px;
	border: 1px solid rgba(17, 28, 24, 0.08);
	border-radius: 8px;
	background: #f6faf8;
}

.activity-chat-message.user {
	justify-self: end;
	background: #eef5ff;
}

.activity-chat-message strong {
	font-size: 11px;
	text-transform: uppercase;
	color: var(--portal-muted);
}

.activity-chat-message p {
	margin: 0;
	color: var(--portal-ink);
	font-size: 13px;
	line-height: 1.45;
}

.activity-ai-suggestions {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}

.activity-ai-suggestions button {
	min-height: 34px;
	padding: 0 10px;
	border: 1px solid rgba(29, 108, 227, 0.22);
	border-radius: 999px;
	background: #fff;
	color: var(--portal-ink);
	font-size: 12px;
	font-weight: 850;
}

.activity-ai-form label {
	display: grid;
	gap: 7px;
}

.activity-ai-form label span {
	color: var(--portal-muted);
	font-size: 11px;
	font-weight: 950;
	text-transform: uppercase;
}

.activity-ai-form input,
.activity-ai-form select,
.activity-ai-form textarea {
	width: 100%;
	border: 1px solid #c8d6e6;
	border-radius: 8px;
	background: #fff;
	color: var(--portal-ink);
	font: inherit;
}

.activity-ai-form input,
.activity-ai-form select {
	min-height: 42px;
	padding: 0 12px;
}

.activity-ai-form textarea {
	min-height: 112px;
	padding: 11px 12px;
	resize: vertical;
	line-height: 1.45;
}

.activity-ai-form .wide {
	grid-column: 1 / -1;
}

.toggle-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	margin: 12px 0;
	padding: 14px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fbfcfb;
}

.toggle-row strong,
.toggle-row span {
	display: block;
}

.toggle-row strong {
	font-size: 14px;
}

.toggle-row span {
	margin-top: 3px;
	color: var(--portal-muted);
	font-size: 12px;
	font-weight: 800;
}

.switch {
	position: relative;
	display: inline-flex;
	flex: 0 0 auto;
	width: 54px;
	height: 30px;
}

.switch input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.switch span {
	display: block;
	width: 100%;
	height: 100%;
	border: 1px solid #c8d6e6;
	border-radius: 999px;
	background: #e8efec;
	cursor: pointer;
	transition: background 0.18s ease, border-color 0.18s ease;
}

.switch span::after {
	display: block;
	width: 24px;
	height: 24px;
	margin: 2px;
	border-radius: 50%;
	background: #fff;
	box-shadow: 0 3px 10px rgba(19, 33, 29, 0.18);
	transition: transform 0.18s ease;
	content: "";
}

.switch input:checked + span {
	border-color: rgba(21, 152, 111, 0.52);
	background: var(--portal-accent);
}

.switch input:checked + span::after {
	transform: translateX(24px);
}

.activity-builder {
	display: grid;
	gap: 12px;
	padding: 18px;
	border: 1px solid rgba(17, 28, 24, 0.1);
	border-radius: 8px;
	background: #fff;
	box-shadow: var(--portal-shadow);
}

.activity-builder[hidden] {
	display: none;
}

.builder-head,
.builder-actions,
.activity-card footer {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
}

.activity-studio-link { display: inline-flex; align-items: center; justify-content: center; padding: 8px 11px; border: 1px solid #176b55; border-radius: 6px; color: #176b55; font-size: 12px; font-weight: 850; text-decoration: none; }
.activity-studio-link:hover { background: #e7f4ee; }

.builder-head h2 {
	margin: 0;
	font-size: 24px;
	line-height: 1.1;
}

.activity-templates {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
}

.activity-templates button {
	display: grid;
	gap: 6px;
	min-height: 98px;
	padding: 13px;
	border: 1px solid var(--portal-line);
	border-radius: 8px;
	background: #fff;
	color: var(--portal-ink);
	text-align: left;
}

.activity-templates button:hover,
.activity-templates button.is-active {
	border-color: rgba(20, 150, 110, 0.58);
	background: #f7fcfa;
}

.activity-templates strong,
.activity-card strong {
	font-size: 14px;
	line-height: 1.25;
}

.activity-templates span,
.activity-card span,
.activity-card p,
.activity-card small {
	color: var(--portal-muted);
	font-size: 12px;
	line-height: 1.4;
}

.activity-templates em {
	color: var(--portal-accent);
	font-size: 11px;
	font-style: normal;
	font-weight: 950;
	text-transform: uppercase;
}

.activity-form {
	display: grid;
	gap: 10px;
}

.activity-fields {
	display: grid;
	grid-template-columns: 1.5fr repeat(5, minmax(110px, 1fr));
	gap: 10px;
}

.activity-form label {
	display: grid;
	gap: 7px;
}

.activity-form label span {
	color: var(--portal-muted);
	font-size: 11px;
	font-weight: 950;
	text-transform: uppercase;
}

.activity-form input,
.activity-form select,
.activity-form textarea {
	width: 100%;
	border: 1px solid #ccd8d2;
	border-radius: 8px;
	background: #fff;
	color: var(--portal-ink);
	font: inherit;
}

.activity-form input,
.activity-form select {
	min-height: 42px;
	padding: 0 12px;
}

.activity-form textarea {
	min-height: 94px;
	padding: 11px 12px;
	resize: vertical;
	line-height: 1.45;
}

.activity-list {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
}

.activity-card {
	display: grid;
	gap: 10px;
	min-height: 142px;
	padding: 14px;
	border: 1px solid var(--portal-line);
	border-left: 4px solid #8b9a95;
	border-radius: 8px;
	background: #fff;
}

.activity-card.published {
	border-left-color: var(--portal-accent);
}

.activity-card.draft {
	border-left-color: var(--portal-gold);
}

.activity-card.archived {
	opacity: 0.72;
}

.activity-card button {
	min-height: 32px;
	padding: 0 10px;
}

.activity-card.empty {
	border-style: dashed;
}

.donut-chart {
	width: min(146px, 48vw);
}

.chart-legend {
	max-width: 360px;
	margin: 0 auto;
}

.login-visual {
	background:
		linear-gradient(135deg, rgba(20, 150, 110, 0.14), transparent 36%),
		linear-gradient(315deg, rgba(40, 111, 227, 0.11), transparent 42%),
		linear-gradient(180deg, #fff, #f8fbf9);
}

.auth-card {
	box-shadow: 0 20px 58px rgba(17, 28, 24, 0.1);
}

@media (max-width: 1180px) {
	.portal-header {
		grid-template-columns: 1fr;
		align-items: start;
	}

	.portal-session {
		justify-self: stretch;
	}
}

@media (max-width: 820px) {
	.portal-layout {
		padding: 14px;
	}

	.workspace-head {
		align-items: flex-start;
		flex-direction: column;
	}

	.portal-metrics {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.activity-templates,
	.activity-list {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.activity-fields {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.activity-ai-form {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.teacher-page-tabs.tic-page-tabs {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 620px) {
	.portal-metrics {
		grid-template-columns: 1fr;
	}

	.activity-templates,
	.activity-list,
	.activity-fields,
	.activity-ai-form,
	.teacher-page-tabs {
		grid-template-columns: 1fr;
	}

	.builder-head,
	.builder-actions,
	.class-server-item,
	.class-server-actions,
	.activity-card footer {
		align-items: stretch;
		flex-direction: column;
	}

	.class-server-item {
		grid-template-columns: 1fr;
	}
}

/* 2026 visual refresh: dark operations console */
:root {
	color-scheme: dark;
	--portal-ink: #f4f7f2;
	--portal-muted: #9eaea7;
	--portal-line: rgba(205, 255, 85, 0.17);
	--portal-bg: #050c0a;
	--portal-panel: #0b1714;
	--portal-accent: #cdff55;
	--portal-accent-dark: #b8ed3e;
	--portal-warn: #ffb454;
	--portal-error: #ff6f70;
	--portal-shadow: 0 22px 64px rgba(0, 0, 0, 0.35);
}

body.portal-auth, body.portal-app {
	background:
		radial-gradient(circle at 8% 5%, rgba(103,213,255,.08), transparent 30rem),
		linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),
		linear-gradient(90deg, rgba(255,255,255,.025) 1px, transparent 1px),
		var(--portal-bg);
	background-size: auto, 38px 38px, 38px 38px, auto;
	font-family: "Arial Narrow", "Roboto Condensed", Inter, ui-sans-serif, system-ui, sans-serif;
}
.portal-brand .brand-mark { border-radius: 2px; background: var(--portal-accent); box-shadow: 5px 5px 0 rgba(103,213,255,.22); }
.portal-brand .brand-mark img { border-radius: 1px; }
.portal-brand small, .eyebrow { color: var(--portal-accent); letter-spacing: .15em; }
.auth-title, .portal-title { color: var(--portal-ink); font-family: Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif; font-weight: 400; letter-spacing: .02em; text-transform: uppercase; }
.auth-title { font-size: clamp(54px, 8vw, 118px); line-height: .82; }

.auth-visual, .login-visual {
	border-color: var(--portal-line);
	border-radius: 2px;
	background: linear-gradient(135deg, rgba(205,255,85,.08), transparent 36%), linear-gradient(315deg, rgba(103,213,255,.09), transparent 44%), #081310;
}
.login-visual::before { border-color: rgba(205,255,85,.3); border-radius: 1px; background: linear-gradient(90deg, rgba(205,255,85,.14) 0 18%, transparent 18%), linear-gradient(180deg, rgba(103,213,255,.12) 0 22%, transparent 22%), rgba(5,12,10,.72); }
.login-visual::after { border-radius: 0; background: linear-gradient(90deg, var(--portal-accent), #67d5ff); }
.login-card::before { background: linear-gradient(90deg, var(--portal-accent), #67d5ff, var(--portal-warn)); }

.auth-card, .portal-panel, .portal-grid article, .portal-sidebar, .portal-metrics article {
	border-color: var(--portal-line);
	border-radius: 2px;
	background: linear-gradient(145deg, rgba(14,29,25,.98), rgba(8,19,16,.98));
	box-shadow: var(--portal-shadow);
}
.portal-form fieldset, .portal-form input, .portal-form select, .portal-form textarea, .compact-rack span, .segmented-filters button, .class-server-item, .class-server-actions button, .teacher-actions button, .minecraft-action, .portal-ghost, .portal-table button {
	background: #07110f;
	border-color: var(--portal-line);
	border-radius: 2px;
	color: var(--portal-ink);
}
.portal-form input:focus, .portal-form select:focus, .portal-form textarea:focus { outline-color: rgba(205,255,85,.18); border-color: var(--portal-accent); }
.button, .portal-ghost, .portal-table button, .teacher-actions button { border-radius: 2px; }
.button.primary { background: var(--portal-accent); color: #07110f; box-shadow: 5px 5px 0 rgba(103,213,255,.22); }
.button.primary:hover { background: #dcff86; transform: translate(-2px,-2px); box-shadow: 7px 7px 0 rgba(103,213,255,.3); }
.portal-header { background: rgba(5,12,10,.9); border-color: var(--portal-line); backdrop-filter: blur(20px); }
.portal-metrics strong { color: var(--portal-accent); font-family: Impact, sans-serif; font-weight: 400; font-size: 40px; }
.signal-list div, .identity-list div, .portal-table th, .portal-table td { border-color: rgba(205,255,85,.1); }
.donut-chart::after { background: var(--portal-panel); box-shadow: inset 0 0 0 1px var(--portal-line); }
.stack-chart, .bar-row div { background: #15231f; border-color: var(--portal-line); }
.gauge-chart { background: radial-gradient(circle at center, var(--portal-panel) 0 56%, transparent 57%), conic-gradient(var(--gauge-color) 0 var(--gauge-size), #15231f var(--gauge-size) 100%); }
.sys-console { border-color: rgba(205,255,85,.3); background: #010403; color: #d7ffd0; }
.segmented-filters button:hover, .segmented-filters button.is-active { background: rgba(205,255,85,.1); border-color: var(--portal-accent); color: var(--portal-accent); }
.teacher-actions button:hover, .portal-ghost:hover, .portal-table button:hover { border-color: var(--portal-accent); color: var(--portal-accent); box-shadow: 5px 5px 0 rgba(205,255,85,.1); }

/* Dashboard refresh: focused education operations workspace */
body.portal-app {
	--portal-ink: #13211d;
	--portal-muted: #64736d;
	--portal-line: #dce5e0;
	--portal-bg: #eef2ef;
	--portal-panel: #ffffff;
	--portal-accent: #15986f;
	--portal-accent-dark: #0b7052;
	--portal-shadow: 0 12px 32px rgba(18, 39, 32, .07);
	color-scheme: light;
	background: var(--portal-bg);
	color: var(--portal-ink);
}

body.portal-app .portal-header {
	min-height: 68px;
	padding: 12px clamp(18px, 3vw, 38px);
	background: #07110f;
	border-bottom: 3px solid #cdff55;
	color: #f4f7f2;
}

body.portal-app .portal-header .portal-brand small { color: #cdff55; }
body.portal-app .portal-header .portal-ghost { border-color: rgba(255,255,255,.22); background: rgba(255,255,255,.06); color: #fff; }
body.portal-app .portal-header .portal-session { color: #b9c6c0; }

body.portal-app .portal-layout {
	grid-template-columns: 300px minmax(0, 1fr);
	gap: 0;
	max-width: 1800px;
	margin: 0 auto;
	padding: 0;
}

body.portal-app .portal-sidebar {
	top: 68px;
	min-height: calc(100vh - 68px);
	padding: 38px 28px;
	border: 0;
	border-right: 1px solid rgba(205,255,85,.16);
	border-radius: 0;
	background: linear-gradient(180deg, #0b1a16, #07110f);
	box-shadow: none;
	color: #f4f7f2;
}

body.portal-app .portal-sidebar .portal-title {
	color: #f4f7f2;
	font-family: Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif;
	font-size: clamp(42px, 4vw, 62px);
	font-weight: 400;
	line-height: .9;
	text-transform: uppercase;
}

body.portal-app .portal-sidebar p:not(.eyebrow) { color: #aab9b2; }

/* Billing: interfaz nativa; Stripe conserva los datos financieros sensibles. */
.billing-overview {
	display: grid;
	grid-template-columns: minmax(220px, .72fr) minmax(0, 1.28fr);
	gap: 28px;
	padding: clamp(24px, 4vw, 42px);
	border: 1px solid rgba(21, 152, 111, .18);
	border-radius: 26px;
	background: linear-gradient(135deg, rgba(21, 152, 111, .11), rgba(205, 255, 85, .06)), var(--surface, #fff);
	box-shadow: 0 20px 50px rgba(15, 42, 33, .08);
}
.billing-kicker, .billing-facts span, .billing-invoice small { display: block; color: var(--muted, #65756e); font-size: 12px; letter-spacing: .06em; text-transform: uppercase; }
.billing-plan-copy h3 { margin: 8px 0 14px; font-size: clamp(28px, 4vw, 44px); line-height: 1; }
.billing-price { color: #0d5f49; font-size: clamp(24px, 3vw, 36px); font-weight: 800; }
.billing-price small { font-size: 14px; font-weight: 600; color: var(--muted, #65756e); }
.billing-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.billing-facts > div { padding: 16px; border: 1px solid rgba(18, 72, 55, .1); border-radius: 16px; background: rgba(255,255,255,.7); }
.billing-facts strong { display: block; margin-top: 7px; overflow-wrap: anywhere; }
.billing-state { display: inline-flex !important; width: fit-content; align-items: center; min-height: 27px; padding: 5px 10px; border-radius: 999px; font-size: 12px; }
.billing-state.is-success { color: #08724f; background: #dff8ec; }
.billing-state.is-info { color: #185f9f; background: #e4f1ff; }
.billing-state.is-warning { color: #8c5400; background: #fff0ca; }
.billing-state.is-danger { color: #a12632; background: #ffe3e6; }
.billing-state.is-muted { color: #58645f; background: #edf1ef; }
.billing-layout { margin-top: 20px; }
.billing-plan-field { display: grid; gap: 8px; margin: 20px 0; }
.billing-plan-field select { width: 100%; }
.billing-safe-note { margin: 20px 0 0; color: var(--muted, #65756e); font-size: 13px; line-height: 1.55; }
.billing-actions-card.is-readonly .billing-plan-field, .billing-actions-card.is-readonly .builder-actions { opacity: .55; }
.billing-security-list { display: grid; gap: 12px; margin: 20px 0 0; padding: 0; list-style: none; }
.billing-security-list li { padding: 13px 14px 13px 42px; position: relative; border-radius: 14px; background: rgba(21, 152, 111, .07); }
.billing-security-list li::before { content: "✓"; position: absolute; left: 16px; color: #15986f; font-weight: 900; }
.billing-history { margin-top: 20px; }
.billing-invoices { display: grid; gap: 10px; margin-top: 18px; }
.billing-invoice { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 17px; border: 1px solid rgba(18,72,55,.1); border-radius: 16px; background: rgba(255,255,255,.68); }
.billing-invoice > div { display: grid; gap: 5px; }
.billing-invoice > div:last-child { justify-items: end; }
.billing-invoice-actions { display: flex; flex-wrap: wrap; justify-content: end; gap: 7px; }
.billing-invoice-actions .portal-ghost { min-height: 34px; padding: 7px 10px; font-size: 12px; }
.billing-empty { grid-column: 1 / -1; padding: 24px; text-align: center; color: var(--muted, #65756e); }
.billing-empty strong { display: block; color: var(--ink, #163128); font-size: 18px; }
.billing-empty p { margin: 6px 0 0; }
.billing-notice { padding: 14px 16px; margin: 0 0 18px; border: 1px solid #efcf83; border-radius: 14px; background: #fff5da; color: #725000; }
@media (max-width: 760px) {
	.billing-overview { grid-template-columns: 1fr; }
	.billing-facts { grid-template-columns: 1fr; }
	.billing-invoice { align-items: flex-start; flex-direction: column; }
	.billing-invoice > div:last-child { justify-items: start; }
	.billing-invoice-actions { justify-content: start; }
}
body.portal-app .portal-sidebar .identity-list { margin-top: 30px; padding-top: 18px; border-top: 1px solid rgba(205,255,85,.16); }
body.portal-app .portal-sidebar .identity-list div { border-color: rgba(255,255,255,.08); }
body.portal-app .portal-sidebar .identity-list dt,
body.portal-app .portal-sidebar .identity-list dd { color: #b8c7c0; }

body.portal-app .portal-main {
	gap: 22px;
	padding: clamp(24px, 4vw, 52px);
	background:
		linear-gradient(rgba(19,33,29,.025) 1px, transparent 1px),
		linear-gradient(90deg, rgba(19,33,29,.025) 1px, transparent 1px),
		var(--portal-bg);
	background-size: 36px 36px;
}

body.portal-app .workspace-head {
	padding-bottom: 22px;
	border-bottom: 1px solid var(--portal-line);
}

body.portal-app .workspace-head h2 {
	margin: 0;
	font-family: Impact, Haettenschweiler, "Arial Narrow Bold", sans-serif;
	font-size: clamp(34px, 4vw, 54px);
	font-weight: 400;
	line-height: .95;
	text-transform: uppercase;
}

body.portal-app .teacher-page-tabs {
	position: sticky;
	top: 82px;
	z-index: 12;
	padding: 7px;
	border: 1px solid var(--portal-line);
	border-radius: 4px;
	background: rgba(255,255,255,.92);
	box-shadow: var(--portal-shadow);
	backdrop-filter: blur(14px);
}

body.portal-app .teacher-page-tabs a { border-radius: 2px; }
body.portal-app .teacher-page-tabs a:hover,
body.portal-app .teacher-page-tabs a.is-active { background: #13211d; color: #fff; }

body.portal-app .auth-card,
body.portal-app .portal-panel,
body.portal-app .portal-grid article,
body.portal-app .portal-metrics article {
	border-color: var(--portal-line);
	border-radius: 4px;
	background: var(--portal-panel);
	box-shadow: var(--portal-shadow);
}

body.portal-app .portal-metrics { gap: 14px; }
body.portal-app .portal-metrics article { position: relative; min-height: 132px; overflow: hidden; border-top: 4px solid var(--portal-accent); }
body.portal-app .portal-metrics article::after { position: absolute; right: -24px; bottom: -28px; width: 78px; height: 78px; border: 1px solid rgba(21,152,111,.18); content: ""; transform: rotate(12deg); }
body.portal-app .portal-metrics strong { color: var(--portal-ink); font-family: Impact, sans-serif; font-size: 42px; font-weight: 400; }

body.portal-app .portal-form fieldset,
body.portal-app .portal-form input,
body.portal-app .portal-form select,
body.portal-app .portal-form textarea,
body.portal-app .compact-rack span,
body.portal-app .segmented-filters button,
body.portal-app .class-server-item,
body.portal-app .class-server-actions button,
body.portal-app .teacher-actions button,
body.portal-app .minecraft-action,
body.portal-app .portal-ghost,
body.portal-app .portal-table button { border-color: var(--portal-line); border-radius: 3px; background: #fbfcfb; color: var(--portal-ink); }

body.portal-app .button.primary { border-radius: 3px; background: #13211d; color: #fff; box-shadow: 4px 4px 0 rgba(21,152,111,.2); }
body.portal-app .button.primary:hover { background: var(--portal-accent-dark); box-shadow: 6px 6px 0 rgba(21,152,111,.18); }
body.portal-app .status-chip { border-radius: 2px; background: #e4f6ed; color: var(--portal-accent-dark); }
body.portal-app .sys-console { border-color: #1c342d; border-radius: 3px; background: #06100d; color: #d9ffe9; }
body.portal-app .signal-list div,
body.portal-app .identity-list div,
body.portal-app .portal-table th,
body.portal-app .portal-table td { border-color: #e9eeeb; }
body.portal-app .donut-chart::after { background: #fff; }
body.portal-app .stack-chart,
body.portal-app .bar-row div { background: #e8eeea; }

body.portal-auth .auth-card { border-top: 5px solid #cdff55; }
body.portal-auth .login-card::before { display: none; }
body.portal-auth .auth-visual::after { opacity: .78; }

body.portal-auth .login-card .portal-form input {
	min-width: 0;
	background: #f8fbf9;
	border: 2px solid #9db2a8;
	color: #101d19;
	caret-color: #0f7657;
	font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	font-size: 17px;
	font-weight: 600;
	letter-spacing: normal;
	-webkit-text-fill-color: #101d19;
}

body.portal-auth .login-card .portal-form input::placeholder {
	color: #65766e;
	opacity: 1;
	font-weight: 500;
}

body.portal-auth .login-card .portal-form input[type="password"] {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 19px;
	letter-spacing: .12em;
}

body.portal-auth .login-card .portal-form input:focus {
	border-color: #cdff55;
	outline: 3px solid rgba(205, 255, 85, .22);
}

body.portal-auth .login-card .portal-form input:-webkit-autofill,
body.portal-auth .login-card .portal-form input:-webkit-autofill:hover,
body.portal-auth .login-card .portal-form input:-webkit-autofill:focus {
	-webkit-text-fill-color: #101d19;
	box-shadow: 0 0 0 1000px #f8fbf9 inset;
	transition: background-color 9999s ease-out;
}

.password-input-row {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 8px;
	margin: 0 !important;
}

.password-input-row button {
	min-width: 78px;
	border: 2px solid #9db2a8;
	border-radius: 2px;
	background: #13211d;
	color: #f4f7f2;
	font: 800 13px/1 Inter, ui-sans-serif, system-ui, sans-serif;
	cursor: pointer;
}

.password-input-row button:hover,
.password-input-row button:focus-visible {
	border-color: #cdff55;
	color: #cdff55;
}

.turnstile-panel {
	display: grid;
	gap: 10px;
	padding: 14px;
	border: 1px solid var(--portal-line);
	background: rgba(205, 255, 85, .04);
}

.turnstile-panel strong { color: var(--portal-ink); font-size: 13px; }
.turnstile-panel small { color: var(--portal-muted); line-height: 1.4; }
.turnstile-panel #registerTurnstile { display: grid; min-height: 65px; align-items: center; justify-content: start; }
.turnstile-loading { color: var(--portal-muted); font-size: 13px; font-weight: 700; }
#registerTurnstileStatus[data-tone="ok"] { color: #cdff55; }
#registerTurnstileStatus[data-tone="error"] { color: var(--portal-error); }

.integrity-warning {
	margin: 18px 0 0;
	padding: 15px 17px;
	border-left: 4px solid #d99a20;
	background: #fff7df;
	color: #665018;
	font-size: 14px;
	line-height: 1.5;
}

.integrity-warning strong { color: #3e310f; }
.book-privacy-note { max-width: 850px; color: var(--portal-muted); line-height: 1.55; }
.book-submission-list { display: grid; gap: 10px; margin-top: 18px; }
.book-submission { overflow: hidden; border: 1px solid var(--portal-line); border-radius: 3px; background: #fbfcfb; }
.book-submission summary { display: flex; gap: 18px; align-items: center; justify-content: space-between; padding: 16px 18px; cursor: pointer; list-style: none; }
.book-submission summary::-webkit-details-marker { display: none; }
.book-submission summary::before { width: 10px; height: 10px; flex: 0 0 auto; border-right: 2px solid var(--portal-accent); border-bottom: 2px solid var(--portal-accent); content: ""; transform: rotate(-45deg); transition: transform 160ms ease; }
.book-submission[open] summary::before { transform: rotate(45deg); }
.book-submission summary > span:first-of-type { display: grid; flex: 1; gap: 4px; }
.book-submission summary strong { font-size: 16px; }
.book-submission summary small { color: var(--portal-muted); line-height: 1.35; }
.book-integrity { padding: 7px 9px; border: 1px solid #b8ddd0; background: #e7f7f0; color: #0b7052; font-size: 12px; font-weight: 900; text-transform: uppercase; }
.book-integrity.is-warning { border-color: #e7c77c; background: #fff4d3; color: #805b08; }
.book-summary-badges { display: flex; flex-wrap: wrap; gap: 7px; align-items: center; }
.book-review-status { padding: 7px 9px; border: 1px solid #cbd7d2; background: #f1f4f2; color: #53635d; font-size: 12px; font-weight: 900; text-transform: uppercase; }
.book-review-status.accepted { border-color: #9bd5bd; background: #e5f7ef; color: #08714f; }
.book-review-status.rejected { border-color: #efb2b2; background: #fff0f0; color: #a42929; }
.book-submission-body { padding: 18px; border-top: 1px solid var(--portal-line); background: #fff; }
.book-meta { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-bottom: 13px; color: var(--portal-muted); font-size: 12px; font-weight: 800; }
.book-submission-body pre { max-height: 420px; margin: 0; padding: 18px; overflow: auto; border: 1px solid #dce5e0; background: #f5f7f5; color: #1c2925; font: 15px/1.65 Georgia, serif; white-space: pre-wrap; overflow-wrap: anywhere; }
.book-review-actions { display: grid; gap: 12px; margin-top: 16px; padding: 16px; border: 1px solid #dce5e0; background: #f8faf9; }
.book-review-actions label { display: grid; gap: 7px; font-weight: 800; }
.book-review-actions textarea { width: 100%; box-sizing: border-box; resize: vertical; padding: 11px; border: 1px solid #bccbc5; background: #fff; color: inherit; font: inherit; }
.book-review-actions > div { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 9px; }
.book-review-actions button { padding: 10px 14px; border: 1px solid transparent; cursor: pointer; font-weight: 900; }
.book-review-actions .review-accept { background: #0b7556; color: #fff; }
.book-review-actions .review-reject { border-color: #cf6c6c; background: #fff; color: #a42929; }
.book-review-result { display: grid; gap: 5px; margin-top: 16px; padding: 14px 16px; border-left: 4px solid #0b7556; background: #edf8f4; }
.book-review-result.rejected { border-color: #c64949; background: #fff2f2; }
.book-submission-empty { padding: 28px; border: 1px dashed var(--portal-line); color: var(--portal-muted); text-align: center; }

.dashboard-settings-button { position: fixed; right: 20px; bottom: 20px; z-index: 80; padding: 11px 16px; border: 1px solid #315047; border-radius: 999px; background: #07110f; box-shadow: 0 10px 28px rgba(0,0,0,.22); color: #fff; cursor: pointer; font-weight: 900; }
.dashboard-settings-button:hover { border-color: #cdff55; color: #cdff55; }
.dashboard-settings-dialog { width: min(620px, calc(100vw - 28px)); max-height: 88vh; padding: 0; overflow: auto; border: 1px solid #bfd0c8; border-radius: 8px; background: #fff; color: #13211d; box-shadow: 0 30px 90px rgba(0,0,0,.3); }
.dashboard-settings-dialog::backdrop { background: rgba(2,10,8,.72); backdrop-filter: blur(5px); }
.dashboard-settings-card { padding: 26px; }
.settings-head, .settings-toggle, .experimental-title, .block-viewer-head { display: flex; align-items: center; justify-content: space-between; gap: 18px; }
.settings-head h2, .block-viewer-head h2 { margin: 2px 0 0; }
.settings-close { width: 42px; height: 42px; border: 1px solid #dce5e0; border-radius: 50%; background: #f5f8f6; color: #13211d; cursor: pointer; font-size: 28px; }
.settings-list { display: grid; margin-top: 20px; border-top: 1px solid #e2e9e5; }
.settings-toggle { padding: 16px 2px; border-bottom: 1px solid #e2e9e5; cursor: pointer; }
.settings-toggle > span:first-child { display: grid; gap: 5px; }
.settings-toggle small, .settings-note { color: #64736d; line-height: 1.45; }
.experimental-settings { margin-top: 22px; padding: 18px; border: 1px solid #e6bd58; background: #fff8df; }
.experimental-title span { padding: 5px 8px; background: #7d5700; color: #fff; font-size: 11px; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; }
.settings-note { margin: 18px 0 0; font-size: 12px; }
.experimental-block-viewer { padding: 20px; border: 2px solid #e3b84f; border-radius: 5px; background: #fffaf0; box-shadow: var(--portal-shadow); }
.block-viewer-head { margin-bottom: 14px; }
.block-viewer-head p { margin: 5px 0 0; color: #64736d; }
.block-viewer-head > div:last-child { display: flex; flex-wrap: wrap; gap: 8px; }
.block-viewer-stage { position: relative; width: 100%; height: min(62vh, 620px); min-height: 360px; overflow: hidden; border: 3px solid #13211d; background: linear-gradient(#69afe5 0 66%, #c8dfaa 66%); }
.block-viewer-canvas { display: block; width: 100%; height: 100%; outline: none; cursor: grab; touch-action: none; background: linear-gradient(#69afe5 0 66%, #c8dfaa 66%); }
.block-viewer-canvas:focus-visible { box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 6px #176b55; }
.block-viewer-canvas:active { cursor: grabbing; }
.block-viewer-loading { position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-weight: 900; }
.block-viewer-disclaimer { margin: 12px 0 0; color: #75540c; font-size: 13px; }
.experimental-block-viewer:fullscreen { padding: 18px; overflow: auto; background: #07110f; }
.experimental-block-viewer:fullscreen .block-viewer-stage { height: calc(100vh - 130px); }
.dashboard-compact .portal-main { gap: 12px; padding: 20px; }
.dashboard-compact .portal-grid { gap: 10px; }
.dashboard-compact .portal-grid article, .dashboard-compact .portal-panel { padding: 16px; }
.dashboard-reduced-motion *, .dashboard-reduced-motion *::before, .dashboard-reduced-motion *::after { scroll-behavior: auto !important; transition: none !important; animation: none !important; }
.dashboard-hide-hints .ai-disclosure, .dashboard-hide-hints .book-privacy-note, .dashboard-hide-hints .integrity-warning { display: none; }

@media (max-width: 980px) {
	body.portal-app .portal-layout { grid-template-columns: 1fr; }
	body.portal-app .portal-sidebar { position: relative; top: 0; min-height: auto; padding: 28px 22px; border-right: 0; border-bottom: 1px solid rgba(205,255,85,.18); }
	body.portal-app .portal-sidebar .portal-title { font-size: 46px; }
	body.portal-app .portal-main { padding: 24px 18px 42px; }
	body.portal-app .teacher-page-tabs { top: 74px; overflow-x: auto; flex-wrap: nowrap; }
}

@media (max-width: 1450px) {
	body.portal-app .tracking-grid {
		grid-template-columns: 1fr;
	}
}

@media (max-width: 660px) {
	body.portal-app .portal-header { align-items: flex-start; }
	body.portal-app .portal-session { align-items: flex-end; flex-direction: column; }
	body.portal-app .portal-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	body.portal-app .portal-main { padding-inline: 12px; }
	.book-submission summary { align-items: flex-start; flex-wrap: wrap; }
	.book-integrity { margin-left: 28px; }
	.block-viewer-head, .settings-toggle { align-items: flex-start; }
	.block-viewer-head { flex-direction: column; }
	.block-viewer-stage { min-height: 300px; height: 52vh; }
	.dashboard-settings-button { right: 12px; bottom: 12px; }
}

/* Mobile workspace: thumb-friendly controls and a compact hierarchy. */
@media (max-width: 660px) {
	html { scroll-padding-top: 132px; }
	body.portal-app .portal-header { position: sticky; align-items: center; flex-direction: row; padding: 10px 12px; }
	body.portal-app .portal-brand small { display: none; }
	body.portal-app .portal-session { min-width: 0; align-items: flex-end; gap: 4px; }
	body.portal-app .portal-session span {
		max-width: 42vw; overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap;
	}
	body.portal-app .portal-header .portal-ghost { min-height: 40px; padding: 7px 13px; }
	body.portal-app .portal-layout { gap: 0; padding: 0; }
	body.portal-app .portal-sidebar { padding: 22px 16px; }
	body.portal-app .portal-sidebar .portal-title { font-size: clamp(34px, 11vw, 44px); }
	body.portal-app .portal-sidebar p:not(.eyebrow),
	body.portal-app .portal-sidebar .identity-list { display: none; }
	body.portal-app .portal-main { gap: 14px; padding: 18px 12px 76px; }
	body.portal-app .workspace-head { padding-bottom: 14px; }
	body.portal-app .workspace-head h2 { font-size: clamp(30px, 10vw, 40px); }
	body.portal-app .teacher-page-tabs {
		top: 61px; display: flex; gap: 5px; margin-inline: -12px; padding: 7px 12px;
		overflow-x: auto; border-inline: 0; border-radius: 0; scroll-snap-type: x proximity; scrollbar-width: none;
	}
	body.portal-app .teacher-page-tabs::-webkit-scrollbar { display: none; }
	body.portal-app .teacher-page-tabs a,
	body.portal-app .teacher-page-tabs button {
		flex: 0 0 auto; min-height: 44px; padding-inline: 15px; scroll-snap-align: start;
	}
	body.portal-app .teacher-page-tabs a small { display: none; }
	.role-quick-start { gap: 12px; padding: 16px; }
	.role-quick-start > div:last-child { grid-template-columns: 1fr; }
	.role-quick-start a { min-height: 62px; }
	body.portal-app .portal-grid article,
	body.portal-app .portal-panel,
	body.portal-app .activity-ai-panel,
	body.portal-app .activity-builder { padding: 16px; }
	body.portal-app .portal-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
	body.portal-app .portal-metrics article { min-height: 104px; padding: 14px; }
	body.portal-app .portal-metrics strong { font-size: 27px; }
	body.portal-app input,
	body.portal-app select,
	body.portal-app textarea { min-height: 48px; font-size: 16px; }
	body.portal-app .button,
	body.portal-app .portal-ghost,
	body.portal-app .teacher-actions button,
	body.portal-app .minecraft-action,
	body.portal-app .segmented-filters button { min-height: 46px; }
	body.portal-app .builder-actions > .button,
	body.portal-app .builder-actions > .portal-ghost { width: 100%; }
	body.portal-app .portal-table { -webkit-overflow-scrolling: touch; }
	body.portal-app .portal-table th,
	body.portal-app .portal-table td { padding: 12px 10px; }
	.dashboard-toasts { right: 10px; bottom: 10px; left: 10px; }
	.dashboard-toast { width: 100%; }
}

@media (max-width: 380px) {
	body.portal-app .portal-metrics { grid-template-columns: 1fr; }
	body.portal-app .portal-brand strong { font-size: 15px; }
}

@media (hover: none) and (pointer: coarse) {
	body.portal-app button,
	body.portal-app a,
	body.portal-app input,
	body.portal-app select,
	body.portal-app textarea { -webkit-tap-highlight-color: rgba(205,255,85,.2); }
	body.portal-app .button:hover,
	body.portal-app .portal-ghost:hover,
	body.portal-app .teacher-actions button:hover { transform: none; box-shadow: none; }
}

.oauth-divider {
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 18px 0 14px;
	color: #91a49e;
	font-size: 12px;
	font-weight: 800;
	text-transform: uppercase;
}
.oauth-divider::before,
.oauth-divider::after { content: ""; flex: 1; height: 1px; background: rgba(145, 164, 158, .35); }
.google-signin { display: flex; min-height: 44px; align-items: center; justify-content: center; color: #91a49e; font-size: 13px; }
.google-signin > div { max-width: 100%; }

/* 2026-09 unified campus workspace: one visual language across auth and dashboards. */
:root {
	--campus-navy: #102c27;
	--campus-navy-soft: #173c35;
	--campus-green: #18a779;
	--campus-green-dark: #087456;
	--campus-lime: #d9ff72;
	--campus-blue: #3478f6;
	--campus-canvas: #f3f7f5;
	--campus-surface: #ffffff;
	--campus-text: #14241f;
	--campus-muted: #657871;
	--campus-line: #dce8e2;
	--campus-radius: 16px;
	--campus-shadow: 0 10px 30px rgba(16, 44, 39, .07);
	--campus-shadow-raised: 0 18px 50px rgba(16, 44, 39, .12);
}

body.portal-auth,
body.portal-app {
	--portal-ink: var(--campus-text);
	--portal-muted: var(--campus-muted);
	--portal-line: var(--campus-line);
	--portal-bg: var(--campus-canvas);
	--portal-panel: var(--campus-surface);
	--portal-accent: var(--campus-green);
	--portal-accent-dark: var(--campus-green-dark);
	--portal-shadow: var(--campus-shadow);
	color-scheme: light;
	background: var(--campus-canvas);
	color: var(--campus-text);
	font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

body.portal-auth {
	background:
		radial-gradient(circle at 8% 12%, rgba(24, 167, 121, .16), transparent 28rem),
		radial-gradient(circle at 88% 85%, rgba(52, 120, 246, .1), transparent 30rem),
		var(--campus-canvas);
}

body.portal-auth .auth-layout { max-width: 1480px; margin: 0 auto; }
body.portal-auth .auth-visual,
body.portal-auth .login-visual {
	border: 0;
	border-radius: 28px;
	background:
		radial-gradient(circle at 84% 18%, rgba(217, 255, 114, .13), transparent 16rem),
		linear-gradient(145deg, #12362f, #091d19);
	box-shadow: 0 30px 80px rgba(9, 29, 25, .2);
	color: #fff;
}
body.portal-auth .login-visual::before {
	right: -80px; bottom: -110px; width: 460px;
	border: 1px solid rgba(217,255,114,.18); border-radius: 50%;
	background: transparent; box-shadow: 0 0 0 42px rgba(217,255,114,.025), 0 0 0 84px rgba(52,120,246,.025);
}
body.portal-auth .login-visual::after { display: none; }
body.portal-auth .portal-brand .brand-mark {
	border-radius: 12px; background: var(--campus-lime); box-shadow: none;
}
body.portal-auth .portal-brand small { color: #add0c4; letter-spacing: .12em; }
body.portal-auth .eyebrow { color: var(--campus-green-dark); letter-spacing: .12em; }
body.portal-auth .auth-visual .eyebrow { color: var(--campus-lime); }
body.portal-auth .auth-title {
	max-width: 780px; color: #fff; font-family: inherit; font-size: clamp(48px, 6.3vw, 92px);
	font-weight: 850; line-height: .93; letter-spacing: -.055em; text-transform: none;
}
body.portal-auth .auth-visual p:not(.eyebrow) { max-width: 590px; color: #c5d8d1; font-size: 18px; }
body.portal-auth .login-visual-rack { max-width: 680px; gap: 8px; }
body.portal-auth .login-visual-rack span {
	display: grid; height: auto; min-height: 72px; align-content: center; gap: 5px; padding: 13px 15px;
	border: 1px solid rgba(255,255,255,.1); border-radius: 14px; background: rgba(255,255,255,.055);
	color: #d9e8e3; font-size: 12px; font-weight: 750; backdrop-filter: blur(8px);
}
body.portal-auth .login-visual-rack span:nth-child(2),
body.portal-auth .login-visual-rack span:nth-child(3) { background: rgba(255,255,255,.055); }
body.portal-auth .login-visual-rack strong { color: var(--campus-lime); font-size: 11px; letter-spacing: .12em; }
body.portal-auth .auth-card {
	border: 1px solid rgba(16,44,39,.08); border-top: 0; border-radius: 24px;
	background: rgba(255,255,255,.94); box-shadow: var(--campus-shadow-raised); backdrop-filter: blur(18px);
}
body.portal-auth .login-card::before {
	display: block; height: 5px; border-radius: 99px;
	background: linear-gradient(90deg, var(--campus-green), var(--campus-blue));
}
body.portal-auth .login-card h2 { color: var(--campus-text); font-size: clamp(28px, 3vw, 38px); letter-spacing: -.035em; }
body.portal-auth .login-card .portal-form input {
	min-height: 54px; border: 1px solid #c8d8d0; border-radius: 12px; background: #f9fbfa;
	color: var(--campus-text); font-size: 16px; font-weight: 550; letter-spacing: normal; -webkit-text-fill-color: var(--campus-text);
}
body.portal-auth .login-card .portal-form input:focus { border-color: var(--campus-green); outline: 4px solid rgba(24,167,121,.13); }
body.portal-auth .password-input-row button {
	border: 0; border-radius: 12px; background: #e7f3ee; color: var(--campus-green-dark);
}
body.portal-auth .password-input-row button:hover,
body.portal-auth .password-input-row button:focus-visible { color: #fff; background: var(--campus-green-dark); }
body.portal-auth .button.primary {
	border-radius: 12px; background: var(--campus-navy); color: #fff; box-shadow: 0 10px 24px rgba(16,44,39,.18);
}
body.portal-auth .button.primary:hover { background: var(--campus-green-dark); transform: translateY(-1px); box-shadow: 0 13px 28px rgba(8,116,86,.2); }
body.portal-auth .turnstile-panel { border-radius: 12px; background: #f7faf8; }

body.portal-app .portal-header {
	min-height: 72px; padding: 12px clamp(18px, 3vw, 42px); border: 0;
	background: rgba(255,255,255,.92); box-shadow: 0 1px 0 rgba(16,44,39,.08); color: var(--campus-text);
}
body.portal-app .portal-header .portal-brand .brand-mark { border-radius: 11px; background: var(--campus-navy); box-shadow: none; }
body.portal-app .portal-header .portal-brand small { color: var(--campus-green-dark); letter-spacing: .1em; }
body.portal-app .portal-header .portal-session { color: var(--campus-muted); }
body.portal-app .portal-header .portal-ghost { border: 1px solid var(--campus-line); border-radius: 10px; background: #fff; color: var(--campus-text); }
body.portal-app .portal-layout { grid-template-columns: 280px minmax(0,1fr); max-width: 1920px; }
body.portal-app .portal-sidebar {
	top: 72px; min-height: calc(100vh - 72px); padding: 40px 28px; border: 0; border-right: 1px solid rgba(255,255,255,.08);
	background: linear-gradient(165deg, var(--campus-navy-soft), #0b211d); color: #fff;
}
body.portal-app .portal-sidebar::before { width: 48px; height: 5px; background: var(--campus-lime); }
body.portal-app .portal-sidebar .portal-title {
	color: #fff; font-family: inherit; font-size: clamp(34px, 3vw, 48px); font-weight: 850;
	line-height: .98; letter-spacing: -.045em; text-transform: none;
}
body.portal-app .portal-sidebar p:not(.eyebrow) { color: #b8cec6; }
body.portal-app .portal-sidebar .eyebrow { color: var(--campus-lime); }
body.portal-app .portal-sidebar .identity-list { border-color: rgba(255,255,255,.12); }
body.portal-app .portal-main {
	gap: 20px; padding: clamp(24px, 3.5vw, 52px); background:
		radial-gradient(circle at 90% 4%, rgba(52,120,246,.055), transparent 24rem), var(--campus-canvas);
}
body.portal-app .workspace-head {
	padding: 0 0 22px; border: 0; border-bottom: 1px solid var(--campus-line); border-radius: 0; background: transparent; box-shadow: none;
}
body.portal-app .workspace-head h2 {
	font-family: inherit; font-size: clamp(30px, 3.4vw, 48px); font-weight: 850; line-height: 1; letter-spacing: -.045em; text-transform: none;
}
body.portal-app .status-chip { border: 1px solid rgba(24,167,121,.2); border-radius: 999px; background: #e6f7f0; color: var(--campus-green-dark); }
body.portal-app .teacher-page-tabs {
	top: 84px; gap: 5px; padding: 6px; border: 1px solid var(--campus-line); border-radius: 14px;
	background: rgba(255,255,255,.94); box-shadow: 0 8px 24px rgba(16,44,39,.06);
}
body.portal-app .teacher-page-tabs a,
body.portal-app .teacher-page-tabs button { border-radius: 10px; }
body.portal-app .teacher-page-tabs a:hover,
body.portal-app .teacher-page-tabs a.is-active,
body.portal-app .teacher-page-tabs button:hover,
body.portal-app .teacher-page-tabs button.is-active { border-color: transparent; background: var(--campus-navy); color: #fff; box-shadow: none; }
body.portal-app .portal-panel,
body.portal-app .portal-grid article,
body.portal-app .portal-metrics article,
body.portal-app .activity-ai-panel,
body.portal-app .activity-builder {
	border: 1px solid rgba(16,44,39,.08); border-radius: var(--campus-radius); background: #fff; box-shadow: var(--campus-shadow);
}
body.portal-app .portal-panel:hover,
body.portal-app .portal-grid article:hover { border-color: rgba(24,167,121,.2); }
body.portal-app .portal-metrics { gap: 12px; }
body.portal-app .portal-metrics article { min-height: 124px; border-top: 0; overflow: hidden; }
body.portal-app .portal-metrics article::before {
	position: absolute; inset: 0 auto 0 0; width: 4px; border-radius: 4px; background: var(--campus-green); content: "";
}
body.portal-app .portal-metrics article:nth-child(2)::before { background: var(--campus-blue); }
body.portal-app .portal-metrics article:nth-child(3)::before { background: #e0a536; }
body.portal-app .portal-metrics article:nth-child(4)::before { background: #8b6be8; }
body.portal-app .portal-metrics article::after { opacity: .55; border-radius: 18px; }
body.portal-app .portal-metrics strong { color: var(--campus-text); font-family: inherit; font-size: 38px; font-weight: 850; letter-spacing: -.04em; }
body.portal-app .portal-grid article h2,
body.portal-app .portal-panel h2 { color: var(--campus-text); font-size: 20px; letter-spacing: -.02em; }
body.portal-app .portal-form fieldset,
body.portal-app .portal-form input,
body.portal-app .portal-form select,
body.portal-app .portal-form textarea,
body.portal-app .compact-rack span,
body.portal-app .segmented-filters button,
body.portal-app .class-server-item,
body.portal-app .class-server-actions button,
body.portal-app .teacher-actions button,
body.portal-app .minecraft-action,
body.portal-app .portal-ghost,
body.portal-app .portal-table button { border-color: var(--campus-line); border-radius: 10px; background: #fbfdfc; color: var(--campus-text); }
body.portal-app .portal-form input:focus,
body.portal-app .portal-form select:focus,
body.portal-app .portal-form textarea:focus { border-color: var(--campus-green); outline: 4px solid rgba(24,167,121,.12); }
body.portal-app .button.primary { border-radius: 10px; background: var(--campus-navy); color: #fff; box-shadow: 0 8px 20px rgba(16,44,39,.15); }
body.portal-app .button.primary:hover { background: var(--campus-green-dark); box-shadow: 0 10px 24px rgba(8,116,86,.18); }
body.portal-app .portal-table { border-color: var(--campus-line); border-radius: 12px; }
body.portal-app .portal-table th { background: #f1f6f3; color: #4e655d; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; }
body.portal-app .portal-table tbody tr:hover { background: #f4faf7; }
body.portal-app .class-server-item { border-left: 4px solid var(--campus-green); }
body.portal-app .sys-console { border-radius: 12px; }
body.portal-app .dashboard-settings-button { border: 0; background: var(--campus-navy); box-shadow: var(--campus-shadow-raised); }

@media (max-width: 980px) {
	body.portal-auth .auth-layout { grid-template-columns: 1fr; padding: 18px; }
	body.portal-auth .auth-visual { min-height: 440px; }
	body.portal-app .portal-layout { grid-template-columns: 1fr; }
	body.portal-app .portal-sidebar { top: 0; min-height: auto; padding: 30px 22px; }
	body.portal-app .portal-sidebar .portal-title { font-size: 40px; }
}

@media (max-width: 660px) {
	body.portal-auth .auth-visual { min-height: 390px; padding: 24px; border-radius: 20px; }
	body.portal-auth .auth-card { border-radius: 18px; }
	body.portal-auth .login-visual-rack { grid-template-columns: 1fr; }
	body.portal-auth .login-visual-rack span { display: none; }
	body.portal-auth .login-visual-rack span:first-child { display: grid; min-height: 54px; }
	body.portal-app .portal-header { min-height: 64px; }
	body.portal-app .portal-main { padding: 18px 12px 76px; }
	body.portal-app .portal-panel,
	body.portal-app .portal-grid article,
	body.portal-app .portal-metrics article { border-radius: 13px; }
	body.portal-app .teacher-page-tabs { top: 64px; border-radius: 0; }
}

/* Rounded campus geometry for every dashboard surface and interactive control. */
body.portal-auth,
body.portal-app {
	--campus-radius-xs: 9px;
	--campus-radius-sm: 12px;
	--campus-radius: 18px;
	--campus-radius-lg: 26px;
}

body.portal-auth .portal-form fieldset,
body.portal-auth .portal-form input,
body.portal-auth .portal-form select,
body.portal-auth .portal-form textarea,
body.portal-auth .turnstile-panel,
body.portal-auth .register-plan-options label,
body.portal-auth .register-trial-consent,
body.portal-auth .portal-ghost,
body.portal-auth .button,
body.portal-app .portal-form fieldset,
body.portal-app .portal-form input,
body.portal-app .portal-form select,
body.portal-app .portal-form textarea,
body.portal-app .portal-ghost,
body.portal-app .button,
body.portal-app .portal-table button,
body.portal-app .teacher-actions button,
body.portal-app .class-server-actions button,
body.portal-app .segmented-filters button { border-radius: var(--campus-radius-sm); }

body.portal-app .workspace-head,
body.portal-app .portal-panel,
body.portal-app .portal-grid article,
body.portal-app .portal-metrics article,
body.portal-app .activity-ai-panel,
body.portal-app .activity-builder,
body.portal-app .role-quick-start,
body.portal-app .experimental-block-viewer,
body.portal-app .billing-overview,
body.portal-app .dashboard-settings-dialog { border-radius: var(--campus-radius); }

body.portal-app .teacher-page-tabs,
body.portal-app .portal-table,
body.portal-app .class-server-item,
body.portal-app .minecraft-action,
body.portal-app .activity-card,
body.portal-app .activity-template,
body.portal-app .import-note,
body.portal-app .resource-pack-config,
body.portal-app .book-submission,
body.portal-app .book-review-actions,
body.portal-app .book-review-result,
body.portal-app .integrity-warning,
body.portal-app .dashboard-toast,
body.portal-app .sys-console,
body.portal-app .class-chat-list { border-radius: var(--campus-radius-sm); }

body.portal-app .teacher-page-tabs a,
body.portal-app .teacher-page-tabs button,
body.portal-app .compact-rack span,
body.portal-app .status-chip,
body.portal-app .book-integrity,
body.portal-app .book-review-status,
body.portal-app .billing-state { border-radius: 999px; }

body.portal-app .portal-metrics article::after,
body.portal-app .feature-grid article::after { border-radius: var(--campus-radius); }

body.portal-app .billing-facts > div,
body.portal-app .billing-security-list li,
body.portal-app .billing-invoice,
body.portal-app .billing-notice { border-radius: var(--campus-radius-sm); }

@media (max-width: 660px) {
	body.portal-app .teacher-page-tabs { border-radius: 0; }
}
