/*
 * Espace connecté — direction TRAME (26 septembre 2026, docs/redesign-trame/suivi.md ; auparavant P29) : barre
 * marine (marque, sections du dossier, navigation de l'espace), barre de contexte blanche (fil d'Ariane, identité),
 * contenu centré jusqu'à 1280 px, en-tête de page et repères d'étapes du dossier, puis les écrans métier.
 * Les contrôles de droits restent côté serveur : un lien absent du menu n'est jamais une autorisation.
 */

/* ---- Enveloppe (navigation « Mes dossiers » V2, 26 septembre 2026) ------------------------------------------ */
/* En haut la navigation générale (bandeau marine compact), à gauche le menu du dossier ouvert, au centre le contenu.
   Plus de seconde bande pour l'identité et la déconnexion : elles sont dans le menu profil. */

.app { display: flex; flex-direction: column; min-height: 100vh; background: var(--ln-soft); }

/* Bandeau marine. L'anneau de focus y passe au bleu clair : le cobalt sur le marine ne se verrait pas (2,2:1). */
.appbar { --ln-focus: var(--ln-navy-mark); background: var(--ln-navy); color: #fff; position: relative; z-index: 30; }
.appbar__inner { max-width: 1440px; margin: 0 auto; display: flex; align-items: center; gap: var(--sp-4) var(--sp-6); padding: 12px 25px; min-height: 65px; }
.appbar__brand { flex: none; display: inline-flex; align-items: center; }
.appbar__brand .brand__logo { width: 112px; height: auto; display: block; }
.appbar__toggle { display: none; }
.appbar__panel { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--sp-4); }
.appbar__panel > .group-nav { flex: 1; justify-content: center; }
.appbar__panel > .appnav { margin-left: auto; }

