/* Card-only UI primitives, token-driven. Wrap content in .dir-<name> to theme.
   Used by the foundation specimen cards in /cards. Not part of the shipped
   global closure — these are exploration scaffolding. */
.card-stage{background:var(--bg);color:var(--ink);font-family:var(--font-body);
  letter-spacing:var(--body-tracking);padding:20px;height:100%;box-sizing:border-box}
*{box-sizing:border-box}
html,body{margin:0}
body{background:#E9E6DF}

/* swatches */
.sw-row{display:flex;gap:9px;flex-wrap:wrap}
.sw{flex:1;min-width:62px}
.sw .chip{height:46px;border-radius:var(--radius-sm);border:1px solid rgba(0,0,0,.08)}
.sw .nm{font-size:11.5px;margin-top:6px;color:var(--ink);font-weight:600}
.sw .hx{font-family:var(--font-mono);font-size:10px;color:var(--ink-3);margin-top:1px}
.row-lab{font-size:11px;color:var(--ink-2);margin:0 0 8px;font-weight:600}

/* type specimen */
.spec-big{font-family:var(--font-display);font-weight:var(--display-weight);
  letter-spacing:var(--display-tracking);text-transform:var(--display-transform);
  font-size:52px;line-height:.98;color:var(--ink);margin:0}
.spec-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);margin-top:8px;letter-spacing:.02em}
.spec-body{font-size:15px;line-height:1.5;color:var(--ink-2);margin:14px 0 0;max-width:52ch}
.spec-mono{font-family:var(--font-mono);font-size:13px;color:var(--ink);
  background:var(--surface-2);padding:7px 11px;border-radius:var(--radius-sm);display:inline-block;margin-top:14px}

/* primitives */
.btn{font-family:var(--font-body);font-weight:600;font-size:14px;border-radius:var(--btn-radius);
  border:var(--border-width) solid transparent;padding:11px 16px;display:inline-flex;align-items:center;
  gap:8px;cursor:pointer;letter-spacing:var(--body-tracking)}
/* ⚠ 31.08 · Un `.btn` porté par un `<a>` héritait du soulignement des liens :
   « Revenir aux engagements », sur l'écran de refus de l'administration,
   s'affichait souligné dans un bouton plein. Un bouton se reconnaît à sa
   forme ; le soulignement dit « lien », et les deux ensemble ne disent rien. */
a.btn,a.btn:hover{text-decoration:none}
.btn svg{width:16px;height:16px}
.btn-primary{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.btn-ghost{background:transparent;color:var(--ink);border-color:var(--border-strong)}
.btn-ghost:hover{background:var(--surface-2)}
.input{font-family:var(--font-body);font-size:14px;color:var(--ink);background:var(--surface);
  border:var(--border-width) solid var(--border-strong);border-radius:var(--btn-radius);padding:10px 13px;min-width:180px}
.input::placeholder{color:var(--ink-3)}
.badge{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-body);font-weight:600;
  font-size:12px;padding:5px 11px;border-radius:var(--radius-pill);white-space:nowrap}
.badge .dot{width:7px;height:7px;border-radius:var(--radius-pill)}
.badge--warn{background:var(--warning-soft);color:var(--warning)} .badge--warn .dot{background:var(--warning)}
.badge--ok{background:var(--positive-soft);color:var(--positive)} .badge--ok .dot{background:var(--positive)}
.badge--bad{background:var(--danger-soft);color:var(--danger)} .badge--bad .dot{background:var(--danger)}
.comp-grid{display:flex;flex-direction:column;gap:16px}
.comp-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}

/* ============================================================
   EXTENDED PRIMITIVES — dropdown, switch, slider, progress,
   checkbox, radio, segmented control (all token-driven)
   ============================================================ */
.prim-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:24px 30px}
.prim-cell{display:flex;flex-direction:column;gap:13px;align-items:flex-start}
.prim-cap{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.prim-cell .comp-row{gap:14px}

/* select / dropdown trigger */
.sel-wrap{position:relative;display:inline-flex;align-items:center}
.sel-wrap svg{position:absolute;right:12px;pointer-events:none;width:15px;height:15px;color:var(--ink-3)}
.select{font-family:var(--font-body);font-size:14px;color:var(--ink);background:var(--surface);
  border:var(--border-width) solid var(--border-strong);border-radius:var(--btn-radius);
  padding:10px 38px 10px 13px;cursor:pointer;appearance:none;-webkit-appearance:none;min-width:184px}
.select:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}

/* open dropdown menu */
.menu{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow-pop);padding:6px;min-width:200px}
.menu .mi{padding:9px 12px;font-size:14px;color:var(--ink);border-radius:var(--btn-radius);cursor:pointer;
  display:flex;align-items:center;gap:10px}
.menu .mi svg{width:16px;height:16px;color:var(--ink-3)}
.menu .mi:hover{background:var(--surface-2)}
.menu .mi.on{color:var(--accent);font-weight:600}
.menu .mi.on svg{color:var(--accent);margin-left:auto}
.menu .msep{height:var(--border-width);background:var(--border);margin:6px 4px}

/* switch / toggle
 *
 * Le curseur est dessiné en `background-image`, pas en `::after`, et c'est un
 * contournement — pas une préférence.
 *
 * html2canvas, le moteur qui produit les captures d'écran du widget de retours,
 * lève « Error parsing CSS component value, unexpected EOF » dès qu'un `<input>`
 * porte un pseudo-élément, quel que soit son `content`. Un `<div>` ou un
 * `<button>` avec le même pseudo passent ; l'`<input>` non. Établi le 21.08.2026
 * sur une page de quinze lignes, après que dix captures de Stan eurent échoué
 * sur les écrans de liste — ceux qui portent la bascule « Archivés ».
 *
 * Tant que le défaut vit, une capture d'écran de tout écran portant un switch
 * échoue silencieusement : le rapport de bug part sans son image, et personne
 * ne sait pourquoi.
 *
 * Le SVG porte son ombre par `feDropShadow`, et le déplacement se fait par
 * `background-position` plutôt que par `left` — même rendu, même transition.
 * À reprendre en `::after` le jour où html2canvas est corrigé, si on y tient.
 */
.switch{appearance:none;-webkit-appearance:none;width:46px;height:26px;border-radius:var(--radius-pill);
  background-color:var(--border-strong);position:relative;cursor:pointer;flex-shrink:0;margin:0;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26'%3E%3Cfilter id='o'%3E%3CfeDropShadow dx='0' dy='1' stdDeviation='1.2' flood-opacity='.28'/%3E%3C/filter%3E%3Ccircle cx='13' cy='12' r='10' fill='%23fff' filter='url(%23o)'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:0 center;
  transition:background-color .16s,background-position .16s}
.switch:checked{background-color:var(--accent);background-position:20px center}
.switch:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.tog{display:inline-flex;align-items:center;gap:11px;font-size:14px;color:var(--ink);font-family:var(--font-body);cursor:pointer}

/* checkbox
 *
 * ⚠ Le crochet est dessiné en `background-image`, pas en `::after`, pour la
 * raison écrite au-dessus pour le switch : html2canvas lève « Error parsing CSS
 * component value, unexpected EOF » dès qu'un `<input>` porte un
 * pseudo-élément, et le widget de retours perd alors sa capture, sans bruit.
 *
 * Le 21.08.2026 le correctif n'a porté que sur `.switch` — celui des écrans de
 * liste, d'où venaient les dix captures perdues qu'on regardait. `.ck` et `.rd`
 * portaient le même défaut et sont restées. Deux captures de Stan ont échoué le
 * jour même **après** ce correctif, à 12h56 et 13h00, toutes deux sur la
 * MailBox : on avait corrigé l'occurrence observée, pas la cause.
 *
 * Mesuré à nouveau le 01.09.2026, sur l'application d'aujourd'hui : la case
 * « Logement de la famille » décochée se capture, cochée elle échoue. Le
 * défaut n'avait donc jamais cessé — il attendait qu'une case soit cochée dans
 * le cadre.
 *
 * Le blanc du crochet est celui de `--on-accent` ; un SVG en `data:` ne peut
 * pas lire une variable CSS. Les deux doivent donc changer ensemble, et
 * `frontendv1/test/styles.mjs` le vérifie.
 */
.ck{display:inline-flex;align-items:center;gap:10px;font-size:14px;color:var(--ink);
  font-family:var(--font-body);cursor:pointer}
.ck input{appearance:none;-webkit-appearance:none;width:20px;height:20px;flex-shrink:0;margin:0;
  border:var(--border-width) solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);
  cursor:pointer;position:relative;transition:background .12s,border-color .12s}
