/* rewinda.app — design system « Pastel Studieux »
   Tokens alignés sur le Design System Stitch (.stitch/design-system.md) :
   Modern Organic Minimalism, base crème/charbon, accents fonctionnels. */

:root {
  --bg: #FCF9F1;            /* surface / desk (fond page) */
  --surface: #FDFCF8;       /* blanc cassé (cartes neutres) */
  --surface-container: #F1EEE6;  /* surface légèrement surélevée */
  --text: #1C1C17;          /* on-surface (charbon) */
  --muted: #8A857B;         /* taupe (méta secondaire) */
  --accent: #E85D3D;        /* corail tomate (actions, aujourd'hui) */
  --accent-dark: #C9401F;   /* corail foncé (retard / danger) */
  --green: #3E7C4F;         /* vert feuille (révisé / succès) */
  --dark: #31312B;          /* inverse-surface (blocs sombres) */
  --ink-navy: #000080;      /* méta temps/durée dans les cartes */
  --lavande: #C9C0EE;
  --jaune: #F3D465;
  --menthe: #BFE3C0;
  --rose: #F5C6D0;
  --peche: #F6C39B;
  --hairline: rgba(28, 28, 23, 0.08);
  --r-chip: 12px;           /* petits badges (J0, EN RETARD) */
  --radius: 20px;           /* cartes standard (2xl) */
  --radius-lg: 24px;        /* panneaux */
  --shadow: 0 1px 2px rgba(31, 30, 28, 0.06);
  --font-display: "Space Grotesk", "Inter", system-ui, sans-serif;
  --font-body: "Inter", system-ui, -apple-system, sans-serif;
  /* Largeur maximale du contenu (topbar + .container) : quasi pleine largeur
     sur ordinateur/tablette, plafonnée pour les très grands moniteurs. */
  --page-width: 1760px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

/* Police OpenDyslexic (embarquée) : préférence « dyslexie » des paramètres.
   La classe sur <body> réécrit les deux variables de police — tout ce qui
   passe par var(--font-body)/var(--font-display) suit automatiquement. */
@font-face {
  font-family: "OpenDyslexic";
  src: url("/static/fonts/OpenDyslexic-Regular.woff") format("woff");
  font-weight: 400 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "OpenDyslexic";
  src: url("/static/fonts/OpenDyslexic-Bold.woff") format("woff");
  font-weight: 700 800; font-style: normal; font-display: swap;
}
body.font-dyslexic {
  --font-body: "OpenDyslexic", sans-serif;
  --font-display: "OpenDyslexic", sans-serif;
  letter-spacing: 0.01em;
}

body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  font-size: 16px;          /* body-md */
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;  /* garde-fou : aucun défilement horizontal parasite */
}

/* Échelle typographique du Design System */
h1, h2, h3, .display { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.02em; }
h1 { font-size: 32px; line-height: 1.2; }        /* display-md */
h2 { font-size: 20px; line-height: 1.4; }        /* headline-lg */
.label-caps { font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
.tabular, .label-tabular { font-variant-numeric: tabular-nums; }
a { color: var(--text); text-decoration: none; }
.muted { color: var(--muted); }
.hint { color: var(--muted); font-size: 12px; margin-top: 14px; }

/* ---------- Topbar ---------- */
.topbar { background: var(--bg); }
.topbar-inner {
  max-width: var(--page-width); margin: 0 auto; padding: 14px 32px;
  display: flex; align-items: center; gap: 24px;
}
.brand {
  font-family: var(--font-display); font-weight: 700; font-size: 18px;
  color: var(--text); letter-spacing: -0.02em;
  display: inline-flex; align-items: center; gap: 8px;
}
.brand-logo { width: 28px; height: 28px; display: block; }
.brand-text span { color: var(--accent); }
.topbar nav {
  display: flex; gap: 4px; margin: 0 auto;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 999px; padding: 4px;
}
.topbar nav a {
  color: var(--muted); font-weight: 500; font-size: 14px;
  padding: 7px 18px; border-radius: 999px; transition: all 0.15s;
}
.topbar nav a:hover { color: var(--text); }
.topbar nav a.active { background: var(--dark); color: var(--bg); }
.topbar-user { display: flex; align-items: center; gap: 12px; font-size: 13px; }
.avatar { width: 34px; height: 34px; border-radius: 50%; border: 2px solid var(--surface); object-fit: cover; }
.avatar-fallback {
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--lavande); color: var(--text); font-weight: 700; font-family: var(--font-display);
}
.settings-link { color: var(--muted); display: inline-flex; align-items: center; transition: color 0.15s; }
.settings-link svg { display: block; }
.settings-link:hover, .settings-link.active { color: var(--text); }
.lang-form select { padding: 6px 8px; border-radius: 10px; font-size: 12.5px; }

/* Sélecteur de compte (avatar → menu) */
.acct-menu { position: relative; }
.acct-menu summary { list-style: none; cursor: pointer; display: inline-flex; }
.acct-menu summary::-webkit-details-marker { display: none; }
.acct-dropdown {
  position: absolute; right: 0; top: 44px; z-index: 40; min-width: 220px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 16px; box-shadow: 0 8px 24px rgba(31,30,28,0.12); padding: 6px;
}
.acct-dropdown a { display: block; padding: 9px 12px; border-radius: 10px; font-size: 13.5px; color: var(--text); }
.acct-dropdown a:hover { background: var(--bg); }
.acct-dropdown a.active { font-weight: 700; color: var(--accent); }

/* Bandeau « mode contributeur » */
.contrib-banner {
  background: var(--lavande); color: var(--text); font-size: 13.5px;
  text-align: center; padding: 9px 16px;
}
.contrib-banner a { font-weight: 700; text-decoration: underline; margin-left: 6px; }
.username { color: var(--muted); }
.logout { color: var(--muted); font-size: 13px; }
.logout:hover { color: var(--accent); }

/* Largeur de page : quasi pleine largeur sur ordinateur et tablette (le
   contenu — calendrier, board, grille d'UE — profite de tout l'écran), avec
   un plafond pour rester lisible sur les très grands moniteurs. */
.container { max-width: var(--page-width); margin: 0 auto; padding: 24px 32px 80px; }

/* ---------- En-têtes de page ---------- */
.page-head { display: flex; align-items: baseline; gap: 16px; margin-bottom: 32px; flex-wrap: wrap; }
.page-head h1 { font-size: 32px; }
.page-head .sub { color: var(--muted); font-size: 14px; }

.hero-date {
  font-family: var(--font-display); font-size: 72px; font-weight: 700;
  letter-spacing: -0.02em; line-height: 1.1;
}
.hero-time {
  font-family: var(--font-display); font-size: 48px; font-weight: 700;
  color: var(--text); font-variant-numeric: tabular-nums; letter-spacing: -0.02em; line-height: 1.1;
}
.hero-row { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 6px; }
.hero-sub { color: var(--muted); margin-bottom: 32px; font-size: 16px; }

/* ---------- Boutons, chips & formulaires ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  border: 1px solid var(--text); border-radius: 999px;
  background: transparent; color: var(--text);
  padding: 9px 18px; font-size: 14px; font-weight: 500; font-family: var(--font-body);
  cursor: pointer; transition: background 0.15s, transform 0.05s;
}
.btn:hover { background: rgba(31, 30, 28, 0.05); }
.btn:active { transform: scale(0.98); }
.btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn-primary:hover { background: #d64f30; }
.btn-dark { background: var(--dark); border-color: var(--dark); color: var(--bg); }
.btn-dark:hover { background: #3a3835; }
.btn-google { width: 100%; background: var(--surface); border-color: var(--hairline); }
.btn-sm { padding: 5px 13px; font-size: 13px; }
.btn-danger { color: var(--accent-dark); border-color: transparent; }
.btn-danger:hover { background: rgba(201, 64, 31, 0.07); }
.btn-danger-outline { color: var(--accent-dark); border-color: currentColor; }
.btn-danger-outline:hover { background: rgba(201, 64, 31, 0.07); }

.chip {
  display: inline-flex; align-items: center; gap: 5px;
  border-radius: var(--r-chip); padding: 3px 9px;
  font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
  background: rgba(253, 252, 248, 0.75); color: var(--text);
}
.chip-dark { background: var(--dark); color: var(--bg); }
.chip-accent { background: var(--accent); color: #fff; }
.chip-late { background: var(--accent-dark); color: #fff; }
.chip-draft { background: var(--jaune); color: var(--text); }
.unit-card.is-draft { opacity: 0.7; }
.unit-body .course-row.is-draft { opacity: 0.6; }

input[type="text"], input[type="number"], input[type="date"], input[type="time"], select, textarea {
  border: 1px solid var(--hairline); border-radius: 14px;
  padding: 10px 14px; font-size: 14px; font-family: var(--font-body);
  background: var(--surface); color: var(--text); outline: none;
}
input:focus, select:focus, textarea:focus { border-color: var(--text); }
input[type="color"] { border: none; width: 34px; height: 34px; padding: 0; background: none; cursor: pointer; }
input[type="file"] { font-size: 13px; }
/* Input fichier stylé : le natif est caché, le label porte un bouton + le
   nom du fichier choisi. */
.file-field { display: flex; align-items: center; gap: 10px; cursor: pointer; }
.file-field input[type="file"] { display: none; }
.file-field .file-name { font-size: 13px; }
label { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; }