.group-nav { display: flex; align-items: center; min-width: 0; }
.group-tabs, .appnav__list { display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--sp-2); list-style: none; margin: 0; padding: 0; }
.group-tabs li, .appnav__list > li { margin: 0; position: relative; }
.group-tabs a, .appnav__link {
  display: inline-flex; align-items: center; gap: 7px; min-height: 40px; padding: 8px 10px; border-radius: var(--ln-radius-sm);
  color: var(--ln-navy-text); font-size: 13px; font-weight: 500; text-decoration: none; white-space: nowrap;
  background: transparent; border: 0; cursor: pointer; line-height: 1.3;
}
.group-tabs a:hover, .appnav__link:hover { background: var(--ln-navy-hover); color: #fff; }
.group-tabs a[aria-current="page"], .appnav__link[aria-current="page"], .appnav__group--current > summary { background: var(--ln-navy-active); color: #fff; }
.appnav__link--area { color: #fff; }
.appnav__link .ln-icon { width: 16px; height: 16px; }

.appnav__group > summary { list-style: none; }
.appnav__group > summary::-webkit-details-marker { display: none; }
.appnav__group > summary::after { content: ""; width: 7px; height: 7px; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: translateY(-2px) rotate(45deg); margin-left: 4px; }
.appnav__group[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
.appnav__menu, .profile-menu__panel {
  position: absolute; right: 0; top: calc(100% + 8px); min-width: 15rem; list-style: none; margin: 0; padding: var(--sp-2);
  background: var(--ln-page); border: 1px solid var(--ln-line); border-radius: var(--ln-radius); box-shadow: 0 12px 28px rgba(20, 43, 71, 0.16);
  --ln-focus: var(--ln-accent); color: var(--ln-ink); z-index: 40;
}
.appnav__menu li { margin: 0; }
.appnav__menu a, .profile-menu__links a { display: block; padding: 9px 12px; border-radius: var(--ln-radius-sm); color: var(--ln-ink); text-decoration: none; font-size: var(--ln-text-sm); }
.appnav__menu a:hover, .profile-menu__links a:hover { background: var(--ln-soft); color: var(--ln-accent-strong); }
.appnav__menu a[aria-current="page"], .profile-menu__links a[aria-current="page"] { background: var(--ln-sky); color: var(--ln-accent); font-weight: 500; }

/* Menu profil : l'avatar ouvre l'identité, Mon compte, la sécurité et la déconnexion. */
.profile-menu { position: relative; flex: none; margin-left: var(--sp-2); }
.profile-menu > summary { list-style: none; cursor: pointer; display: flex; align-items: center; min-height: 44px; }
.profile-menu > summary::-webkit-details-marker { display: none; }
.profile-menu__avatar { width: 34px; height: 34px; border-radius: 50%; border: 1px solid #36516e; background: #254264; color: var(--ln-sky); display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; }
.profile-menu[open] .profile-menu__avatar, .profile-menu > summary:hover .profile-menu__avatar { border-color: var(--ln-navy-mark); }
.profile-menu__panel { min-width: 16rem; }
.profile-menu__identity { margin: 0; padding: 8px 12px 12px; border-bottom: 1px solid var(--ln-line); display: grid; gap: 2px; font-size: var(--ln-text-sm); color: var(--ln-muted); overflow-wrap: anywhere; }
.profile-menu__identity strong { color: var(--ln-ink); font-weight: 600; }
.profile-menu__links { list-style: none; margin: 8px 0; padding: 0; }
.profile-menu__links li { margin: 0; }
.profile-menu__narrow { display: none; }
.profile-menu__form { margin: 0; padding-top: 8px; border-top: 1px solid var(--ln-line); }
.profile-menu__signout { width: 100%; text-align: left; padding: 9px 12px; border: 0; border-radius: var(--ln-radius-sm); background: transparent; color: var(--ln-accent); font: inherit; font-size: var(--ln-text-sm); font-weight: 600; cursor: pointer; }
.profile-menu__signout:hover { background: var(--ln-soft); }

/* Corps : menu du dossier à gauche (dans un dossier seulement), contenu à droite. */
.app__body { flex: 1; display: flex; align-items: stretch; min-width: 0; }
.app__main { min-width: 0; display: flex; flex-direction: column; flex: 1; }
.workspace { width: 100%; max-width: 1280px; margin: 0 auto; padding: 30px 42px 64px; flex: 1; }
.app--dossier .workspace { max-width: 1100px; padding: 30px 36px 64px; }
.workspace--wide { max-width: none; }

/* Menu du dossier : clair, 240 px, collant sur ordinateur avec défilement propre (une fenêtre peu haute garde tout). */
.dossier-side {
  flex: 0 0 240px; width: 240px; background: var(--ln-page); border-right: 1px solid #e5eaf0; color: #41566c;
  padding: 22px 13px 18px; display: flex; flex-direction: column;
  position: sticky; top: 0; align-self: flex-start; max-height: 100vh; overflow-y: auto;
}
/* La colonne blanche file jusqu'en bas même quand le menu, collant, est plus court que la page. */
.app--dossier .app__body { background: linear-gradient(90deg, var(--ln-page) 0 239px, #e5eaf0 239px 240px, transparent 240px); }
.dossier-side__back { display: inline-flex; align-items: center; gap: 7px; padding: 4px 10px 15px; color: #667b91; font-size: 12px; text-decoration: none; }
.dossier-side__back:hover { color: var(--ln-accent); text-decoration: underline; }
.dossier-side__back .ln-icon { width: 13px; height: 13px; }
.dossier-side__context { padding: 0 10px 20px; margin-bottom: 18px; border-bottom: 1px solid #e5eaf0; }
.dossier-side__eyebrow { margin: 0; font-size: 10px; font-weight: 600; letter-spacing: 1.1px; text-transform: uppercase; color: #667b91; }
.dossier-side__name { margin: 7px 0 10px; font-size: 16px; font-weight: 600; line-height: 1.4; letter-spacing: -0.3px; color: var(--ln-ink); overflow-wrap: anywhere; }
.dossier-side__trigger { display: none; }
.dossier-side__label { margin: 1px 0 7px; padding: 0 11px; font-size: 10px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; color: #667b91; }
.dossier-side__label + .dossier-side__list + .dossier-side__label { border-top: 1px solid #e5eaf0; padding-top: 18px; margin-top: 18px; }
.dossier-side__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; }
.dossier-side__list li { margin: 0; }
.dossier-side__list a {
  display: flex; align-items: center; gap: 10px; padding: 10px; border: 1px solid transparent; border-radius: var(--ln-radius-sm);
  color: #41566c; font-size: 13px; font-weight: 500; line-height: 1.45; text-decoration: none;
}
.dossier-side__list a:hover { background: var(--ln-sky); color: var(--ln-ink); }
.dossier-side__list a[aria-current="page"] { background: var(--ln-sky); color: var(--ln-accent); border-left: 3px solid var(--ln-accent); padding-left: 8px; }
.dossier-side__list .ln-icon { width: 17px; height: 17px; }
.dossier-side__next { margin-top: auto; padding-top: 28px; }
.dossier-side__suite { display: flex; align-items: center; justify-content: space-between; gap: 9px; padding: 12px; border: 1px solid #e5eaf0; border-radius: var(--ln-radius-sm); background: var(--ln-page); color: #41566c; font-size: 13px; font-weight: 500; text-decoration: none; }
.dossier-side__suite:hover, .dossier-side__suite[aria-current="page"] { border-color: var(--ln-accent); color: var(--ln-accent); }
.dossier-side__suite .ln-icon { width: 15px; height: 15px; }

/* Fil court « Votre dossier / rubrique » (et fil des écrans du propriétaire). */
.local-context { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin: 0 0 22px; font-size: 13px; color: var(--ln-muted); }
.local-context a { color: var(--ln-muted); text-decoration: none; }
.local-context a:hover { color: var(--ln-accent); text-decoration: underline; }
.local-context [aria-current="page"] { color: var(--ln-ink); }
.local-context .ln-icon { width: 14px; height: 14px; }

@media (max-width: 1180px) {
  .appbar__inner { padding: 12px 20px; }
  .workspace, .app--dossier .workspace { padding: 28px 26px 56px; }
}

/* Tablette et téléphone : le menu du dossier passe au-dessus du contenu et se replie sous « Sections du dossier ». */
@media (max-width: 860px) {
  .app__body, .app--dossier .app__body { display: block; background: none; }
  .dossier-side { position: static; width: auto; max-height: none; overflow: visible; border-right: 0; border-bottom: 1px solid #e5eaf0; padding: 16px 18px; }
  .dossier-side__back { display: none; }
  .dossier-side__context { border: 0; padding: 0; margin: 0; }
  .dossier-side__name { font-size: 15px; margin: 5px 0 6px; }
  .dossier-side__trigger {
    display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; margin-top: 14px; min-height: 44px;
    padding: 11px 13px; border: 1px solid #e5eaf0; border-radius: var(--ln-radius-sm); background: var(--ln-sky); color: var(--ln-accent);
    font: inherit; font-size: var(--ln-text-sm); font-weight: 500; text-align: left; cursor: pointer;
  }
  .dossier-side__trigger .ln-icon { transition: transform var(--ln-ease); }
  .dossier-side__trigger[aria-expanded="true"] .ln-icon { transform: rotate(180deg); }
  .dossier-side__sections { display: none; margin-top: 18px; }
  .dossier-side__sections[data-open] { display: block; }
  .dossier-side__list a { min-height: 44px; }
  .dossier-side__next { padding-top: 14px; }
  .dossier-side__suite { min-height: 44px; }
  .workspace, .app--dossier .workspace { padding: 24px 18px 48px; }
}
@media (max-width: 860px) and (prefers-reduced-motion: reduce) { .dossier-side__trigger .ln-icon { transition: none; } }

/* Le propriétaire a trop de liens pour un téléphone : un bouton « Menu » déplie ses groupes. */
@media (max-width: 1180px) {
  .appbar__panel--owner { flex-wrap: wrap; }
  .appbar__panel--owner > .group-nav { flex: 1 1 100%; justify-content: flex-start; order: 2; }
}
@media (max-width: 860px) {
  .appbar__inner { flex-wrap: wrap; padding: 12px 16px; min-height: 0; }
  .appbar__toggle { display: inline-flex; align-items: center; gap: var(--sp-2); order: 3; margin-left: auto; min-height: 44px; padding: 8px 4px; background: transparent; border: 0; color: #d5e4f7; font: inherit; font-size: var(--ln-text-sm); cursor: pointer; }
  .appbar__toggle-icon { width: 18px; height: 12px; border-top: 2px solid currentColor; border-bottom: 2px solid currentColor; position: relative; }
  .appbar__toggle-icon::after { content: ""; position: absolute; left: 0; right: 0; top: 3px; border-top: 2px solid currentColor; }
  .appbar__panel--owner { display: none; order: 4; flex: 1 1 100%; flex-direction: column; align-items: stretch; }
  .appbar__panel--owner[data-open] { display: flex; }
  .appbar__panel--owner .group-tabs, .appbar__panel--owner .appnav__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .appbar__panel--owner .appnav__group { grid-column: 1 / -1; }
  .appbar__panel--owner .appnav__menu { position: static; box-shadow: none; margin-top: 4px; }
  .profile-menu { order: 2; }
  .appbar__panel:not(.appbar__panel--owner) { justify-content: flex-end; }
}
@media (max-width: 480px) {
  .appnav__item--wide { display: none; }
  .profile-menu__narrow { display: list-item; }
  .appnav__link .ln-icon { display: none; }
  .appbar__brand .brand__logo { width: 96px; }
}

/* ---- En-tête de page du dossier ---------------------------------------------------------------------------- */

.pagehead h1, .dossier-header h1 { font-size: 32px; font-weight: 500; letter-spacing: -1.1px; line-height: 1.15; margin: 0 0 8px; overflow-wrap: anywhere; }
.pagehead .eyebrow { margin-bottom: 0; }
.pagehead__sub { color: var(--ln-muted); font-size: var(--ln-text-sm); max-width: 650px; margin: 0 0 var(--sp-2); }
.page-header.pagehead { margin-bottom: 27px; align-items: center; }
.page-header.pagehead > .pagehead__sub { flex: 1 1 100%; order: 3; margin: 0; }
.pagehead h1 .badge { font-size: var(--ln-text-xs); vertical-align: middle; letter-spacing: 0; }

/* Écrans du propriétaire (Trame) : l'en-tête de page sur le fond de travail, le contenu dans un panneau. */
.owner-page > .panel + .panel, .owner-page > .panel + section, .owner-page > section + .panel { margin-top: 22px; }

.dossier-header { margin: 0 0 27px; }
.dossier-header__row { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4); flex-wrap: wrap; }
.dossier-header__title { min-width: 0; flex: 1 1 20rem; }
.dossier-header--compact { padding-bottom: var(--sp-4); border-bottom: 1px solid var(--ln-line); }
.dossier-header--compact .local-context { margin-bottom: 8px; }
.dossier-header__meta { font-size: 12px; color: var(--ln-muted); display: flex; flex-wrap: wrap; gap: var(--sp-1) var(--sp-3); align-items: center; margin: 12px 0 0; }
.dossier-header--compact .dossier-header__meta { margin-top: 0; }
.dossier-header__meta a { color: var(--ln-accent); }
.dossier-header__state { display: inline-flex; align-items: center; gap: 7px; }
.dossier-header__state::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: #8094aa; flex: none; }
.dossier-header__actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }
.dossier-header__actions .button { white-space: nowrap; }

@media (max-width: 620px) {
  .pagehead h1, .dossier-header h1 { font-size: 28px; letter-spacing: -0.8px; }
  .dossier-header__row { flex-direction: column; align-items: stretch; }
  /* En colonne, la base de 20 rem du titre devenait une HAUTEUR minimale : 270 px de vide au-dessus du bouton. */
  .dossier-header__title { flex-basis: auto; }
  .dossier-header__actions { width: 100%; }
  .dossier-header__actions .button { flex: 1 1 auto; white-space: normal; }
  .dossier-header--home .local-context { display: none; }
}

/* ---- Vue d'ensemble -------------------------------------------------------------------------------------- */

.overview__grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 22px; align-items: stretch; }
.overview__grid > * { min-width: 0; }
.focus-panel { border-left: 3px solid var(--ln-accent); padding: 30px; }
.focus-panel h2 { font-size: 32px; line-height: 1.2; letter-spacing: -1.2px; margin: 14px 0; }
.focus-panel p:not(.eyebrow):not(.ln-kicker) { max-width: 500px; color: var(--ln-muted); font-size: var(--ln-text-sm); line-height: 1.7; }
.focus-panel__chip, .ai-panel .eyebrow { display: flex; align-items: center; gap: 7px; }
.focus-panel__chip .icon, .ai-panel .eyebrow .icon { width: 16px; height: 16px; }
.ai-panel { padding: 27px; }
.ai-panel h2 { font-size: 21px; line-height: 1.35; margin: 12px 0; }
.ai-panel__summary { color: var(--ln-muted); font-size: var(--ln-text-sm); line-height: 1.7; }
.ai-panel__provenance { margin-bottom: var(--sp-1); }
.block-title { font-size: 19px; font-weight: 500; margin: 32px 0 16px; }
.block-title-row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin: 32px 0 16px; }
.block-title-row .block-title { margin: 0; }
.file-grid__link .ln-icon { grid-row: 1 / 3; color: var(--ln-accent); margin-top: 3px; width: 18px; height: 18px; }
.review-note .ln-icon { width: 14px; height: 14px; color: var(--ln-accent); margin-top: 3px; }
.file-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid var(--ln-line); background: var(--ln-page); }
.file-grid__item { margin: 0; border-right: 1px solid var(--ln-line); min-width: 0; }
.file-grid__item:last-child { border-right: 0; }
.file-grid__link { display: grid; grid-template-columns: 30px 1fr; gap: 6px 12px; padding: 24px; color: var(--ln-ink); text-decoration: none; height: 100%; }
.file-grid__link:hover { background: var(--ln-soft); color: var(--ln-ink); }
.file-grid__link .icon { grid-row: 1 / 3; color: var(--ln-accent); margin-top: 2px; }
.file-grid__link strong { font-size: 15px; font-weight: 500; }
.file-grid__link span { font-size: var(--ln-text-xs); color: var(--ln-muted); }
.review-note { display: flex; gap: 10px; align-items: flex-start; color: var(--ln-muted); font-size: var(--ln-text-xs); margin-top: 21px; }
.review-note .icon { width: 14px; height: 14px; color: var(--ln-accent); margin-top: 1px; }

@media (max-width: 800px) {
  .overview__grid { grid-template-columns: 1fr; }
  .file-grid { grid-template-columns: 1fr; }
  .file-grid__item { border-right: 0; border-bottom: 1px solid var(--ln-line); }
  .file-grid__item:last-child { border-bottom: 0; }
}
@media (max-width: 620px) {
  .focus-panel, .ai-panel { padding: 22px; }
  .focus-panel h2 { font-size: 28px; }
  .file-grid__link { padding: 19px; }
}

/* ---- Grille contenu + colonne secondaire ---------------------------------------------------------------- */

.dossier-grid { display: grid; grid-template-columns: minmax(0, 1fr) 280px; gap: var(--sp-5, 20px); align-items: start; }
.dossier-grid > * { min-width: 0; }
.dossier-grid__aside { display: grid; gap: var(--sp-4); }
.panel--flush { padding: 0; }
.panel--flush > .panel__head { margin: 0; padding: 18px; }
.panel--flush > .panel__body { padding: 18px; }
.panel--flush > .table-wrap { margin: 0; }
.panel--flush > .table-wrap .table { border: 0; }

.review-column { padding: 18px; }
.review-column h2 { font-size: var(--ln-text-base); margin-bottom: var(--sp-4); }
.review-step { display: grid; grid-template-columns: 18px 1fr; gap: var(--sp-2); font-size: var(--ln-text-sm); padding-bottom: var(--sp-4); }
.review-step__mark { color: var(--ln-good); font-size: var(--ln-text-sm); line-height: 1.5; }
.review-step--pending .review-step__mark, .review-step--none .review-step__mark { color: var(--ln-muted); }
.review-step--failed .review-step__mark { color: var(--ln-danger); }
.review-step--warn .review-step__mark { color: var(--ln-warn); font-weight: 600; }
.decisions-note { padding: 12px 18px; border-top: 1px solid var(--ln-line); font-size: var(--ln-text-sm); color: var(--ln-muted); }
.review-step p { color: var(--ln-muted); font-size: var(--ln-text-sm); margin: 2px 0 0; }
.review-column .fine { margin: var(--sp-4) 0 0; }
.review-column .list-lines li { flex-wrap: nowrap; }
.review-column .list-lines { margin-top: 0; }

/* Une décision tient en une ligne (audit de présentation, §3.6) : statut à gauche, action à droite. */
.decision { padding: 12px 18px; border-top: 1px solid var(--ln-line); font-size: var(--ln-text-sm);
  display: flex; justify-content: space-between; gap: var(--sp-4); flex-wrap: wrap; align-items: baseline; }
.decision .fine { color: var(--ln-muted); }
.source-chip { font-size: var(--ln-text-xs); color: var(--ln-accent); display: inline-block; background: var(--ln-sky); padding: 2px 7px; border-radius: 3px; text-decoration: none; }
.source-chip--muted { color: var(--ln-muted); background: var(--ln-soft); }
.proofbar { display: flex; justify-content: space-between; gap: var(--sp-3); border-top: 1px solid var(--ln-line); padding: 12px 18px; font-size: var(--ln-text-sm); color: var(--ln-muted); flex-wrap: wrap; }

@media (max-width: 1050px) { .dossier-grid { grid-template-columns: minmax(0, 1fr) 240px; } }
@media (max-width: 860px) { .dossier-grid { grid-template-columns: 1fr; } }

/* ---- Schéma d'architecture (SVG déterministe, ArchitectureDiagramHelper) ------------------------------ */

/* Vues d'architecture (27 septembre 2026) : schémas à leur taille naturelle, défilement horizontal si besoin. */
.diagram-wrap--scroll svg { display: block; max-width: none; height: auto; }
/* Cadre d'un schéma (27 septembre 2026, `diagram_frame`) : le schéma s'ajuste à la largeur disponible, jamais au-delà
   de sa taille naturelle (--diagram-width) ni en deçà d'un seuil lisible (--diagram-min-width) ; au-delà, le CADRE
   défile, jamais la page. « Taille réelle » le montre à sa taille naturelle dans le même cadre. */
/* `contain: inline-size` : la largeur intrinsèque du cadre ignore son contenu — aucune grille ni aucun flex ancêtre ne
   peut s'élargir sur un schéma, quel que soit l'agencement de la page. Le cadre prend la largeur de sa colonne. */
.diagram-frame { position: relative; max-width: 100%; min-width: 0; overflow-x: auto; overflow-y: hidden; contain: inline-size; }
.diagram-frame__canvas { width: 100%; max-width: var(--diagram-width, 100%); min-width: var(--diagram-min-width, 0px); }
.diagram-frame__canvas > svg { display: block; width: 100%; height: auto; max-width: none; }
.diagram-frame--natural .diagram-frame__canvas { width: var(--diagram-width); max-width: none; }
.diagram-frame--natural .diagram-frame__canvas > svg { width: var(--diagram-width); }
.diagram-frame__zoom { position: sticky; left: 0; float: right; margin: 0 0 var(--sp-2) var(--sp-2); font-size: var(--ln-text-sm); padding: 2px 10px; border: 1px solid var(--ln-line); border-radius: var(--ln-radius); background: var(--ln-page); color: var(--ln-accent); cursor: pointer; }
.diagram-frame .diagram { min-width: 0; }
.architecture-views { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-6); }
.architecture-views > * { min-width: 0; }
.architecture-view h3 { margin: 0 0 var(--sp-2); }
.architecture-journey { margin-bottom: var(--sp-6); }
.architecture-journey h4 { margin: 0 0 var(--sp-1); }
.architecture-steps { margin: 0; padding-left: 1.4em; }
.diagram-wrap { overflow-x: auto; margin-bottom: var(--sp-4); background: radial-gradient(var(--ln-line) 0.7px, transparent 0.7px); background-size: 14px 14px; padding: var(--sp-4); border: 1px solid var(--ln-line); border-radius: var(--ln-radius); }
.diagram { max-width: 100%; min-width: 480px; height: auto; font-family: inherit; display: block; }
.diagram__component rect { fill: var(--ln-page); stroke: var(--ln-accent); stroke-width: 1.2; }
.diagram__component--data rect { stroke: var(--ln-good); }
.diagram__component--integration rect, .diagram__component--external rect { stroke: var(--ln-warn); stroke-dasharray: 4 3; }
.diagram__name { font-size: var(--ln-text-sm); font-weight: 500; fill: var(--ln-ink); }
.diagram__kind { font-size: var(--ln-text-xs); fill: var(--ln-muted); }
.diagram__flow { stroke: var(--ln-accent); stroke-width: 1.2; }
.diagram marker path { fill: var(--ln-accent); }
.diagram-legend { font-size: var(--ln-text-sm); color: var(--ln-muted); display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-4); margin: 0 0 var(--sp-4); }
.diagram-legend span::before { content: ""; display: inline-block; width: 14px; height: 9px; border: 1.2px solid var(--ln-accent); border-radius: 2px; margin-right: 6px; vertical-align: middle; }
.diagram-legend .diagram-legend--data::before { border-color: var(--ln-good); }
.diagram-legend .diagram-legend--integration::before { border-color: var(--ln-warn); border-style: dashed; }
.diagram-text { font-size: var(--ln-text-sm); }
.diagram-text summary { color: var(--ln-accent); font-size: var(--ln-text-sm); }

/* ---- Cadrage (J1-B) ------------------------------------------------------------------------------------- */

.scoping { margin-top: var(--sp-6); }
.scoping__title { font-size: var(--ln-text-lg); }
.attention-list, .question-list, .reference-list { margin: 0; padding-left: 1.25rem; }
.attention-list li, .question-list li, .reference-list li { margin-bottom: var(--sp-2); }
.question-list__answer { margin-top: 2px; }
/* Replis du cadrage (audit de présentation, priorité 3) : questionnaire, sources et historique sous le besoin. */
.scoping details.section > summary { cursor: pointer; font-weight: 500; color: var(--ln-accent); padding: var(--sp-2) 0; }
.scoping details.section[open] > summary { margin-bottom: var(--sp-2); }
.inline-list { list-style: none; margin: 0 0 var(--sp-3); padding: 0; display: grid; gap: var(--sp-1); }
.attention-list .inline-forms { display: inline-flex; gap: var(--sp-2); margin-left: var(--sp-2); vertical-align: middle; }
.attention-list .inline-forms form { margin: 0; }
.answer-revision { border-top: 1px solid var(--ln-line); padding-top: var(--sp-2); margin-top: var(--sp-2); }

/* ---- Revue IA : une chronologie par évaluation (audit de présentation, priorité 4) ----------------------- */

.review-timeline { border-top: 1px solid var(--ln-line); padding-top: var(--sp-4); margin-top: var(--sp-4); }
.review-timeline:first-child { border-top: 0; padding-top: 0; margin-top: 0; }
.review-timeline h3 { font-size: var(--ln-text-base); margin: 0; }
.review-timeline__reserves { margin: var(--sp-3) 0 0; }
#review-details > summary, .review-cycle details.section > summary { cursor: pointer; font-weight: 500; color: var(--ln-accent); padding: var(--sp-2) 0; }
.finding__response { margin: var(--sp-2) 0 0; }
.rate-internal > summary, #estimation-policy details > summary, .proposal details.section > summary, .delivery details > summary { cursor: pointer; font-weight: 500; color: var(--ln-accent); padding: var(--sp-2) 0; }

/* ---- Proposition IA (J1-C), suggestions ----------------------------------------------------------------- */

.proposal-hints { margin-top: var(--sp-2); }
.suggestion-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-3); }
.suggestion { background: var(--ln-page); border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-4); }
.suggestion__head, .suggestion__header { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.suggestion__label { font-weight: 500; }
.suggestion--decided { opacity: 0.8; }
.suggestion__related { border-top: 1px solid var(--ln-line); margin-top: var(--sp-2); padding-top: var(--sp-2); }

/* ---- Estimation (J1-D) ---------------------------------------------------------------------------------- */

.result-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: var(--sp-3); margin: 0 0 var(--sp-4); }
.result-card { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-3) var(--sp-4); background: var(--ln-page); min-width: 0; }
.result-card h3, .result-card__label { font-size: var(--ln-text-sm); text-transform: uppercase; letter-spacing: 0.06em; color: var(--ln-muted); margin: 0 0 var(--sp-1); font-weight: 500; }
.result-card__value { font-size: var(--ln-text-md); font-weight: 500; margin: var(--sp-1) 0; font-variant-numeric: tabular-nums; letter-spacing: -0.01em; overflow-wrap: anywhere; }
.result-card__value--partial { color: var(--ln-warn); }
.missing summary { cursor: pointer; color: var(--ln-danger); font-size: var(--ln-text-sm); }
.missing ul { margin: var(--sp-1) 0 0; padding-left: 1.25rem; font-size: var(--ln-text-sm); }
.internal-view { border: 1px dashed var(--ln-line-strong); border-radius: var(--ln-radius); padding: var(--sp-3) var(--sp-4); background: var(--ln-soft); }
.internal-view > summary { font-weight: 500; cursor: pointer; }
.impact { background: var(--ln-warn-bg); border: 1px solid var(--ln-warn-line); border-radius: var(--ln-radius); padding: var(--sp-4); }
.allocations input[type="text"] { width: 100%; min-width: 4.5rem; }
.rate-field { display: grid; gap: var(--sp-1); }

/* ---- Revue par un second modèle (CA-03), livraison (CA-05) --------------------------------------------- */

.finding-list { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--sp-3); }
.finding { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-4); background: var(--ln-page); }
.finding .form--inline { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }
.finding .form--inline input[type="text"] { min-width: 0; width: 100%; }
.check-list { list-style: none; padding: 0; }
.check-list li { padding: var(--sp-1) 0; border-bottom: 1px solid var(--ln-line); }
.check-list li:last-child { border-bottom: 0; }
.review__aspects { list-style: none; padding: 0; }
.review__aspect { display: flex; flex-wrap: wrap; gap: var(--sp-3); justify-content: space-between; align-items: flex-start; border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-2); background: var(--ln-page); }
.review__aspect > div { flex: 1 1 20rem; }
.delivery-status { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }

.decision-form { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; margin: var(--sp-1) 0; padding: var(--sp-2) var(--sp-3); border: 1px solid var(--ln-line); border-radius: var(--ln-radius-sm); background: var(--ln-page); }
.decision-form__subject { flex: 1 0 100%; font-weight: 500; }
.decision-form input[type="text"] { flex: 1 1 14rem; min-width: 0; width: auto; }

/* ---- Catalogue, corpus, veille -------------------------------------------------------------------------- */

.catalog-entry { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-4); margin-bottom: var(--sp-3); background: var(--ln-page); }
.catalog-entry-view { padding: var(--sp-2) 0; }
.diff { font-family: var(--ln-mono); font-size: var(--ln-text-sm); white-space: pre-wrap; background: var(--ln-soft); padding: var(--sp-3); border-radius: var(--ln-radius-sm); }
.cite { color: var(--ln-muted); font-style: normal; }

/* ---- Étapes numérotées (parcours privés : import, sélections) ------------------------------------------- */

.steps { counter-reset: step; list-style: none; padding: 0; display: grid; gap: var(--sp-3); }
.steps li { position: relative; padding-left: 2.6rem; }
.steps li::before { counter-increment: step; content: counter(step); position: absolute; left: 0; top: 0; width: 2rem; height: 2rem; border-radius: 50%; background: var(--ln-sky); color: var(--ln-accent); display: flex; align-items: center; justify-content: center; font-weight: 500; font-size: var(--ln-text-sm); }