.ck input:checked{background-color:var(--accent);border-color:var(--accent);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.6 6.4 4.9 8.8 9.4 3.4' fill='none' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:center;background-size:12px 12px}
.ck input:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.ck.dis{color:var(--ink-3);cursor:not-allowed}
.ck.dis input{background:var(--surface-2);border-color:var(--border)}

/* radio */
.rd{display:inline-flex;align-items:center;gap:10px;font-size:14px;color:var(--ink);
  font-family:var(--font-body);cursor:pointer}
.rd input{appearance:none;-webkit-appearance:none;width:20px;height:20px;flex-shrink:0;margin:0;
  border:var(--border-width) solid var(--border-strong);border-radius:var(--radius-pill);background:var(--surface);
  cursor:pointer;display:grid;place-content:center;transition:border-color .12s}
/* Même contournement que `.ck` ci-dessus, et pour la même raison. Le point se
 * dessine ici par un dégradé radial plutôt que par un SVG en `data:` : il garde
 * ainsi `--accent`, là où une couleur écrite dans une URL ne le pourrait pas. */
.rd input:checked{border-color:var(--accent);
  background-image:radial-gradient(circle at center,var(--accent) 0 5px,transparent 5px)}
.rd input:focus-visible{outline:none;box-shadow:var(--focus-ring)}

/* slider / range */
.rng{appearance:none;-webkit-appearance:none;width:200px;height:6px;border-radius:var(--radius-pill);
  background:linear-gradient(90deg,var(--accent) 0 var(--val,62%),var(--surface-2) var(--val,62%) 100%);
  outline:none;cursor:pointer}
.rng::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:18px;height:18px;
  border-radius:var(--radius-pill);background:var(--accent);border:3px solid var(--surface);
  box-shadow:0 1px 3px rgba(0,0,0,.3);cursor:pointer}
.rng::-moz-range-thumb{width:14px;height:14px;border-radius:var(--radius-pill);background:var(--accent);
  border:3px solid var(--surface);box-shadow:0 1px 3px rgba(0,0,0,.3);cursor:pointer}
.rng-val{font-family:var(--font-mono);font-size:13px;color:var(--ink-2)}

/* progress bar */
.prog{width:100%;max-width:230px;height:9px;border-radius:var(--radius-pill);background:var(--surface-2);overflow:hidden}
.prog i{display:block;height:100%;background:var(--accent);border-radius:var(--radius-pill)}
.prog-lab{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:230px;margin-bottom:7px;
  font-family:var(--font-mono);font-size:11px;color:var(--ink-3)}
.prog-lab b{color:var(--ink);font-weight:600}

/* segmented control */
.seg{display:inline-flex;background:var(--surface-2);border-radius:var(--btn-radius);padding:3px;gap:2px;
  border:var(--border-width) solid var(--border)}
.seg button{font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--ink-2);background:transparent;
  border:none;padding:7px 15px;border-radius:calc(var(--btn-radius) * .7);cursor:pointer;white-space:nowrap}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-card)}

/* small icon-only button + tooltip */
.btn-ico{width:38px;height:38px;border-radius:var(--btn-radius);border:var(--border-width) solid var(--border-strong);
  background:var(--surface);display:grid;place-items:center;cursor:pointer;color:var(--ink-2)}
.btn-ico:hover{background:var(--surface-2);color:var(--ink)} .btn-ico svg{width:17px;height:17px}
.tip{font-family:var(--font-body);font-size:12.5px;font-weight:500;color:var(--on-accent);background:var(--ink);
  padding:6px 11px;border-radius:var(--radius-sm);position:relative}
.tip::after{content:"";position:absolute;left:18px;bottom:-5px;width:9px;height:9px;background:var(--ink);transform:rotate(45deg)}

/* reference screen (token-driven) */
.app{background:var(--bg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card)}
.app-top{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--surface);border-bottom:var(--border-width) solid var(--border)}
.bc{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2)}
.bc svg{width:15px;height:15px;color:var(--ink-3)}
.bc .sep{color:var(--ink-3)} .bc b{color:var(--ink);font-weight:600}
.app-top-r{display:flex;align-items:center;gap:12px}
.icon-btn{width:34px;height:34px;border-radius:var(--btn-radius);border:var(--border-width) solid var(--border);background:var(--surface);display:grid;place-items:center;cursor:pointer;color:var(--ink-2)}
.icon-btn svg{width:17px;height:17px}
.avatar{width:34px;height:34px;border-radius:var(--radius-pill);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-size:12px;font-weight:700;font-family:var(--font-display)}
.app-body{padding:28px 30px 30px}
.doc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:24px}
.doc-head>div:first-child{flex:1;min-width:0}
.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}
.doc-title{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);text-transform:var(--display-transform);font-size:34px;line-height:1;margin:0 0 8px;color:var(--ink)}
.doc-sub{font-size:13.5px;color:var(--ink-2)} .doc-sub .num{font-family:var(--font-mono)}
.meta{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--border);border:var(--border-width) solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:22px}
.meta-item{background:var(--surface);padding:14px 16px}
.meta-item .k{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-family:var(--font-mono);margin-bottom:6px}
.meta-item .v{font-size:14.5px;color:var(--ink);font-weight:600}
.meta-item .v.num{font-family:var(--font-mono)} .meta-item .v.accent{color:var(--accent)}
.grid2{display:grid;grid-template-columns:1.25fr 1fr;gap:20px}
.sheet{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);padding:20px 22px}
.sheet-top{font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;color:var(--ink-3);padding-bottom:14px;margin-bottom:14px;border-bottom:var(--border-width) solid var(--border)}
.field{padding:11px 0;border-bottom:1px dashed var(--border)} .field:last-of-type{border-bottom:none}
.field span{display:block;font-size:11.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;font-family:var(--font-mono);margin-bottom:4px}
.field b{font-size:14px;color:var(--ink);font-weight:600}
.signature{margin-top:16px;padding-top:14px;border-top:var(--border-width) solid var(--border);font-size:12.5px;color:var(--ink-3);font-style:italic}
.side{display:flex;flex-direction:column;gap:16px}
.callout{display:flex;gap:12px;background:var(--accent-soft);border-radius:var(--radius);padding:16px}
.callout svg{width:20px;height:20px;color:var(--accent);flex-shrink:0;margin-top:1px}
.callout b{display:block;font-size:14px;color:var(--ink);margin-bottom:3px;font-weight:700}
.callout span{font-size:12.5px;color:var(--ink-2);line-height:1.45}
.steps{display:flex;flex-direction:column;gap:2px;background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);padding:6px}
.step{display:flex;align-items:center;gap:10px;padding:10px 12px;font-size:13.5px;color:var(--ink);font-weight:500}
.step svg{width:17px;height:17px} .step.done svg{color:var(--positive)}
.step.todo{color:var(--ink-3)} .step.todo svg{color:var(--ink-3)}
.actions{display:flex;flex-direction:column;gap:10px} .actions .btn{justify-content:center;width:100%}

/* ============================================================
   TYPOGRAPHY SPECIMEN — fonts + size scale (token-driven)
   ============================================================ */
.type-spec{display:flex;flex-direction:column;gap:26px}
.tf-fonts{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media(max-width:680px){.tf-fonts{grid-template-columns:1fr}}
.tf-card{border:var(--border-width) solid var(--border);border-radius:var(--radius);padding:18px 20px;
  background:var(--surface);display:flex;flex-direction:column;gap:4px}
.tf-aa{font-size:60px;line-height:1;color:var(--ink);margin-bottom:10px}
.tf-role{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.tf-name{font-family:var(--font-body);font-size:15.5px;font-weight:600;color:var(--ink)}
.tf-glyphs{font-size:13px;color:var(--ink-3);margin-top:6px;letter-spacing:.01em;word-spacing:.04em}
.tf-disp{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking)}
.tf-body{font-family:var(--font-body)}
.tf-mono{font-family:var(--font-mono)}

.tf-scale{display:flex;flex-direction:column;gap:0}
.ts-row{display:flex;align-items:baseline;gap:18px;padding:11px 0;border-bottom:1px dashed var(--border)}
.ts-row:last-child{border-bottom:none}
.ts-tag{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-3);letter-spacing:.02em;
  width:104px;flex-shrink:0;text-align:right;line-height:1.3}
