/**
 * VPro CRM front-end app.
 *
 * The CRM renders as a standalone document, so this file carries everything —
 * chrome, sidebar, forms, tables, board and dashboard.
 *
 * Theming: light is the default. Dark applies either from the OS setting or from
 * an explicit choice stamped on <html data-theme>. The explicit choice must win
 * both ways, hence the :not([data-theme="light"]) guard on the media query and
 * the plain [data-theme="dark"] block after it.
 *
 * Colors are the validated chart palette, so the interface and the charts read
 * as one system in both modes.
 */

:root {
	--vpro-surface: #ffffff;
	--vpro-plane: #f4f4f2;
	--vpro-page: #f9f9f7;
	--vpro-rail: #ffffff;
	--vpro-ink: #0b0b0b;
	--vpro-ink-2: #52514e;
	--vpro-muted: #898781;
	--vpro-line: #e1e0d9;
	--vpro-series-1: #2a78d6;
	--vpro-series-2: #eb6834;
	--vpro-series-3: #1baf7a;
	--vpro-danger: #d03b3b;
	--vpro-good: #0ca30c;
	--vpro-radius: 8px;
	--vpro-shadow: 0 1px 2px rgba( 11, 11, 11, 0.06 );
	--vpro-font: system-ui, -apple-system, "Segoe UI", sans-serif;
	--vpro-sidebar: 64px;
	--vpro-sidebar-expanded: 236px;

	color-scheme: light;
}

@media ( prefers-color-scheme: dark ) {
	:root:where( :not( [data-theme="light"] ) ) {
		--vpro-surface: #1a1a19;
		--vpro-plane: #232322;
		--vpro-page: #0d0d0d;
		--vpro-rail: #141413;
		--vpro-ink: #ffffff;
		--vpro-ink-2: #c3c2b7;
		--vpro-line: #2c2c2a;
		--vpro-series-1: #3987e5;
		--vpro-series-2: #d95926;
		--vpro-series-3: #199e70;
		--vpro-shadow: none;

		color-scheme: dark;
	}
}

:root[data-theme="dark"] {
	--vpro-surface: #1a1a19;
	--vpro-plane: #232322;
	--vpro-page: #0d0d0d;
	--vpro-rail: #141413;
	--vpro-ink: #ffffff;
	--vpro-ink-2: #c3c2b7;
	--vpro-line: #2c2c2a;
	--vpro-series-1: #3987e5;
	--vpro-series-2: #d95926;
	--vpro-series-3: #199e70;
	--vpro-shadow: none;

	color-scheme: dark;
}

/* ---------- Base ---------- */

body.vpro-crm-app {
	margin: 0;
	background: var(--vpro-page);
	color: var(--vpro-ink);
	font-family: var(--vpro-font);
	font-size: 14px;
	line-height: 1.5;
	-webkit-font-smoothing: antialiased;
}

.vpro-crm-app h1,
.vpro-crm-app h2,
.vpro-crm-app h3 {
	margin: 0;
	line-height: 1.25;
	color: var(--vpro-ink);
}

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

/* ---------- Shell ---------- */

.vpro-shell {
	display: flex;
	min-height: 100vh;
}

/*
 * The sidebar is an icon rail by default at every viewport size, and expands
 * over the content on hover/focus rather than pushing it — the reserved
 * margin on .vpro-app-col never changes, so expanding never reflows the page.
 */
.vpro-sidebar {
	position: fixed;
	inset: 0 auto 0 0;
	width: var(--vpro-sidebar);
	background: var(--vpro-rail);
	border-right: 1px solid var(--vpro-line);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	z-index: 30;
	transition: width 0.15s ease, box-shadow 0.15s ease;
}

.vpro-sidebar:hover,
.vpro-sidebar:focus-within {
	width: var(--vpro-sidebar-expanded);
	box-shadow: 6px 0 24px rgba( 0, 0, 0, 0.18 );
}

.vpro-sidebar-label {
	display: none;
}

.vpro-sidebar:hover .vpro-sidebar-label,
.vpro-sidebar:focus-within .vpro-sidebar-label {
	display: inline;
}

.vpro-sidebar-brand {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0;
	height: 60px;
	padding: 0;
	border-bottom: 1px solid var(--vpro-line);
	text-decoration: none;
	color: var(--vpro-ink);
	font-weight: 600;
	white-space: nowrap;
	overflow: hidden;
	flex: 0 0 auto;
}

