/* Elite Seminaire V2 — design system */

:root {
	--esc-color-primary: #6366F1;
	--esc-color-primary-dark: #4F46E5;
	--esc-color-primary-soft: #EEF2FF;
	--esc-color-text: #0F172A;
	--esc-color-text-muted: #64748B;
	--esc-color-bg: #FFFFFF;
	--esc-color-bg-soft: #F8FAFC;
	--esc-color-border: #E2E8F0;
	--esc-color-success: #16A34A;
	--esc-color-success-soft: #DCFCE7;
	--esc-color-danger: #DC2626;
	--esc-color-danger-soft: #FEE2E2;
	--esc-color-info: #0EA5E9;
	--esc-color-info-soft: #E0F2FE;
	--esc-color-warning: #D97706;

	--esc-radius-sm: 6px;
	--esc-radius-md: 10px;
	--esc-radius-lg: 16px;
	--esc-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 5%);
	--esc-shadow-md: 0 4px 6px -1px rgb(15 23 42 / 8%), 0 2px 4px -2px rgb(15 23 42 / 6%);
	--esc-shadow-lg: 0 12px 24px -8px rgb(15 23 42 / 18%), 0 4px 8px -4px rgb(15 23 42 / 6%);

	--esc-font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

	--esc-space-1: 4px;
	--esc-space-2: 8px;
	--esc-space-3: 12px;
	--esc-space-4: 16px;
	--esc-space-5: 24px;
	--esc-space-6: 32px;
	--esc-space-7: 48px;
	--esc-space-8: 64px;

	--esc-container: 1200px;
}

/* Dark mode is opt-in only via [data-esc-theme="dark"]. We never rely on
   prefers-color-scheme — too many legacy V1 blocks have hardcoded colors
   that don't adapt, which produced unreadable contrast issues. */
[data-esc-theme="dark"] {
	--esc-color-text: #F1F5F9;
	--esc-color-text-muted: #94A3B8;
	--esc-color-bg: #0B1220;
	--esc-color-bg-soft: #111827;
	--esc-color-border: #1F2937;
	--esc-color-primary-soft: #1E1B4B;
}

/* ---------- base ---------- */
/* Global horizontal-scroll guard: absolutely-positioned decor (hero cards) and
   negative-margin bleeds must never push the viewport wider on mobile. `clip`
   is preferred (doesn't create a scroll container); `hidden` is the fallback. */
html,
body.esc-v2 {
	overflow-x: hidden;
	overflow-x: clip;
}
body.esc-v2 {
	font-family: var(--esc-font-sans);
	color: var(--esc-color-text);
	background: var(--esc-color-bg);
}

/* ---------- global focus-visible (a11y) ---------- */
/* Keyboard users get a clear, consistent ring. Pointer clicks stay clean
   because :focus-visible only fires for keyboard/AT navigation. */
body.esc-v2 a:focus-visible,
.esc-header__nav a:focus-visible,
.esc-header__burger:focus-visible,
.esc-footer a:focus-visible,
.esc-footer__brand:focus-visible {
	outline: 3px solid var(--esc-color-primary-dark);
	outline-offset: 2px;
	border-radius: var(--esc-radius-sm);
}
/* Buttons get the same ring but a radius matching their own pill shape. */
.esc-btn:focus-visible {
	outline: 3px solid var(--esc-color-primary-dark);
	outline-offset: 2px;
	border-radius: var(--esc-radius-md);
}

/* ---------- buttons ---------- */
.esc-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--esc-space-2);
	padding: 12px 22px;
	border-radius: var(--esc-radius-md);
	font-size: 15px;
	font-weight: 600;
	line-height: 1;
	border: 1px solid transparent;
	cursor: pointer;
	text-decoration: none;
	transition: background .15s ease, color .15s ease, border-color .15s ease, box-shadow .15s ease;
}
/* White-on-#6366F1 is only 4.47:1 (just under AA for normal text). Use the
   darker indigo (#4F46E5 ≈ 6.4:1) as the resting fill so button labels pass AA;
   #6366F1 is reserved for hover/large text/gradients. */
.esc-btn-primary {
	background: var(--esc-color-primary-dark);
	color: #fff !important;
}
.esc-btn-primary:hover {
	background: var(--esc-color-primary);
	color: #fff !important;
}
.esc-btn-ghost {
	background: transparent;
	color: var(--esc-color-primary-dark) !important;
	border-color: var(--esc-color-border);
}
.esc-btn-ghost:hover {
	background: var(--esc-color-primary-soft);
}

/* ---------- pills / badges ---------- */
.esc-badge,
.esc-pill {
	display: inline-flex;
	align-items: center;
	padding: 4px 10px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 600;
	letter-spacing: 0.02em;
	background: var(--esc-color-primary-soft);
	color: var(--esc-color-primary-dark);
}
.esc-pill-muted   { background: var(--esc-color-bg-soft); color: var(--esc-color-text-muted); }
.esc-pill-success { background: var(--esc-color-success-soft); color: var(--esc-color-success); }
.esc-pill-danger  { background: var(--esc-color-danger-soft);  color: var(--esc-color-danger); }
/* --esc-color-info (#0EA5E9) on info-soft is only 2.42:1 → fails WCAG.
   #0369A1 lifts it to ~5.3:1 while staying in the cyan family. */