.ts-tag b{display:block;color:var(--ink-2);font-weight:600;font-size:11px}
.ts-samp{color:var(--ink);min-width:0;white-space:nowrap}
.ts-samp.disp{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);text-transform:var(--display-transform)}
.ts-samp.body{font-family:var(--font-body)}
.ts-samp.bodyb{font-family:var(--font-body);font-weight:700}
.ts-samp.mono{font-family:var(--font-mono);color:var(--ink-2)}
.ts-h1{font-size:var(--doc-h1);line-height:1}
.ts-h2{font-size:var(--doc-h2);line-height:1}
.ts-h3{font-size:var(--doc-h3);line-height:1}
.ts-h4{font-size:var(--doc-h4);line-height:1}
.ts-lead{font-size:var(--doc-lead);line-height:1.2;color:var(--ink-2)}
.ts-body{font-size:var(--doc-body);line-height:1.3;color:var(--ink-2)}
.ts-small{font-size:var(--doc-small);line-height:1.3;color:var(--ink-2)}
.ts-caption{font-size:var(--doc-caption);line-height:1.3}

/* ============================================================
   EDITOR / PROSE — the rich-text hierarchy (text editor feature)
   ============================================================ */
.editor{background:var(--surface);border:var(--border-width) solid var(--border);
  border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card)}
.editor-bar{display:flex;align-items:center;gap:6px;padding:9px 12px;background:var(--bg);
  border-bottom:var(--border-width) solid var(--border);flex-wrap:wrap}
.style-pick{display:flex;align-items:center;gap:8px;font-family:var(--font-body);font-weight:600;
  font-size:13px;color:var(--ink);background:var(--surface);border:var(--border-width) solid var(--border-strong);
  border-radius:var(--btn-radius);padding:7px 11px}
.style-pick svg{width:14px;height:14px;color:var(--ink-3)}
.tb{width:32px;height:32px;display:grid;place-items:center;border-radius:var(--btn-radius);
  border:var(--border-width) solid transparent;background:transparent;color:var(--ink-2);cursor:pointer}
.tb:hover{background:var(--surface-2)}
.tb svg{width:16px;height:16px}
.tb.on{background:var(--accent-soft);color:var(--accent)}
.tb-sep{width:1px;height:20px;background:var(--border);margin:0 3px}
.editor-page{padding:26px 30px 30px}

/* prose hierarchy — H1 → caption, all token-driven */
.prose{color:var(--ink);font-family:var(--font-body);font-size:var(--doc-body);
  line-height:var(--doc-body-lh);letter-spacing:var(--body-tracking)}
.prose>:first-child{margin-top:0}
.prose h1{font-family:var(--font-display);font-weight:var(--display-weight);
  letter-spacing:var(--display-tracking);text-transform:var(--display-transform);
  font-size:var(--doc-h1);line-height:var(--doc-h1-lh);color:var(--ink);margin:0 0 .35em}
.prose h2{font-family:var(--font-display);font-weight:var(--display-weight);
  letter-spacing:var(--display-tracking);text-transform:var(--display-transform);
  font-size:var(--doc-h2);line-height:var(--doc-h2-lh);color:var(--ink);margin:var(--doc-heading-gap) 0 .4em}
.prose h3{font-family:var(--font-display);font-weight:var(--display-weight);
  letter-spacing:var(--display-tracking);
  font-size:var(--doc-h3);line-height:var(--doc-h3-lh);color:var(--ink);margin:1.3em 0 .4em}
.prose h4{font-family:var(--font-body);font-weight:700;
  font-size:var(--doc-h4);line-height:var(--doc-h4-lh);color:var(--ink);margin:1.2em 0 .3em}
.prose p{margin:0 0 var(--doc-block-gap);max-width:var(--doc-measure)}
.prose .lead{font-size:var(--doc-lead);line-height:var(--doc-lead-lh);color:var(--ink-2);margin-bottom:1.1em}
.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}
.prose strong{font-weight:700;color:var(--ink)}
.prose em{font-style:italic}
.prose code{font-family:var(--font-mono);font-size:.86em;background:var(--surface-2);
  padding:.12em .42em;border-radius:var(--radius-sm)}
.prose blockquote{margin:1.2em 0;padding:.5em 0 .5em 1.1em;border-left:3px solid var(--accent);
  color:var(--ink-2);font-style:italic}
.prose blockquote cite{display:block;font-style:normal;font-size:var(--doc-small);color:var(--ink-3);
  font-family:var(--font-mono);margin-top:.5em}
.prose ul,.prose ol{margin:0 0 var(--doc-block-gap);padding-left:1.35em;max-width:var(--doc-measure)}
.prose li{margin:.32em 0}
.prose ul li::marker{color:var(--accent)}
.prose ol{counter-reset:none}
.prose ol li::marker{color:var(--accent);font-family:var(--font-mono);font-weight:600}
.prose hr{border:none;border-top:var(--border-width) solid var(--border);margin:1.6em 0}
.prose .small{font-size:var(--doc-small);line-height:var(--doc-small-lh);color:var(--ink-3)}

/* compact type-scale ladder (for specimen cards / board column) */
.ladder{display:flex;flex-direction:column;gap:13px}
.ladder .rung{display:flex;align-items:baseline;gap:14px}
.ladder .tag{font-family:var(--font-mono);font-size:10px;color:var(--ink-3);letter-spacing:.04em;
  width:62px;flex-shrink:0;text-align:right;padding-top:.4em}
.ladder .smp{color:var(--ink);min-width:0}
.ladder .h1{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:var(--doc-h1);line-height:1}
.ladder .h2{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:var(--doc-h2);line-height:1}
.ladder .h3{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  font-size:var(--doc-h3);line-height:1}
.ladder .bd{font-family:var(--font-body);font-size:var(--doc-body);line-height:1.4;color:var(--ink-2)}
.ladder .cp{font-family:var(--font-mono);font-size:var(--doc-caption);color:var(--ink-3)}

/* ============================================================
   GRID OF OBJECTS — the main display pattern
   ============================================================ */
.grid-objects{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--grid-min),1fr));gap:var(--grid-gap)}
.obj{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);
  overflow:hidden;box-shadow:var(--shadow-card);display:flex;flex-direction:column;cursor:pointer;
  transition:box-shadow .15s,border-color .15s}
.obj:hover{box-shadow:var(--shadow-pop);border-color:var(--border-strong)}
.obj-thumb{height:var(--grid-thumb-h);background:var(--surface-2);display:flex;align-items:flex-start;
  justify-content:space-between;padding:12px 13px;border-bottom:var(--border-width) solid var(--border)}
.obj-thumb .ic{color:var(--ink-3)} .obj-thumb .ic svg{width:26px;height:26px}
.obj-body{padding:14px 15px;display:flex;flex-direction:column;flex:1}
.obj-title{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:16px;line-height:1.15;color:var(--ink);margin:0}
.obj-addr{font-size:12.5px;color:var(--ink-2);margin-top:4px}
.obj-tags{display:flex;gap:7px;flex-wrap:wrap;margin-top:11px}
.obj-tag{font-family:var(--font-mono);font-size:11px;color:var(--ink-2);background:var(--surface-2);
  border-radius:var(--radius-sm);padding:3px 8px;white-space:nowrap}
.obj-foot{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:12px;
  border-top:1px dashed var(--border)}
.obj-rent{font-family:var(--font-mono);font-weight:600;font-size:14px;color:var(--ink)}
.obj-rent small{font-size:10.5px;color:var(--ink-3);font-weight:400}

/* ============================================================
   TABLE VIEW — dense list of objects / documents
   ============================================================ */
.tbl-wrap{background:var(--surface);border:var(--border-width) solid var(--border);
  border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card)}
.tbl-bar{display:flex;align-items:center;gap:12px;padding:13px 16px;background:var(--bg);
  border-bottom:var(--border-width) solid var(--border)}
.tbl-bar .tt{font-family:var(--font-display);font-weight:var(--display-weight);
  letter-spacing:var(--display-tracking);text-transform:var(--display-transform);font-size:18px;color:var(--ink)}
.tbl-bar .ct{font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}
.tbl-bar .sp{flex:1}
.tbl-search{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-3);background:var(--surface);
  border:var(--border-width) solid var(--border-strong);border-radius:var(--btn-radius);padding:8px 12px;min-width:170px}
.tbl-search svg{width:15px;height:15px}
.tbl{width:100%;border-collapse:collapse;font-family:var(--font-body)}
.tbl thead th{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);text-align:left;font-weight:500;padding:11px 16px;background:var(--surface);
  border-bottom:var(--border-width) solid var(--border)}