.form-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* ---------- Login ---------- */
.login-wrap { min-height: 92vh; display: flex; align-items: center; justify-content: center; position: relative; overflow: hidden; }
.login-blob { position: absolute; border-radius: 50%; filter: blur(60px); opacity: 0.55; }
.login-sticker {
  position: absolute; font-size: 13px; font-weight: 700;
  border-radius: 999px; padding: 6px 12px; transform: rotate(-8deg);
}
.login-card {
  width: 380px; text-align: center; padding: 48px 40px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius-lg); box-shadow: var(--shadow);
  position: relative; z-index: 1;
}
.login-logo { margin-bottom: 10px; }
.login-logo img { width: 72px; height: 72px; }
.login-card h1 { font-size: 28px; margin-bottom: 8px; }
.login-card p { margin-bottom: 28px; }
.login-card .btn { width: 100%; margin-bottom: 12px; }
.login-error {
  background: var(--rose); color: var(--accent-dark); font-size: 13px;
  border-radius: 12px; padding: 10px 14px; margin-bottom: 16px;
}
.login-j-chips { display: flex; justify-content: center; gap: 6px; margin-top: 20px; flex-wrap: wrap; }
.login-j-chips .chip { font-size: 10.5px; }

/* ---------- Alertes ---------- */
.alert-banner {
  background: var(--rose); color: var(--text);
  border-radius: var(--radius); padding: 13px 18px; margin-bottom: 24px;
  font-size: 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.alert-banner a { font-weight: 600; text-decoration: underline; }

/* ---------- Board simplifié ---------- */
/* minmax(0,…) : autorise la colonne à rétrécir sous la largeur de son contenu
   (sans ça, un titre long non sécable pousse le panneau latéral hors écran). */
.board { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 28px; align-items: start; }
.day-list { display: flex; flex-direction: column; gap: 14px; }

.rev-card {
  position: relative;
  display: flex; align-items: center; gap: 16px;
  border-radius: var(--radius); padding: 16px 20px;
  box-shadow: var(--shadow); transition: transform 0.12s ease;
}
.rev-card:hover { transform: scale(1.01); }  /* feedback tactile « papier soulevé » */
.rev-card.done { opacity: 0.55; }
.rev-badge-late {  /* badge « EN RETARD » épinglé sur le bord haut (absolu) */
  position: absolute; top: -8px; left: 18px;
  background: var(--accent-dark); color: #fff;
  border-radius: var(--r-chip); padding: 3px 9px;
  font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
}
.rev-chipcol { display: flex; flex-direction: column; align-items: center; gap: 5px; min-width: 78px; }
.rev-chipcol .when { font-size: 10px; font-weight: 700; color: var(--text); opacity: 0.6; text-transform: uppercase; letter-spacing: 0.05em; }
.rev-body { flex: 1; min-width: 0; }
.rev-body .title { font-family: var(--font-display); font-weight: 700; font-size: 20px; line-height: 1.4; display: block; overflow-wrap: anywhere; }
.rev-body .subtitle { font-size: 14px; color: var(--text); opacity: 0.65; }
.rev-meta { display: flex; align-items: center; gap: 14px; font-size: 14px; font-weight: 500; white-space: nowrap; color: var(--ink-navy); font-variant-numeric: tabular-nums; }

.check-form { display: inline; }
.check-circle {
  width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--text);
  background: transparent; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  color: transparent; font-size: 15px; transition: all 0.15s; flex-shrink: 0;
}
.check-circle:hover { border-color: var(--green); color: var(--green); }
.check-circle.checked { background: var(--green); border-color: var(--green); color: #fff; cursor: default; }

.empty-state {
  background: var(--surface); border: 1px dashed var(--hairline);
  border-radius: var(--radius); padding: 42px; text-align: center; color: var(--muted);
}

/* Lignes de pause dans le planning du jour */
.break-row {
  display: flex; align-items: center; gap: 10px;
  border: 1.5px dashed rgba(31, 30, 28, 0.2); border-radius: 14px;
  padding: 9px 18px; color: var(--muted); font-size: 13px;
}
.break-row .break-label { font-weight: 600; flex: 1; }
.break-row .break-time { font-variant-numeric: tabular-nums; }

/* Événement (examen, RDV…) dans le planning du jour */
.event-row {
  display: flex; align-items: center; gap: 12px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-left: 4px solid var(--accent); border-radius: 16px;
  padding: 13px 18px;
}
.event-row .ev-kind {
  font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--accent-dark); background: var(--rose); border-radius: 999px; padding: 2px 8px;
}
.event-row .ev-title { font-weight: 600; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.event-row .ev-time { font-size: 13.5px; color: var(--ink-navy); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* Panneau Mes cours */
.course-panel {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius-lg); box-shadow: var(--shadow); padding: 20px;
}
.course-panel h2 { font-size: 17px; margin-bottom: 12px; }
.course-row {
  display: flex; align-items: center; gap: 10px; padding: 9px 2px;
  border-bottom: 1px solid var(--hairline); font-size: 13.5px;
}
.course-row:last-child { border-bottom: none; }
.course-row .title { flex: 1; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.course-row .count { color: var(--muted); font-size: 12.5px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.alert-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); flex-shrink: 0; }
.panel-cta { margin-top: 14px; width: 100%; }

/* ---------- Calendrier semaine ---------- */
.cal-nav { display: flex; align-items: center; gap: 8px; margin-left: auto; }
.cal-range {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 999px; padding: 7px 16px; font-size: 13.5px; font-weight: 600;
}
/* Plateau : axe horaire à gauche + grille des jours (1 min = 1 px) */
.cal-board { display: flex; gap: 10px; align-items: flex-start; }
.cal-timeaxis { flex: 0 0 52px; display: flex; flex-direction: column; }
.cal-hour {
  flex: none; font-size: 11px; color: var(--muted);
  font-variant-numeric: tabular-nums; text-align: right; padding-right: 8px;
  border-top: 1px solid var(--hairline);
}
.cal-grid { display: flex; gap: 10px; flex: 1; min-width: 0; position: relative; }
.cal-day { position: relative; flex: 1; min-width: 0; border-radius: var(--radius); padding: 0 4px 10px; }
.cal-day.today { flex: 1.5; background: rgba(35, 34, 32, 0.05); }  /* jour courant : plus large + gris clair */
.cal-day.past .cal-timeline { opacity: 0.55; }
.cal-day-head { text-align: center; padding: 10px 4px 12px; border-radius: 16px; margin-bottom: 8px; height: 60px; }
.cal-day-head .d-name { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); }
.cal-day-head .d-num { font-family: var(--font-display); font-size: 26px; font-weight: 600; }
.cal-day-head.today { background: var(--dark); }
.cal-day-head.today .d-name, .cal-day-head.today .d-num { color: var(--bg); }

/* Bandeau de statut (hauteur fixe pour l'alignement de l'axe) */
.cal-status { height: 24px; margin-bottom: 6px; display: flex; gap: 4px; overflow: hidden; align-items: center; }
.cal-ev-chip {
  background: var(--surface); border: 1px solid var(--hairline); border-radius: 999px;
  padding: 2px 8px; font-size: 10.5px; font-weight: 600; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}

/* Piste horaire : les items y sont positionnés à leur heure réelle */
.cal-timeline { position: relative; }
.cal-bands { position: absolute; inset: 0; display: flex; flex-direction: column; z-index: 0; }
.cal-bands .band { border-top: 1px solid rgba(28, 28, 23, 0.05); }
.cal-bands .band.off { background: rgba(28, 28, 23, 0.07); border-top-color: transparent; }
.cal-bands .band.off:first-child,
.cal-bands .band:not(.off) + .band.off {
  border-top-left-radius: 14px; border-top-right-radius: 14px;
}
.cal-bands .band.off:last-child,
.cal-bands .band.off:has(+ .band:not(.off)) {
  border-bottom-left-radius: 14px; border-bottom-right-radius: 14px;
}
.positioned { position: absolute; left: 3px; right: 3px; z-index: 1; margin: 0; overflow: hidden; }
.off-overlay {
  position: absolute; left: 3px; right: 3px; z-index: 1;
  justify-content: center; background: rgba(252, 249, 241, 0.72);
}
.card.positioned { box-shadow: var(--shadow); }
/* Cartes déplaçables (pointer events) : sans touch-action none, le
   navigateur annule le drag (pointercancel) pour scroller — la carte
   devient insaisissable au doigt sur tablette. */
[data-move-rev] { touch-action: none; cursor: grab; }
/* Curseur identique partout sur la carte, y compris le titre (lien) : le
   drag peut partir de n'importe où — fini le mélange main/doigt au survol. */
[data-move-rev] .card-title { cursor: grab; }
[data-move-rev].dragging { cursor: grabbing; }
.card.compact { padding: 3px 10px; gap: 0; justify-content: center; }
.card.compact .card-meta { display: none; }
.card.compact .card-title { font-size: 12px; }
.card.compact .check-circle { width: 18px; height: 18px; font-size: 10px; }
.cal-break.positioned { align-items: center; justify-content: center; padding: 2px 8px; background: rgba(252, 249, 241, 0.6); }
.card-title.clamp {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; overflow-wrap: anywhere;
}

/* Cartes basses (< 55 min) : un titre sur 2 lignes pousserait la ligne
   badge + heure hors de la carte — une seule ligne de titre. */
.card.short .card-title.clamp { -webkit-line-clamp: 1; }
.card.compact .card-title.clamp { -webkit-line-clamp: 1; }

/* Popup « déplacer un cours » (clic droit) */
.move-pop {
  position: absolute; z-index: 70; width: 260px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 16px; box-shadow: 0 10px 30px rgba(31,30,28,0.18); padding: 14px;
}
.move-pop .mp-title { font-weight: 700; font-size: 13.5px; margin-bottom: 10px; overflow-wrap: anywhere; }
/* Safari iOS rend les champs date en contrôle natif à largeur intrinsèque
   qui déborde du popup : neutraliser l'apparence et borner la largeur. */