.esc-pill-info    { background: var(--esc-color-info-soft);    color: #0369A1; }

/* ---------- dashboard ---------- */
.esc-dashboard {
	max-width: var(--esc-container);
	margin: 0 auto;
	padding: var(--esc-space-6) var(--esc-space-5);
	display: grid;
	gap: var(--esc-space-7);
}
.esc-eyebrow {
	color: var(--esc-color-primary);
	font-weight: 600;
	letter-spacing: .12em;
	text-transform: uppercase;
	font-size: 12px;
	margin: 0 0 6px;
}
.esc-lead {
	color: var(--esc-color-text-muted);
	font-size: 17px;
	margin: var(--esc-space-3) 0 0;
	max-width: 60ch;
}
.esc-dashboard__hero {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--esc-space-5);
	background: linear-gradient(135deg, var(--esc-color-primary-soft), transparent 70%);
	padding: var(--esc-space-7) var(--esc-space-6);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-lg);
}
.esc-dashboard__hero h1 { margin: 0; font-size: clamp(24px, 4vw, 36px); line-height: 1.1; }
.esc-dashboard__stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
	gap: var(--esc-space-4);
}
.esc-stat {
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-md);
	padding: var(--esc-space-5);
	box-shadow: var(--esc-shadow-sm);
}
.esc-stat__value {
	font-size: 32px;
	font-weight: 700;
	line-height: 1;
}
.esc-stat__label {
	color: var(--esc-color-text-muted);
	font-size: 13px;
	margin-top: var(--esc-space-2);
}

.esc-dashboard__section h2 {
	margin: 0 0 var(--esc-space-5);
	font-size: 22px;
	letter-spacing: -.01em;
}

.esc-grid {
	display: grid;
	gap: var(--esc-space-5);
}
.esc-grid-cards { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.esc-grid-2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }

/* ---------- card ---------- */
.esc-card {
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-lg);
	padding: var(--esc-space-5);
	box-shadow: var(--esc-shadow-sm);
	transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease;
}
.esc-card-formation {
	padding: 0;
	overflow: hidden;
	display: block;
	color: inherit;
	text-decoration: none;
}
.esc-card-formation:hover {
	transform: translateY(-2px);
	box-shadow: var(--esc-shadow-lg);
	border-color: var(--esc-color-primary);
}
.esc-card__media {
	aspect-ratio: 16 / 9;
	background-color: var(--esc-color-primary-soft);
	background-size: cover;
	background-position: center;
}
.esc-card__media--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 48px;
}
.esc-card__body { padding: var(--esc-space-5); display: grid; gap: var(--esc-space-3); }
.esc-card__body h3 { margin: 0; font-size: 18px; line-height: 1.3; }
.esc-muted { color: var(--esc-color-text-muted); margin: 0; font-size: 14px; }
.esc-card__footer {
	display: flex;
	justify-content: space-between;
	align-items: center;
	font-size: 13px;
	color: var(--esc-color-text-muted);
	margin-top: var(--esc-space-2);
}
.esc-arrow { font-size: 18px; color: var(--esc-color-primary); }

/* ---------- card price line (shared contract) ---------- */
/* <p class="esc-card__price">480 € <span class="esc-card__price-suffix">TTC</span></p>
   or the literal text "Sur devis". Prominent, indigo-dark for AA contrast. */
.esc-card__price {
	margin: 0;
	font-size: 22px;
	font-weight: 700;
	line-height: 1.1;
	letter-spacing: -0.01em;
	color: var(--esc-color-primary-dark);
}
.esc-card__price-suffix {
	font-size: 12px;
	font-weight: 600;
	color: var(--esc-color-text-muted);
	letter-spacing: 0.02em;
	margin-left: 4px;
}

/* ---------- card meta pill row (shared contract) ---------- */
/* <ul class="esc-card__meta"><li class="esc-card__meta-pill">7 Jours</li>…</ul>
   Small neutral pills echoing .esc-pill, laid out as a wrapping row. */
.esc-card__meta {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--esc-space-2);
}
.esc-card__meta-pill {
	display: inline-flex;
	align-items: center;
	padding: 3px 10px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 600;
	letter-spacing: 0.01em;
	background: var(--esc-color-bg-soft);
	color: var(--esc-color-text-muted);
	border: 1px solid var(--esc-color-border);
}

/* ---------- homepage trust band (shared contract) ---------- */
/* <section class="esc-trust"><div class="esc-trust__grid">
     <div class="esc-trust__item">…</div></div></section>
   Icon over short label, centered; responsive 3-col → 1-col. */