.tbl thead th.num,.tbl tbody td.num{text-align:right}
.tbl tbody td{padding:13px 16px;border-bottom:1px solid var(--border);font-size:14px;color:var(--ink);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover{background:var(--surface-2)}
.t-obj{display:flex;align-items:center;gap:11px}
.t-ic{width:34px;height:34px;border-radius:var(--radius-sm);background:var(--surface-2);display:grid;
  place-items:center;color:var(--ink-3);flex-shrink:0}
.t-ic svg{width:17px;height:17px}
.t-name{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:14.5px;color:var(--ink);line-height:1.2;white-space:nowrap}
.t-sub{font-size:12px;color:var(--ink-2);margin-top:1px}
.t-mono{font-family:var(--font-mono);font-size:13px;color:var(--ink-2)}
.t-rent{font-family:var(--font-mono);font-weight:600;font-size:14px;color:var(--ink)}

/* ============================================================
   ÉTAT DES LIEUX — condition report management
   ============================================================ */
.win{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);
  overflow:hidden;box-shadow:var(--shadow-card)}
.win-bar{display:flex;align-items:center;gap:14px;padding:12px 17px;background:var(--ink)}
.win-dots{display:flex;gap:6px}
.win-dots i{width:10px;height:10px;border-radius:999px;background:rgba(255,255,255,.28)}
.win-title{font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.72)}
.win-body{padding:18px;display:grid;grid-template-columns:200px 1fr 196px;gap:14px}
.edl-panel{border:var(--border-width) solid var(--border);border-radius:var(--radius);padding:16px 17px}
.edl-lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-3);margin:0 0 13px}
.rooms{display:flex;flex-direction:column;gap:7px}
.room{font-family:var(--font-body);font-size:14.5px;color:var(--ink-2);padding:9px 13px;
  border-radius:var(--btn-radius);border:var(--border-width) solid transparent;cursor:pointer}
.room:hover{background:var(--surface-2)}
.room.on{background:var(--accent-soft);border-color:var(--accent);color:var(--ink);font-weight:600}
.room.add{color:var(--ink-3)}
.elem-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:20px}
.elem-head .et{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:21px;color:var(--ink);margin:0}
.elem-head .en{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.elem{display:flex;align-items:center;gap:16px;padding:11px 0}
.elem .nm{font-size:15px;color:var(--ink);width:84px;flex-shrink:0}
.bar{flex:1;height:10px;background:var(--surface-2);border-radius:var(--radius-pill);overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);border-radius:var(--radius-pill)}
.elem .sc{font-family:var(--font-mono);font-size:13px;color:var(--ink);width:42px;text-align:right;flex-shrink:0}
.elem .ph{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);width:60px;flex-shrink:0}
.elem .thumb{width:34px;height:26px;border-radius:var(--radius-sm);background:var(--surface-2);
  border:var(--border-width) solid var(--border);display:grid;place-items:center;color:var(--ink-3);flex-shrink:0}
.elem .thumb svg{width:14px;height:14px}
.sig-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;
  border-bottom:1px dashed var(--border)}
.sig-row .who{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);
  text-transform:var(--display-transform);font-size:16px;color:var(--ink)}
.sig-row .ok{color:var(--positive);display:grid;place-items:center}
.sig-row .ok svg{width:16px;height:16px}
.sig-note{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);line-height:1.5;margin-top:14px}
.edl-foot{display:grid;grid-template-columns:1.5fr 1fr;gap:14px;padding:0 18px 18px}
.tl{display:flex;align-items:center;gap:14px;border:var(--border-width) solid var(--border);
  border-radius:var(--radius);padding:15px 17px}
.tl .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.tl .pt{font-family:var(--font-body);font-size:13.5px;color:var(--ink);padding:7px 13px;
  border-radius:var(--btn-radius);border:var(--border-width) solid var(--border-strong)}
.tl .pt.on{border-color:var(--accent);color:var(--ink);font-weight:600}
.tl .pt.future{border-style:dashed;color:var(--ink-3)}
.tl .dash{flex:1;border-top:1.5px dashed var(--border-strong);min-width:18px}
.cmp{display:flex;align-items:center;justify-content:center;background:var(--accent-soft);
  border:var(--border-width) solid var(--accent);border-radius:var(--radius);padding:15px;cursor:pointer;
  font-family:var(--font-body);font-weight:600;font-size:14.5px;color:var(--ink)}
.cmp:hover{background:var(--accent);color:var(--on-accent)}
@media(max-width:720px){.win-body{grid-template-columns:1fr}.edl-foot{grid-template-columns:1fr}}

/* ============================================================
   PAYMENT LIST — liste de loyers (dates, montants, statuts)
   ============================================================ */
.pay-wrap{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card)}
.pay-bar{display:flex;align-items:center;gap:12px;padding:13px 18px;background:var(--bg);border-bottom:var(--border-width) solid var(--border)}
.pay-bar .tt{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);text-transform:var(--display-transform);font-size:17px;color:var(--ink);line-height:1}
.pay-bar .sp{flex:1}
.pay-bar .total{font-family:var(--font-mono);font-size:13px;color:var(--ink-2)}
.pay-bar .total b{color:var(--ink);font-weight:700}
.pay-list{display:flex;flex-direction:column}
.pay-row{display:grid;grid-template-columns:34px 1fr 120px 130px 120px;align-items:center;gap:0;padding:11px 18px;border-bottom:1px solid var(--border);transition:background .1s}
.pay-row:last-child{border-bottom:none}
.pay-row:hover{background:var(--surface-2)}
.pay-row.hd{background:var(--bg);border-bottom:var(--border-width) solid var(--border)}
.pay-row.hd span{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:500}
.pay-idx{font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}
.pay-period{font-family:var(--font-body);font-size:14px;color:var(--ink);font-weight:500}
.pay-due{font-family:var(--font-mono);font-size:13px;color:var(--ink-2)}
.pay-amt{font-family:var(--font-mono);font-size:14px;font-weight:600;color:var(--ink);text-align:right}
.pay-st{display:flex;justify-content:flex-end}
.pay-foot{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;background:var(--surface-2);border-top:var(--border-width) solid var(--border)}
.pay-foot .lbl{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.pay-foot .sum{font-family:var(--font-mono);font-size:15px;font-weight:600;color:var(--ink)}

/* ============================================================
   NEW OBJECT FORM — formulaire nouvel objet
   ============================================================ */
.form-wrap{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card)}
.form-bar{display:flex;align-items:center;gap:12px;padding:14px 20px;background:var(--bg);border-bottom:var(--border-width) solid var(--border)}
.form-bar .tt{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--display-tracking);text-transform:var(--display-transform);font-size:18px;color:var(--ink);line-height:1}
.form-bar .sp{flex:1}
.form-body{padding:24px 24px 28px;display:flex;flex-direction:column;gap:20px}
.form-sect{display:flex;flex-direction:column;gap:14px}
.form-sect-title{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);padding-bottom:10px;border-bottom:var(--border-width) solid var(--border)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-row.three{grid-template-columns:1fr 1fr 1fr}
.form-row.full{grid-template-columns:1fr}
.fld{display:flex;flex-direction:column;gap:6px}
.fld label{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);font-weight:500}
.fld input,.fld select{font-family:var(--font-body);font-size:14px;color:var(--ink);background:var(--bg);border:var(--border-width) solid var(--border-strong);border-radius:var(--btn-radius);padding:10px 13px;width:100%}
.fld input:focus,.fld select:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}
.fld input::placeholder{color:var(--ink-3)}
.fld .hint{font-size:12px;color:var(--ink-3);margin-top:2px}
.form-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:16px 24px;background:var(--surface-2);border-top:var(--border-width) solid var(--border)}

/* ============================================================
   HOVER DYNAMIQUE — icône au jaune signature (--accent-2)
   Survol d'une ligne de tableau ou d'un item de menu : l'icône
   passe au jaune ; le fond s'assombrit pour garder la lisibilité.
   ============================================================ */
.tbl tbody tr:hover .t-ic{background:var(--accent)}
.tbl tbody tr:hover .t-ic svg{color:var(--accent-2)}
.menu .mi{transition:background .12s,color .12s}
.menu .mi:hover{background:var(--accent);color:var(--on-accent)}
.menu .mi:hover svg{color:var(--accent-2)}
.menu .mi.danger{color:var(--danger)}.menu .mi.danger svg{color:var(--danger)}
.menu .mi.danger:hover{background:var(--danger-soft);color:var(--danger)}
.menu .mi.danger:hover svg{color:var(--danger)}