.vpro-sidebar:hover .vpro-sidebar-brand,
.vpro-sidebar:focus-within .vpro-sidebar-brand {
	justify-content: flex-start;
	gap: 10px;
	padding: 0 18px;
}

.vpro-sidebar-brand i {
	color: var(--vpro-series-1);
	font-size: 18px;
	flex: 0 0 auto;
	width: 20px;
	text-align: center;
}

.vpro-sidebar-nav {
	display: flex;
	flex-direction: column;
	gap: 2px;
	padding: 12px 10px;
	flex: 1 1 auto;
	overflow-y: auto;
	overflow-x: hidden;
}

.vpro-sidebar-nav a {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0;
	padding: 9px 0;
	border-left: 2px solid transparent;
	border-radius: var(--vpro-radius);
	text-decoration: none;
	color: var(--vpro-ink-2);
	white-space: nowrap;
	overflow: hidden;
}

.vpro-sidebar:hover .vpro-sidebar-nav a,
.vpro-sidebar:focus-within .vpro-sidebar-nav a {
	justify-content: flex-start;
	gap: 12px;
	padding: 9px 12px 9px 10px;
	border-radius: 0 var(--vpro-radius) var(--vpro-radius) 0;
}

.vpro-sidebar-nav a i {
	flex: 0 0 auto;
	width: 20px;
	text-align: center;
	font-size: 15px;
	color: var(--vpro-muted);
}

.vpro-sidebar-nav a:hover {
	background: var(--vpro-plane);
	color: var(--vpro-ink);
}

.vpro-sidebar-nav a.is-current {
	background: color-mix( in srgb, var(--vpro-series-1) 14%, transparent );
	border-left-color: var(--vpro-series-1);
	color: var(--vpro-series-1);
	font-weight: 600;
}

.vpro-sidebar-nav a.is-current i {
	color: var(--vpro-series-1);
}

.vpro-app-col {
	margin-left: var(--vpro-sidebar);
	display: flex;
	flex-direction: column;
	min-height: 100vh;
	flex: 1 1 auto;
	min-width: 0;
}

.vpro-topbar {
	height: 56px;
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 10px;
	padding: 0 24px;
	background: var(--vpro-rail);
	border-bottom: 1px solid var(--vpro-line);
	position: sticky;
	top: 0;
	z-index: 15;
}

.vpro-icon-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border: 0;
	border-radius: 50%;
	background: none;
	color: var(--vpro-ink-2);
	font-size: 15px;
	cursor: pointer;
}

.vpro-icon-btn:hover {
	background: var(--vpro-plane);
	color: var(--vpro-ink);
}

.vpro-user-menu {
	position: relative;
}

.vpro-user-trigger {
	display: flex;
	align-items: center;
	border: 0;
	background: none;
	padding: 0;
	line-height: 0;
	border-radius: 50%;
	cursor: pointer;
}

.vpro-user-trigger img {
	border-radius: 50%;
	display: block;
}

.vpro-user-trigger:focus-visible {
	outline: 2px solid var(--vpro-series-1);
	outline-offset: 2px;
}

.vpro-user-popover {
	position: absolute;
	top: calc( 100% + 10px );
	right: 0;
	min-width: 170px;
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	box-shadow: 0 8px 24px rgba( 0, 0, 0, 0.18 );
	padding: 6px;
	z-index: 25;
}

.vpro-user-popover[hidden] {
	display: none;
}

.vpro-user-popover-item {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 8px 10px;
	border-radius: 6px;
	color: var(--vpro-ink-2);
	text-decoration: none;
	font-size: 13px;
	white-space: nowrap;
}

.vpro-user-popover-item:hover {
	background: var(--vpro-plane);
	color: var(--vpro-ink);
}

.vpro-user-popover-item i {
	width: 16px;
	text-align: center;
	flex: 0 0 auto;
}

.vpro-app-main {
	padding: 28px;
	flex: 1 1 auto;
	min-width: 0;
}

@media ( max-width: 640px ) {
	.vpro-app-main {
		padding: 20px 16px;
	}
}

.vpro-page {
	max-width: 1400px;
	margin: 0 auto;
}

.vpro-page--narrow {
	max-width: 820px;
}

.vpro-page-head {
	display: flex;
	align-items: center;
	gap: 16px;
	margin-bottom: 20px;
	flex-wrap: wrap;
}

.vpro-page-head h1 {
	font-size: 22px;
	margin-right: auto;
}