/* ---- États asynchrones : file, progression connue, échec ------------------------------------------------ */

.run-steps { list-style: none; padding: 0; margin: 0 0 var(--sp-4); display: grid; gap: var(--sp-2); }
/* Progression d'une génération en parties (26 septembre 2026) : ce qui est prêt, ce qui est en cours. */
.run-progress { margin: 0 0 var(--sp-4); padding: var(--sp-3) var(--sp-4); border: 1px solid var(--ln-line); border-radius: 8px; background: var(--ln-soft); }
.run-progress__count { margin: 0 0 var(--sp-2); }
.run-progress progress { width: 100%; height: 8px; accent-color: var(--ln-accent); }
.run-progress .help { margin: var(--sp-2) 0 0; }
.run-steps li { display: grid; grid-template-columns: 18px 1fr; gap: var(--sp-2); font-size: var(--ln-text-sm); }
.run-steps__mark { color: var(--ln-muted); }
.run-steps li[data-state="done"] .run-steps__mark { color: var(--ln-good); }
.run-steps li[data-state="failed"] .run-steps__mark { color: var(--ln-danger); }
.run-steps li[data-state="active"] .run-steps__mark { color: var(--ln-warn); }
.run-steps small { display: block; color: var(--ln-muted); font-size: var(--ln-text-sm); }