.esc-trust__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--esc-space-5);
}
.esc-trust__item {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: var(--esc-space-2);
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-lg);
	padding: var(--esc-space-6) var(--esc-space-5);
	box-shadow: var(--esc-shadow-sm);
}
.esc-trust__item svg,
.esc-trust__item img,
.esc-trust__item .esc-trust__icon {
	width: 40px;
	height: 40px;
	font-size: 32px;
	line-height: 1;
	color: var(--esc-color-primary-dark);
}
.esc-trust__item strong {
	font-size: 18px;
	color: var(--esc-color-text);
	letter-spacing: -0.01em;
}
.esc-trust__item span,
.esc-trust__item p {
	margin: 0;
	font-size: 14px;
	line-height: 1.5;
	color: var(--esc-color-text-muted);
}
@media (max-width: 720px) {
	.esc-trust__grid { grid-template-columns: 1fr; }
}

/* ---------- reassurance strip (shared contract) ---------- */
/* <ul class="esc-reassure"><li class="esc-reassure__item">…</li></ul>
   Single wrapping row of small icon + muted label. */
.esc-reassure {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--esc-space-3) var(--esc-space-6);
}
.esc-reassure__item {
	display: inline-flex;
	align-items: center;
	gap: var(--esc-space-2);
	font-size: 14px;
	font-weight: 500;
	color: var(--esc-color-text-muted);
}
.esc-reassure__item svg,
.esc-reassure__item img,
.esc-reassure__item .esc-reassure__icon {
	width: 18px;
	height: 18px;
	font-size: 16px;
	line-height: 1;
	color: var(--esc-color-primary-dark);
	flex-shrink: 0;
}

/* ---------- progress bar ---------- */
.esc-progress {
	height: 8px;
	background: var(--esc-color-bg-soft);
	border-radius: 999px;
	overflow: hidden;
}
.esc-progress__bar {
	height: 100%;
	background: linear-gradient(90deg, var(--esc-color-primary), var(--esc-color-primary-dark));
	transition: width .3s ease;
}

/* ---------- documents ---------- */
.esc-doc-list {
	list-style: none;
	padding: 0;
	margin: 0;
	display: grid;
	gap: var(--esc-space-2);
}
.esc-doc-list__item {
	display: grid;
	grid-template-columns: 32px 1fr auto;
	align-items: center;
	gap: var(--esc-space-3);
	padding: var(--esc-space-3) var(--esc-space-4);
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-md);
}
.esc-doc-list__icon { font-size: 20px; }

/* ---------- empty state ---------- */
.esc-empty {
	background: var(--esc-color-bg-soft);
	border: 1px dashed var(--esc-color-border);
	border-radius: var(--esc-radius-md);
	padding: var(--esc-space-6) var(--esc-space-5);
	text-align: center;
}

/* ---------- formation single ---------- */
.esc-formation {
	max-width: var(--esc-container);
	margin: 0 auto;
	padding: var(--esc-space-6) var(--esc-space-5);
	display: grid;
	gap: var(--esc-space-7);
}
.esc-formation__hero {
	display: grid;
	gap: var(--esc-space-4);
	padding: var(--esc-space-7);
	border-radius: var(--esc-radius-lg);
	background: linear-gradient(135deg, var(--esc-color-primary-soft), transparent 80%);
	border: 1px solid var(--esc-color-border);
}
.esc-formation__hero h1 { margin: 0; font-size: clamp(28px, 5vw, 40px); }
.esc-formation__meta { display: flex; flex-wrap: wrap; gap: var(--esc-space-3); }

.esc-modules {
	display: grid;
	gap: var(--esc-space-4);
}
.esc-module {
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-md);
	padding: var(--esc-space-5);
	display: grid;
	gap: var(--esc-space-3);
}
.esc-module h3 { margin: 0; font-size: 18px; }
.esc-module__actions { display: flex; flex-wrap: wrap; gap: var(--esc-space-3); }

.esc-quiz-table {
	width: 100%;
	border-collapse: collapse;
}
.esc-quiz-table th, .esc-quiz-table td {
	padding: var(--esc-space-3);
	border-bottom: 1px solid var(--esc-color-border);
	text-align: left;
}
.esc-quiz-table th {
	font-size: 12px;
	letter-spacing: .08em;
	color: var(--esc-color-text-muted);
	text-transform: uppercase;
	font-weight: 600;
}
.esc-quiz-table tr:last-child td { border-bottom: none; }

.esc-section {
	background: var(--esc-color-bg);
	border: 1px solid var(--esc-color-border);
	border-radius: var(--esc-radius-lg);
	padding: var(--esc-space-6);
	display: grid;
	gap: var(--esc-space-5);
}
.esc-section h2 { margin: 0; font-size: 22px; }

/* ---------- responsive tweaks ---------- */
@media (max-width: 640px) {
	.esc-dashboard, .esc-formation { padding: var(--esc-space-5) var(--esc-space-4); }
	.esc-dashboard__hero, .esc-formation__hero, .esc-section { padding: var(--esc-space-5); }
	.esc-card__body { padding: var(--esc-space-4); }
}

/* Print-friendly */
@media print {
	.esc-btn, .esc-doc-list a { display: none !important; }
}