/* ---------- Panels & notices ---------- */

.vpro-panel {
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	box-shadow: var(--vpro-shadow);
	padding: 20px;
	min-width: 0;
}

.vpro-empty {
	text-align: center;
	color: var(--vpro-ink-2);
	padding: 40px 20px;
}

.vpro-notice {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0 0 20px;
	padding: 11px 15px;
	border-radius: var(--vpro-radius);
	border: 1px solid var(--vpro-line);
	border-left: 3px solid var(--vpro-muted);
	background: var(--vpro-surface);
	color: var(--vpro-ink);
}

.vpro-notice--success {
	border-left-color: var(--vpro-good);
}

.vpro-notice--success i {
	color: var(--vpro-good);
}

.vpro-notice--error {
	border-left-color: var(--vpro-danger);
}

.vpro-notice--error i {
	color: var(--vpro-danger);
}

.vpro-hint {
	color: var(--vpro-muted);
	font-size: 12px;
	margin-top: 14px;
}

/* ---------- Buttons ----------
 *
 * Selectors are doubled up (`.vpro-btn.vpro-btn`) so a button always outranks
 * the generic link color, whatever a theme or WordPress leaves behind.
 */

.vpro-crm-app .vpro-btn,
.vpro-crm-app a.vpro-btn,
.vpro-crm-app button.vpro-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 8px 15px;
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	background: var(--vpro-surface);
	color: var(--vpro-ink);
	font: inherit;
	font-size: 14px;
	line-height: 1.3;
	text-decoration: none;
	text-shadow: none;
	box-shadow: none;
	cursor: pointer;
	white-space: nowrap;
	height: auto;
	min-height: 0;
}

.vpro-crm-app .vpro-btn:hover {
	background: var(--vpro-plane);
	color: var(--vpro-ink);
}

.vpro-crm-app .vpro-btn--small {
	padding: 6px 11px;
	font-size: 13px;
}

.vpro-crm-app .vpro-btn--block {
	display: flex;
	width: 100%;
}

.vpro-crm-app .vpro-btn--primary,
.vpro-crm-app a.vpro-btn--primary,
.vpro-crm-app button.vpro-btn--primary,
.vpro-crm-app .vpro-btn.is-active,
.vpro-crm-app a.vpro-btn.is-active {
	background: var(--vpro-series-1);
	border-color: var(--vpro-series-1);
	color: #ffffff;
}

.vpro-crm-app .vpro-btn--primary:hover,
.vpro-crm-app a.vpro-btn--primary:hover,
.vpro-crm-app button.vpro-btn--primary:hover,
.vpro-crm-app .vpro-btn.is-active:hover {
	background: var(--vpro-series-1);
	color: #ffffff;
	filter: brightness( 0.93 );
}

.vpro-crm-app .vpro-btn--danger,
.vpro-crm-app button.vpro-btn--danger {
	color: var(--vpro-danger);
	border-color: var(--vpro-danger);
	background: var(--vpro-surface);
	margin-left: auto;
}

.vpro-crm-app .vpro-btn--danger:hover,
.vpro-crm-app button.vpro-btn--danger:hover {
	background: var(--vpro-danger);
	color: #ffffff;
}

.vpro-crm-app .vpro-btn--icon {
	padding: 6px 10px;
}

/* ---------- Links ---------- */

.vpro-app-main a:not( .vpro-btn ) {
	color: var(--vpro-series-1);
}

.vpro-link-muted {
	color: var(--vpro-muted);
	text-decoration: none;
}

.vpro-link-muted:hover {
	text-decoration: underline;
}

/* ---------- Forms ---------- */

.vpro-crm-app input[type="text"],
.vpro-crm-app input[type="email"],
.vpro-crm-app input[type="password"],
.vpro-crm-app input[type="search"],
.vpro-crm-app input[type="number"],
.vpro-crm-app input[type="date"],
.vpro-crm-app select,
.vpro-crm-app textarea {
	width: 100%;
	max-width: 100%;
	padding: 9px 11px;
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	background: var(--vpro-surface);
	color: var(--vpro-ink);
	font: inherit;
	font-size: 14px;
	line-height: 1.4;
	box-shadow: none;
	height: auto;
}

.vpro-crm-app textarea {
	resize: vertical;
}

.vpro-crm-app input:focus-visible,
.vpro-crm-app select:focus-visible,
.vpro-crm-app textarea:focus-visible,
.vpro-crm-app a:focus-visible,
.vpro-crm-app button:focus-visible,
.vpro-crm-app summary:focus-visible {
	outline: 2px solid var(--vpro-series-1);
	outline-offset: 2px;
}