/* ── Bouton danger (utilisé dans les dialogues) ── */
.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}
.btn-danger:hover{background:#C23B3B;border-color:#C23B3B}

/* ============================================================
   TABS — onglets soulignés
   ============================================================ */
.tabs{display:flex;gap:4px;border-bottom:var(--border-width) solid var(--border)}
.tab{appearance:none;background:none;border:none;font-family:var(--font-body);font-size:14px;font-weight:500;color:var(--ink-2);padding:11px 14px;cursor:pointer;position:relative;display:inline-flex;align-items:center;gap:8px;letter-spacing:var(--body-tracking)}
.tab svg{width:16px;height:16px}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--accent);font-weight:600}
.tab.on svg{color:var(--accent-2)}
.tab.on::after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;background:var(--accent);border-radius:2px}
.tab .cnt{font-family:var(--font-mono);font-size:11px;background:var(--surface-2);color:var(--ink-3);border-radius:var(--radius-pill);padding:1px 7px}
.tab.on .cnt{background:var(--accent-soft);color:var(--accent)}

/* ============================================================
   BREADCRUMB — fil d'ariane (autonome)
   ============================================================ */
.crumbs{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);font-family:var(--font-body);flex-wrap:wrap}
.crumbs a{color:var(--ink-2);text-decoration:none;cursor:pointer}
.crumbs a:hover{color:var(--accent)}
.crumbs .sep{color:var(--ink-3);display:grid;place-items:center}.crumbs .sep svg{width:14px;height:14px}
.crumbs b{color:var(--ink);font-weight:600}

/* ============================================================
   PAGINATION — pager
   ============================================================ */
.pager{display:inline-flex;align-items:center;gap:4px}
.pager button{min-width:34px;height:34px;padding:0 6px;border-radius:var(--btn-radius);border:var(--border-width) solid var(--border);background:var(--surface);color:var(--ink-2);font-family:var(--font-mono);font-size:13px;cursor:pointer;display:grid;place-items:center}
.pager button svg{width:15px;height:15px}
.pager button:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}
.pager button.on{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}
.pager button:disabled{opacity:.4;cursor:default}
.pager .gap{color:var(--ink-3);padding:0 2px}

/* ============================================================
   CHIP / TAG — étiquette (filtre, sélection amovible)
   ============================================================ */