.move-pop input[type="date"] {
  width: 100%; max-width: 100%; min-width: 0; display: block;
  -webkit-appearance: none; appearance: none;
}
.move-pop .mp-actions { display: flex; gap: 8px; margin-top: 10px; }

/* Menu contextuel minimal (clic droit sur un événement horodaté) */
.ctx-menu {
  position: absolute; z-index: 70; min-width: 150px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 12px; box-shadow: 0 10px 30px rgba(31,30,28,0.18); padding: 6px;
}
.ctx-menu-item {
  display: block; width: 100%; text-align: left; background: none; border: none;
  padding: 8px 10px; border-radius: 8px; font-size: 13.5px; cursor: pointer;
  color: var(--accent-dark);
}
.ctx-menu-item:hover { background: rgba(201, 64, 31, 0.07); }
.ctx-menu-item.ctx-menu-neutral { color: var(--text); }
.ctx-menu-item.ctx-menu-neutral:hover { background: var(--bg); }
.card-menu-btn {
  width: 22px; height: 22px; border: none; border-radius: 6px; background: none;
  color: inherit; font-size: 15px; line-height: 1; cursor: pointer; flex: none;
  display: inline-flex; align-items: center; justify-content: center; opacity: 0.65;
}
.card-menu-btn:hover { opacity: 1; background: rgba(31,30,28,0.08); }

/* Drag & drop + resize des sessions du calendrier */
.cal-day-head { position: relative; }
.day-add {
  position: absolute; top: 6px; right: 6px; width: 22px; height: 22px;
  border: 1px solid var(--hairline); border-radius: 50%; background: var(--surface);
  color: var(--muted); font-size: 15px; line-height: 1; cursor: pointer;
  opacity: 0; transition: opacity 0.12s ease;
}
.cal-day:hover .day-add, .day-add:focus-visible { opacity: 1; }
.day-add:hover { color: var(--dark); border-color: var(--dark); }
.card[draggable="true"] { cursor: grab; }
.card.dragging { opacity: 0.45; cursor: grabbing; }
.card.resizing { box-shadow: 0 10px 30px rgba(31,30,28,0.25); z-index: 30; }
.cal-day.drag-over .cal-timeline { outline: 2px dashed var(--dark); outline-offset: -2px; border-radius: 16px; }
.drag-ghost {
  display: none; position: absolute; z-index: 15; pointer-events: none;
  flex-direction: column; gap: 2px; overflow: hidden;
  border-radius: 16px; padding: 8px 10px;
  background: rgba(31, 30, 28, 0.85); color: #fff; font-size: 12px;
  box-shadow: var(--shadow);
}
.drag-ghost .dg-title { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.drag-ghost .dg-time { opacity: 0.85; font-variant-numeric: tabular-nums; }
.rz-handle {
  position: absolute; left: 0; right: 0; bottom: 0; height: 10px;
  cursor: ns-resize; border-radius: 0 0 16px 16px; touch-action: none;
}
.rz-handle::after {
  content: ""; position: absolute; left: 50%; bottom: 3px; transform: translateX(-50%);
  width: 26px; height: 3px; border-radius: 2px; background: rgba(31,30,28,0.25);
  opacity: 0; transition: opacity 0.12s ease;
}
.card:hover .rz-handle::after { opacity: 1; }

/* Durées par étape J (page cours) */
.dur-edit { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); }
.dur-edit input { width: 58px; padding: 4px 6px; }
.dur-save { display: flex; align-items: center; gap: 12px; margin-top: 12px; }

.card {
  border-radius: 16px; padding: 11px 12px; font-size: 13px;
  display: flex; flex-direction: column; gap: 6px; box-shadow: var(--shadow);
  transition: transform 0.12s ease;
}
.card:hover { transform: scale(1.01); }
.card.done { opacity: 0.55; }
.card.done:hover { transform: none; }
.card-top { display: flex; align-items: flex-start; gap: 7px; }
.card-title { font-family: var(--font-display); font-weight: 700; flex: 1; min-width: 0; overflow-wrap: anywhere; }
.card-meta { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-navy); font-weight: 500; flex-wrap: wrap; font-variant-numeric: tabular-nums; }
.card-more { font-size: 11px; font-weight: 600; background: rgba(253, 252, 248, 0.75); border-radius: 999px; padding: 2px 9px; }
.card .check-circle { width: 22px; height: 22px; font-size: 12px; border-width: 1.5px; }

/* Badge « journée trop chargée » (bandeau de statut) */
.cal-overload {
  background: var(--rose); color: var(--accent-dark);
  border-radius: 999px; padding: 2px 9px;
  font-size: 10.5px; font-weight: 700; white-space: nowrap;
}

/* Pause dans une colonne du calendrier */
.cal-break {
  display: flex; align-items: center; gap: 6px;
  border: 1.5px dashed rgba(31, 30, 28, 0.2); border-radius: 12px;
  padding: 6px 10px; color: var(--muted); font-size: 11px;
}
.cal-break .cb-label { flex: 1; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cal-break .cb-time { font-variant-numeric: tabular-nums; }

button.check-circle.checked { cursor: pointer; }
button.check-circle.checked:hover { background: var(--accent-dark); border-color: var(--accent-dark); }

/* Jour OFF & événements */
.off-card {
  border: 1.5px dashed rgba(31, 30, 28, 0.25); border-radius: 16px;
  padding: 18px 12px; text-align: center; color: var(--muted); font-size: 12.5px;
  display: flex; flex-direction: column; gap: 6px; align-items: center;
}
.off-card .off-icon { font-size: 20px; }
.off-card form { margin-top: 2px; }
.event-card { background: var(--surface); border: 1px solid var(--hairline); }
.event-card .kind { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 700; color: var(--muted); }
.event-time { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }

.fab {
  position: fixed; right: 32px; bottom: 32px; z-index: 20;
  width: 56px; height: 56px; border-radius: 50%;
  background: var(--accent); color: #fff; border: none; cursor: pointer;
  font-size: 26px; line-height: 1; display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(232, 93, 61, 0.4);
  transition: transform 0.1s;
}
.fab:hover { transform: scale(1.06); }

.late-banner {
  margin-top: 22px; background: var(--rose); border-radius: var(--radius);
  padding: 13px 18px; font-size: 14px;
  display: flex; align-items: center; gap: 12px;
}

/* ---------- Nouvel événement ---------- */
.event-layout { display: grid; grid-template-columns: minmax(0, 620px) 300px; gap: 28px; align-items: start; }
.event-form {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius-lg); box-shadow: var(--shadow);
  padding: 26px; display: grid; gap: 20px;
}
.event-form .field { display: grid; gap: 7px; }
.kind-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.kind-chips input { display: none; }
.kind-chips label { cursor: pointer; }
.kind-chips label span {
  display: inline-block; border-radius: 999px; padding: 8px 16px;
  font-size: 13.5px; font-weight: 600; color: var(--text);
  border: 2px solid transparent; opacity: 0.4; filter: saturate(0.7);
  transition: opacity 0.15s, transform 0.1s;
}
/* Catégorie active : pleinement visible, entourée ; les autres estompées */
.kind-chips input:checked + span {
  opacity: 1; filter: none; border-color: var(--text); transform: scale(1.04);
  box-shadow: var(--shadow);
}
.kind-chips label:hover span { opacity: 0.75; }
.half-options { display: flex; gap: 8px; flex-wrap: wrap; }
.half-options input { display: none; }
.half-options span {
  display: inline-block; cursor: pointer; border: 1px solid var(--hairline);
  background: var(--surface); border-radius: 999px; padding: 8px 16px; font-size: 13.5px; font-weight: 500;
}
.half-options input:checked + span { background: var(--dark); color: var(--bg); border-color: var(--dark); }
.upcoming-panel {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius-lg); padding: 18px;
}
.upcoming-panel h2 { font-size: 15px; margin-bottom: 12px; }
.upcoming-row { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--hairline); font-size: 13px; }
.upcoming-row:last-child { border-bottom: none; }
.upcoming-date {
  min-width: 44px; text-align: center; border-radius: 12px; padding: 4px 2px;
  font-variant-numeric: tabular-nums;
}
.upcoming-date .d { font-family: var(--font-display); font-weight: 700; font-size: 16px; display: block; line-height: 1.1; }
.upcoming-date .m { font-size: 10px; text-transform: uppercase; }
.upcoming-row .what { flex: 1; min-width: 0; }
.upcoming-row .what .t { font-weight: 600; display: block; }
.upcoming-row .what .k { color: var(--muted); font-size: 11.5px; }

/* ---------- UE / unités ---------- */
.units-grid {
  /* auto-fit (pas auto-fill) : avec peu d'UE, les cartes s'étirent sur la
     largeur au lieu de laisser des colonnes fantômes vides à droite. */
  display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 22px;
  /* start : sans quoi une carte repliée s'étire à la hauteur de sa rangée
     (ex. le formulaire « Créer une UE » voisin) → grande zone blanche. */
  align-items: start;
}
.unit-card {
  position: relative;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius-lg); box-shadow: var(--shadow);
  /* pas d'overflow:hidden : il rognait la popin d'édition de chapitre ;
     l'arrondi de l'en-tête coloré est porté par .unit-head. */
}
.unit-collapse > .unit-head { border-radius: calc(var(--radius-lg) - 1px) calc(var(--radius-lg) - 1px) 0 0; }
/* Repliée, la carte ne montre que la bande de titre : elle porte alors
   l'arrondi complet de la carte, y compris en bas. */