.vpro-field {
	margin: 0 0 18px;
}

.vpro-field > label,
.vpro-field-label {
	display: block;
	margin-bottom: 5px;
	font-weight: 500;
	color: var(--vpro-ink-2);
}

.vpro-field--check label {
	font-weight: 400;
	display: flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 0;
}

.vpro-field--check input {
	width: auto;
}

.vpro-field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 18px;
}

@media ( max-width: 640px ) {
	.vpro-field-row {
		grid-template-columns: 1fr;
	}
}

.vpro-help {
	display: block;
	margin-top: 5px;
	font-size: 12px;
	color: var(--vpro-muted);
}

.vpro-form {
	padding: 24px;
}

.vpro-form-actions {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-top: 4px;
	padding-top: 18px;
	border-top: 1px solid var(--vpro-line);
}

.vpro-crm-repeater-row {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 8px;
}

.vpro-toolbar {
	display: flex;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
	margin-bottom: 18px;
}

.vpro-toolbar-filters {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0;
}

.vpro-toolbar select,
.vpro-search input {
	width: auto;
	min-width: 190px;
}

.vpro-view-toggle {
	margin-left: auto;
	display: flex;
	gap: 6px;
}

.vpro-search {
	display: flex;
	gap: 8px;
	margin-bottom: 18px;
}

/* ---------- Tables ---------- */

.vpro-table-wrap {
	overflow-x: auto;
	padding: 0;
}

.vpro-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 13px;
	background: transparent;
}

.vpro-table th,
.vpro-table td {
	padding: 11px 15px;
	text-align: left;
	border-bottom: 1px solid var(--vpro-line);
	vertical-align: top;
}

.vpro-table thead th {
	color: var(--vpro-muted);
	font-weight: 500;
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	white-space: nowrap;
}

.vpro-table tbody tr:last-child th,
.vpro-table tbody tr:last-child td {
	border-bottom: 0;
}

.vpro-table tbody tr:hover {
	background: var(--vpro-plane);
}

.vpro-num {
	text-align: right;
	font-variant-numeric: tabular-nums;
}

.vpro-empty-cell {
	color: var(--vpro-muted);
	text-align: center;
	padding: 30px;
}

.vpro-table thead a.vpro-sort {
	text-decoration: none;
	color: inherit;
}

.vpro-table thead a.vpro-sort.is-current {
	color: var(--vpro-ink);
}

.vpro-status {
	display: inline-block;
	padding: 2px 9px;
	border-radius: 999px;
	font-size: 12px;
	border: 1px solid var(--vpro-line);
	color: var(--vpro-ink-2);
	white-space: nowrap;
}

.vpro-status--2 {
	border-color: var(--vpro-series-3);
	color: var(--vpro-series-3);
}

.vpro-status--3 {
	border-color: var(--vpro-series-2);
	color: var(--vpro-series-2);
}

.vpro-pagination {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-top: 18px;
}

.vpro-pagination-count {
	color: var(--vpro-muted);
	font-size: 13px;
	margin-right: auto;
}

/* ---------- Kanban board ---------- */

.vpro-board {
	display: flex;
	gap: 16px;
	align-items: flex-start;
	overflow-x: auto;
	padding-bottom: 14px;
}

.vpro-column {
	flex: 0 0 290px;
	background: var(--vpro-plane);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	display: flex;
	flex-direction: column;
	max-height: 72vh;
}

.vpro-column-head {
	padding: 13px 15px;
	border-bottom: 1px solid var(--vpro-line);
}

.vpro-column-head h2 {
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--vpro-ink-2);
}

.vpro-column-meta {
	margin: 5px 0 0;
	display: flex;
	justify-content: space-between;
	font-size: 12px;
	color: var(--vpro-muted);
	font-variant-numeric: tabular-nums;
}

.vpro-crm-dropzone {
	padding: 9px;
	overflow-y: auto;
	flex: 1 1 auto;
	min-height: 90px;
}

.vpro-crm-dropzone.is-over {
	background: rgba( 42, 120, 214, 0.07 );
	outline: 2px dashed var(--vpro-series-1);
	outline-offset: -4px;
}

.vpro-crm-card {
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-left: 3px solid var(--vpro-series-1);
	border-radius: var(--vpro-radius);
	padding: 11px 13px;
	margin-bottom: 9px;
	cursor: grab;
}