.chip{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-body);font-size:13px;font-weight:500;color:var(--ink);background:var(--surface-2);border:var(--border-width) solid var(--border);border-radius:var(--radius-pill);padding:5px 12px}
.chip svg{width:13px;height:13px;color:var(--ink-3)}
.chip .x{display:grid;place-items:center;cursor:pointer;color:var(--ink-3);margin:-2px -4px -2px 0;border-radius:var(--radius-pill);width:18px;height:18px}
.chip .x svg{width:12px;height:12px}
.chip .x:hover{background:var(--accent);color:var(--accent-2)}
.chip.sel{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.chip.sel svg{color:var(--accent)}

/* ============================================================
   AVATAR — tailles + pile (complète .avatar de base)
   ============================================================ */
.av{width:40px;height:40px;border-radius:var(--radius-pill);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-size:14px;font-weight:700;font-family:var(--font-display);flex-shrink:0}
.av--sm{width:30px;height:30px;font-size:11px}
.av--lg{width:52px;height:52px;font-size:18px}
.av--ghost{background:var(--surface-2);color:var(--ink-2)}
.av--warn{background:var(--accent-2);color:var(--ink)}
.av-stack{display:flex}
.av-stack .av{border:2px solid var(--surface);margin-left:-10px}.av-stack .av:first-child{margin-left:0}

/* ============================================================
   ALERT — encart tonal (info · succès · attention · danger)
   ============================================================ */
.alert{display:flex;gap:12px;padding:14px 16px;border-radius:var(--radius);border:var(--border-width) solid;align-items:flex-start}
.alert .ic{flex-shrink:0;margin-top:1px;display:grid;place-items:center}.alert .ic svg{width:19px;height:19px}
.alert b{display:block;font-size:14px;font-weight:700;margin-bottom:2px}
.alert p{font-size:13px;line-height:1.45;margin:0;color:var(--ink-2)}
.alert--info{background:var(--accent-soft);border-color:#C6D6F7}.alert--info .ic{color:var(--accent)}.alert--info b{color:var(--ink)}
.alert--ok{background:var(--positive-soft);border-color:#C6E6D5}.alert--ok .ic{color:var(--positive)}.alert--ok b{color:#14603F}
.alert--warn{background:var(--warning-soft);border-color:#F0DDB0}.alert--warn .ic{color:var(--warning)}.alert--warn b{color:#8A5600}
.alert--bad{background:var(--danger-soft);border-color:#F1C9C9}.alert--bad .ic{color:var(--danger)}.alert--bad b{color:#9A2A2A}

/* ============================================================
   TOAST — notification transitoire (fond encre)
   ============================================================ */
.toast{display:flex;align-items:center;gap:12px;background:var(--ink);color:#fff;border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow-pop);min-width:280px;max-width:360px}
.toast .ic{display:grid;place-items:center;flex-shrink:0}.toast .ic svg{width:18px;height:18px;color:var(--accent-2)}
.toast .msg{flex:1;font-size:13.5px;line-height:1.35}
.toast .msg b{font-weight:600;color:#fff;display:block}
.toast .msg span{color:#B9C6DA}
.toast .x{color:#93A1B5;cursor:pointer;display:grid;place-items:center}.toast .x:hover{color:#fff}.toast .x svg{width:15px;height:15px}

/* ============================================================
   WIZARD / STEPPER — assistant à étapes (horizontal)
   ============================================================ */
.wiz{display:flex;align-items:center;width:100%}
.wiz-step{display:flex;align-items:center;gap:10px}
.wiz-step .num{width:30px;height:30px;border-radius:var(--radius-pill);display:grid;place-items:center;font-family:var(--font-mono);font-size:13px;font-weight:600;flex-shrink:0;border:var(--border-width) solid var(--border-strong);background:var(--surface);color:var(--ink-3)}
.wiz-step .num svg{width:15px;height:15px}
.wiz-step .lb{font-size:13.5px;color:var(--ink-3);font-weight:500;white-space:nowrap}
.wiz-step.on .num{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.wiz-step.on .lb{color:var(--ink);font-weight:600}
.wiz-step.done .num{background:var(--accent-soft);border-color:var(--accent-soft);color:var(--accent)}
.wiz-step.done .lb{color:var(--ink-2)}
.wiz-line{flex:1;height:2px;background:var(--border);margin:0 12px;border-radius:2px;min-width:20px}
.wiz-line.done{background:var(--accent)}

/* ============================================================
   TRAIL — suivi de statut (timeline verticale) : cycle de vie d'un acte
   ============================================================ */
.trail{display:flex;flex-direction:column}
.trail-item{display:grid;grid-template-columns:26px 1fr;gap:12px;padding-bottom:16px;position:relative}
.trail-item:last-child{padding-bottom:0}
.trail-dot{width:26px;height:26px;border-radius:var(--radius-pill);display:grid;place-items:center;z-index:1;background:var(--surface);border:2px solid var(--border-strong);color:var(--ink-3)}
.trail-dot svg{width:13px;height:13px}
.trail-item:not(:last-child)::before{content:"";position:absolute;left:12px;top:24px;bottom:-2px;width:2px;background:var(--border)}
.trail-item.done .trail-dot{background:var(--positive);border-color:var(--positive);color:#fff}
.trail-item.done::before{background:var(--positive)}
.trail-item.on .trail-dot{background:var(--accent);border-color:var(--accent);color:#fff}
.trail-tt{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:14.5px;color:var(--ink);line-height:1.3}
.trail-item.todo .trail-tt{color:var(--ink-3)}
.trail-meta{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);margin-top:2px}

/* ============================================================
   ACCORDION — accordéon (clauses, FAQ)
   ============================================================ */
.acc{border:var(--border-width) solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
.acc-item{border-bottom:var(--border-width) solid var(--border)}.acc-item:last-child{border-bottom:none}
.acc-h{display:flex;align-items:center;gap:12px;padding:14px 16px;cursor:pointer;font-family:var(--font-body);font-size:14.5px;font-weight:600;color:var(--ink)}
.acc-h .ix{font-family:var(--font-mono);font-size:12px;color:var(--accent);flex-shrink:0}
.acc-h .chev{margin-left:auto;color:var(--ink-3);transition:transform .18s;display:grid;place-items:center}.acc-h .chev svg{width:17px;height:17px}
.acc-item.open .acc-h .chev{transform:rotate(180deg)}
.acc-b{padding:0 16px 16px 42px;font-size:13.5px;line-height:1.55;color:var(--ink-2);display:none}
.acc-item.open .acc-b{display:block}

/* ============================================================
   EMPTY STATE — état vide
   ============================================================ */
.empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding:30px 24px;gap:6px}
.empty .ic{width:56px;height:56px;border-radius:var(--radius-lg);background:var(--surface-2);display:grid;place-items:center;color:var(--ink-3);margin-bottom:8px}.empty .ic svg{width:26px;height:26px}
.empty .tt{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:17px;color:var(--ink)}
.empty .ds{font-size:13.5px;color:var(--ink-2);max-width:300px;line-height:1.45}
.empty .btn{margin-top:12px}

/* ============================================================
   SKELETON — squelette de chargement (shimmer)
   ============================================================ */
@keyframes skel-shimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}
.skel{background:var(--surface-2);background-image:linear-gradient(90deg,var(--surface-2) 0,#F3F7FC 40px,var(--surface-2) 80px);background-size:200px 100%;background-repeat:no-repeat;animation:skel-shimmer 1.3s infinite linear;border-radius:var(--radius-sm)}
.skel--line{height:12px}.skel--title{height:18px;width:55%}.skel--circle{width:40px;height:40px;border-radius:var(--radius-pill)}

/* ============================================================
   DROPZONE + PIÈCE JOINTE — dépôt de fichier
   ============================================================ */
.drop{border:2px dashed var(--border-strong);border-radius:var(--radius);background:var(--bg);display:flex;flex-direction:column;align-items:center;text-align:center;gap:3px;padding:24px;cursor:pointer;transition:border-color .14s,background .14s}
.drop:hover{border-color:var(--accent);background:var(--accent-soft)}
.drop .ic{color:var(--accent);margin-bottom:4px}.drop .ic svg{width:26px;height:26px}
.drop .tt{font-size:14px;font-weight:600;color:var(--ink)}.drop .tt u{color:var(--accent);text-decoration:none}
.drop .ds{font-size:12px;color:var(--ink-3);font-family:var(--font-mono)}
.file-att{display:flex;align-items:center;gap:12px;padding:11px 13px;border:var(--border-width) solid var(--border);border-radius:var(--btn-radius);background:var(--surface)}
.file-att .ic{width:36px;height:36px;border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);display:grid;place-items:center;flex-shrink:0}.file-att .ic svg{width:17px;height:17px}
.file-att .nm{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.2}
.file-att .mt{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);margin-top:2px}
.file-att .x{margin-left:auto;color:var(--ink-3);cursor:pointer;display:grid;place-items:center}.file-att .x:hover{color:var(--danger)}.file-att .x svg{width:16px;height:16px}

/* ============================================================
   DIALOG — fenêtre modale (confirmation)
   ============================================================ */
.dialog{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);border:var(--border-width) solid var(--border);width:400px;max-width:100%;overflow:hidden}
.dialog-body{padding:22px 24px 10px;display:flex;gap:15px}
.dialog-body .ic{width:42px;height:42px;border-radius:var(--radius-pill);background:var(--danger-soft);color:var(--danger);display:grid;place-items:center;flex-shrink:0}.dialog-body .ic svg{width:20px;height:20px}
.dialog-tt{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:18px;color:var(--ink);margin-bottom:6px}
.dialog-tx{font-size:13.5px;line-height:1.5;color:var(--ink-2)}
.dialog-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 24px 20px}

/* ============================================================
   FIELD STATES — champ avec validation (succès / erreur)
   ============================================================ */
.fld.ok input{border-color:var(--positive)}
.fld.err input{border-color:var(--danger)}
.fld .vmsg{font-size:12px;margin-top:4px;display:flex;align-items:center;gap:5px}.fld .vmsg svg{width:13px;height:13px}
.fld.ok .vmsg{color:var(--positive)}
.fld.err .vmsg{color:var(--danger)}


/* ============================================================
   DATE PICKER — sélecteur de date avec calendrier
   ============================================================ */
.datefield{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-body);font-size:14px;color:var(--ink);background:var(--surface);border:var(--border-width) solid var(--border-strong);border-radius:var(--btn-radius);padding:10px 13px;min-width:200px;cursor:pointer}
.datefield svg{width:16px;height:16px;color:var(--ink-3)}
.datefield .val{flex:1}.datefield .val.ph{color:var(--ink-3)}
.cal{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-pop);padding:14px;width:286px}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cal-head .mo{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:15px;color:var(--ink)}
.cal-nav{width:28px;height:28px;border-radius:var(--btn-radius);border:var(--border-width) solid var(--border);background:var(--surface);display:grid;place-items:center;cursor:pointer;color:var(--ink-2)}
.cal-nav:hover{background:var(--surface-2);color:var(--ink)}.cal-nav svg{width:15px;height:15px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-wd{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);text-align:center;padding-bottom:6px}
.cal-d{aspect-ratio:1;display:grid;place-items:center;font-family:var(--font-mono);font-size:13px;color:var(--ink);border-radius:var(--radius-sm);cursor:pointer;border:var(--border-width) solid transparent}
.cal-d:hover{background:var(--surface-2)}
.cal-d.mut{color:var(--ink-3);opacity:.5}
.cal-d.today{border-color:var(--accent);color:var(--accent);font-weight:600}
.cal-d.sel{background:var(--accent);color:var(--on-accent);font-weight:600}
.cal-d.sel:hover{background:var(--accent-hover)}
.cal-d.rng{background:var(--accent-soft);color:var(--accent);border-radius:0}

/* ============================================================
   CHAT PANEL — assistant (chatbot) ou fil de commentaires
   ============================================================ */
.chat{display:flex;flex-direction:column;background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card);width:100%;max-width:380px;height:452px}
.chat-head{display:flex;align-items:center;gap:11px;padding:13px 16px;border-bottom:var(--border-width) solid var(--border);background:var(--bg)}
.chat-head .bot{width:34px;height:34px;border-radius:var(--radius-pill);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;flex-shrink:0}.chat-head .bot svg{width:18px;height:18px}
.chat-head .tt{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:15px;color:var(--ink);line-height:1.15}
.chat-head .st{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--positive);display:flex;align-items:center;gap:5px;margin-top:3px}
.chat-head .st::before{content:"";width:6px;height:6px;border-radius:var(--radius-pill);background:var(--positive)}
.chat-head .x{margin-left:auto;color:var(--ink-3);cursor:pointer;display:grid;place-items:center}.chat-head .x svg{width:17px;height:17px}
.chat-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:14px;background:var(--bg)}
.chat-day{text-align:center;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.bubble{display:flex;gap:9px;max-width:90%}
.bubble .av{width:28px;height:28px;font-size:10px}
.bubble .who{font-size:11px;color:var(--ink-3);margin-bottom:3px;font-family:var(--font-mono)}
.bubble .txt{font-size:13.5px;line-height:1.45;padding:9px 13px;border-radius:14px}
.bubble.them .txt{background:var(--surface);border:var(--border-width) solid var(--border);color:var(--ink);border-top-left-radius:4px}
.bubble.me{align-self:flex-end;flex-direction:row-reverse}
.bubble.me .txt{background:var(--accent);color:var(--on-accent);border-top-right-radius:4px}
.bubble.me .who{text-align:right}
.chat-input{display:flex;align-items:flex-end;gap:9px;padding:12px 14px;border-top:var(--border-width) solid var(--border);background:var(--surface)}
.chat-input textarea{flex:1;font-family:var(--font-body);font-size:13.5px;color:var(--ink);background:var(--bg);border:var(--border-width) solid var(--border-strong);border-radius:var(--radius);padding:10px 12px;resize:none;height:42px;outline:none}
.chat-input textarea:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}
.chat-input textarea::placeholder{color:var(--ink-3)}
.chat-send{width:42px;height:42px;border-radius:var(--radius);background:var(--accent);color:var(--on-accent);border:none;display:grid;place-items:center;cursor:pointer;flex-shrink:0}
.chat-send:hover{background:var(--accent-hover)}.chat-send svg{width:18px;height:18px}

/* ============================================================
   DATE SPINNER — sélection jour / mois / année (sans calendrier)
   Trois colonnes déroulantes : utile pour une date de naissance,
   une échéance lointaine, ou une saisie au clavier rapide.
   ============================================================ */
.dspin{display:flex;gap:8px;background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:12px}
.dspin-col{display:flex;flex-direction:column;min-width:0}
.dspin-lb{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:0 4px 7px;text-align:center}
.dspin-list{position:relative;height:154px;overflow-y:auto;overflow-x:hidden;border:var(--border-width) solid var(--border);border-radius:var(--btn-radius);background:var(--bg);scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}
.dspin-list::-webkit-scrollbar{width:5px}
.dspin-list::-webkit-scrollbar-track{background:transparent}
.dspin-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-pill)}
.dspin-list::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}
.dspin-list ul{list-style:none;margin:0;padding:4px}
.dspin-list li{font-family:var(--font-mono);font-size:13.5px;color:var(--ink-2);text-align:center;padding:7px 12px;border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap}
.dspin-list li:hover{background:var(--surface-2);color:var(--ink)}
.dspin-list li.on{background:var(--accent);color:var(--on-accent);font-weight:600}
.dspin-list li.on:hover{background:var(--accent-hover)}
.dspin-list.wide li{text-align:left}
.dspin-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:11px;padding-top:11px;border-top:var(--border-width) solid var(--border)}
.dspin-read{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:12.5px;color:var(--ink)}
.dspin-read svg{width:14px;height:14px;color:var(--accent)}