/* ---- Tableaux d'espace (projets, clients) --------------------------------------------------------------- */

/* Liste des dossiers (Trame, maquette 02) : une carte par dossier — état, nom, étapes, un fait, UNE action. */
.project-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 15px; }
.project-list > li { margin: 0; border: 1px solid var(--ln-line); border-radius: var(--ln-radius); background: var(--ln-page); padding: 27px; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--sp-3) var(--sp-8); align-items: center; }
.project-list__state { margin: 0 0 var(--sp-2); }
.project-list__title { font-size: 26px; margin: 0 0 var(--sp-2); font-weight: 500; letter-spacing: -0.5px; overflow-wrap: anywhere; }
.project-list__title a { color: var(--ln-ink); text-decoration: none; }
.project-list__title a:hover { color: var(--ln-accent); text-decoration: underline; }
.project-list__meta { font-size: var(--ln-text-sm); color: var(--ln-muted); margin: 4px 0 0; display: flex; flex-wrap: wrap; gap: var(--sp-1) var(--sp-3); }
.project-list__side { font-size: var(--ln-text-sm); color: var(--ln-muted); text-align: right; display: grid; gap: var(--sp-2); justify-items: end; }
.project-list__item--new { border-style: solid; }
.project-list__item--new .project-list__title { font-size: 23px; }
@media (max-width: 620px) {
  .project-list > li { grid-template-columns: 1fr; padding: 22px; }
  .project-list__title { font-size: 22px; }
  .project-list__side { text-align: left; justify-items: stretch; }
}