.vpro-crm-card:focus-visible {
	outline: 2px solid var(--vpro-series-1);
	outline-offset: 2px;
}

.vpro-crm-card.is-dragging {
	opacity: 0.45;
}

.vpro-crm-card.is-saving {
	opacity: 0.6;
	cursor: progress;
}

.vpro-app-main .vpro-card-title {
	display: block;
	font-weight: 600;
	text-decoration: none;
	color: var(--vpro-ink);
	margin-bottom: 5px;
}

.vpro-card-value {
	margin: 0;
	font-variant-numeric: tabular-nums;
	color: var(--vpro-ink-2);
}

.vpro-card-student {
	margin: 3px 0 0;
	font-size: 12px;
	color: var(--vpro-muted);
	display: flex;
	align-items: center;
	gap: 6px;
}

.vpro-card-foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-top: 10px;
	font-size: 11px;
	color: var(--vpro-muted);
	min-height: 20px;
	gap: 8px;
}

.vpro-card-foot img {
	border-radius: 50%;
	vertical-align: middle;
}

/* ---------- Dashboard ---------- */

.vpro-filter-row {
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	padding: 13px 15px;
}

.vpro-range-note {
	margin-left: auto;
	color: var(--vpro-muted);
	font-size: 13px;
}

.vpro-kpis {
	display: grid;
	grid-template-columns: repeat( auto-fit, minmax( 210px, 1fr ) );
	gap: 16px;
	margin-bottom: 16px;
}

.vpro-kpi {
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	box-shadow: var(--vpro-shadow);
	padding: 17px 19px;
}

.vpro-kpi-label {
	margin: 0;
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--vpro-muted);
	display: flex;
	align-items: center;
	gap: 7px;
}

.vpro-kpi-value {
	margin: 7px 0 0;
	font-size: 30px;
	line-height: 1.1;
	font-weight: 600;
	color: var(--vpro-ink);
}

.vpro-kpi-sub {
	margin: 4px 0 0;
	font-size: 12px;
	color: var(--vpro-ink-2);
}

.vpro-charts {
	display: grid;
	grid-template-columns: repeat( auto-fit, minmax( 380px, 1fr ) );
	gap: 16px;
}

@media ( max-width: 520px ) {
	.vpro-charts {
		grid-template-columns: 1fr;
	}
}

.vpro-chart-card h2 {
	font-size: 14px;
	color: var(--vpro-ink-2);
	margin-bottom: 14px;
	display: flex;
	align-items: center;
	gap: 8px;
}

/*
 * The fixed height includes the x-axis band, so axis labels are never clipped
 * into a nested scrollbar.
 */
.vpro-canvas-wrap {
	position: relative;
	height: 260px;
}

.vpro-canvas-wrap--short {
	height: 220px;
}

.vpro-chart-table {
	margin-top: 14px;
}

.vpro-chart-table summary {
	cursor: pointer;
	font-size: 12px;
	color: var(--vpro-ink-2);
	list-style: revert;
}

.vpro-chart-table .vpro-table-wrap {
	margin-top: 10px;
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
}

/* ---------- Login ---------- */

.vpro-crm-app--bare {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 100vh;
	padding: 24px;
}

/* No sidebar on the login screen, so the main column reclaims its offset. */
.vpro-crm-app--bare .vpro-app-main {
	margin-left: 0;
	padding: 0;
	width: 100%;
	display: flex;
	justify-content: center;
}

.vpro-login {
	width: 100%;
	max-width: 390px;
}

.vpro-login-card {
	background: var(--vpro-surface);
	border: 1px solid var(--vpro-line);
	border-radius: var(--vpro-radius);
	box-shadow: var(--vpro-shadow);
	padding: 30px;
}

.vpro-login-mark {
	display: block;
	text-align: center;
	font-size: 26px;
	color: var(--vpro-series-1);
	margin-bottom: 12px;
}

.vpro-login-title {
	font-size: 20px;
	margin-bottom: 22px;
	text-align: center;
}

.vpro-login-title span {
	display: block;
	font-size: 13px;
	font-weight: 400;
	color: var(--vpro-muted);
	margin-top: 3px;
}

.vpro-login-foot {
	margin: 18px 0 0;
	text-align: center;
	font-size: 13px;
}

.vpro-login-theme {
	position: fixed;
	top: 16px;
	right: 16px;
}