.unit-collapse:not([open]) > .unit-head { border-radius: calc(var(--radius-lg) - 1px); }
.unit-head {
  display: flex; align-items: center; gap: 12px;
  /* padding-right réservé : laisse la place à .unit-head-controls, posée
     par-dessus (elle ne peut pas vivre DANS <summary>, qui n'accepte que
     du phrasing content — pas de <details>/<form> imbriqués). */
  padding: 18px 124px 18px 20px;
  cursor: pointer; list-style: none;
}
.unit-head::-webkit-details-marker { display: none; }
.unit-head .code { font-family: var(--font-display); font-weight: 700; font-size: 15px; opacity: 0.75; }
.unit-head h2 { font-size: 19px; flex: 1; }
.unit-head .chip { background: rgba(253, 252, 248, 0.8); }
/* Contrôles de la bande de titre (édition UE, suppression UE, chevron) :
   hors du <summary> pour rester un HTML valide, mais superposés visuellement
   à droite de la bande grâce au positionnement absolu sur .unit-card.
   pointer-events: none sur l'overlay pour que les clics « à côté » (dont le
   chevron, simple indicateur) traversent jusqu'au <summary> et togglent la
   carte ; réactivé uniquement sur les vrais contrôles. */
.unit-head-controls {
  position: absolute; top: 16px; right: 20px;
  display: flex; align-items: center; gap: 12px; z-index: 2;
  pointer-events: none;
}
.unit-head-controls .row-edit,
.unit-head-controls > form { pointer-events: auto; }
/* La popin d'édition ouverte (.edit-pop, z-index:30) est piégée dans le
   contexte d'empilement de .unit-head-controls (position:absolute crée un
   nouveau contexte) : son z-index n'est comparé qu'aux autres enfants de ce
   contexte, pas à celui des cartes UE suivantes. Sans ceci, l'overlay d'une
   carte plus bas dans le DOM (même z-index:2) peint par-dessus la popin
   ouverte et vole ses clics (ex. « Supprimer l'UE » d'une autre carte). */
.unit-head-controls:has(.row-edit[open]) { z-index: 31; }
.unit-chevron { flex-shrink: 0; transition: transform 0.15s ease; }
.unit-card:has(.unit-collapse[open]) .unit-chevron { transform: rotate(180deg); }
.unit-body { padding: 6px 20px 20px; }
/* ~5 lignes de chapitre (padding 9px + ligne ~18px + bordure 1px chacune),
   pour que toutes les cartes UE s'alignent quel que soit le nombre réel de chapitres. */
.course-list { min-height: 190px; }
.course-more { margin-top: 4px; }
.course-more summary {
  cursor: pointer; list-style: none; padding: 8px 2px;
  font-size: 12.5px; font-weight: 600; color: var(--muted);
}
.course-more summary::-webkit-details-marker { display: none; }
.course-more summary::before { content: "▸ "; }
.course-more[open] summary::before { content: "▾ "; }
/* Libellé du groupe replié/déplié : « Voir… » fermé, « Masquer… » ouvert —
   sinon « Voir les N chapitres restants » reste affiché au milieu de la
   liste une fois les chapitres visibles. */
.course-more .more-open { display: none; }
.course-more[open] .more-open { display: inline; }
.course-more[open] .more-closed { display: none; }
/* Colonnes fixes pour aligner badge / vues / temps / édition sur toutes les lignes */
.unit-body .course-row {
  display: grid; grid-template-columns: minmax(0, 1fr) 96px 78px 68px 28px;
  gap: 10px 14px; align-items: center;
}
.unit-body .course-row .title { font-weight: 500; }
.unit-body .course-row .title-cell { display: flex; align-items: center; gap: 8px; min-width: 0; }
.unit-body .course-row .title-cell .title { flex: 1; min-width: 0; }
.unit-body .course-row .due-cell { justify-self: end; }
.unit-body .course-row .seen,
.unit-body .course-row .dur {
  color: var(--muted); font-size: 12.5px; white-space: nowrap;
  text-align: right; font-variant-numeric: tabular-nums;
}
.unit-body .course-row .row-edit { justify-self: center; }
.due-badge {
  font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;
  border-radius: 999px; padding: 2px 8px; background: var(--bg); color: var(--accent-dark);
  white-space: nowrap;
}

/* Édition inline (UE + chapitres) via <details> */
.row-edit { position: relative; }
.row-edit summary { list-style: none; cursor: pointer; }
.row-edit summary::-webkit-details-marker { display: none; }
.icon-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border-radius: 8px; font-size: 14px;
  background: rgba(253,252,248,0.65); color: var(--text);
}
.icon-btn:hover { background: var(--surface); }
.icon-btn-danger { background: rgba(253, 252, 248, 0.85); color: var(--accent-dark); border: none; cursor: pointer; }
.icon-btn-danger:hover { background: var(--accent-dark); color: #fff; }

/* Champ avec unité (« min ») */
.input-suffix { position: relative; display: inline-flex; align-items: center; }
.input-suffix input { padding-right: 42px; }
.input-suffix em {
  position: absolute; right: 14px; font-style: normal; font-size: 12px;
  color: var(--muted); pointer-events: none;
}
.draft-toggle { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--muted); margin-top: 6px; }
.edit-pop {
  position: absolute; right: 0; top: 34px; z-index: 30; width: 280px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 16px; box-shadow: 0 10px 30px rgba(31,30,28,0.18); padding: 14px;
  display: flex; flex-direction: column; gap: 8px;
}
.edit-pop label { display: block; margin-top: 4px; }
.edit-pop .hint { display: block; }
.edit-pop input[type="text"], .edit-pop input[type="number"], .edit-pop input[type="date"] { width: 100%; }
.edit-actions { display: flex; gap: 8px; margin-top: 8px; }
.edit-actions .btn { flex: 1; }
.edit-file { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 0; border-top: 1px solid var(--hairline); }
/* Boutons de suppression empilés : côte à côte, leurs libellés débordaient
   de la popin (280 px). */
.edit-danger { display: flex; flex-direction: column; gap: 8px; padding-top: 8px; border-top: 1px solid var(--hairline); }
.edit-danger form { display: flex; }
.edit-danger .btn { flex: 1; white-space: nowrap; }
.unit-body .course-row .row-edit { margin-left: 4px; }

.horaires-card { background: var(--jaune); }
.sched-grid {
  display: grid; grid-template-columns: 110px 1fr 1fr; gap: 8px 12px; align-items: center;
  background: rgba(253,252,248,0.5); border-radius: 16px; padding: 14px;
}
.sched-head { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text); opacity: 0.6; }
.sched-day { font-weight: 600; font-size: 14px; }
/* Zone d'ajout de chapitre : bloc contrasté qui se détache du corps de carte */
.add-course-zone {
  margin-top: 14px; padding: 14px;
  background: var(--surface-container); border-radius: 16px;
}
.acz-head { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text); opacity: 0.65; margin-bottom: 10px; }
.upload-form { display: grid; gap: 10px; }
.drop-zone {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  background: var(--surface);
  border: 2px dashed rgba(31, 30, 28, 0.35); border-radius: 16px;
  padding: 26px 14px; cursor: pointer; color: var(--text);
  text-transform: none; letter-spacing: 0; font-weight: 500;
  transition: border-color 0.15s, background 0.15s;
}
.drop-zone:hover, .drop-zone.dragover { border-color: var(--accent); color: var(--accent); }
.bulk-upload { margin-top: 10px; text-align: center; }
.bulk-link {
  display: inline-block; cursor: pointer; font-size: 13px; font-weight: 600;
  color: var(--text); text-transform: none; letter-spacing: 0;
  text-decoration: underline; text-underline-offset: 3px;
}
.bulk-link:hover { color: var(--accent); }
.drop-zone .dz-text { font-size: 13px; }
.drop-zone .dz-file { font-size: 12.5px; font-weight: 600; color: var(--green); }
.drop-zone .dz-file:empty { display: none; }
.btn-block { width: 100%; padding: 12px 18px; }

/* Page d'import en masse */
.bulk-form { max-width: 1200px; display: grid; gap: 10px; }
.bulk-grid-head, .bulk-row {
  display: grid; grid-template-columns: minmax(120px, 200px) minmax(220px, 2fr) 150px 150px 90px 110px;
  gap: 12px; align-items: center;
}
.bulk-row input { width: 100%; min-width: 0; }
.bulk-grid-head {
  padding: 0 16px; font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted);
}
.bulk-row {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 14px; padding: 12px 16px;
}
.bulk-file { font-size: 12.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bulk-actions { display: flex; gap: 10px; margin-top: 8px; }
@media (max-width: 760px) {
  .bulk-grid-head { display: none; }
  .bulk-row { grid-template-columns: 1fr 1fr; }
  .bulk-row .bulk-file, .bulk-row input[type="text"] { grid-column: 1 / -1; }
}
.resume-import {
  display: block; margin: 0 0 10px; padding: 10px 14px; border-radius: 12px;
  background: var(--jaune); color: var(--text); font-size: 13px; font-weight: 600;
  text-decoration: none;
}
.resume-import:hover { filter: brightness(0.97); }

.new-unit {
  border: 1.5px dashed rgba(31, 30, 28, 0.25); border-radius: var(--radius-lg);
  padding: 16px 20px; display: flex; flex-direction: column; gap: 10px; align-items: center;
  justify-content: center; text-align: center; background: transparent;
}
.new-unit h2 { font-size: 18px; }
.swatches { display: flex; gap: 10px; }
.swatches input { display: none; }
.swatches span {
  display: inline-block; width: 26px; height: 26px; border-radius: 50%;
  cursor: pointer; border: 2px solid transparent; transition: transform 0.1s;
}
.swatches input:checked + span { border-color: var(--text); transform: scale(1.12); }

/* ---------- Page cours ---------- */
.breadcrumb { font-size: 13px; color: var(--muted); margin-bottom: 10px; overflow-wrap: anywhere; }
.breadcrumb a { color: var(--muted); }
.breadcrumb a:hover { color: var(--text); }
.course-topline { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 22px; }
.course-topline > div:first-child { min-width: 0; flex: 1; }
.course-head { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; flex-wrap: wrap; }
.course-head h1 { font-size: 34px; overflow-wrap: anywhere; min-width: 0; }
.course-sub { color: var(--muted); font-size: 14px; }
.course-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }

.tabs { display: flex; gap: 8px; margin-bottom: 24px; overflow-x: auto; padding-bottom: 4px; }
.tab {
  padding: 8px 16px; font-size: 13.5px; font-weight: 600; color: var(--muted);
  border: 1px solid var(--hairline); background: var(--surface); cursor: pointer;
  border-radius: 999px; white-space: nowrap; font-family: var(--font-body);
}
.tab.active { background: var(--dark); color: var(--bg); border-color: var(--dark); }
.tab-pane { display: none; }
.tab-pane.active { display: block; }

.course-layout { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 28px; align-items: start; }
.course-side { display: flex; flex-direction: column; gap: 18px; position: sticky; top: 20px; }
.section-title { font-size: 18px; margin-bottom: 16px; }

/* Timeline verticale des J */
.j-timeline { display: flex; flex-direction: column; gap: 10px; }
.j-step {
  display: flex; align-items: center; gap: 14px;
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 18px; padding: 14px 18px;
}
.j-step.done { background: var(--surface); }
.j-step.today-step { border: none; box-shadow: var(--shadow); }
.j-step.future { opacity: 0.6; }
.j-step .step-mark {
  width: 30px; height: 30px; border-radius: 50%; flex-shrink: 0; border: none;
  display: inline-flex; align-items: center; justify-content: center; font-size: 14px;
}
.j-step .step-mark.done { background: var(--green); color: #fff; }
.j-step button.step-mark.done { cursor: pointer; }
.j-step button.step-mark.done:hover { background: var(--accent-dark); }
.j-step .step-mark.today { border: 2.5px solid var(--dark); background: rgba(253,252,248,0.6); }
.j-step .step-mark.future { background: transparent; color: var(--muted); font-size: 15px; }
.j-step .jchip { min-width: 46px; text-align: center; }
.j-step .stage { flex: 1; min-width: 0; }
.j-step .stage .name { font-weight: 600; font-size: 14.5px; display: block; }
.j-step .stage .when { font-size: 12.5px; color: var(--muted); }
.j-step.today-step .stage .when { color: var(--text); opacity: 0.7; }
.j-step .step-right { display: flex; align-items: center; gap: 10px; white-space: nowrap; }
.j-step .done-label { color: var(--green); font-weight: 600; font-size: 13.5px; }

/* Panneau Supports IA */
.support-panel { background: var(--surface); border: 1px solid var(--hairline); border-radius: var(--radius-lg); padding: 18px; }
.sp-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.sp-head h2 { font-size: 16px; }
.support-nav {
  display: flex; align-items: center; gap: 12px; padding: 11px 4px;
  border-bottom: 1px solid var(--hairline); cursor: pointer; width: 100%;
  background: none; border-left: none; border-right: none; border-top: none; text-align: left; font-family: var(--font-body);
}
.support-nav:last-child { border-bottom: none; }
.support-nav:hover { background: rgba(31,30,28,0.02); }
.support-nav .s-icon { font-size: 18px; width: 22px; text-align: center; flex-shrink: 0; }
.support-nav .s-body { flex: 1; min-width: 0; }
.support-nav .s-name { font-weight: 600; font-size: 13.5px; display: block; }
.support-nav .s-sub { font-size: 11.5px; color: var(--muted); }
.support-nav .s-action { font-size: 12px; font-weight: 600; color: var(--muted); }
.support-nav:hover .s-action { color: var(--text); }
.export-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding-top: 12px; margin-top: 6px; border-top: 1px solid var(--hairline); }
.export-row .export-label { font-size: 12px; font-weight: 600; color: var(--muted); flex: 1; min-width: 100%; }

/* Carte résumé (sombre) */
.summary-card { background: var(--dark); color: var(--bg); border-radius: var(--radius-lg); padding: 20px; }
.sc-head { font-weight: 700; font-size: 14px; margin-bottom: 10px; }
.sc-text { font-size: 13px; line-height: 1.6; color: rgba(253,252,248,0.72); margin-bottom: 12px; }
.sc-link { background: none; border: none; color: var(--peche); font-weight: 600; font-size: 13px; cursor: pointer; padding: 0; font-family: var(--font-body); }
.sc-link:hover { text-decoration: underline; }

/* Carte niveau de maîtrise */
.mastery-card { background: var(--menthe); border-radius: var(--radius-lg); padding: 20px; }
.mc-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; font-weight: 700; color: var(--text); opacity: 0.6; margin-bottom: 6px; }
.mc-value { font-family: var(--font-display); font-size: 22px; font-weight: 600; color: var(--green); margin-bottom: 12px; }
.mc-dots { display: flex; gap: 6px; }
.mc-dot { width: 14px; height: 14px; border-radius: 50%; background: rgba(31,30,28,0.15); }
.mc-dot.on { background: var(--green); }

/* ---------- Annotations dans le texte ---------- */
.annot-hint { color: var(--muted); font-size: 12px; margin-left: auto; }
.annot-layout { display: grid; grid-template-columns: minmax(0, 1fr) 260px; gap: 22px; align-items: start; }
.annot-layout.no-annotations { grid-template-columns: minmax(0, 1fr); }
.annot-layout.no-annotations .annot-panel { display: none; }
.prose.annotatable { cursor: text; }
mark.annot {
  background: rgba(243, 212, 101, 0.5); border-bottom: 2px solid var(--jaune);
  border-radius: 2px; cursor: pointer; padding: 0 1px;
}
mark.annot:hover { background: rgba(243, 212, 101, 0.8); }
mark.annot.resolved { background: rgba(191, 227, 192, 0.4); border-bottom-color: var(--menthe); }

.annot-panel { position: sticky; top: 20px; display: flex; flex-direction: column; gap: 8px; }
.annot-item {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 14px; padding: 11px 13px; font-size: 13px; cursor: pointer;
  transition: transform 0.12s ease;
}
.annot-item:hover { transform: scale(1.01); }
.annot-item.resolved { opacity: 0.6; }
.annot-item .annot-quote { font-size: 11.5px; color: var(--muted); margin-bottom: 4px; }
.annot-item .annot-body { font-weight: 500; }
.annot-item .annot-meta { font-size: 11px; color: var(--muted); margin-top: 4px; }

.annot-badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 17px; height: 17px; padding: 0 4px; border-radius: 999px;
  background: var(--accent); color: #fff; font-size: 10px; font-weight: 700; margin-left: 4px;
}

/* Popover flottant (composer / fil) */
.annot-pop {
  position: absolute; z-index: 60; width: 300px; max-width: calc(100vw - 16px);
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 16px; box-shadow: 0 10px 30px rgba(31,30,28,0.18); padding: 14px;
}
.annot-composer, .annot-thread { display: flex; flex-direction: column; gap: 10px; }
.ac-quote, .at-quote { font-size: 12px; color: var(--muted); border-left: 3px solid var(--jaune); padding-left: 8px; }
.annot-composer textarea { min-height: 68px; resize: vertical; }
.at-msg { font-size: 13px; display: flex; flex-direction: column; gap: 1px; }
.at-msg b { font-size: 11.5px; color: var(--muted); font-weight: 600; }
.at-reply input { width: 100%; }
.at-actions { display: flex; gap: 8px; justify-content: flex-end; }

@media (max-width: 900px) {
  .annot-layout { grid-template-columns: 1fr; }
  .annot-panel { position: static; }
}

.support-empty { text-align: center; padding: 40px 0; color: var(--muted); }
.support-error { background: var(--rose); border-radius: 14px; padding: 12px 16px; color: var(--accent-dark); font-size: 13px; margin-bottom: 12px; }
.support-meta { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; color: var(--muted); font-size: 12.5px; }
.support-generating { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 40px 20px; color: var(--muted); font-size: 14px; text-align: center; }
.gen-form button:disabled { opacity: .6; cursor: progress; }
.gen-blocked { display: inline-flex; align-items: center; gap: 8px; }
.gen-blocked button:disabled { opacity: .5; cursor: not-allowed; }
.gen-blocked-hint { font-size: 12px; color: var(--muted); }
.qcm-difficulty { padding: 5px 8px; font-size: 12.5px; border-radius: var(--radius-sm, 8px); border: 1px solid var(--hairline); background: var(--surface); color: var(--text); margin-right: 6px; }