/* Variante compacte : trois selects côte à côte */
.dsel{display:flex;gap:8px;align-items:flex-end}
.dsel .fld{gap:5px}
.dsel .sel-wrap{min-width:0}
.dsel .day{width:82px}.dsel .mon{width:142px}.dsel .yr{width:96px}

/* ============================================================
   E-MAIL · registre courrier, pas messagerie instantanée.
   Pas de bulles : filets fins, blanc généreux, métadonnées en mono.
   ============================================================ */
.mail{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden;width:100%}
.mail-top{padding:22px 26px 18px;border-bottom:var(--border-width) solid var(--border)}
.mail-subj{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:21px;color:var(--ink);line-height:1.25;margin:0}
.mail-meta{display:flex;align-items:center;gap:10px;margin-top:11px;flex-wrap:wrap}
/* Le fil lu dans la page · 30.08. Les sélecteurs sont passés SOUS le titre :
   côte à côte, ils étaient en flex-shrink:0 et le titre en min-width:0, si
   bien qu'un nom de bail un peu long écrasait le titre jusqu'à le briser
   lettre par lettre. Une largeur bornée s'use ; un empilement, non. */
.mail--page{border:none;border-radius:0;background:transparent}
.mail--page .mail-top{padding:0 0 18px}
.mail--page .mail-list,.mail--page .msg{padding-left:0;padding-right:0}
.mail-controls{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.mail-controls .select-wrap{max-width:340px;min-width:0}
.mail-controls .select{max-width:100%;text-overflow:ellipsis}
.mail-cnt{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3)}
.mail-list{display:flex;flex-direction:column}
.msg{padding:18px 26px;border-bottom:var(--border-width) solid var(--border)}
.msg:last-child{border-bottom:none}
.msg-h{display:flex;align-items:center;gap:12px}
.msg-id{min-width:0}
.msg-name{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:14.5px;color:var(--ink);line-height:1.2}
.msg-addr{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg-date{margin-left:auto;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}
.msg-acts{display:flex;gap:2px}
.msg-body{font-size:var(--doc-body);line-height:1.62;color:var(--ink-2);max-width:var(--doc-measure);margin-top:14px;padding-left:52px}
.msg-body p{margin:0 0 .75em}.msg-body p:last-child{margin:0}
.msg-body strong{color:var(--ink);font-weight:600}
.msg-sig{margin-top:15px;padding-left:52px;font-size:12.5px;line-height:1.5;color:var(--ink-3)}
.msg-quote{margin-top:14px;margin-left:52px;padding-left:14px;border-left:2px solid var(--border);font-size:12.5px;line-height:1.55;color:var(--ink-3);max-width:var(--doc-measure)}
.msg-att{margin-top:15px;margin-left:52px;display:flex;gap:10px;flex-wrap:wrap}
/* message replié : une seule ligne cliquable */
.msg.fold{display:flex;align-items:center;gap:12px;cursor:pointer;padding:13px 26px}
.msg.fold:hover{background:var(--surface-2)}
.msg.fold .msg-name{font-size:13.5px;flex-shrink:0}
.msg-snip{flex:1;min-width:0;font-size:13px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg.unread .msg-name::after{content:"";display:inline-block;width:6px;height:6px;border-radius:var(--radius-pill);background:var(--accent);margin-left:8px;vertical-align:middle}
.mail-foot{display:flex;align-items:center;gap:9px;padding:15px 26px;background:var(--bg);border-top:var(--border-width) solid var(--border)}

/* ── Rédaction ── */
.compose{background:var(--surface);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);overflow:hidden;width:100%;display:flex;flex-direction:column}
.compose-top{display:flex;align-items:center;gap:10px;padding:14px 22px;border-bottom:var(--border-width) solid var(--border)}
.compose-tt{font-family:var(--font-display);font-weight:600;letter-spacing:var(--display-tracking);font-size:15px;color:var(--ink)}
.compose-top .msg-acts{margin-left:auto}
.crow{display:flex;align-items:center;gap:14px;padding:11px 22px;border-bottom:var(--border-width) solid var(--border);min-height:46px}
.crow .lb{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);width:34px;flex-shrink:0}
.crow input{flex:1;min-width:60px;border:none;outline:none;background:none;font-family:var(--font-body);font-size:14px;color:var(--ink);letter-spacing:var(--body-tracking);padding:0}
.crow input::placeholder{color:var(--ink-3)}
.crow .cc{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);cursor:pointer;letter-spacing:.05em;text-transform:uppercase;flex-shrink:0}
.crow .cc:hover{color:var(--accent)}
.crow.subj input{font-family:var(--font-display);font-size:17px;font-weight:600;letter-spacing:var(--display-tracking)}
.crow .rcp{display:flex;gap:7px;align-items:center;flex-wrap:wrap;flex:1}
.compose-body{padding:18px 22px 22px;font-size:var(--doc-body);line-height:1.62;color:var(--ink-2);max-width:var(--doc-measure);flex:1}
.compose-body p{margin:0 0 .75em}
.compose-body .ph{color:var(--ink-3)}
.compose-tools{display:flex;align-items:center;gap:3px;padding:9px 22px;border-top:var(--border-width) solid var(--border)}
.mtb{width:30px;height:30px;border:none;background:none;border-radius:var(--radius-sm);color:var(--ink-2);display:grid;place-items:center;cursor:pointer}
.mtb:hover{background:var(--surface-2);color:var(--ink)}
.mtb svg{width:16px;height:16px}
.mtb.on{background:var(--accent-soft);color:var(--accent)}
.mtb-sep{width:1px;height:18px;background:var(--border);margin:0 6px}
.compose-foot{display:flex;align-items:center;gap:10px;padding:13px 22px;background:var(--bg);border-top:var(--border-width) solid var(--border)}
.compose-foot .sv{margin-left:auto;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}
/* ── Minute · l'éditeur en un écran ───────────────────────────────────────────
 *
 * Branche `minute-dans-ecrire`. Il remplace le tiroir latéral de vérification :
 * à gauche ce que le bailleur complète, à droite l'acte qui se remplit à
 * mesure. Presque pleine page — un acte se lit en entier, pas dans une colonne.
 */