/* ---- Console de plateforme : même langage, portée distincte ------------------------------------------- */

.platform-banner { background: var(--ln-hero); color: var(--ln-hero-text); border-radius: var(--ln-radius); padding: var(--sp-3) var(--sp-4); font-size: var(--ln-text-sm); margin-bottom: var(--sp-6); display: flex; gap: var(--sp-3); align-items: center; flex-wrap: wrap; }
.platform-banner strong { color: var(--ln-cyan); font-weight: 500; }
.platform-banner a { color: var(--ln-hero-text); }
/* Sortie d'un espace ouvert : un vrai bouton, contrasté, poussé à droite du bandeau (27 septembre 2026). */
.platform-banner__exit { margin-left: auto; display: inline-flex; align-items: center; gap: var(--sp-2); }
.platform-banner .platform-banner__button { background: #ffffff; color: var(--ln-navy, #142b47); border: 0; font-weight: 600; }
.platform-banner .platform-banner__button:hover { background: var(--ln-sky); }
.appnav__exit { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid rgba(255, 255, 255, .55); border-radius: var(--ln-radius); background: transparent; color: inherit; font: inherit; font-weight: 600; cursor: pointer; }
.appnav__exit:hover { background: rgba(255, 255, 255, .12); }

/* Questionnaire d'ouverture d'un dossier (24 septembre 2026) : un encadré posé AVANT le texte libre.
   Les questions à choix multiple s'étalent en colonnes qui se replient seules ; rien n'est masqué derrière
   un repli — une question qu'on ne voit pas est une question sans réponse. */
.intake { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-4); margin: 0 0 var(--sp-5); background: var(--ln-surface-muted, #f7f8fa); }
.intake__title { margin: 0 0 var(--sp-1); font-size: 1.05rem; }
.intake__group { background: var(--ln-surface, #fff); margin-top: var(--sp-4); }
.intake__group:last-of-type { margin-bottom: 0; }
.intake__field { margin-bottom: var(--sp-4); }
.intake__field:last-child { margin-bottom: 0; }
.intake__question { border: 0; padding: 0; margin: 0; min-width: 0; }
.intake__question > legend { padding: 0; font-weight: 500; }
.intake__options { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0 var(--sp-4); margin-top: var(--sp-2); }
.intake__legend { margin: var(--sp-4) 0 0; }
.intake__more > summary { cursor: pointer; font-weight: 500; color: var(--ln-accent); padding: var(--sp-2) 0; }
.intake-summary dt { font-weight: 500; }
.intake-summary dd { margin: 0 0 var(--sp-2); }

/* Résumé d'une évaluation (24 septembre 2026, audit de présentation) : un chiffre qui domine, ses composantes en
   dessous, la fourchette en retrait. Six cartes côte à côte donnaient dix-huit nombres de même poids visuel — le
   lecteur ne savait pas lequel était le sien. */
.summary { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-4); margin-bottom: var(--sp-4); }
.summary__headline { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--sp-2); margin: 0 0 var(--sp-3); }
.summary__label { color: var(--ln-muted, #5b6472); }
.summary__value { font-size: 1.6rem; line-height: 1.2; }
.summary__lines { margin: 0; display: grid; gap: var(--sp-2); }
.summary__lines > div { display: grid; grid-template-columns: minmax(11rem, 14rem) 1fr; gap: var(--sp-3); align-items: baseline; }
.summary__lines dt { color: var(--ln-muted, #5b6472); font-weight: 400; }
.summary__lines dd { margin: 0; }
.summary__conventions { margin-top: var(--sp-3); }
.summary__conventions > summary, .summary .missing > summary { cursor: pointer; color: var(--ln-muted, #5b6472); }
@media (max-width: 40rem) { .summary__lines > div { grid-template-columns: 1fr; gap: 0; } }

/* ---- Audit « impression professionnelle » (25 septembre 2026) ------------------------------------------------ */

/* Premier dossier : trois étapes et le prix, avant tout formulaire. */
.empty-state--onboarding { text-align: left; padding: var(--sp-8); }
.empty-state--onboarding h2 { font-size: var(--ln-text-lg); }
.onboarding-steps { list-style: none; padding: 0; margin: var(--sp-6) 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-6); }
.onboarding-steps__item { display: grid; gap: var(--sp-2); align-content: start; margin: 0; }
.onboarding-steps__item span:last-child { color: var(--ln-muted); }
.onboarding-steps__number {
  display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: 50%;
  background: var(--ln-sky); color: var(--ln-accent-strong); font-weight: 600;
}
@media (max-width: 760px) { .onboarding-steps { grid-template-columns: 1fr; } }

/* « À préciser » : un résumé, deux actions. */
.attention-summary { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--sp-4); }
.attention-summary__row { margin: 0; }
.attention-summary__row p { margin-bottom: var(--sp-2); }
.attention-summary__questions { margin: var(--sp-2) 0 0; }
.attention-summary__questions li { margin-bottom: var(--sp-2); }
.attention-summary__questions .button { margin-left: var(--sp-2); }

/* Replis : le sous-total se lit d'abord, le détail reste à un clic. */
.fold { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); background: var(--ln-page); }
.fold > .fold__summary { padding: var(--sp-3) var(--sp-4); font-weight: 500; }
.fold[open] > .fold__summary { border-bottom: 1px solid var(--ln-line); }
.fold > .table-wrap { margin: 0; }
.fold .table { border: 0; }
.estimate__links { margin-top: calc(-1 * var(--sp-2)); }
.summary__aside { color: var(--ln-muted); margin: calc(-1 * var(--sp-2)) 0 var(--sp-4); }
.site-nav--side .side-nav a .icon { color: var(--ln-muted); margin-right: var(--sp-1); }
.site-nav--side .side-nav a[aria-current="page"] .icon { color: var(--ln-accent); }
.next-action { display: flex; gap: var(--sp-4); align-items: flex-start; border-left: 4px solid var(--ln-accent); }
.next-action h2 { font-size: var(--ln-text-lg); }
.manual-prep { margin-top: var(--sp-4); }
.manual-prep > .section { margin: var(--sp-4); }

/* ---- Audit de l'espace client (25 septembre 2026) ---------------------------------------------------------- */
/* Barre de confirmation collante sous le tableau du cadrage : le bouton n'est plus à un écran des cases. */
.confirm-bar { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-3); padding: var(--sp-2) var(--sp-3); margin-top: var(--sp-2); background: var(--ln-surface, #fff); border-top: 1px solid var(--ln-line); border-radius: 0 0 var(--ln-radius) var(--ln-radius); }
.check-inline span { font-size: var(--ln-text-sm); }
/* Une enveloppe à chiffrer se lit comme telle, pas comme un montant. */
.summary__value--pending { color: var(--ln-warn, #8a5a00); font-size: var(--ln-text-lg); }
/* Réglages avancés repliés sous l'évaluation. */
.estimate__links > summary { cursor: pointer; }
/* Tableau des postes en cartes sur mobile : chaque cellule porte son en-tête (data-label). */
@media (max-width: 720px) {
  .table--responsive thead { display: none; }
  .table--responsive tr { display: block; border-bottom: 1px solid var(--ln-line); padding: var(--sp-2) 0; }
  .table--responsive td { display: block; position: relative; padding: 4px 0 4px 9rem; border: 0; text-align: left; min-height: 1.4em; }
  .table--responsive td::before { content: attr(data-label); position: absolute; left: 0; top: 4px; width: 8.5rem; color: var(--ln-muted); font-size: var(--ln-text-sm); }
  .table--responsive td.num { text-align: left; }
}
/* Liste des dossiers : quatre étapes, un fait, une action. */
.stage-strip { list-style: none; display: flex; flex-wrap: wrap; gap: var(--sp-1) var(--sp-3); margin: var(--sp-1) 0; padding: 0; font-size: var(--ln-text-sm); color: var(--ln-muted); }
.stage-strip__step { margin: 0; }
.stage-strip__step--done { color: var(--ln-ink); }
.stage-strip__mark { color: var(--ln-accent); }
.stage-strip__step:not(.stage-strip__step--done) .stage-strip__mark { color: var(--ln-line); }

/* Reprise du taux d'un rôle publié : le choix et le bouton sur une ligne. */
.rate-adopt { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; margin: 4px 0 0; }
.rate-adopt select { max-width: 22rem; }
/* Console de la plateforme : l'état en tête, en couleur quand il faut agir. */
.health { border: 1px solid var(--ln-line); border-radius: var(--ln-radius); padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-4); }
.health--alert { border-color: var(--ln-danger, #b42318); background: color-mix(in srgb, var(--ln-danger, #b42318) 6%, white); }
.health__lines { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-6); }
.health__lines li { margin: 0; padding-right: var(--sp-3); }
.health__lines li::before { content: "●"; margin-right: 6px; }
.health__ok::before { color: var(--ln-good); }
.health__bad::before { color: var(--ln-danger, #b42318); }
.health__bad { font-weight: 600; }
/* Références de taux : le rôle se lit en entier ; le brouillon est replié derrière un mot. */
#rates-draft input[name*="[role_name]"] { min-width: 16rem; }
#rates-draft > summary { cursor: pointer; padding: var(--sp-2) 0; }
.fold--inline > summary { cursor: pointer; color: var(--ln-muted); }

/* ---- Nouveau dossier (Trame, maquette 03) ---------------------------------------------------------------- */
.new-dossier__next { position: sticky; top: var(--sp-4); }

@media (max-width: 800px) { .new-dossier__next { position: static; } }

/* ---- Mon compte (Trame, maquette 11) --------------------------------------------------------------------- */
.account-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); gap: 22px; }
.account-card { display: flex; flex-direction: column; align-items: flex-start; gap: var(--sp-2); }
.account-card h2 { font-size: 19px; margin: 0 0 var(--sp-1); }
.account-card p { margin: 0; overflow-wrap: anywhere; }
.account-card .button { margin-top: auto; }
.account-card--advice { border-top: 2px solid var(--ln-navy-active); }
.account-note { margin-top: var(--sp-6); }



/* ---- Crédits (Trame, maquette 10) ------------------------------------------------------------------------ */
.credit-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid var(--ln-line); margin-bottom: var(--sp-4); }
.credit-summary__item { padding: 20px 22px; border-right: 1px solid var(--ln-line); min-width: 0; }
.credit-summary__item:last-child { border-right: 0; }
.credit-summary__item p { margin: 0 0 var(--sp-2); }
.credit-summary__value { font-size: 26px; font-weight: 500; letter-spacing: -0.5px; font-variant-numeric: tabular-nums; }
@media (max-width: 800px) { .credit-summary { grid-template-columns: 1fr; } .credit-summary__item { border-right: 0; border-bottom: 1px solid var(--ln-line); } .credit-summary__item:last-child { border-bottom: 0; } }

/* ---- Console de la plateforme (Trame) -------------------------------------------------------------------- */
/* L'état en trois cases, écrit en toutes lettres ; la marque ✓ / ! double la couleur, jamais seule. */
.health-track { margin: 0 0 22px; }
.health-track .health__lines { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid var(--ln-line); background: var(--ln-page); }
.health-track .health__lines li { margin: 0; padding: 14px 20px; border-right: 1px solid var(--ln-line); font-size: var(--ln-text-sm); }
.health-track .health__lines li:last-child { border-right: 0; }
.health-track .health__ok { color: var(--ln-good); }
.health-track .health__ok::before { content: "✓ "; }
.health-track .health__bad { color: var(--ln-danger); background: var(--ln-danger-bg); font-weight: 500; }
.health-track .health__bad::before { content: "! "; }
.health-track .fine { margin: 8px 0 0; }
.console-grid { margin-bottom: 8px; align-items: start; }
.console-grid .focus-panel h2, .console-grid .panel h2 { font-size: 23px; letter-spacing: -0.5px; margin: 10px 0 var(--sp-3); }
.kpi-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid var(--ln-line); margin: 0 0 var(--sp-4); }
.kpi-grid > div { padding: 12px 14px; border-right: 1px solid var(--ln-line); min-width: 0; }
.kpi-grid > div:last-child { border-right: 0; }
.kpi-grid dt { font-size: var(--ln-text-xs); color: var(--ln-muted); text-transform: uppercase; letter-spacing: 1px; }
.kpi-grid dd { margin: 4px 0 0; font-size: 17px; font-weight: 500; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.list-lines--flush { margin: 0; }
.list-lines--flush li:first-child { border-top: 0; }
.list-lines--flush li:last-child { border-bottom: 0; }
@media (max-width: 800px) {
  .health-track .health__lines, .kpi-grid { grid-template-columns: 1fr; }
  .health-track .health__lines li, .kpi-grid > div { border-right: 0; border-bottom: 1px solid var(--ln-line); }
  .health-track .health__lines li:last-child, .kpi-grid > div:last-child { border-bottom: 0; }
}
.health-track.health--alert { background: none; border: 0; }

/* Courriels désactivés (pré-production) : lien d'acceptation d'une invitation, à copier depuis la liste des invitations. */
.acceptance-link { display: block; width: 100%; min-width: 14rem; margin-top: var(--sp-1); font-size: 0.8125rem; }