.podcast-script { margin-top: 16px; border: 1px solid var(--hairline); border-radius: var(--radius); padding: 10px 14px; background: var(--surface); }
.podcast-script summary { cursor: pointer; font-size: 13px; font-weight: 600; color: var(--text); list-style: none; }
.podcast-script summary::-webkit-details-marker { display: none; }
.podcast-script summary::before { content: "▸ "; color: var(--muted); }
.podcast-script[open] summary::before { content: "▾ "; }
.podcast-script .script-lines { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
.podcast-script .script-line { margin: 0; font-size: 13.5px; line-height: 1.5; }
.podcast-script .script-line strong { color: var(--accent-dark, var(--dark)); }

.resource-changes { margin-bottom: 20px; border: 1px solid var(--hairline); border-radius: var(--radius); padding: 10px 14px; background: var(--surface); }
.resource-changes summary { cursor: pointer; font-weight: 600; font-size: 13px; list-style: none; }
.resource-changes summary::-webkit-details-marker { display: none; }
.diff-block { margin: 8px 0 14px; font-family: monospace; font-size: 12.5px; white-space: pre-wrap; }
.diff-line { padding: 1px 6px; border-radius: 4px; }
.diff-line.diff-insert { background: rgba(94, 158, 94, 0.18); }
.diff-line.diff-delete { background: rgba(201, 64, 31, 0.12); text-decoration: line-through; opacity: 0.75; }
.resource-list { display: flex; flex-direction: column; gap: 8px; margin-bottom: 20px; }
.resource-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 0; border-bottom: 1px solid var(--hairline); }
.resource-row .resource-title { font-weight: 500; flex: 1; min-width: 120px; }
.spinner { display: inline-block; width: 18px; height: 18px; border: 2.5px solid var(--rose, #e9d9f2); border-top-color: var(--accent, #7c5cbf); border-radius: 50%; animation: spin .7s linear infinite; flex: none; }
.spinner-sm { width: 13px; height: 13px; border-width: 2px; }
@keyframes spin { to { transform: rotate(360deg); } }

.prose { max-width: 760px; }
.prose h1, .prose h2, .prose h3 { margin: 18px 0 8px; }
.prose p, .prose ul, .prose ol { margin-bottom: 10px; }
.prose ul, .prose ol { padding-left: 22px; }
.prose code { background: var(--surface); border: 1px solid var(--hairline); border-radius: 6px; padding: 1px 5px; font-size: 13px; }

/* Flashcards */
.flash-wrap { max-width: 760px; margin: 0 auto; text-align: center; }
.flashcard {
  min-height: 300px; background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius); box-shadow: var(--shadow);
  display: flex; align-items: center; justify-content: center; padding: 36px;
  font-size: 20px; line-height: 1.5; cursor: pointer; user-select: none; position: relative;
}
.flashcard .side-label {
  position: absolute; top: 12px; left: 16px; font-size: 11px; text-transform: uppercase;
  letter-spacing: 0.8px; color: var(--muted);
}
.flashcard.back { background: var(--lavande); }
.flash-explain-wrap { text-align: center; margin-top: 10px; }
.flash-explain {
  max-width: 760px; margin: 12px auto 0; padding: 20px 24px; text-align: left;
  background: var(--surface); border: 1px solid var(--hairline); border-radius: 12px;
  font-size: 17px; line-height: 1.7;
}
.flash-explain-title {
  display: block; font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.8px; color: var(--muted); margin-bottom: 10px;
}
.flash-explain p { margin: 0 0 10px; }
.flash-explain p:last-child { margin-bottom: 0; }
/* Puce d'une liste Markdown : retrait suspendu pour des retours à la ligne propres. */
.flash-explain .fe-li { padding-left: 20px; text-indent: -14px; }

.flash-controls { display: flex; justify-content: center; gap: 10px; margin-top: 14px; align-items: center; }
.flash-counter { color: var(--muted); font-size: 13px; min-width: 64px; font-variant-numeric: tabular-nums; }

/* QCM */
.qcm-q { max-width: 680px; margin-bottom: 26px; }
.qcm-q h3 { font-size: 15px; margin-bottom: 4px; }
.qcm-multi-badge {
  display: inline-block; font-size: 11.5px; font-weight: 600; color: var(--accent-dark, var(--dark));
  background: var(--rose); border-radius: 999px; padding: 2px 10px; margin-bottom: 10px;
}
.qcm-opt {
  display: block; width: 100%; text-align: left; padding: 11px 16px; margin-bottom: 8px;
  border: 1px solid var(--hairline); border-radius: 14px; background: var(--surface);
  font-size: 14px; cursor: pointer; font-family: var(--font-body);
}
.qcm-opt:hover { background: var(--bg); }
.qcm-opt.selected { border-color: var(--dark); background: var(--bg); font-weight: 600; }
.qcm-opt.correct { border-color: var(--green); background: var(--menthe); }
.qcm-opt.wrong { border-color: var(--accent-dark); background: var(--rose); }
.qcm-validate { margin-bottom: 8px; }
.qcm-explain { font-size: 13px; color: var(--muted); padding: 8px 2px; display: none; }
.qcm-explain.shown { display: block; }
.qcm-score { font-weight: 600; margin-bottom: 18px; font-variant-numeric: tabular-nums; }
.qcm-start { max-width: 680px; padding: 22px 0; }
.qcm-start-info { margin-bottom: 10px; color: var(--muted); }
.qcm-start .hint { display: block; margin-bottom: 10px; }
.qcm-header {
  display: flex; align-items: center; gap: 16px; max-width: 680px;
  position: sticky; top: 0; z-index: 5; background: var(--bg);
  padding: 8px 0; margin-bottom: 10px;
}
.qcm-timer { font-weight: 700; font-variant-numeric: tabular-nums; }
.qcm-progress { font-size: 13px; font-variant-numeric: tabular-nums; }
.qcm-footer { max-width: 680px; margin: 8px 0 18px; }
.qcm-history { max-width: 680px; margin-top: 26px; }
.qcm-history-row {
  display: flex; align-items: center; gap: 16px; padding: 7px 0;
  border-bottom: 1px solid var(--hairline); font-size: 13.5px;
  font-variant-numeric: tabular-nums;
}
.qcm-history-score { font-weight: 700; }
/* Page QCM multi-chapitres : sélection des chapitres groupés par UE */
/* Cartes d'UE en grille fluide (comme .units-grid) : la sélection profite de
   toute la largeur ; la barre d'actions occupe sa propre rangée complète. */
.qcm-setup { display: grid; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); gap: 14px; align-items: start; }
.qcm-setup > p { grid-column: 1 / -1; }
.qcm-setup-actions { grid-column: 1 / -1; }
.qcm-unit {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 16px; padding: 12px 16px;
}
.qcm-unit-head {
  display: flex; align-items: center; gap: 8px; cursor: pointer;
  padding-bottom: 8px; border-bottom: 1px solid var(--hairline); margin-bottom: 4px;
}
.qcm-course {
  display: flex; align-items: center; gap: 8px; cursor: pointer;
  padding: 7px 0; font-size: 14px;
}
.qcm-course + .qcm-course { border-top: 1px solid var(--hairline); }
.qcm-course .qcm-course-title { flex: 1; }
.qcm-course .muted { font-size: 12.5px; white-space: nowrap; }
.qcm-course-off { opacity: 0.55; cursor: not-allowed; }
.qcm-setup-actions { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.qcm-count-label { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; }
.qcm-end-actions { display: flex; gap: 10px; margin-top: 8px; }
/* Sous-titre d'une question : le chapitre dont elle vient (multi-chapitres). */
.qcm-q-src { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }

/* Mermaid mindmap (interactif) */
.mindmap-box {
  position: relative; background: var(--surface); border: 1px solid var(--hairline);
  border-radius: var(--radius); height: 460px; overflow: hidden;
}
.mm-viewport { width: 100%; height: 100%; overflow: hidden; cursor: grab; }
.mm-viewport.grabbing { cursor: grabbing; }
.mm-viewport svg { display: block; width: 100%; height: 100%; }
.mm-tools { position: absolute; top: 12px; right: 12px; z-index: 5; display: flex; gap: 6px; }
.mm-btn {
  width: 34px; height: 34px; border-radius: 10px; border: 1px solid var(--hairline);
  background: var(--surface); color: var(--text); font-size: 16px; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; box-shadow: var(--shadow);
}
.mm-btn:hover { background: var(--bg); }
.mindmap-box:fullscreen { height: 100vh; border-radius: 0; background: var(--bg); }
.mindmap-box:fullscreen .mm-viewport { height: 100vh; }
/* En plein écran, la bannière du navigateur (« Échap pour quitter ») couvre
   le haut : les contrôles descendent en bas à droite. */
.mindmap-box:fullscreen .mm-tools { top: auto; bottom: 16px; }

audio { width: 100%; max-width: 520px; }

.gen-form { display: inline; }

/* ---------- Paramètres ---------- */
.settings-layout { display: grid; grid-template-columns: 200px minmax(0, 1fr); gap: 28px; align-items: start; max-width: 1100px; }
.settings-nav { display: flex; flex-direction: column; gap: 4px; position: sticky; top: 20px; }
.settings-nav a { padding: 10px 16px; border-radius: 999px; color: var(--muted); font-weight: 600; font-size: 14px; }
.settings-nav a:hover { color: var(--text); }
.settings-nav a.active { background: var(--dark); color: var(--bg); }
.settings-content { display: flex; flex-direction: column; gap: 20px; }
.settings-card { border-radius: var(--radius-lg); padding: 24px; }
.settings-card h2 { font-size: 17px; margin-bottom: 16px; }

.profil-card { background: var(--lavande); }
.profil-top { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; }
.profil-avatar { width: 60px; height: 60px; border-radius: 50%; font-size: 24px; flex-shrink: 0; object-fit: cover; }
.profil-id { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.profil-name { font-family: var(--font-display); font-weight: 600; font-size: 20px; background: transparent; border: 1px solid transparent; border-radius: 10px; padding: 2px 8px; margin: -2px -8px; }
.profil-name:hover, .profil-name:focus { border-color: rgba(31,30,28,0.15); background: rgba(253,252,248,0.4); }
.profil-school { font-size: 13px; color: var(--text); opacity: 0.75; background: transparent; border: 1px solid transparent; border-radius: 10px; padding: 2px 8px; margin: -2px -8px; }
.profil-school:hover, .profil-school:focus { border-color: rgba(31,30,28,0.15); background: rgba(253,252,248,0.4); opacity: 1; }
.profil-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.profil-fields .field { background: rgba(253,252,248,0.55); border-radius: 14px; padding: 10px 14px; }
.profil-fields label { display: block; margin-bottom: 4px; }
.field-static { font-size: 14px; }
.field-prefixed { display: flex; align-items: center; gap: 2px; font-size: 14px; }
.field-prefixed input { border: none; background: transparent; padding: 0; border-radius: 0; }
.field-prefixed input:focus { border: none; }

.notif-card { background: var(--menthe); }
.toggle-row { display: flex; align-items: center; gap: 14px; padding: 14px; background: rgba(253,252,248,0.5); border-radius: 16px; margin-bottom: 10px; cursor: pointer; }
.toggle-row:last-child { margin-bottom: 0; }
.toggle-row .tr-body { flex: 1; }
.toggle-row .tr-title { font-weight: 600; font-size: 14px; display: block; }
.toggle-row .tr-sub { font-size: 12.5px; color: var(--text); opacity: 0.65; }
.toggle-row input { display: none; }
.toggle {
  width: 44px; height: 26px; border-radius: 999px; background: rgba(31,30,28,0.2);
  position: relative; flex-shrink: 0; transition: background 0.15s;
}
.toggle::after { content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: #fff; transition: transform 0.15s; }
.toggle-row input:checked ~ .toggle { background: var(--accent); }
.toggle-row input:checked ~ .toggle::after { transform: translateX(18px); }

.contrib-card { background: var(--peche); }
.contrib-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.contrib-row { display: flex; align-items: center; gap: 12px; background: rgba(253,252,248,0.6); border-radius: 14px; padding: 12px 14px; }
.contrib-who { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.contrib-who .contrib-name { font-weight: 600; font-size: 14px; }
.contrib-who .contrib-email { font-size: 12px; color: var(--muted); }
.contrib-invite { display: flex; gap: 10px; }

.compte-card { background: var(--surface); border: 1px solid var(--hairline); }
.compte-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 18px; }
.compte-item { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border: 1px solid var(--hairline); border-radius: 16px; }
a.compte-item:hover { background: var(--bg); }
.compte-item .ci-body { flex: 1; }
.compte-item .ci-title { font-weight: 600; font-size: 14px; display: block; }
.compte-item .ci-sub { font-size: 12px; color: var(--muted); }
.compte-item .ci-icon { color: var(--muted); }
.compte-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding-top: 14px; border-top: 1px solid var(--hairline); }
.settings-footer { text-align: center; color: var(--muted); font-size: 12px; margin-top: 6px; }

/* ---------- Nav mobile (barre du bas) ---------- */
.bottom-nav { display: none; }

@media (max-width: 980px) {
  .board { grid-template-columns: 1fr; }
  .settings-layout { grid-template-columns: 1fr; }
  .settings-nav { flex-direction: row; position: static; overflow-x: auto; }
  .profil-fields, .compte-grid { grid-template-columns: 1fr; }
  /* Mobile : pas d'axe horaire, jours empilés (piste horaire conservée) */
  .cal-timeaxis { display: none; }
  .cal-grid { flex-direction: column; }
  .cal-day.today { flex: 1; }
  .event-layout { grid-template-columns: 1fr; }
  .units-grid { grid-template-columns: 1fr; }
  .course-layout { grid-template-columns: 1fr; }
  .course-side { position: static; }
  .hero-date { font-size: 36px; }
}

/* ---------- Mobile ---------- */
@media (max-width: 640px) {
  .container { padding: 20px 16px 96px; }  /* place pour la barre du bas */

  /* Topbar : logo + avatar seulement ; la nav passe en bas */
  .topbar-inner { gap: 10px; padding: 12px 16px; }
  .brand { font-size: 17px; }
  .topbar nav { display: none; }
  .topbar-user .settings-link { display: none; }  /* Réglages est dans la barre du bas */
  .topbar-user { margin-left: auto; }

  /* Barre de navigation fixe en bas (icône + label, actif corail) */
  .bottom-nav {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
    background: var(--surface); border-top: 1px solid var(--hairline);
    padding: 8px 4px calc(8px + env(safe-area-inset-bottom));
  }
  .bottom-nav a {
    flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
    color: var(--muted); font-size: 10.5px; font-weight: 600;
  }
  .bottom-nav a.active { color: var(--accent); }

  .page-head { gap: 8px; }
  .page-head h1 { font-size: 26px; }
  .hero-date { font-size: 48px; }  /* display-xl-mobile */
  .hero-time { font-size: 32px; }

  /* Board : cartes de révision compactes */
  .rev-card { gap: 10px; padding: 14px; }
  .rev-chipcol { min-width: 58px; }
  .rev-body .title { font-size: 17px; }
  .rev-meta { gap: 8px; }

  /* Calendrier : nav qui passe à la ligne */
  .cal-nav { flex-wrap: wrap; margin-left: 0; }

  /* Cours : actions et onglets pleine largeur */
  .course-topline { gap: 14px; }
  .course-head h1 { font-size: 28px; }
  .course-actions { width: 100%; }
  .course-actions .btn, .course-actions > form { flex: 1; }
  .course-actions > form .btn { width: 100%; }

  /* Paramètres : profil et compte empilés */
  .profil-top { flex-wrap: wrap; }
  .profil-id { flex-basis: 100%; order: 3; }
  .compte-actions { flex-direction: column; align-items: stretch; }
  .compte-actions .btn, .compte-actions form, .compte-actions form .btn { width: 100%; }

  /* Événement : formulaire pleine largeur */
  .kind-chips label span { padding: 8px 14px; }
}

/* ===== Console d'administration ===== */
.console h1 { margin-bottom: 4px; }
.console-tabs { display: flex; gap: 4px; margin: 16px 0 24px; border-bottom: 2px solid #e5e0d8; flex-wrap: wrap; }
.console-tabs a { padding: 8px 14px; border-radius: 8px 8px 0 0; text-decoration: none; color: inherit; font-weight: 500; }
.console-tabs a.active { background: #f4f1ea; font-weight: 700; }
.console-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
.console-stat { background: #fff; border: 1px solid #e5e0d8; border-radius: 12px; padding: 16px; display: flex; flex-direction: column; gap: 4px; }
.console-stat .value { font-size: 28px; font-weight: 700; }
.console-stat .label { font-size: 13px; color: #6b675f; }
.console-stat .sub { font-size: 12px; color: #9b968c; }
.console-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.console-table th, .console-table td { text-align: left; padding: 8px 10px; border-bottom: 1px solid #eee9e0; vertical-align: top; }
.console-search { margin-bottom: 16px; display: flex; gap: 8px; }
.console-search input { padding: 8px 12px; border: 1px solid #e5e0d8; border-radius: 8px; min-width: 240px; }
.badge-profile { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.badge-student { background: #bfe3c0; }
.badge-contributor { background: #c9c0ee; }
.badge-status-error { background: #f5c6d0; }
.badge-status-queued { background: #f3d465; }
.badge-status-pending { background: #f6c39b; }
.console-danger { color: #b3261e; }
.console-actions { display: flex; gap: 8px; margin-top: 16px; }

/* ===== Pages d'erreur (403 / 404 / 500) — écrans Stitch « pastel » ===== */
.error-page {
  position: relative; min-height: calc(100vh - 48px); display: flex; flex-direction: column;
  align-items: center; justify-content: center; text-align: center; gap: 20px;
  padding: 32px 24px; overflow: hidden;
}
.error-blob {
  position: absolute; width: 380px; height: 380px; border-radius: 50%;
  filter: blur(90px); opacity: 0.45; pointer-events: none;
}
.error-blob-a { top: -120px; left: -120px; background: var(--rose); }
.error-blob-b { bottom: -120px; right: -120px; background: var(--menthe); }
.error-brand {
  position: absolute; top: 24px; left: 50%; transform: translateX(-50%);
  font-family: var(--font-display); font-weight: 700; font-size: 20px; color: var(--accent);
}
.error-brand span { color: var(--text); }
.error-visual { position: relative; z-index: 1; animation: error-float 3s ease-in-out infinite; }
@keyframes error-float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-15px) rotate(2deg); }
}
.error-circle {
  width: 180px; height: 180px; border-radius: 50%; display: flex; align-items: center;
  justify-content: center; color: var(--text); border: 1px solid var(--hairline);
  box-shadow: var(--shadow);
}
.error-badge {
  position: absolute; bottom: -8px; right: -16px; background: var(--accent); color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 28px;
  padding: 4px 14px; border-radius: var(--r-chip); transform: rotate(-12deg);
  border: 2px solid var(--surface);
}
.error-title {
  position: relative; z-index: 1; font-family: var(--font-display); font-weight: 700;
  font-size: clamp(32px, 6vw, 56px); letter-spacing: -0.02em; color: var(--accent-dark);
}
.error-message { position: relative; z-index: 1; font-size: 18px; color: var(--muted); max-width: 480px; }
.error-actions { position: relative; z-index: 1; display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; margin-top: 8px; }
.error-btn-primary {
  display: inline-flex; align-items: center; gap: 8px; background: var(--accent); color: #fff;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; border: none; cursor: pointer;
  padding: 14px 28px; border-radius: 999px; text-decoration: none; box-shadow: var(--shadow);
  transition: transform 0.15s ease, background 0.15s ease;
}
.error-btn-primary:hover { transform: scale(1.03); background: var(--accent-dark); }
.error-btn-secondary {
  display: inline-flex; align-items: center; padding: 14px 24px; border-radius: 999px;
  color: var(--muted); text-decoration: none; transition: background 0.15s ease;
}
.error-btn-secondary:hover { background: var(--surface-container); }
.error-hint {
  position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 8px;
  background: rgba(191, 227, 192, 0.25); border: 1px solid rgba(191, 227, 192, 0.5);
  color: var(--text); font-size: 14px; padding: 12px 18px; border-radius: var(--radius);
  max-width: 420px; margin-top: 4px;
}
.error-hint svg { color: var(--green); flex-shrink: 0; }
.error-footer {
  position: absolute; bottom: 20px; left: 0; right: 0; font-size: 11px;
  letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); opacity: 0.6;
}

/* ---------- Landing page publique ---------- */
.landing-nav {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; padding: 6px 0 26px;
}
.landing-nav-actions { display: flex; align-items: center; gap: 10px; }
.landing-hero {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 56px; align-items: center; padding: 44px 0 72px;
}
.landing-badge {
  display: inline-flex; align-items: center; gap: 6px; width: fit-content;
  background: rgba(191, 227, 192, 0.4); border: 1px solid rgba(191, 227, 192, 0.8);
  color: var(--green); border-radius: 999px; padding: 4px 14px;
  font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
}
.landing-hero-copy { display: flex; flex-direction: column; gap: 22px; }
.landing-hero-copy h1 {
  font-size: clamp(38px, 4.5vw, 64px); line-height: 1.08; letter-spacing: -0.02em;
}
.landing-hero-copy h1 em { color: var(--accent); }
.landing-lede { font-size: 18px; line-height: 1.6; color: var(--muted); max-width: 560px; }
.landing-cta-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.landing-cta { padding: 14px 32px; font-size: 17px; }
.landing-trust { color: var(--muted); font-size: 13.5px; }

/* Maquette stylisée de l'application (illustration) */
.landing-mock {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 28px; padding: 18px; box-shadow: 0 24px 60px rgba(31, 30, 28, 0.1);
}
.lm-titlebar { display: flex; gap: 7px; padding: 4px 6px 14px; }
.lm-titlebar span { width: 11px; height: 11px; border-radius: 50%; background: var(--surface-container); }
.lm-titlebar span:first-child { background: var(--rose); }
.lm-titlebar span:nth-child(2) { background: var(--jaune); }
.lm-titlebar span:nth-child(3) { background: var(--menthe); }
.lm-body { display: grid; grid-template-columns: 1fr 3fr; gap: 14px; height: 340px; }
.lm-side { background: var(--surface-container); border-radius: 14px; padding: 12px; display: flex; flex-direction: column; gap: 10px; }
.lm-line { height: 8px; border-radius: 999px; background: rgba(31, 30, 28, 0.16); }
.lm-line.soft { opacity: 0.45; }
.lm-line.w50 { width: 50%; } .lm-line.w60 { width: 60%; } .lm-line.w75 { width: 75%; }
.lm-pill { height: 30px; border-radius: 10px; background: rgba(31, 30, 28, 0.1); }
.lm-pill.ghost { background: transparent; border: 1px dashed var(--hairline); }
.lm-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.lm-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.lm-card { height: 104px; border-radius: 18px; padding: 14px; display: flex; flex-direction: column; justify-content: flex-end; gap: 8px; }
.lm-card.lav { background: rgba(201, 192, 238, 0.35); }
.lm-card.pec { background: rgba(246, 195, 155, 0.35); }
.lm-card .lm-line { background: rgba(31, 30, 28, 0.22); }
.lm-chart {
  flex: 1; background: var(--surface-container); border-radius: 18px;
  display: flex; align-items: flex-end; gap: 10px; padding: 18px;
}
.lm-bar { flex: 1; border-radius: 8px 8px 0 0; background: rgba(232, 93, 61, 0.25); }
.lm-bar.strong { background: rgba(232, 93, 61, 0.55); }

/* Bandeaux */
.landing-features {
  background: var(--surface-container); border-radius: var(--radius-lg);
  padding: 64px 48px; margin: 24px 0;
}
.landing-section-head { text-align: center; max-width: 720px; margin: 0 auto 44px; }
.landing-section-head h2 { font-size: 32px; margin-bottom: 12px; }
.landing-section-head p { color: var(--muted); font-size: 17px; line-height: 1.6; }
.landing-feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 22px; }
.landing-feature {
  background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 24px; padding: 28px; box-shadow: var(--shadow);
}
.lf-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 52px; height: 52px; border-radius: 16px; font-size: 26px; margin-bottom: 16px;
}
.landing-feature h3 { font-size: 18px; margin-bottom: 10px; }
.landing-feature p { color: var(--muted); font-size: 14.5px; line-height: 1.6; }

.landing-cta-band {
  background: var(--dark); color: var(--bg); border-radius: var(--radius-lg);
  padding: 56px 48px; margin: 40px 0;
  display: flex; align-items: center; justify-content: space-between; gap: 40px; flex-wrap: wrap;
}
.lcb-copy { max-width: 640px; }
.lcb-copy h2 { font-size: 30px; margin-bottom: 12px; color: var(--bg); }
.lcb-copy p { color: rgba(252, 249, 241, 0.75); font-size: 16.5px; line-height: 1.6; }
.lcb-action { text-align: center; }
.lcb-hint { color: rgba(252, 249, 241, 0.6); font-size: 12.5px; font-style: italic; margin-top: 12px; }

.landing-stats { display: grid; grid-template-columns: 2fr 1fr; gap: 22px; margin: 24px 0 40px; }
.landing-stat { border-radius: 28px; padding: 36px; display: flex; flex-direction: column; gap: 10px; }
.landing-stat.sage { background: rgba(191, 227, 192, 0.3); border: 1px solid rgba(191, 227, 192, 0.6); }
.landing-stat.lav { background: rgba(201, 192, 238, 0.25); border: 1px solid rgba(201, 192, 238, 0.55); }
.ls-value { font-family: var(--font-display); font-size: 56px; font-weight: 700; color: var(--accent); }
.landing-stat.lav .ls-value { color: var(--ink-navy); }
.landing-stat p { font-size: 17px; font-weight: 600; max-width: 380px; }

.landing-footer {
  background: var(--surface-container); border-radius: var(--radius-lg);
  padding: 44px 48px 24px; margin-bottom: 24px;
}
.lf-top { display: flex; justify-content: space-between; gap: 44px; flex-wrap: wrap; }
.lf-brand { max-width: 320px; display: flex; flex-direction: column; gap: 14px; }
.lf-brand p { color: var(--muted); font-size: 13.5px; line-height: 1.6; }
.lf-cols { display: flex; gap: 56px; flex-wrap: wrap; }
.lf-cols h4 { font-size: 14px; margin-bottom: 12px; }
.lf-cols a { display: block; color: var(--muted); font-size: 13.5px; padding: 3px 0; }
.lf-cols a:hover { color: var(--accent); }
.lf-bottom {
  border-top: 1px solid var(--hairline); margin-top: 36px; padding-top: 18px;
  color: var(--muted); font-size: 13px;
}

@media (max-width: 900px) {
  .landing-hero { grid-template-columns: 1fr; padding-top: 16px; gap: 36px; }
  .landing-features, .landing-cta-band, .landing-footer { padding-left: 24px; padding-right: 24px; }
  .landing-stats { grid-template-columns: 1fr; }
}

/* Landing : lien texte de la nav + section tarifs */
.landing-nav-link { color: var(--muted); font-weight: 500; font-size: 14px; padding: 7px 10px; }
.landing-nav-link:hover { color: var(--text); }
.landing-pricing {
  background: var(--surface-container); border-radius: var(--radius-lg);
  padding: 64px 48px; margin: 24px 0 40px; scroll-margin-top: 24px;
}
.landing-plan-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 22px; }
.landing-plan {
  position: relative; background: var(--surface); border: 1px solid var(--hairline);
  border-radius: 24px; padding: 28px; box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 14px;
}
.landing-plan.lp-featured { border: 2px solid var(--accent); }
.lp-badge {
  position: absolute; top: -12px; left: 50%; transform: translateX(-50%);
  background: var(--accent); color: #fff; border-radius: 999px; padding: 3px 12px;
  font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
}
.landing-plan h3 { font-size: 18px; }
.lp-price { display: flex; align-items: baseline; gap: 4px; }
.lp-amount { font-family: var(--font-display); font-size: 32px; font-weight: 700; color: var(--accent); }
.lp-period { color: var(--muted); font-size: 13px; }
.landing-plan ul { list-style: none; flex: 1; display: flex; flex-direction: column; gap: 10px; }
.landing-plan li {
  color: var(--muted); font-size: 14px; line-height: 1.5;
  padding-left: 24px; position: relative;
}
.landing-plan li::before { content: "✓"; position: absolute; left: 0; color: var(--accent); font-weight: 700; }
.lp-btn { width: 100%; }
@media (max-width: 900px) {
  .landing-pricing { padding-left: 24px; padding-right: 24px; }
}