.veil--minute { align-items: stretch; justify-content: center; }
.minute {
  display: flex; flex-direction: column;
  width: min(1560px, 96vw); height: 94vh; margin: 3vh auto;
  background: var(--surface, #fff); border-radius: 8px; overflow: hidden;
  box-shadow: 0 18px 48px rgba(16, 32, 58, .28);
}
.minute-head {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px; border-bottom: 1px solid var(--border, #DDE5EF);
}
.minute-brand { font-weight: 700; }
.minute-eyebrow {
  font-family: var(--font-mono, monospace); font-size: 11px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--ink-2, #56657E);
}
.minute-sp { flex: 1; }
/* Le choix du document vit dans l'entête · toujours visible, quel que soit le
   défilement du panneau. Stan, 28.08.2026 : « le choix du document doit se
   faire dans le header de la page et toujours visible ». */
.minute-quoi-tete { display: inline-flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--ink-2, #56657E); }
.minute-quoi-tete select {
  padding: 5px 8px; border: 1px solid var(--border-strong, #C6D2E2); border-radius: 4px;
  font: inherit; font-size: 13px; background: var(--surface, #fff); color: var(--ink, #14213A); max-width: 340px;
}
/* Les valeurs reprises du dossier, repliées par défaut · « on est censé avoir
   récupéré les bonnes infos » — le bailleur déplie s'il veut vérifier. */
.minute-dossier > summary {
  cursor: pointer; list-style: none; margin: 14px 0 6px; padding: 8px 10px;
  border: 1px dashed var(--border-strong, #C6D2E2); border-radius: 4px;
  font-size: 12.5px; color: var(--ink-2, #56657E); background: var(--surface-2, #F3F6FA);
}
.minute-dossier > summary::-webkit-details-marker { display: none; }
.minute-dossier > summary::before { content: '▸ '; }
.minute-dossier[open] > summary::before { content: '▾ '; }
.minute-champ select {
  width: 100%; padding: 8px 10px; border: 1px solid var(--border-strong, #C6D2E2);
  border-radius: 4px; font: inherit; font-size: 14px; background: var(--surface, #fff);
}
.minute-corps { display: grid; grid-template-columns: minmax(320px, 420px) 1fr; flex: 1; min-height: 0; }
.minute-saisie { overflow-y: auto; padding: 18px 20px; border-right: 1px solid var(--border, #DDE5EF); }
.minute-acte { overflow: auto; background: var(--surface-2, #F3F6FA); padding: 18px; }
.minute-acte iframe { width: 794px; height: 1123px; border: 0; background: #fff;
  box-shadow: 0 2px 10px rgba(16, 32, 58, .14); display: block; margin: 0 auto; }

.minute-sect {
  margin: 18px 0 10px; padding-top: 12px; border-top: 1px solid var(--border, #DDE5EF);
  font-family: var(--font-mono, monospace); font-size: 11px; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3, #8A97AC);
}
.minute-champ { margin-bottom: 12px; }
.minute-champ label { display: block; font-size: 12.5px; color: var(--ink-2, #56657E); margin-bottom: 4px; }
.minute-champ input, .minute-champ textarea {
  width: 100%; padding: 8px 10px; border: 1px solid var(--border-strong, #C6D2E2);
  border-radius: 4px; font: inherit; font-size: 14px;
}
.minute-champ textarea { resize: vertical; line-height: 1.5; }
.minute-source {
  display: inline-block; margin-top: 4px; font-family: var(--font-mono, monospace);
  font-size: 9.5px; letter-spacing: .06em; text-transform: uppercase;
  padding: 1px 5px; border-radius: 3px;
}
.minute-source.dossier { background: #EDF6F1; color: #1B6B4A; }
.minute-source.saisie { background: #FAF3E2; color: #8A6A18; }
.minute-jauge {
  display: block; margin-top: 4px; font-family: var(--font-mono, monospace);
  font-size: 11px; color: var(--ink-3, #8A97AC);
}
.minute-jauge.trop { color: #A33; font-weight: 700; }
.minute-alerte {
  background: #FAF3E2; border: 1px solid #E6D3A0; border-radius: 4px;
  padding: 10px 12px; margin: 10px 0; font-size: 12.5px; line-height: 1.55;
}
.minute-alerte--ok { background: #EDF6F1; border-color: #BFDDCD; }
.minute-alerte ul { margin: 6px 0; padding-left: 17px; }
.minute-prop { margin-top: 10px; padding-top: 9px; border-top: 1px solid rgba(0, 0, 0, .12); }
.minute-prop-t {
  font-family: var(--font-mono, monospace); font-size: 9.5px; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3, #8A97AC); margin-bottom: 5px;
}
.minute-prop-x {
  background: #fff; border: 1px solid var(--border, #DDE5EF); border-radius: 4px;
  padding: 9px 11px; font-size: 13px; line-height: 1.55; margin-bottom: 9px;
}
.minute-etat {
  font-family: var(--font-mono, monospace); font-size: 11px; letter-spacing: .05em;
  text-transform: uppercase; color: var(--ink-3, #8A97AC); margin-right: 4px;
}
.minute-etat.ok { color: #1B6B4A; }
.minute-etat.ko { color: #A33; }

/* Les trois choix, en tête de l'éditeur · ils remplacent trois modales. */
.minute-choix { border-bottom: 1px solid var(--border, #DDE5EF); padding-bottom: 14px; margin-bottom: 4px; }
.minute-choix label { display: block; font-size: 12.5px; color: var(--ink-2, #56657E); margin-bottom: 9px; }
.minute-choix select {
  display: block; width: 100%; margin-top: 4px; padding: 7px 9px;
  border: 1px solid var(--border-strong, #C6D2E2); border-radius: 4px; font: inherit; font-size: 14px;
  background: var(--surface, #fff); color: var(--ink, #14213A);
}
/* Le choix du document · visible, pas replié dans une liste déroulante.
   C'est la décision principale de l'écran ; elle en occupe la tête. */
.minute-quoi { margin-bottom: 14px; }
.minute-quoi-t {
  display: block; font-size: 12.5px; color: var(--ink-2, #56657E); margin-bottom: 9px;
}
.minute-quoi-g { display: flex; gap: 8px; align-items: baseline; margin-bottom: 8px; }
.minute-quoi-fam {
  font-family: var(--font-mono, monospace); font-size: 10px; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3, #8A97AC);
  flex: 0 0 82px; padding-top: 7px;
}
/* Les documents d'une famille · tous au même fer, y compris le premier. */
.minute-quoi-l { display: flex; flex-wrap: wrap; gap: 6px; flex: 1 1 auto; min-width: 0; }
.minute-quoi-b {
  padding: 6px 11px; border: 1px solid var(--border-strong, #C6D2E2); border-radius: 999px;
  background: var(--surface, #fff); color: var(--ink-2, #56657E);
  font: inherit; font-size: 13px; line-height: 1.3; cursor: pointer; text-align: left;
}
.minute-quoi-b:hover { border-color: var(--accent, #1E3A8A); color: var(--ink, #14213A); }
.minute-quoi-b.on {
  background: var(--accent, #1E3A8A); border-color: var(--accent, #1E3A8A);
  color: #fff; cursor: default; font-weight: 600;
}
@media (max-width: 720px) { .minute-quoi-g { flex-direction: column; } .minute-quoi-fam { padding-top: 0; } }

.minute-ailleurs { font-size: 12px; color: var(--ink-3, #8A97AC); }
.minute-ailleurs button {
  background: none; border: 0; padding: 0; font: inherit; font-size: 12px;
  color: var(--accent, #1E3A8A); text-decoration: underline; cursor: pointer;
}
/* Une pièce référencée sans son fichier · elle ne se donne pas des airs. */
.upload-tile--vide { opacity: .72; border-style: dashed; }

/* Les liens du dossier · l'objet et les personnes, atteints depuis le bail
   qui leur donne un sens plutôt que depuis une liste globale. */
.dossier-liens { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 0; }
.dossier-liens a {
  font-size: 12.5px; text-decoration: none; padding: 4px 10px; border-radius: 999px;
  border: 1px solid var(--border, #DDE5EF); color: var(--ink-2, #56657E);
  background: var(--surface, #fff);
}
.dossier-liens a:hover { border-color: var(--accent, #1E3A8A); color: var(--accent, #1E3A8A); }

/* La série, dans l'éditeur · décision de Stan du 07.09.2026 (SLK-403).
   Écrire le même contenu pour plusieurs baux se faisait dans un assistant à
   étapes ; c'est désormais un dépliant sous le bail principal. Replié tant
   qu'aucun bail n'est retenu : le cas courant reste un bail, un acte. */
.minute-serie { margin: 10px 0 2px; font-size: 12.5px; }
.minute-serie summary { cursor: pointer; color: var(--ink-2, #56657E); list-style: none; }
.minute-serie summary::-webkit-details-marker { display: none; }
.minute-serie summary::before { content: '▸ '; color: var(--ink-3, #8A97AC); }
.minute-serie[open] summary::before { content: '▾ '; }
.minute-serie summary:hover { color: var(--accent, #2456D6); }
.minute-serie [data-role="serie-compte"] { color: var(--accent, #2456D6); font-weight: 600; }
.minute-serie-note { color: var(--ink-3, #8A97AC); font-size: 11.5px; margin: 6px 0 8px; line-height: 1.45; }
.minute-serie .ck { display: flex; align-items: flex-start; gap: 8px; padding: 4px 0; color: var(--ink, #18213A); }
.minute-serie .ck input { margin-top: 2px; flex: 0 0 auto; }

/* La visionneuse · SLK-401, validée par Stan le 07.09.2026.
   Une pièce déposée n'était qu'une tuile avec une icône. Le contenu s'affiche
   désormais dans le lecteur qui sert déjà les actes produits — un PDF dans un
   cadre, une image à sa taille — plutôt que d'ouvrir un second endroit. */
.apercu { display: flex; flex-direction: column; gap: 10px; height: 100%; }
.apercu-tete { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.apercu-nom { font-weight: 600; color: var(--ink, #18213A); }
.apercu-corps {
  flex: 1; min-height: 420px; display: flex; align-items: center; justify-content: center;
  background: var(--surface-2, #F2F5FA); border: 1px solid var(--border, #DDE5EF);
  border-radius: var(--radius-lg, 12px); overflow: auto; padding: 10px;
}
.apercu-pdf { width: 100%; height: 100%; min-height: 400px; border: 0; background: #FFF; }
.apercu-image { max-width: 100%; height: auto; border-radius: 6px; background: #FFF; }
