/* ==========================================================================
   KABLANN — DESIGN SYSTEM · LES COMPOSANTS ET LA COQUE (étape 1)
   Toutes les valeurs viennent de tokens.css. Préfixe « ds- » : rien ici ne
   touche l’interface actuelle (kb.css), qui ne charge pas ce fichier.
   ========================================================================== */

*,*::before,*::after{box-sizing:border-box}
html,body{margin:0}
body.ds{background:var(--color-background);color:var(--color-text);font-family:var(--font-sans);
  font-size:var(--text-body);line-height:var(--leading);-webkit-font-smoothing:antialiased}
:where(.ds) a{color:inherit}
:where(.ds) :where(button,input,select,textarea){font:inherit}
:where(.ds) :where(button,input,select,textarea){color:inherit}
.ds :focus-visible{outline:2px solid var(--color-focus);outline-offset:2px;border-radius:var(--radius-sm)}
.ds-vis{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ds-ic{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* --- Typographie ------------------------------------------------------- */
.ds-h1{font-size:var(--text-h1);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:-.02em;margin:0}
.ds-h2{font-size:var(--text-h2);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:-.01em;margin:0}
.ds-h3{font-size:var(--text-h3);font-weight:var(--weight-bold);line-height:var(--leading-tight);margin:0}
.ds-texte{font-size:var(--text-body);color:var(--color-text-2);margin:0}
.ds-meta{font-size:var(--text-meta);color:var(--color-muted)}

/* --- Bouton ------------------------------------------------------------ */
.ds-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--touch);
  padding:0 var(--space-4);border-radius:var(--radius-md);border:1px solid transparent;font-weight:var(--weight-bold);
  font-size:var(--text-small);text-decoration:none;cursor:pointer;white-space:nowrap;
  transition:background var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease),transform var(--motion-fast) var(--ease)}
.ds-btn:active{transform:translateY(1px)}
.ds-btn--primaire{background:var(--color-primary);color:var(--color-on-dark)}
.ds-btn--primaire:hover{background:var(--color-primary-hover)}
.ds-btn--secondaire{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}
.ds-btn--secondaire:hover{background:var(--color-surface-2);border-color:var(--color-disabled)}
.ds-btn--discret{background:transparent;color:var(--color-text-2)}
.ds-btn--discret:hover{background:var(--color-surface-3);color:var(--color-text)}
.ds-btn--accent{background:var(--color-accent);color:var(--color-text)}
.ds-btn--accent:hover{background:var(--color-accent-soft)}
.ds-btn--danger{background:var(--color-danger-solid);color:var(--color-on-dark)}
.ds-btn--petit{min-height:36px;padding:0 var(--space-3);border-radius:var(--radius-sm)}
.ds-btn--icone{padding:0;width:var(--touch)}
.ds-btn[disabled],.ds-btn[aria-disabled="true"]{background:var(--color-surface-3);color:var(--color-disabled);border-color:transparent;cursor:not-allowed}

/* --- Champ, liste ------------------------------------------------------ */
.ds-champ{display:flex;flex-direction:column;gap:var(--space-1);margin:0 0 var(--space-4)}
.ds-champ__label{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text)}
.ds-champ__aide{font-size:var(--text-meta);color:var(--color-muted)}
.ds-champ__erreur{font-size:var(--text-meta);color:var(--color-danger);font-weight:var(--weight-bold)}
.ds-input,.ds-select{min-height:var(--touch);padding:0 var(--space-3);border:1px solid var(--color-border);
  border-radius:var(--radius-md);background:var(--color-surface);font-size:var(--text-body);color:var(--color-text);
  transition:border-color var(--motion-fast) var(--ease),box-shadow var(--motion-fast) var(--ease);width:100%}
.ds-input::placeholder{color:var(--color-muted)}
.ds-input:hover,.ds-select:hover{border-color:var(--color-disabled)}
.ds-input:focus,.ds-select:focus{outline:none;border-color:var(--color-focus);box-shadow:0 0 0 3px var(--color-info-bg)}
.ds-input[aria-invalid="true"]{border-color:var(--color-danger-solid)}
textarea.ds-input{padding:var(--space-3);min-height:96px;resize:vertical}
.ds-select{appearance:none;-webkit-appearance:none;padding-right:var(--space-6);
  background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);
  background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat}

/* --- Badge : une couleur ET un mot ------------------------------------ */
.ds-badge{display:inline-flex;align-items:center;gap:var(--space-1);border-radius:var(--radius-pill);padding:2px 10px;
  font-size:var(--text-meta);font-weight:var(--weight-bold);line-height:1.6;white-space:nowrap;
  background:var(--color-surface-3);color:var(--color-text-2)}
.ds-badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.ds-badge--neutre::before{display:none}
.ds-badge--succes{background:var(--color-success-bg);color:var(--color-success)}
.ds-badge--info{background:var(--color-info-bg);color:var(--color-info)}
.ds-badge--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-badge--danger{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-badge--etudes{background:var(--color-studies-bg);color:var(--color-studies)}
.ds-badge--accent{background:var(--color-accent-soft);color:var(--color-accent-strong)}
.ds-compteur{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;
  border-radius:var(--radius-pill);background:var(--color-danger-solid);color:var(--color-on-dark);font-size:11.5px;font-weight:var(--weight-bold)}

/* --- Carte --------------------------------------------------------------- */
.ds-carte{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-card);padding:var(--pad-card)}
.ds-carte--interactive{transition:box-shadow var(--motion) var(--ease),transform var(--motion) var(--ease);text-decoration:none;display:block}
.ds-carte--interactive:hover{box-shadow:var(--shadow-raised);transform:translateY(-1px)}
.ds-carte__tete{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);margin:0 0 var(--space-4)}
.ds-carte__tete a:not(.ds-btn):not(.ds-puce){font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-info);text-decoration:none}
.ds-grille-cartes{display:grid;gap:var(--gap-cards)}

/* Carte-chiffre (MetricCard) : fond doux de sa famille, chiffre, libellé */
.ds-chiffre{display:flex;align-items:center;gap:var(--space-3);border-radius:var(--radius-lg);padding:var(--space-4);
  background:var(--color-surface);border:1px solid var(--color-border);text-decoration:none;color:var(--color-text)}
.ds-chiffre__ic{width:44px;height:44px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;flex:none;
  background:var(--color-surface-3);color:var(--color-text-2)}
.ds-chiffre b{display:block;font-size:26px;line-height:1.05}
.ds-chiffre span{font-size:var(--text-small);color:var(--color-text-2)}
.ds-chiffre--danger{background:var(--color-danger-bg);border-color:transparent}.ds-chiffre--danger .ds-chiffre__ic{background:var(--color-surface);color:var(--color-danger)}
.ds-chiffre--attention{background:var(--color-warning-bg);border-color:transparent}.ds-chiffre--attention .ds-chiffre__ic{background:var(--color-surface);color:var(--color-warning)}
.ds-chiffre--info{background:var(--color-info-bg);border-color:transparent}.ds-chiffre--info .ds-chiffre__ic{background:var(--color-surface);color:var(--color-info)}
.ds-chiffre--succes{background:var(--color-success-bg);border-color:transparent}.ds-chiffre--succes .ds-chiffre__ic{background:var(--color-surface);color:var(--color-success)}

/* --- Avatar -------------------------------------------------------------- */
.ds-avatar{width:36px;height:36px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;
  background:var(--color-info-bg);color:var(--color-info);font-weight:var(--weight-bold);font-size:13px;overflow:hidden}
.ds-avatar img{width:100%;height:100%;object-fit:cover}
.ds-avatar--petit{width:28px;height:28px;font-size:11px}
.ds-avatar--grand{width:48px;height:48px;font-size:16px}
.ds-avatars{display:inline-flex}.ds-avatars .ds-avatar{border:2px solid var(--color-surface);margin-left:-8px}.ds-avatars .ds-avatar:first-child{margin-left:0}

/* --- Progression -------------------------------------------------------- */
.ds-progression{display:flex;align-items:center;gap:var(--space-3)}
.ds-progression__piste{flex:1;height:6px;border-radius:var(--radius-pill);background:var(--color-surface-3);overflow:hidden}
.ds-progression__barre{height:100%;border-radius:var(--radius-pill);background:var(--color-success-solid);
  transition:width var(--motion-slow) var(--ease)}
.ds-progression--info .ds-progression__barre{background:var(--color-info-solid)}
.ds-progression--attention .ds-progression__barre{background:var(--color-warning-solid)}
.ds-progression--danger .ds-progression__barre{background:var(--color-danger-solid)}
.ds-progression--etudes .ds-progression__barre{background:var(--color-studies-solid)}
.ds-progression__valeur{font-size:var(--text-meta);font-weight:var(--weight-bold);min-width:38px;text-align:right}
.ds-anneau{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none}
.ds-anneau svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.ds-anneau__piste{stroke:var(--color-surface-3)}
.ds-anneau__valeur{stroke:var(--color-success-solid);transition:stroke-dasharray var(--motion-slow) var(--ease)}
/* Le pourcentage tient dans l’anneau, où qu’il soit posé (3 octobre 2026) :
   sa taille vient de l’anneau (src/ds.js), jamais du chiffre de la tuile
   voisine. L’anneau, lui, ne rétrécit pas (flex:none, plus haut). */
.ds-anneau b.ds-anneau__pct{position:relative;display:inline-flex;align-items:baseline;font-size:12.5px;line-height:1;white-space:nowrap;
  font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.ds-anneau b.ds-anneau__pct small{font-size:.68em;font-weight:inherit;margin-left:.5px}

/* --- Onglets ------------------------------------------------------------ */
.ds-onglets{display:flex;gap:var(--space-5);border-bottom:1px solid var(--color-border);overflow-x:auto;scrollbar-width:none}
.ds-onglets::-webkit-scrollbar{display:none}
.ds-onglet{display:inline-flex;align-items:center;min-height:var(--touch);padding:0 2px;border:0;background:none;cursor:pointer;
  color:var(--color-muted);font-weight:var(--weight-medium);text-decoration:none;border-bottom:2px solid transparent;white-space:nowrap;
  transition:color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease)}
.ds-onglet:hover{color:var(--color-text)}
.ds-onglet[aria-selected="true"],.ds-onglet[aria-current="page"]{color:var(--color-text);border-bottom-color:var(--color-text);font-weight:var(--weight-bold)}
.ds-panneau-onglet[hidden]{display:none}
.ds-puces{display:flex;gap:var(--space-2);flex-wrap:wrap}
.ds-puce{display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-3);border-radius:var(--radius-pill);
  border:1px solid var(--color-border);background:var(--color-surface);font-size:var(--text-small);font-weight:var(--weight-medium);
  color:var(--color-text-2);text-decoration:none;cursor:pointer}
.ds-puce[aria-pressed="true"],.ds-puce[aria-current="true"]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-dark)}

/* --- Infobulle ----------------------------------------------------------- */
.ds-infobulle{position:relative;display:inline-flex}
.ds-infobulle__texte{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%,4px);
  background:var(--color-text);color:var(--color-on-dark);font-size:var(--text-meta);font-weight:var(--weight-medium);
  padding:6px 10px;border-radius:var(--radius-sm);white-space:nowrap;pointer-events:none;opacity:0;
  transition:opacity var(--motion-fast) var(--ease),transform var(--motion-fast) var(--ease);z-index:var(--z-toast)}
.ds-infobulle:hover .ds-infobulle__texte,.ds-infobulle:focus-within .ds-infobulle__texte{opacity:1;transform:translate(-50%,0)}
.ds-haut .ds-infobulle__texte{left:auto;right:0;bottom:auto;top:calc(100% + 8px);transform:translateY(-4px)}
.ds-haut .ds-infobulle:hover .ds-infobulle__texte,.ds-haut .ds-infobulle:focus-within .ds-infobulle__texte{transform:none}
@media (hover:none){.ds-infobulle__texte{display:none}}
.ds-infobulle--droite .ds-infobulle__texte{left:calc(100% + 10px);bottom:auto;top:50%;transform:translate(4px,-50%)}
.ds-infobulle--droite:hover .ds-infobulle__texte,.ds-infobulle--droite:focus-within .ds-infobulle__texte{transform:translate(0,-50%)}

/* --- Modale et tiroir (dialog natif) ------------------------------------ */
.ds-modale,.ds-tiroir{border:0;padding:0;color:var(--color-text);background:var(--color-surface);box-shadow:var(--shadow-overlay)}
.ds-modale::backdrop,.ds-tiroir::backdrop{background:var(--color-backdrop)}
/* FENÊTRES — LE BOUTON SE VOIT TOUJOURS (2 octobre 2026). Sur un petit iPhone
   (375 × 667), « Ajouter » de la fenêtre « Ajouter au planning » était à moitié
   hors de la fenêtre ; « Enregistrer » de « Modifier le projet » était à
   1 126 px du haut, sur tous les téléphones : la fenêtre ENTIÈRE défilait,
   pied compris. Et sa hauteur se comptait en « 100vh », qui dépasse la zone
   visible d’un iPhone quand la barre de Safari est affichée.
   — La hauteur se compte en « dvh » (la zone réellement visible), avec le
     repli « vh » pour les navigateurs qui ne le connaissent pas, moins la
     zone de sécurité du bas de l’iPhone.
   — La fenêtre est une colonne : l’en-tête et le pied (les boutons) ne
     bougent pas, seul le corps défile.
   La fenêtre s’ouvre au-dessus de tout, barre du bas comprise : elle n’a pas
   à lui réserver de place. Même règle pour le tiroir de K. */
.ds-modale{border-radius:var(--radius-xl);width:min(560px,calc(100vw - 32px));max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px - env(safe-area-inset-bottom,0px));overflow:hidden}
.ds-modale[open]{display:flex;flex-direction:column;animation:ds-apparait var(--motion) var(--ease)}
.ds-modale__tete,.ds-modale__pied{flex:none}
.ds-modale > .ds-modale__corps{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}
.ds-modale__tete,.ds-tiroir__tete{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);
  padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-divider)}
.ds-modale__corps{padding:var(--space-5)}
.ds-modale__pied{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-3) var(--space-5) var(--space-5)}
.ds-modale > .ds-modale__corps:has(+ .ds-modale__pied){padding-bottom:var(--space-3)}
.ds-tiroir{margin:0 0 0 auto;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;max-width:100vw;width:min(var(--drawer),100vw);border-radius:var(--radius-xl) 0 0 var(--radius-xl);
  display:none;flex-direction:column}
.ds-tiroir[open]{display:flex;animation:ds-glisse var(--motion-slow) var(--ease)}
.ds-tiroir__corps{flex:1;overflow-y:auto;padding:var(--space-5)}
.ds-tiroir__pied{flex:none;padding:var(--space-4) var(--space-5) calc(var(--space-4) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--color-divider)}
@keyframes ds-apparait{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes ds-glisse{from{transform:translateX(24px);opacity:.6}to{transform:none;opacity:1}}

/* --- Squelette ------------------------------------------------------------ */
.ds-squelette{display:block;border-radius:var(--radius-sm);min-height:12px;
  background:linear-gradient(90deg,var(--color-surface-3) 0%,var(--color-surface-2) 50%,var(--color-surface-3) 100%);
  background-size:200% 100%;animation:ds-lueur 1.4s linear infinite}
.ds-squelette--ligne{height:12px;margin:0 0 var(--space-2)}
.ds-squelette--titre{height:20px;width:55%;margin:0 0 var(--space-3)}
.ds-squelette--rond{border-radius:50%}
@keyframes ds-lueur{from{background-position:100% 0}to{background-position:-100% 0}}
@media (prefers-reduced-motion:reduce){.ds-squelette{animation:none}}

/* --- Notification éphémère (toast) --------------------------------------- */
.ds-toasts{position:fixed;right:var(--space-5);bottom:var(--space-5);z-index:var(--z-toast);display:flex;flex-direction:column;gap:var(--space-2);
  pointer-events:none}
.ds-toast{pointer-events:auto;display:flex;align-items:center;gap:var(--space-3);min-width:280px;max-width:420px;
  background:var(--color-text);color:var(--color-on-dark);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);
  box-shadow:var(--shadow-overlay);font-size:var(--text-small);animation:ds-apparait var(--motion) var(--ease)}
.ds-toast__ic{width:24px;height:24px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;background:var(--color-success-solid)}
.ds-toast--danger .ds-toast__ic{background:var(--color-danger-solid)}
.ds-toast--info .ds-toast__ic{background:var(--color-info-solid)}
.ds-toast > span:not(.ds-toast__ic){flex:1}
.ds-toast button{background:none;border:0;color:var(--color-on-dark);text-decoration:underline;cursor:pointer;min-height:36px;font-weight:var(--weight-bold)}
.ds-toast.ds-sort{opacity:0;transform:translateY(6px);transition:opacity var(--motion) var(--ease),transform var(--motion) var(--ease)}

/* ==========================================================================
   LA COQUE : barre latérale sombre, barre du haut, navigation du bas
   ========================================================================== */
.ds-app{display:flex;min-height:100vh}
/* LA BARRE DE GAUCHE DESCEND JUSQU’EN BAS DE LA PAGE (9 octobre 2026, défaut
   vu sur Aujourd’hui) : la barre reste collée à l’écran (sticky, 100vh) ; son
   fond et son filet se prolongent sur toute la hauteur de la page par le fond
   du cadre, sans toucher à sa structure. */
.ds-app{--ds-lat-l:var(--sidebar);background:linear-gradient(to right,var(--color-nav) calc(var(--ds-lat-l) - 1px),var(--color-nav-border) calc(var(--ds-lat-l) - 1px),var(--color-nav-border) var(--ds-lat-l),transparent var(--ds-lat-l))}
@media (max-width:1100px){.ds-app{--ds-lat-l:var(--sidebar-compact)}}
@media (max-width:760px){.ds-app{background:none}}
@media print{.ds-app{background:none}}
.ds-lat{width:var(--sidebar);flex:none;background:var(--color-nav);color:var(--color-nav-text);position:sticky;top:0;height:100vh;border-right:1px solid var(--color-nav-border);
  display:flex;flex-direction:column;padding:var(--space-5) var(--space-3) var(--space-4);z-index:var(--z-nav);overflow-y:auto}
.ds-lat__marque{display:block;padding:0 var(--space-3);margin:0 0 var(--space-5)}
.ds-lat__marque img{display:block;width:132px;height:auto}
.ds-lat__marque .ds-lat__k{display:none;width:32px}
.ds-nav{display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;padding:0}
.ds-nav__lien{display:flex;align-items:center;gap:var(--space-3);min-height:var(--touch);padding:0 var(--space-3);border-radius:var(--radius-md);
  color:var(--color-nav-text);text-decoration:none;font-weight:var(--weight-medium);font-size:var(--text-small);
  transition:background var(--motion-fast) var(--ease),color var(--motion-fast) var(--ease);width:100%;background:none;border:0;cursor:pointer;text-align:left}
.ds-nav__lien:hover{background:var(--color-nav-2);color:var(--color-nav-strong)}
.ds-nav__lien[aria-current="page"]{background:var(--color-nav-2);color:var(--color-nav-strong);font-weight:var(--weight-bold)}
.ds-nav__lien[aria-disabled="true"]{color:var(--color-nav-muted);cursor:default}
.ds-nav__lien[aria-disabled="true"]:hover{background:none;color:var(--color-nav-muted)}
.ds-nav__mot{flex:1}
.ds-nav__bientot{font-size:11px;font-weight:var(--weight-medium);color:var(--color-nav-muted)}
.ds-nav--bas{margin-top:var(--space-5);gap:var(--space-2)}
.ds-nav__capturer{background:var(--color-primary);color:var(--color-on-dark)!important;font-weight:var(--weight-bold);justify-content:center}
.ds-nav__capturer:hover{background:var(--color-primary-hover);color:var(--color-on-dark)}
.ds-nav__capturer .ds-nav__mot{flex:0 1 auto}
.ds-nav__k{width:24px;height:24px;border-radius:7px;background:var(--color-text);display:inline-flex;align-items:center;justify-content:center;flex:none}
.ds-nav__k img{height:13px}
.ds-moi{position:relative}
.ds-moi summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2);border-radius:var(--radius-md)}
.ds-moi summary::-webkit-details-marker{display:none}
.ds-moi summary:hover{background:var(--color-nav-2)}
.ds-menu{position:absolute;left:0;bottom:calc(100% + 6px);min-width:232px;background:var(--color-surface);color:var(--color-text);
  border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-overlay);padding:var(--space-2);z-index:var(--z-overlay)}
.ds-menu--bas{left:auto;right:0;bottom:auto;top:calc(100% + 6px)}
.ds-menu a,.ds-menu button{display:flex;align-items:center;width:100%;min-height:var(--touch);padding:0 var(--space-3);border-radius:var(--radius-sm);
  text-decoration:none;background:none;border:0;cursor:pointer;font-size:var(--text-small);text-align:left;color:var(--color-text)}
.ds-menu a:hover,.ds-menu button:hover{background:var(--color-surface-2)}
.ds-menu form{margin:0}
.ds-menu hr{border:0;border-top:1px solid var(--color-divider);margin:var(--space-1) 0}

.ds-principal{flex:1;min-width:0;display:flex;flex-direction:column}
.ds-haut{position:sticky;top:0;z-index:var(--z-sticky);height:var(--topbar);display:flex;align-items:center;gap:var(--space-4);
  padding:0 var(--space-6);background:var(--color-background);border-bottom:1px solid transparent}
.ds-recherche{flex:1;max-width:620px;display:flex;align-items:center;gap:var(--space-2);height:var(--touch);padding:0 var(--space-2) 0 var(--space-3);
  background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);
  transition:border-color var(--motion-fast) var(--ease),box-shadow var(--motion-fast) var(--ease)}
.ds-recherche:focus-within{border-color:var(--color-focus);box-shadow:0 0 0 3px var(--color-info-bg)}
.ds-recherche .ds-ic{color:var(--color-muted)}
.ds-recherche input{flex:1;min-width:0;border:0;background:none;outline:none;height:100%;font-size:var(--text-small)}
.ds-recherche input::placeholder{color:var(--color-muted)}
.ds-touche{font-size:11.5px;font-weight:var(--weight-bold);color:var(--color-muted);border:1px solid var(--color-border);border-radius:6px;padding:1px 6px;white-space:nowrap}
.ds-haut__droite{margin-left:auto;display:flex;align-items:center;gap:var(--space-2)}
.ds-contenu{padding:var(--space-5) var(--space-6) var(--space-7);max-width:1440px;width:100%}

.ds-bas{display:none}

/* Assistant K */
.ds-k__salut{display:flex;gap:var(--space-3);align-items:flex-start;margin:0 0 var(--space-5)}
.ds-k__logo{width:36px;height:36px;border-radius:50%;background:var(--color-text);display:flex;align-items:center;justify-content:center;flex:none}
.ds-k__logo img{height:18px}
.ds-k__actions{display:flex;flex-direction:column;gap:var(--space-2);margin:0 0 var(--space-5)}
.ds-k__action{display:flex;align-items:center;gap:var(--space-3);min-height:var(--touch);padding:0 var(--space-3);border:1px solid var(--color-border);
  border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;text-align:left;font-size:var(--text-small);
  transition:background var(--motion-fast) var(--ease)}
.ds-k__action:hover{background:var(--color-surface-2)}
.ds-k__fil{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-k__bulle{border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4);font-size:var(--text-small);white-space:pre-wrap;overflow-wrap:anywhere}
.ds-k__bulle--moi{align-self:flex-end;background:var(--color-info-bg);color:var(--color-text);max-width:85%}
.ds-k__bulle--k{background:var(--color-surface-2);border:1px solid var(--color-divider)}
.ds-k__bulle--souci{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-k__form{display:flex;gap:var(--space-2);align-items:center}
.ds-k__form .ds-input{flex:1}
.ds-k__contexte{font-size:var(--text-meta);color:var(--color-muted);margin:var(--space-2) 0 0}

/* Capturer */
.ds-capturer__choix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-2);margin:0 0 var(--space-5)}
.ds-capturer__choix button{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);min-height:84px;justify-content:center;
  border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-capturer__choix button[aria-selected="true"]{border-color:var(--color-text);background:var(--color-surface-2)}
.ds-capturer__choix button[aria-disabled="true"]{color:var(--color-disabled);cursor:not-allowed}
.ds-capturer__choix small{font-weight:var(--weight-medium);font-size:11px;color:var(--color-muted)}

/* ==========================================================================
   ACCUEIL — Aujourd’hui (images « trois pistes plus ludiques »)
   ========================================================================== */
.ds-haut__nouveau{margin-right:var(--space-2)}
.ds-accueil__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-5);margin:var(--space-2) 0 var(--space-5)}
.ds-accueil__phrase{font-size:16px;color:var(--color-text-2);margin:var(--space-1) 0 0}
.ds-accueil__date{text-align:right;max-width:340px;color:var(--color-text-2);font-size:var(--text-small)}
.ds-accueil__date blockquote{margin:var(--space-2) 0 0;font-style:italic;color:var(--color-muted);line-height:1.45}
.ds-chiffres{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gap-cards);margin:0 0 var(--gap-cards)}
.ds-chiffre{transition:box-shadow var(--motion) var(--ease),transform var(--motion) var(--ease)}
a.ds-chiffre:hover{box-shadow:var(--shadow-raised);transform:translateY(-1px)}
.ds-chiffre__txt{display:flex;flex-direction:column;flex:1;min-width:0;line-height:1.2}
.ds-chiffre__txt small{font-size:var(--text-meta);color:var(--color-muted);margin-top:2px}
.ds-chiffre__fleche{color:var(--color-text-2);flex:none}
.ds-chiffre .ds-anneau{flex:none}
/* La tuile de la journée porte un mot (« Bouclée ») ou une fraction
   (« 3 / 12 ») à côté de son anneau, pas un seul chiffre : sa taille suit la
   largeur de la tuile, pour y tenir sur tablette comme au téléphone
   (3 octobre 2026). Sans unités de conteneur, la taille de repli s’applique. */
.ds-chiffre--journee{container-type:inline-size}
.ds-chiffre--journee .ds-chiffre__txt b{font-size:20px;font-size:clamp(14px,9.4cqw,26px);line-height:1.15;overflow-wrap:anywhere}
.ds-panneau{padding:var(--space-5) var(--pad-card)}
.ds-panneau .ds-puces{margin:0 0 var(--space-3)}
.ds-vide{color:var(--color-muted)}
.ds-point{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none;background:var(--color-disabled)}
.ds-point--danger{background:var(--color-danger-solid)}.ds-point--attention{background:var(--color-warning-solid)}
.ds-point--info{background:var(--color-info-solid)}.ds-point--etudes{background:var(--color-studies-solid)}
.ds-point--succes{background:var(--color-success-solid)}.ds-point--neutre{background:var(--color-disabled)}
.ds-texte--etudes{color:var(--color-studies)}.ds-texte--info{color:var(--color-info)}
.ds-texte--succes{color:var(--color-success)}.ds-texte--neutre{color:var(--color-muted)}

/* Vignette : photo du projet, ou ses initiales */
.ds-vignette{width:52px;height:52px;border-radius:var(--radius-md);overflow:hidden;flex:none;background:var(--color-surface-3);
  display:flex;align-items:center;justify-content:center}
.ds-vignette img{width:100%;height:100%;object-fit:cover}
.ds-vignette__initiales{font-weight:var(--weight-bold);color:var(--color-text-2);font-size:15px}
.ds-vignette--projet{width:76px;height:58px}

/* Une ligne d’action (ActionCard) */
.ds-actions{display:flex;flex-direction:column}
.ds-action{display:flex;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3) 0;border-top:1px solid var(--color-divider);flex-wrap:wrap}
.ds-actions > .ds-action:first-child{border-top:0}
.ds-action__corps{flex:1 1 200px;min-width:0}
.ds-action__titre{display:flex;align-items:baseline;gap:var(--space-2)}
.ds-action__titre b{font-size:var(--text-small);line-height:1.3}
.ds-action__titre .ds-point{transform:translateY(-1px)}
.ds-action__etat{margin-top:4px}
.ds-action__meta{font-size:var(--text-meta);color:var(--color-muted);margin-top:2px;overflow-wrap:anywhere}
.ds-action__k{display:flex;align-items:flex-start;gap:var(--space-2);font-size:var(--text-meta);color:var(--color-text-2);margin-top:var(--space-1)}
.ds-action__k .ds-nav__k{width:18px;height:18px;border-radius:5px}.ds-action__k .ds-nav__k img{height:10px}
.ds-action__gestes{display:flex;align-items:center;gap:var(--space-1);flex:none;margin-left:auto}
.ds-action__gestes form{margin:0}
.ds-action__gestes .ds-infobulle__texte{left:auto;right:0;transform:translateY(4px)}
.ds-action__gestes .ds-infobulle:hover .ds-infobulle__texte,.ds-action__gestes .ds-infobulle:focus-within .ds-infobulle__texte{transform:none}
.ds-plus-tard{width:36px;height:36px;border-radius:var(--radius-sm);border:0;background:none;color:var(--color-muted);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center}
.ds-plus-tard:hover{background:var(--color-surface-3);color:var(--color-text)}
.ds-encore{margin-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-encore summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-small);color:var(--color-text-2)}
.ds-boucle{background:var(--color-success-bg);border-radius:var(--radius-md);padding:var(--space-4)}
.ds-boucle b{display:block;font-size:var(--text-h3);color:var(--color-success);margin-bottom:var(--space-1)}

/* Ma semaine (PlanningCard) */
.ds-jours{list-style:none;margin:0;padding:0}
.ds-jours li{display:flex;gap:var(--space-3);padding:var(--space-2) 0}
.ds-jour{width:34px;flex:none;display:flex;flex-direction:column;align-items:center;line-height:1.15;padding-top:4px}
.ds-jour small{font-size:var(--text-meta);color:var(--color-muted)}
.ds-jour b{font-size:18px}
.ds-jours li.aujourdhui .ds-jour b{background:var(--color-primary);color:var(--color-on-dark);border-radius:var(--radius-sm);padding:0 6px}
.ds-jour__evts{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-evt{display:flex;gap:var(--space-2);align-items:baseline;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);
  background:var(--color-surface-3);text-decoration:none;transition:filter var(--motion-fast) var(--ease)}
.ds-evt:hover{filter:brightness(.98)}
.ds-evt b{display:block;font-size:var(--text-small)}
.ds-evt span span{display:block;font-size:var(--text-meta);color:var(--color-text-2)}
.ds-evt--danger{background:var(--color-danger-bg)}.ds-evt--info{background:var(--color-info-bg)}
.ds-evt--etudes{background:var(--color-studies-bg)}.ds-evt--succes{background:var(--color-success-bg)}
.ds-evt--attention{background:var(--color-warning-bg)}
.ds-evt__plus,.ds-rien{font-size:var(--text-meta);color:var(--color-muted);display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) 0}

/* Mes projets (ProjectCard, version ligne) */
.ds-projets{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-projets a{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2);border-radius:var(--radius-md);text-decoration:none;
  transition:background var(--motion-fast) var(--ease)}
.ds-projets a:hover{background:var(--color-surface-2)}
.ds-projets__txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-projets__txt b{font-size:var(--text-small);overflow-wrap:break-word}
.ds-projets__phase{font-size:var(--text-meta);font-weight:var(--weight-medium)}
.ds-projets .ds-progression{margin-top:4px}

/* Fil d’actualité (ActivityCard) */
.ds-liste{list-style:none;margin:0;padding:0}
.ds-liste li{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-liste li:first-child{border-top:0}
.ds-liste li > div{flex:1;min-width:0}
.ds-liste li b{display:block;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-liste li span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-liste li .ds-btn span{color:inherit;font-size:inherit}
.ds-encore-n{margin:var(--space-2) 0 0}
.ds-retour{margin:var(--space-5) 0 0;font-size:var(--text-meta);color:var(--color-muted);display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap}
.ds-retour form{margin:0}
.ds-retour button{background:none;border:0;min-height:var(--touch);color:var(--color-text-2);text-decoration:underline;cursor:pointer;font-size:var(--text-meta);padding:0}

/* Suggestions de K */
.ds-k__soustitre{font-size:var(--text-small);margin:0 0 var(--space-2)}
.ds-k__suggestions{background:var(--color-surface-2);border:1px solid var(--color-divider);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);margin:0 0 var(--space-5)}
.ds-k__suggestions ul{list-style:none;margin:0;padding:0}
.ds-k__suggestions a{display:flex;gap:var(--space-2);align-items:flex-start;min-height:36px;padding:var(--space-1) 0;font-size:var(--text-small);text-decoration:none;color:var(--color-text-2)}
.ds-k__suggestions a:hover{color:var(--color-text)}

/* La grille des blocs : 12 colonnes au bureau, 6 en tablette, 1 au téléphone. */
.ds-blocs{--bloc-h:420px;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--gap-cards);align-items:stretch}
.ds-bloc{grid-column:span var(--span,4);min-width:0}
/* Même hauteur pour tous les blocs ; le contenu défile dans le bloc. */
.ds-blocs > .ds-bloc:not(.ds-bloc--auto){height:var(--bloc-h);display:flex;flex-direction:column;min-height:0}
.ds-blocs > .ds-bloc--nu:not(.ds-bloc--auto){overflow-y:auto}
/* LA PAGE REPREND LA MAIN AU BOUT D’UN BLOC — Jean-David, 3 octobre 2026 : « on
   peut scroller dans les blocs mais des fois c'est difficile de scroller sur la
   page elle-même parce qu'on scrolle d'abord sur le bloc… ça crée une
   frustration ou une sensation de bug ». Le bloc retenait le défilement
   (overscroll-behavior:contain) : arrivé au bout, ou sans rien à faire
   défiler, la molette restait prise dans le bloc. Il ne le retient plus : au
   bout du bloc, la page défile. Au téléphone les blocs n’ont pas de
   défilement du tout (plus bas, E-018). Les fenêtres et le tiroir, eux,
   gardent leur défilement pour eux. */
.ds-bloc__corps{flex:1 1 auto;min-height:0;overflow-y:auto;scrollbar-width:thin;margin-right:calc(-1 * var(--space-2));padding-right:var(--space-2)}
.ds-bloc__corps:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px;border-radius:var(--radius-sm)}
.ds-bloc--deborde .ds-bloc__corps{-webkit-mask-image:linear-gradient(to bottom,var(--color-text) calc(100% - 28px),transparent);mask-image:linear-gradient(to bottom,var(--color-text) calc(100% - 28px),transparent)}
.ds-bloc--deborde.ds-bloc--fin .ds-bloc__corps{-webkit-mask-image:none;mask-image:none}
.ds-bloc__encore{flex:none;margin:var(--space-2) 0 0;font-size:var(--text-meta);color:var(--color-muted);display:none;align-items:center;gap:6px}
.ds-bloc--deborde:not(.ds-bloc--fin) .ds-bloc__encore{display:flex}
.ds-bloc__encore .ds-ic{width:14px;height:14px;transform:rotate(90deg)}
.ds-bloc--nu .ds-chiffres{margin:0}
.ds-chiffres--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.ds-grand-chiffre{margin:0 0 var(--space-2);color:var(--color-text-2)}
.ds-grand-chiffre b{font-size:28px;color:var(--color-text);margin-right:var(--space-1)}
.ds-planning-semaine{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-2)}
.ds-planning-jour{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
.ds-planning-jour__tete{display:flex;align-items:baseline;gap:var(--space-1);padding:0 0 var(--space-2);border-bottom:1px solid var(--color-divider)}
.ds-planning-jour__tete small{color:var(--color-muted);font-size:var(--text-meta)}
.ds-planning-jour.aujourdhui .ds-planning-jour__tete b{color:var(--color-info)}
.ds-projets-grands{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-3)}
.ds-projets-grands a{display:flex;flex-direction:column;gap:var(--space-1);text-decoration:none;padding:var(--space-2);border-radius:var(--radius-md);border:1px solid var(--color-border)}
.ds-projets-grands a:hover{box-shadow:var(--shadow-raised)}
.ds-vignette--grande{width:100%;height:120px;margin-bottom:var(--space-1)}
.ds-budget-tete{display:flex;align-items:center;gap:var(--space-5);margin:0 0 var(--space-4)}
.ds-budget-tete dl{display:flex;gap:var(--space-5);margin:0;flex-wrap:wrap}
.ds-budget-tete dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-budget-tete dd{margin:0;font-weight:var(--weight-bold)}
.ds-budget li > div{display:flex;flex-direction:column;gap:2px}
.ds-budget a{text-decoration:none}
.ds-k-suggere{list-style:none;margin:0 0 var(--space-2);padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-k-suggere li{display:flex;gap:var(--space-2);align-items:flex-start;font-size:var(--text-small)}
.ds-k-suggere a{text-decoration:none}
.ds-journee{display:flex;align-items:center;gap:var(--space-4)}
.ds-journee b{display:block}
.ds-personnaliser__ouvrir{margin-top:var(--space-3)}

/* Mode « Personnaliser » */
.ds-personnaliser{margin:0 0 var(--gap-cards)}
.ds-soustitre{font-size:var(--text-small);margin:var(--space-4) 0 var(--space-2)}
.ds-modeles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3)}
.ds-modeles form{margin:0}
.ds-modele{width:100%;text-align:left;display:flex;flex-direction:column;gap:2px;padding:var(--space-3) var(--space-4);min-height:var(--touch);
  border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer}
.ds-modele span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-modele--actif{border-color:var(--color-text);background:var(--color-surface-2)}
.ds-ajouts{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-2)}
.ds-ajouts form{margin:0}
.ds-ajout{width:100%;display:flex;gap:var(--space-2);align-items:flex-start;text-align:left;padding:var(--space-3);min-height:var(--touch);
  border:1px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2);cursor:pointer}
.ds-ajout:hover{border-color:var(--color-text-2)}
.ds-ajout small{display:block;font-size:var(--text-meta);color:var(--color-muted)}
.ds-personnaliser__pied{margin-top:var(--space-4)}
/* Le nom du modèle peut être long : au téléphone, le bouton passe à la ligne
   plutôt que de sortir de sa carte (balayage du 26 septembre). */
.ds-personnaliser__pied .ds-btn{white-space:normal;text-align:left;max-width:100%;height:auto;padding-top:6px;padding-bottom:6px}
.ds-bloc--edition{outline:2px dashed var(--color-border);outline-offset:3px}
.ds-bloc--edition.ds-glisse{opacity:.5}
.ds-bloc--edition.ds-cible{outline-color:var(--color-focus)}
.ds-bloc__outils{display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap;margin:0 0 var(--space-3);padding:0 0 var(--space-3);border-bottom:1px solid var(--color-divider)}
.ds-bloc__outils form{margin:0}
.ds-bloc__tailles{display:inline-flex;gap:2px;margin-right:auto}
.ds-poignee{color:var(--color-muted);letter-spacing:-2px;margin-right:var(--space-2);font-weight:var(--weight-bold);min-width:44px;min-height:44px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-2);cursor:grab;touch-action:none;user-select:none}
.ds-poignee:active{cursor:grabbing}
.ds-poignee:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-outil{min-width:36px;min-height:36px;padding:0 var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);
  cursor:pointer;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-text-2)}
.ds-outil[aria-pressed="true"]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-dark)}

@media (max-width:1100px){
  .ds-blocs{grid-template-columns:repeat(6,minmax(0,1fr))}
  .ds-bloc{grid-column:span 6}
  .ds-bloc[data-taille="S"],.ds-bloc[data-taille="M"]{grid-column:span 3}
  .ds-bloc[data-type="chiffres"]{grid-column:span 6}
  .ds-planning-semaine{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* --- Lot C : les projets (liste, vue d’ensemble, timeline) --------------- */
.ds-page-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-5);margin:var(--space-2) 0 var(--space-4)}
.ds-page-filtres{margin:0 0 var(--space-5)}
.ds-projets-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--gap-cards)}
.ds-projet-carte{padding:0;overflow:hidden;display:flex;flex-direction:column;position:relative}
.ds-couverture-form{margin:0}
.ds-couverture-form--carte{position:absolute;top:var(--space-3);right:var(--space-3)}
.ds-projet-entete__visuel{position:relative;min-width:0}
.ds-couverture-form--entete{position:absolute;right:var(--space-2);bottom:var(--space-2)}
.ds-couverture-choisir{display:inline-flex;align-items:center;gap:6px;min-height:var(--touch);padding:0 var(--space-3);border-radius:var(--radius-pill);
  background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);box-shadow:var(--shadow-card);
  font-size:var(--text-meta);font-weight:var(--weight-medium);cursor:pointer;position:relative}
.ds-couverture-choisir:hover{background:var(--color-surface-2)}
.ds-couverture-choisir:focus-within{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-couverture-choisir .ds-ic{width:16px;height:16px}
.ds-couverture-choisir input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.ds-envoi-en-cours .ds-couverture-choisir{opacity:.7;cursor:progress}
.ds-couverture-form [data-ds-sans-script]{margin-left:var(--space-2)}
.ds-couverture-form [hidden]{display:none}
.ds-projet-carte__lien{display:flex;flex-direction:column;text-decoration:none;color:inherit}
.ds-projet-carte__lien:hover{background:var(--color-surface-2)}
.ds-projet-carte__lien:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}
.ds-couverture{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:16/9;background:var(--color-surface-3);overflow:hidden}
.ds-couverture img{width:100%;height:100%;object-fit:cover;display:block}
.ds-couverture__initiales{font-size:32px;font-weight:var(--weight-bold);color:var(--color-text-2);letter-spacing:.02em}
.ds-projet-carte__corps{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4) var(--pad-card)}
.ds-projet-carte__tete{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-2)}
.ds-projet-carte__tete b{font-size:var(--text-h3);overflow-wrap:anywhere;min-width:0}
.ds-projet-carte__tete .ds-badge{flex:none}
/* « Mes projets » comme la maquette 7 (9 octobre 2026) : chevron, badge de
   phase sous le titre, source du pourcentage, geste principal, bandeau. */
.ds-projet-carte__chevron{flex:none;color:var(--color-text);display:inline-flex;margin-top:2px}
.ds-projet-carte__chevron .ds-ic{width:20px;height:20px}
.ds-projet-carte__phase{display:flex}
/* LES CARTES DISENT QUOI FAIRE (Jean-David, 13 octobre 2026, 11 h 58 : « les
   rappels ne sont pas assez évidents et clairs […] plus clair, ludique et
   intuitif »). Sous le grand lien de la carte : un gros chiffre rond (rouge
   s’il y a du retard, orange sinon, coche verte quand tout est à jour), les
   trois premières choses nommées — chacune ouvre son geste —, « Voir les N
   autres ». Rien que les jetons ; les cibles font 44 px au moins. */
.ds-projet-choses{flex:1;display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-1) var(--pad-card) var(--space-4);min-width:0}
.ds-projet-choses__tete{display:flex;align-items:center;gap:var(--space-3);min-width:0}
.ds-projet-choses__rond{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;
  font-size:var(--text-h2);font-weight:var(--weight-bold);line-height:1;font-variant-numeric:tabular-nums;color:var(--color-on-dark);background:var(--color-warning-solid)}
.ds-projet-choses--danger .ds-projet-choses__rond{background:var(--color-danger-solid)}
.ds-projet-choses--ajour .ds-projet-choses__rond{background:var(--color-success-solid)}
.ds-projet-choses__rond .ds-ic{width:26px;height:26px;stroke-width:2.6}
.ds-projet-choses__mots{display:flex;flex-direction:column;gap:2px;min-width:0;line-height:var(--leading-tight)}
.ds-projet-choses__mots b{font-size:var(--text-body);font-weight:var(--weight-bold);color:var(--color-text);overflow-wrap:anywhere}
.ds-projet-choses__retard{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-danger)}
.ds-projet-choses__bravo{font-size:var(--text-small);color:var(--color-success)}
.ds-projet-choses__faites{display:inline-flex;align-items:center;gap:4px;font-size:var(--text-meta);font-weight:var(--weight-medium);color:var(--color-success)}
.ds-projet-choses__faites .ds-ic{width:14px;height:14px;flex:none}
.ds-projet-choses__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;border:1px solid var(--color-divider);border-radius:var(--radius-md);overflow:hidden}
.ds-projet-choses__liste li + li{border-top:1px solid var(--color-divider)}
.ds-projet-chose{display:flex;align-items:center;gap:var(--space-3);min-height:var(--touch);padding:var(--space-2) var(--space-3);text-decoration:none;color:inherit;min-width:0}
.ds-projet-chose:hover{background:var(--color-surface-2)}
.ds-projet-chose:focus-visible,.ds-projet-choses__autres:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}
.ds-projet-chose__ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);
  background:var(--color-warning-bg);color:var(--color-warning)}
.ds-projet-chose--retard .ds-projet-chose__ic{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-projet-chose__ic .ds-ic{width:18px;height:18px}
.ds-projet-chose__texte{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;line-height:var(--leading-tight)}
.ds-projet-chose__texte b{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text);overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ds-projet-chose__texte span{font-size:var(--text-meta);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-projet-chose--retard .ds-projet-chose__texte span{color:var(--color-danger);font-weight:var(--weight-medium)}
.ds-projet-chose__fleche{flex:none;display:inline-flex;color:var(--color-muted)}
.ds-projet-chose__fleche .ds-ic{width:18px;height:18px}
.ds-projet-choses__autres{display:flex;align-items:center;justify-content:center;gap:6px;min-height:var(--touch);border-radius:var(--radius-md);
  font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text);text-decoration:none;background:var(--color-surface-2)}
.ds-projet-choses__autres:hover{background:var(--color-surface-3)}
.ds-projet-choses__autres .ds-ic{width:16px;height:16px}
/* LA PETITE FÊTE d’un projet qui vient de passer à jour : la coche rebondit,
   une onde part, quelques confettis ; une seconde, une fois, et rien du tout
   pour qui a demandé moins de mouvement. */
.ds-projet-choses--fete .ds-projet-choses__rond::before,.ds-projet-choses--fete .ds-projet-choses__rond::after{content:"";position:absolute;pointer-events:none;opacity:0}
.ds-projet-choses--fete .ds-projet-choses__rond::after{inset:0;border-radius:50%}
.ds-projet-choses--fete .ds-projet-choses__rond::before{left:50%;top:50%;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%}
@media (prefers-reduced-motion:no-preference){
  .ds-projet-choses--fete .ds-projet-choses__rond{animation:ds-fete-coche .7s var(--ease) 1}
  .ds-projet-choses--fete .ds-projet-choses__rond::after{animation:ds-fete-onde 1s ease-out .1s 1}
  .ds-projet-choses--fete .ds-projet-choses__rond::before{animation:ds-fete-confettis 1s ease-out .15s 1}
}
@keyframes ds-fete-coche{0%{transform:scale(.4)}55%{transform:scale(1.18)}100%{transform:none}}
@keyframes ds-fete-onde{from{opacity:.55;box-shadow:0 0 0 0 var(--color-success-solid)}to{opacity:0;box-shadow:0 0 0 16px var(--color-success-solid)}}
@keyframes ds-fete-confettis{
  0%{opacity:1;box-shadow:0 0 0 var(--color-success-solid),0 0 0 var(--color-warning-solid),0 0 0 var(--color-accent),0 0 0 var(--color-info-solid),0 0 0 var(--color-studies-solid),0 0 0 var(--color-accent)}
  100%{opacity:0;box-shadow:-34px -22px 0 var(--color-success-solid),36px -18px 0 var(--color-warning-solid),-30px 24px 0 var(--color-accent),38px 20px 0 var(--color-info-solid),4px -38px 0 var(--color-studies-solid),-6px 38px 0 var(--color-accent)}}
/* À l’identique de la planche 7 (décision du 9 octobre 2026, 16 h 45), sur
   cette carte seulement — le système de dessin des autres écrans ne bouge
   pas (P7-09) : photo moins haute, badges en graisse moyenne, barre un peu
   plus épaisse, chevron de la couleur du texte. */
.ds-projet-carte__lien > .ds-couverture{aspect-ratio:2.3/1}
.ds-projet-carte .ds-projet-carte__corps{padding-top:var(--space-3);padding-bottom:var(--space-3)}
.ds-projet-carte .ds-projet-carte__corps .ds-badge{font-weight:var(--weight-medium);padding:3px 12px}
.ds-projet-carte .ds-progression__piste{height:7px}
.ds-projet-carte .ds-progression__valeur{font-weight:var(--weight-bold);color:var(--color-text)}
.ds-attention-bandeau{display:flex;align-items:center;gap:var(--space-4);margin:0 0 var(--space-5);padding:var(--space-3) var(--space-5);
  background:color-mix(in srgb,var(--color-danger-bg) 60%,var(--color-surface));border:1px solid color-mix(in srgb,var(--color-danger-solid) 25%,transparent);border-radius:var(--radius-lg)}
.ds-attention-bandeau__ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;
  background:color-mix(in srgb,var(--color-danger-solid) 14%,transparent);color:var(--color-danger-solid)}
.ds-attention-bandeau__ic .ds-ic{width:24px;height:24px}
.ds-attention-bandeau__texte{flex:1;min-width:0}
.ds-attention-bandeau__texte h2{margin:0;font-size:var(--text-h3);color:var(--color-danger-solid);overflow-wrap:anywhere}
.ds-attention-bandeau__texte p{margin:4px 0 0;color:var(--color-text-2);overflow-wrap:anywhere}
.ds-attention-bandeau__point{display:inline-block;margin:0 8px;color:var(--color-muted)}
.ds-attention-bandeau__point--danger{color:var(--color-danger-solid)}
.ds-attention-bandeau .ds-btn{font-weight:var(--weight-medium)}
.ds-attention-bandeau .ds-btn{flex:none;flex-direction:row-reverse}
@media (max-width:640px){
  .ds-attention-bandeau{flex-wrap:wrap}
  .ds-attention-bandeau__ic{width:40px;height:40px}
  .ds-attention-bandeau__texte{flex-basis:calc(100% - 56px)}
  .ds-attention-bandeau .ds-btn{width:100%}
}
.ds-projet-carte__raccourcis{display:flex;border-top:1px solid var(--color-divider)}
.ds-projet-carte__raccourcis a{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--touch);
  font-size:var(--text-meta);font-weight:var(--weight-medium);color:var(--color-text-2);text-decoration:none}
.ds-projet-carte__raccourcis a + a{border-left:1px solid var(--color-divider)}
.ds-projet-carte__raccourcis a:hover{background:var(--color-surface-2);color:var(--color-text)}
.ds-projet-carte__raccourcis .ds-ic{width:16px;height:16px}

.ds-projet-entete{margin:0 0 var(--space-5)}
.ds-retour-liste{display:inline-flex;align-items:center;gap:6px;margin:0 0 var(--space-3);font-size:var(--text-meta);color:var(--color-muted);text-decoration:none}
.ds-retour-liste .ds-ic{width:16px;height:16px;transform:rotate(180deg)}
.ds-retour-journee{margin:0 0 var(--space-3)}
.ds-retour-liste:hover{color:var(--color-text)}
.ds-projet-entete__carte{display:grid;grid-template-columns:260px minmax(0,1fr) auto;gap:var(--space-5);align-items:center;
  background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3);box-shadow:var(--shadow-card)}
.ds-couverture--entete{border-radius:var(--radius-md);aspect-ratio:16/10}
.ds-projet-entete__txt{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}
.ds-projet-entete__ligne{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-projet-entete__ligne .ds-h1{overflow-wrap:anywhere}
.ds-projet-entete__droite{display:flex;align-items:center;gap:var(--space-4);padding-right:var(--space-3)}
.ds-projet-entete__avancement{display:inline-flex;flex-direction:column;align-items:center;gap:2px;text-align:center;max-width:110px}
/* « Télécharger le dossier complet » (3 octobre 2026) : sa ligne, au pied de la carte du projet. */
.ds-projet-entete__pied{grid-column:1 / -1;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-3);margin-top:calc(var(--space-3) - var(--space-5));padding:var(--space-3) var(--space-3) 0;border-top:1px solid var(--color-border)}
.ds-projet-onglets{display:flex;align-items:flex-end;gap:var(--space-4);margin:var(--space-4) 0 0;border-bottom:1px solid var(--color-border)}
.ds-projet-onglets .ds-onglets{border-bottom:0;flex:1;min-width:0}
.ds-rubriques{display:none;margin:var(--space-4) 0 0}
.ds-rubriques>summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:var(--touch);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;list-style:none}
.ds-rubriques>summary::-webkit-details-marker{display:none}
.ds-rubriques>summary .ds-ic{width:18px;height:18px;transform:rotate(90deg);transition:transform var(--motion-fast) var(--ease);color:var(--color-text-2)}
.ds-rubriques[open]>summary .ds-ic{transform:rotate(-90deg)}
.ds-rubriques__ou{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.ds-rubriques__ou small{font-size:var(--text-meta);color:var(--color-text-2)}
.ds-rubriques__ou b{font-size:var(--text-body);overflow-wrap:anywhere}
.ds-rubriques__liste{margin-top:var(--space-2);padding:var(--space-2) var(--space-3) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-rubriques__titre{margin:var(--space-3) 0 var(--space-1);font-size:var(--text-meta);font-weight:600;color:var(--color-accent-strong);letter-spacing:.02em}
.ds-rubriques__grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px var(--space-3)}
.ds-rubriques__lien{display:flex;align-items:center;min-height:var(--touch);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);text-decoration:none;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-rubriques__lien:hover{background:var(--color-surface-2)}
.ds-rubriques__lien[aria-current="page"]{font-weight:600;background:var(--color-surface-2)}
@media (max-width:640px){.ds-rubriques{display:block}.ds-projet-onglets{display:none}}
.ds-plus-onglets summary{min-height:var(--touch);padding:0 var(--space-2);font-size:var(--text-small);color:var(--color-text-2);gap:4px}
.ds-plus-onglets summary .ds-ic{width:14px;height:14px;transform:rotate(90deg)}
.ds-plus-onglets summary:hover{background:var(--color-surface-2)}
.ds-plus-onglets summary.ds-plus-onglets--ici{color:var(--color-text);font-weight:600;box-shadow:inset 0 -2px 0 var(--color-primary)}
.ds-plus{width:min(600px,calc(100vw - 32px));display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2) var(--space-4);padding:var(--space-3)}
.ds-plus__groupe{display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-plus__titre{margin:0 0 var(--space-1);padding:var(--space-2) var(--space-3) 0;font-size:var(--text-meta);font-weight:600;color:var(--color-accent-strong);letter-spacing:.02em}
.ds-menu a.ds-plus__lien{align-items:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3);min-height:var(--touch);transition:background var(--motion-fast) var(--ease)}
.ds-plus__ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--color-accent-soft);color:var(--color-accent-strong);transition:transform var(--motion-fast) var(--ease)}
.ds-plus__ic .ds-ic{width:18px;height:18px}
.ds-menu a.ds-plus__lien:hover .ds-plus__ic{transform:scale(1.08)}
.ds-plus__txt{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.ds-plus__txt b{font-weight:600;font-size:var(--text-small)}
.ds-plus__txt small{font-size:var(--text-meta);color:var(--color-muted)}
.ds-menu a.ds-plus__lien[aria-current="page"]{background:var(--color-surface-2)}
/* (13 octobre 2026, « Oui, avec un cadenas ») La rubrique que la formule n’ouvre pas : grisée, lisible, sous un cadenas. */
.ds-menu a.ds-plus__lien--cadenas .ds-plus__ic{background:var(--color-surface-3);color:var(--color-text-2)}
.ds-menu a.ds-plus__lien--cadenas .ds-plus__txt b{color:var(--color-text-2);font-weight:500}
.ds-plus__formule{font-style:italic}
.ds-rubriques__lien--cadenas{gap:6px;color:var(--color-text-2)}
.ds-rubriques__lien--cadenas .ds-ic{flex:none;width:16px;height:16px}
@media (max-width:760px){
  .ds-plus{grid-template-columns:minmax(0,1fr);max-height:70vh;overflow:auto}
}
.ds-projet-grille{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:var(--gap-cards);align-items:start}
.ds-projet-grille__col{display:flex;flex-direction:column;gap:var(--gap-cards);min-width:0}
.ds-etapes .ds-case{width:18px;height:18px;border:2px solid var(--color-border);border-radius:6px;flex:none}
.ds-photos-mini{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-2)}
.ds-photos-mini a{display:block;aspect-ratio:1;border-radius:var(--radius-md);overflow:hidden;background:var(--color-surface-3)}
.ds-photos-mini img{width:100%;height:100%;object-fit:cover;display:block}

.ds-timeline-carte{display:flex;flex-direction:column;gap:var(--space-5)}
.ds-fil-jour__titre{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2);margin:0 0 var(--space-2)}
.ds-timeline{list-style:none;margin:0;padding:0;position:relative}
.ds-timeline__evt{display:grid;grid-template-columns:52px 36px minmax(0,1fr) auto;gap:var(--space-3);align-items:start;padding:var(--space-3) 0;position:relative}
.ds-timeline__evt::before{content:"";position:absolute;left:calc(52px + var(--space-3) + 17px);top:0;bottom:0;width:2px;background:var(--color-divider)}
.ds-timeline__evt:first-child::before{top:var(--space-5)}
.ds-timeline__evt:last-child::before{bottom:calc(100% - var(--space-5))}
.ds-timeline__heure{font-size:var(--text-meta);color:var(--color-muted);padding-top:9px;font-variant-numeric:tabular-nums}
.ds-timeline__pastille{position:relative;z-index:1;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center}
.ds-timeline__pastille .ds-ic{width:18px;height:18px}
.ds-timeline__pastille--info{background:var(--color-info-bg);color:var(--color-info)}
.ds-timeline__pastille--succes{background:var(--color-success-bg);color:var(--color-success)}
.ds-timeline__pastille--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-timeline__pastille--danger{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-timeline__pastille--etudes{background:var(--color-studies-bg);color:var(--color-studies)}
.ds-timeline__corps{display:flex;flex-direction:column;gap:2px;min-width:0;padding-top:6px}
.ds-timeline__corps b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-timeline__photos{display:flex;gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap}
.ds-timeline__photos img,.ds-timeline__plus{width:64px;height:64px;border-radius:var(--radius-md);object-fit:cover;background:var(--color-surface-3)}
.ds-timeline__plus{display:flex;align-items:center;justify-content:center;font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2)}
.ds-timeline__gestes{display:flex;gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;padding-top:2px}

/* --- Lot D : le planning (Gantt pastel, effet domino, tâches) ----------- */
.ds-gantt-cadre{overflow-x:auto;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-gantt-cadre:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-gantt{min-width:760px;position:relative}
.ds-gantt__ligne{display:grid;grid-template-columns:300px minmax(0,1fr);align-items:stretch;border-top:1px solid var(--color-divider);min-height:48px}
.ds-gantt__ligne--entete{border-top:0;min-height:36px;background:var(--color-surface-2);font-size:var(--text-meta);color:var(--color-muted)}
.ds-gantt__ligne--faite .ds-gantt__txt b{color:var(--color-muted);text-decoration:line-through}
.ds-gantt__nom{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);min-width:0;position:sticky;left:0;z-index:2;
  background:var(--color-surface);border-right:1px solid var(--color-divider)}
.ds-gantt__ligne--entete .ds-gantt__nom{background:var(--color-surface-2);font-weight:var(--weight-medium)}
.ds-gantt__txt{display:flex;flex-direction:column;min-width:0;flex:1}
.ds-gantt__txt b{font-size:var(--text-small);overflow-wrap:break-word}
.ds-gantt__txt span{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:break-word}
.ds-gantt__txt a{color:inherit;text-decoration:none;display:block;overflow-wrap:break-word}.ds-gantt__txt a b{display:inline}.ds-gantt__txt a:hover b{text-decoration:underline}
.ds-gantt__nom .ds-badge{flex:none}
.ds-gantt__piste{position:relative;min-height:36px}
.ds-gantt__piste::after{content:"";position:absolute;top:0;bottom:0;left:var(--auj);width:2px;background:var(--color-danger-solid);opacity:.55;z-index:1}
.ds-gantt__ligne--entete .ds-gantt__piste::after{display:none}
.ds-gantt__col{position:absolute;top:0;bottom:0;display:flex;align-items:center;padding-left:6px;border-left:1px solid var(--color-divider);white-space:nowrap;overflow:hidden}
.ds-gantt__barre{position:absolute;top:50%;height:18px;transform:translateY(-50%);border-radius:var(--radius-pill);border:1px solid transparent;
  display:flex;align-items:center;overflow:hidden;min-width:8px}
.ds-gantt__barre--etudes{background:var(--color-studies-bg);border-color:var(--color-studies-solid)}
.ds-gantt__barre--info{background:var(--color-info-bg);border-color:var(--color-info-solid)}
.ds-gantt__barre--succes{background:var(--color-success-bg);border-color:var(--color-success-solid)}
.ds-gantt__barre--neutre{background:var(--color-surface-3);border-color:var(--color-border)}
.ds-gantt__barre--phase{height:10px;opacity:.9}
.ds-gantt__barre--retard{border:2px solid var(--color-danger-solid)}
.ds-gantt__barre--fait{opacity:.45}
.ds-gantt__barre--jalon{width:14px!important;min-width:14px;height:14px;border-radius:3px;transform:translate(-50%,-50%) rotate(45deg)}
.ds-gantt__barre--fantome{background:transparent;border:2px dashed var(--color-warning-solid);height:22px;z-index:1}
.ds-gantt__etiquette{font-size:11px;font-weight:var(--weight-medium);padding:0 6px;white-space:nowrap;color:var(--color-text-2)}
.ds-gantt--projets .ds-gantt__barre{height:22px}
.ds-gantt__phase > summary{list-style:none;cursor:pointer;background:var(--color-surface-2)}
.ds-gantt__phase > summary::-webkit-details-marker{display:none}
.ds-gantt__phase > summary .ds-gantt__nom{background:var(--color-surface-2)}
.ds-gantt__chevron .ds-ic{width:14px;height:14px;transition:transform var(--motion-fast) var(--ease)}
.ds-gantt__phase[open] .ds-gantt__chevron .ds-ic{transform:rotate(90deg)}
.ds-gantt__legende{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin:var(--space-3) 0 0;font-size:var(--text-meta);color:var(--color-muted)}
.ds-gantt__legende span{display:inline-flex;align-items:center;gap:6px}
.ds-gantt__losange-legende{width:9px;height:9px;background:var(--color-surface-3);border:1px solid var(--color-text-2);transform:rotate(45deg);display:inline-block}
.ds-gantt__auj-legende{width:2px;height:12px;background:var(--color-danger-solid);display:inline-block}
.ds-fait{margin:0;flex:none}
.ds-fait__bouton{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;min-height:44px;border-radius:50%;border:0;background:transparent;cursor:pointer;color:var(--color-muted)}
.ds-fait__bouton::before{content:"";position:absolute;width:20px;height:20px;border:2px solid var(--color-border);border-radius:6px}
.ds-fait__bouton{position:relative}
.ds-fait__bouton .ds-ic{width:14px;height:14px;opacity:0;position:relative}
.ds-fait__bouton:hover .ds-ic,.ds-fait__bouton:focus-visible .ds-ic{opacity:1;color:var(--color-success)}
.ds-fait__bouton:hover::before{border-color:var(--color-success-solid);background:var(--color-success-bg)}
.ds-planning-outils{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}
.ds-planning-outils form{margin:0}
.ds-planning-sansdate{margin:var(--space-3) 0 0}
.ds-domino__aide{margin:0 0 var(--space-3)}
.ds-domino__form{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,.7fr) auto;gap:var(--space-3);align-items:end}
.ds-domino__form .ds-champ{margin:0}
.ds-domino__resultat{margin-top:var(--space-5);padding-top:var(--space-4);border-top:1px solid var(--color-divider);display:flex;flex-direction:column;gap:var(--space-3)}
.ds-domino__chiffres{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gap-cards)}
.ds-domino__alerte{display:flex;align-items:center;gap:var(--space-2);margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-danger-bg);color:var(--color-danger);font-weight:var(--weight-medium)}
.ds-domino__envoi{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-domino__boutons{display:flex;gap:var(--space-2);flex-wrap:wrap}
.ds-planning-global{display:flex;flex-direction:column;gap:var(--gap-cards);margin-top:var(--space-4)}
.ds-taches{margin-top:var(--space-2);display:flex;flex-direction:column;gap:var(--space-4)}
.ds-tache .ds-avatar{flex:none}
.ds-formulaire{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-formulaire__duo{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}
.ds-carte__tete .ds-planning-outils,.ds-carte__tete .ds-puces{margin:0}

/* --- Lot E : documents, galerie, Capturer -------------------------------- */
[data-ds-capturer] form,[data-ds-capturer] [data-panneau]{display:flex;flex-direction:column;gap:var(--space-3)}
[data-ds-capturer] [data-panneau][hidden]{display:none}
.ds-capturer__pied{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2)}
.ds-input--fichier{padding-top:10px}
/* Capturer : plusieurs pièces, qui s’additionnent avant l’envoi (Jean-David,
   3 octobre 2026). Sans script : deux champs ordinaires, leur étiquette
   au-dessus. Avec (form.ds-pieces--vivant, posé par ds.js) : l’étiquette
   devient le bouton, le champ s’efface, la liste des pièces choisies paraît. */
.ds-pieces__gestes{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-pieces__geste{position:relative;flex-direction:column-reverse;margin:0}
.ds-pieces__geste .ds-ic{display:none}
.ds-pieces--vivant .ds-pieces__gestes{flex-direction:row;flex-wrap:wrap;gap:var(--space-2)}
.ds-pieces--vivant .ds-pieces__geste{flex:1 1 200px;min-width:0}
.ds-pieces--vivant .ds-pieces__geste input{position:absolute;left:0;top:0;width:1px;height:1px;min-height:0;padding:0;border:0;opacity:0;overflow:hidden;clip:rect(0 0 0 0)}
.ds-pieces--vivant .ds-pieces__geste label{width:100%;white-space:normal;text-align:center}
.ds-pieces--vivant .ds-pieces__geste .ds-ic{display:block}
.ds-pieces--vivant .ds-pieces__geste input:focus-visible + label{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-pieces__compte{margin:0;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-pieces__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-pieces__liste[hidden]{display:none}
.ds-pieces__piece{display:flex;align-items:center;gap:var(--space-3);min-width:0;padding:var(--space-1) var(--space-1) var(--space-1) var(--space-2);
  border:1px solid var(--color-border);border-radius:var(--radius-md)}
.ds-pieces__vignette{flex:none;width:44px;height:44px;border-radius:var(--radius-sm);background:var(--color-surface-3);color:var(--color-muted);
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.ds-pieces__vignette canvas{display:block;width:44px;height:44px}
/* Un nom ne se coupe jamais (règle de la maison) : celui d’une pièce passe à la ligne. */
.ds-pieces__nom{flex:1;min-width:0;overflow-wrap:anywhere;font-size:var(--text-small);line-height:1.3}
.ds-pieces__poids{flex:none;font-size:var(--text-meta);color:var(--color-muted);font-variant-numeric:tabular-nums}
.ds-pieces__retirer{flex:none;width:var(--touch);height:var(--touch);display:flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-sm);
  background:transparent;color:var(--color-text-2);cursor:pointer}
.ds-pieces__retirer:hover{background:var(--color-surface-3);color:var(--color-text)}
/* Le bouton d’envoi reste sous le doigt quand la liste s’allonge : la fenêtre
   défile, son pied reste collé en bas. */
.ds-pieces--vivant .ds-capturer__pied{position:sticky;bottom:0;z-index:1;flex-wrap:nowrap;margin:0 0 calc(-1 * var(--space-5));padding:var(--space-3) 0 var(--space-5);background:var(--color-surface)}
.ds-pieces--vivant .ds-capturer__pied .ds-btn{padding-left:var(--space-3);padding-right:var(--space-3)}
.ds-pieces--vivant .ds-capturer__pied .ds-btn[type=submit]{flex:0 1 auto;min-width:0;white-space:normal;text-align:center}
.ds-pieces__avis{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small)}
.ds-dictee{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);padding:var(--space-5) 0}
.ds-dictee__bouton{display:inline-flex;align-items:center;gap:var(--space-2);min-height:56px;padding:0 var(--space-5);border-radius:var(--radius-pill);border:0;cursor:pointer;
  background:var(--color-primary);color:var(--color-on-dark);font-weight:var(--weight-bold)}
.ds-dictee__bouton[aria-pressed="true"]{background:var(--color-danger-solid)}
.ds-dictee__bouton .ds-ic{width:20px;height:20px}
.ds-dictee__etat{margin:0;color:var(--color-text-2);text-align:center}
.ds-docs-barre{display:flex;gap:var(--space-3);align-items:center;flex-wrap:wrap;margin:0 0 var(--space-3)}
.ds-docs-tri{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);margin:calc(-1 * var(--space-3)) 0 var(--space-5)}
.ds-docs-tri__mot{font-size:var(--text-meta);color:var(--color-muted);margin-right:var(--space-1)}
.ds-docs-tri__sens{font-weight:600;margin-left:2px}
.ds-docs-recherche{flex:1 1 280px;display:flex;align-items:center;gap:var(--space-2);position:relative}
.ds-docs-recherche > .ds-ic{position:absolute;left:12px;width:18px;height:18px;color:var(--color-muted)}
.ds-docs-recherche .ds-input{padding-left:38px}
.ds-docs-vues{display:flex;gap:var(--space-2)}
.ds-docs-projet{display:flex;gap:var(--space-2);align-items:flex-end;margin:0 0 var(--space-3);max-width:420px}
.ds-docs-projet .ds-champ{flex:1;margin:0}
.ds-docs-projet [hidden]{display:none}
.ds-docs-global{display:flex;flex-direction:column;gap:var(--gap-cards)}
.ds-docs{list-style:none;margin:0;padding:0}
.ds-doc{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-doc:first-child{border-top:0}
.ds-doc__txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-doc__txt b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-doc__txt a{color:inherit;text-decoration:none}.ds-doc__txt a:hover b{text-decoration:underline}
.ds-doc__txt span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-doc__txt .ds-doc__ajout,.ds-galerie__txt .ds-doc__ajout{font-size:var(--text-meta);color:var(--color-text-2);font-weight:var(--weight-bold)}
.ds-doc__etiquettes{display:flex;gap:var(--space-1);flex-wrap:wrap;justify-content:flex-end}
.ds-doc__gestes{display:flex;gap:var(--space-2);flex:none}
.ds-doc-apercu{flex:none;width:48px;height:48px;border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:var(--color-surface-3);color:var(--color-text-2)}
.ds-doc-apercu img{width:100%;height:100%;object-fit:cover}
.ds-doc-apercu .ds-ic{width:18px;height:18px}
.ds-doc-apercu b{font-size:9px;letter-spacing:.04em}
.ds-doc-apercu--info{background:var(--color-info-bg);color:var(--color-info)}
.ds-doc-apercu--etudes{background:var(--color-studies-bg);color:var(--color-studies)}
.ds-doc-apercu--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-doc-apercu--succes{background:var(--color-success-bg);color:var(--color-success)}
.ds-doc-apercu--grand{width:100%;height:auto;aspect-ratio:4/3;border-radius:var(--radius-md) var(--radius-md) 0 0}
.ds-doc-apercu--grand .ds-ic{width:32px;height:32px}.ds-doc-apercu--grand b{font-size:12px}
.ds-galerie{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-3)}
.ds-galerie__carte{display:flex;flex-direction:column;height:100%;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;text-decoration:none;color:inherit;
  background:var(--color-surface);position:relative}
.ds-galerie__carte:hover{box-shadow:var(--shadow-raised)}
.ds-galerie__txt{display:flex;flex-direction:column;gap:2px;padding:var(--space-2) var(--space-3) var(--space-3);min-width:0}
.ds-galerie__txt b{font-size:var(--text-small);overflow-wrap:break-word}
.ds-galerie__txt span{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:break-word}
.ds-galerie__badge{position:absolute;top:var(--space-2);left:var(--space-2)}

/* --- Lot E : la visionneuse ------------------------------------------------ */
.ds-vis-tete{margin:0 0 var(--space-4)}
.ds-vis-titre{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);flex-wrap:wrap}
.ds-vis-titre .ds-h1{overflow-wrap:anywhere}
.ds-vis-titre .ds-planning-outils form{margin:0}
.ds-visionneuse{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:var(--gap-cards);align-items:start}
.ds-vis-cote{display:flex;flex-direction:column;gap:var(--gap-cards);min-width:0}
.ds-vis-piece{padding:var(--space-3)}
.ds-vis-pages{display:flex;gap:var(--space-3);align-items:center;justify-content:center;margin:0 0 var(--space-3);flex-wrap:wrap}
.ds-vis-pages[hidden]{display:none}
.ds-vis-scene{display:block;text-align:center;background:var(--color-surface-3);padding:var(--space-3);border-radius:var(--radius-md);cursor:crosshair}
#kb-cadre{position:relative;display:inline-block;line-height:0;max-width:100%}
.ds-vis-scene img,.ds-vis-scene canvas{max-width:100%;height:auto;display:block}
.kb-pdf .kb-point{display:none}
.kb-pdf .kb-point.kb-place{display:block}
.kb-point{position:absolute;transform:translate(-50%,-50%);width:28px;height:28px;border-radius:50%;background:var(--color-primary);color:var(--color-on-dark);
  font-size:13px;font-weight:var(--weight-bold);line-height:24px;text-align:center;border:2px solid var(--color-surface);text-decoration:none;box-shadow:var(--shadow-raised)}
.kb-point-neuf{background:var(--color-warning-solid)}
.kb-point.kb-vise,.kb-vise > .kb-point{background:var(--color-accent-strong);transform:translate(-50%,-50%) scale(1.2)}
.ds-vis-piece #kb-ou{margin:var(--space-3) 0 0;text-align:center}
.ds-vis-vide{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);padding:var(--space-6) var(--space-4);text-align:center}
.ds-vis-vide .ds-doc-apercu--grand{max-width:240px}
.ds-remarques{list-style:none;margin:0 0 var(--space-4);padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-remarque{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-2);border-radius:var(--radius-md)}
.ds-remarque.kb-vise{background:var(--color-accent-soft)}
.ds-remarque p{margin:0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-remarque span{font-size:var(--text-meta);color:var(--color-muted)}
.kb-num{flex:none;display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:50%;background:var(--color-primary);color:var(--color-on-dark);
  font-size:12px;font-weight:var(--weight-bold)}
.kb-num--sans{background:var(--color-surface-3);color:var(--color-muted)}
.ds-vis-infos{display:grid;grid-template-columns:auto 1fr;gap:var(--space-2) var(--space-4);margin:0}
.ds-vis-infos div{display:contents}
.ds-vis-infos dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-vis-infos dd{margin:0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-liste li b a{color:inherit}
/* Une ligne de liste qui s'ouvre (lots de la page projet, 1er octobre) :
   toute la ligne est le lien ; la fiche visée se signale à l'arrivée. */
.ds-liste li > a.ds-liste__ligne{display:flex;flex:1;min-width:0;align-items:center;gap:var(--space-3);color:inherit;text-decoration:none;border-radius:var(--radius-sm);margin:calc(-1 * var(--space-2));padding:var(--space-2)}
.ds-liste li > a.ds-liste__ligne:hover{background:var(--color-surface-2)}
.ds-liste li > a.ds-liste__ligne:hover b{text-decoration:underline}
.ds-liste li > a.ds-liste__ligne:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-liste li > a.ds-liste__ligne > div{flex:1;min-width:0}
.ds-encore-n a{color:inherit}
/* Un titre de carte qui s'ouvre (nom du lot, consultation, 1er octobre). */
.ds-titre-lien{color:inherit;text-decoration:none}
.ds-titre-lien:hover{text-decoration:underline}
.ds-titre-lien:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-lot{scroll-margin-top:calc(var(--topbar) + var(--space-5))}
.ds-lot:target{outline:2px solid var(--color-accent);outline-offset:2px}
/* (5 octobre 2026) La carte sur laquelle on revient — un lot renommé ou créé —
   se signale un instant ; sans animation pour qui les a réduites. */
@media (prefers-reduced-motion:no-preference){.ds-lot:target{animation:ds-lot-signal 1.8s ease-out 1}}
@keyframes ds-lot-signal{from{box-shadow:0 0 0 8px var(--color-accent)}to{box-shadow:0 0 0 0 transparent}}

/* --- Lot F : consultation et budget ---------------------------------------- */
.ds-page-tete--compacte{align-items:center;margin:0 0 var(--space-4)}
.ds-lots{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:var(--gap-cards)}
.ds-lot{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-lot__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-lot__tete .ds-h3{overflow-wrap:anywhere}
.ds-lot__tete .ds-badge{flex:none}
.ds-lot__legende{display:flex;align-items:center;gap:6px;margin:0}
.ds-lot__gestes{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-top:auto;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-offres{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-offre{display:flex;flex-direction:column;gap:4px}
.ds-offre--retenue{padding:var(--space-2);margin:0 calc(-1 * var(--space-2));border-radius:var(--radius-md);background:var(--color-info-bg)}
.ds-offre__tete{display:flex;justify-content:space-between;gap:var(--space-2);font-size:var(--text-small)}
.ds-offre__tete b{overflow-wrap:break-word;min-width:0}
.ds-offre__montant{font-weight:var(--weight-bold);flex:none;font-variant-numeric:tabular-nums}
.ds-offre__piste{position:relative;height:10px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-offre__barre{position:absolute;left:0;top:0;bottom:0;border-radius:var(--radius-pill)}
.ds-offre__barre--succes{background:var(--color-success-solid)}.ds-offre__barre--attention{background:var(--color-warning-solid)}
.ds-offre__barre--danger{background:var(--color-danger-solid)}.ds-offre__barre--neutre{background:var(--color-text-2);opacity:.5}
.ds-offre__estimation{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--color-text);border-radius:1px}
.ds-offre__estimation-legende{display:inline-block;width:2px;height:12px;background:var(--color-text)}
.ds-offre__pied{display:flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}
/* La proposition « Déplacer » (5 octobre 2026) : discrète, sous l’offre. */
.ds-offre__proposition{display:flex;gap:var(--space-2);align-items:center;justify-content:space-between;flex-wrap:wrap;margin-top:var(--space-2);font-size:var(--text-meta);color:var(--color-muted)}
.ds-offre__proposition>span{flex:1 1 12rem;min-width:0}
.ds-offre__proposition form{margin:0}
.ds-offre__proposition-note{flex:1 1 100%}
.ds-offre__ecart{font-size:var(--text-meta);font-weight:var(--weight-medium)}
.ds-offre__ecart--succes{color:var(--color-success)}.ds-offre__ecart--attention{color:var(--color-warning)}.ds-offre__ecart--danger{color:var(--color-danger)}
.ds-budget-alerte{margin:0 0 var(--gap-cards)}
.ds-budget-lots{display:flex;flex-direction:column}
.ds-budget-ligne{display:grid;grid-template-columns:minmax(0,2.4fr) repeat(3,minmax(0,1fr)) minmax(0,.8fr);gap:var(--space-3);align-items:center;padding:var(--space-3) 0;border-top:1px solid var(--color-divider);font-size:var(--text-small);font-variant-numeric:tabular-nums}
.ds-budget-ligne--entete{border-top:0;font-size:var(--text-meta);color:var(--color-muted);padding-top:0}
.ds-budget-ligne__lot{display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-budget-ligne__lot b{overflow-wrap:anywhere}
.ds-budget-ligne__lot small{font-size:var(--text-meta);color:var(--color-muted)}
.ds-budget-ligne__piste{position:relative;height:8px;margin-top:6px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-budget-ligne__est{position:absolute;left:0;top:0;bottom:0;border-radius:var(--radius-pill);background:var(--color-border)}
.ds-budget-ligne__eng{position:absolute;left:0;top:2px;bottom:2px;border-radius:var(--radius-pill)}
.ds-budget-ligne__eng--succes{background:var(--color-success-solid)}.ds-budget-ligne__eng--attention{background:var(--color-warning-solid)}
.ds-budget-ligne__eng--danger{background:var(--color-danger-solid)}.ds-budget-ligne__eng--info{background:var(--color-info-solid)}

/* --- Tablette : barre latérale compacte ---------------------------------- */
@media (max-width:1100px){
  .ds-lat{width:var(--sidebar-compact);padding:var(--space-4) var(--space-2)}
  .ds-lat__marque{padding:0;display:flex;justify-content:center}
  .ds-lat__marque .ds-lat__mot{display:none}
  .ds-lat__marque .ds-lat__k{display:block}
  .ds-nav__lien{justify-content:center;padding:0}
  .ds-nav__mot,.ds-nav__bientot{display:none}
  .ds-nav__lien .ds-compteur{position:absolute;margin:-22px 0 0 22px;min-width:18px;height:18px}
  .ds-nav__lien{position:relative}
  .ds-moi summary{justify-content:center}
  .ds-haut,.ds-contenu{padding-left:var(--space-5);padding-right:var(--space-5)}
}

/* --- Téléphone : navigation du bas -------------------------------------- */
@media (max-width:760px){
  .ds-contenu .ds-btn--petit{min-height:var(--touch)}
  .ds-blocs{grid-template-columns:minmax(0,1fr)}
  .ds-blocs > .ds-bloc:not(.ds-bloc--auto){height:auto;max-height:480px}
  .ds-bloc,.ds-bloc[data-taille="S"],.ds-bloc[data-taille="M"],.ds-bloc[data-type="chiffres"]{grid-column:auto}
  .ds-modeles{grid-template-columns:minmax(0,1fr)}
  .ds-planning-semaine{grid-template-columns:minmax(0,1fr)}
  .ds-outil{min-width:var(--touch);min-height:var(--touch)}
  .ds-budget-tete{flex-direction:column;align-items:flex-start}
  .ds-haut__nouveau{display:none}
  .ds-accueil__tete{flex-direction:column;gap:var(--space-2)}
  .ds-accueil__date{text-align:left}
  .ds-accueil__date blockquote{display:none}
  .ds-chiffres{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}
  .ds-chiffre{padding:var(--space-3);gap:var(--space-2)}
  .ds-chiffre__ic{width:36px;height:36px}
  .ds-chiffre b{font-size:22px}
  .ds-chiffre--journee .ds-chiffre__txt b{font-size:clamp(14px,4.8vw,22px);font-size:clamp(14px,11cqw,22px)}
  .ds-chiffre__fleche,.ds-chiffre__txt small{display:none}
  .ds-panneau{padding:var(--space-4)}
  .ds-action{flex-wrap:wrap}
  .ds-action__gestes{width:100%;justify-content:flex-end}
  .ds-action__gestes .ds-btn{flex:1;min-height:var(--touch)}
  .ds-plus-tard{width:var(--touch);height:var(--touch)}
  .ds-puce{min-height:var(--touch)}
  .ds-lat{display:none}
  .ds-haut{height:auto;padding:var(--space-3) var(--space-4);gap:var(--space-2)}
  .ds-recherche .ds-touche{display:none}
  .ds-contenu{padding:var(--space-4) var(--space-4) calc(var(--bottom-nav) + var(--space-6))}
  .ds-h1{font-size:var(--text-h1-mobile)}
  .ds-bas{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-nav);height:calc(var(--bottom-nav) + env(safe-area-inset-bottom));
    padding:0 var(--space-2) env(safe-area-inset-bottom);background:var(--color-surface);border-top:1px solid var(--color-border);
    align-items:center;justify-content:space-around}
  .ds-bas__lien{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:var(--touch);min-height:var(--touch);
    padding:0 var(--space-2);font-size:11.5px;font-weight:var(--weight-bold);color:var(--color-muted);text-decoration:none;background:none;border:0;cursor:pointer}
  .ds-bas__lien[aria-current="page"]{color:var(--color-text)}
  .ds-bas__plus{width:56px;height:56px;border-radius:50%;background:var(--color-primary);color:var(--color-on-dark);border:0;
    display:flex;align-items:center;justify-content:center;margin-top:-22px;box-shadow:var(--shadow-raised);cursor:pointer}
  .ds-bas__plus .ds-ic{width:26px;height:26px;stroke-width:2.2}
  .ds-bas__k{width:24px;height:24px;border-radius:7px;background:var(--color-text);display:flex;align-items:center;justify-content:center}
  .ds-bas__k img{height:13px}
  .ds-tiroir{width:100vw;border-radius:0}
  .ds-capturer__choix{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ds-toasts{left:var(--space-4);right:var(--space-4);bottom:calc(var(--bottom-nav) + var(--space-4))}
  .ds-toast{min-width:0;max-width:none}
}

/* --- Lot C, tablette et téléphone ----------------------------------------- */
@media (max-width:1100px){
  .ds-projet-entete__carte{grid-template-columns:180px minmax(0,1fr)}
  .ds-projet-entete__droite{grid-column:1 / -1;justify-content:flex-start;padding:0 var(--space-2) var(--space-2)}
  .ds-projet-grille{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:760px){
  .ds-page-tete{flex-direction:column;gap:var(--space-3)}
  .ds-projets-grille{grid-template-columns:minmax(0,1fr)}
  .ds-projet-entete__carte{grid-template-columns:minmax(0,1fr);padding:0;overflow:hidden}
  .ds-couverture--entete{border-radius:0;aspect-ratio:16/9}
  .ds-projet-entete__txt{padding:0 var(--space-4)}
  .ds-projet-entete__droite{padding:0 var(--space-4) var(--space-4);flex-wrap:wrap}
  .ds-projet-entete__pied{justify-content:flex-start;margin-top:0;padding:var(--space-3) var(--space-4)}
  .ds-timeline__evt{grid-template-columns:36px minmax(0,1fr);gap:var(--space-2) var(--space-3)}
  .ds-timeline__evt::before{left:17px}
  .ds-timeline__heure{grid-column:2;grid-row:1;padding:0}
  .ds-timeline__pastille{grid-column:1;grid-row:1 / span 3}
  .ds-timeline__corps{grid-column:2;padding-top:0}
  .ds-timeline__gestes{grid-column:2;justify-content:flex-start}
  .ds-photos-mini{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* --- Lot D, tablette et téléphone ----------------------------------------- */
@media (max-width:760px){
  .ds-gantt{min-width:620px}
  .ds-gantt__ligne{grid-template-columns:190px minmax(0,1fr)}
  .ds-gantt__nom .ds-badge{display:none}
  .ds-domino__form{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .ds-domino__form .ds-champ:first-child{grid-column:1 / -1}
  .ds-domino__form .ds-btn{grid-column:1 / -1}
  .ds-domino__chiffres{grid-template-columns:minmax(0,1fr)}
  .ds-formulaire__duo{grid-template-columns:minmax(0,1fr)}
  .ds-carte__tete{flex-wrap:wrap}
}

/* --- Lot E, téléphone ----------------------------------------------------- */
@media (max-width:1100px){
  .ds-visionneuse{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:760px){
  .ds-vis-scene{padding:var(--space-2)}
  .ds-doc{flex-wrap:wrap}
  .ds-doc__txt{flex:1 1 calc(100% - 64px)}
  .ds-doc__etiquettes{justify-content:flex-start;margin-left:60px}
  .ds-doc__gestes{margin-left:auto}
  .ds-galerie{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ds-docs-projet{max-width:none}
}

/* --- Lot F, téléphone ----------------------------------------------------- */
@media (max-width:760px){
  .ds-lots{grid-template-columns:minmax(0,1fr)}
  .ds-page-tete--compacte{flex-direction:column;align-items:flex-start}
  .ds-budget-ligne{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ds-budget-ligne--entete{display:none}
  .ds-budget-ligne__lot{grid-column:1 / -1}
}

/* --- Lot G : échanges ------------------------------------------------------ */
.ds-attente{margin:0 0 var(--gap-cards)}
.ds-liste li .ds-avatar span{color:inherit;font-size:inherit}
.ds-conversation .ds-puces{margin:0 0 var(--space-3)}
.ds-conversation__fil{position:relative;max-height:min(62vh,640px);overflow-y:auto;padding:var(--space-2) var(--space-1);margin:0 calc(-1 * var(--space-1));border-top:1px solid var(--color-divider);border-bottom:1px solid var(--color-divider)}
.ds-conversation__fil:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-fil{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-fil__jour{display:flex;justify-content:center;margin:var(--space-2) 0 0}
.ds-fil__jour span{display:inline-block;font-size:var(--text-meta);color:var(--color-muted);background:var(--color-surface-2);border-radius:var(--radius-pill);padding:2px var(--space-3)}
.ds-fil__jour span::first-letter{text-transform:uppercase}
.ds-fil__evenement{display:flex;gap:var(--space-3);align-items:flex-start;align-self:center;width:min(100%,560px);padding:var(--space-3);border:1px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-fil__evenement .ds-badge{flex:none}
.ds-fil__evenement div{min-width:0}
.ds-fil__evenement b{display:block;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-fil__evenement p{margin:4px 0 0;font-size:var(--text-small);color:var(--color-text-2);white-space:pre-line;overflow-wrap:anywhere}
.ds-fil__evenement small{display:block;margin-top:4px;font-size:var(--text-meta);color:var(--color-muted)}
.ds-msg{display:flex;gap:var(--space-2);align-items:flex-end;max-width:min(78%,620px)}
.ds-msg--agence{align-self:flex-end;flex-direction:row-reverse}
.ds-msg__bulle{min-width:0;padding:var(--space-3);border-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-sm);background:var(--color-surface-2)}
.ds-msg--agence .ds-msg__bulle{background:var(--color-info-bg);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-sm)}
.ds-msg--attente .ds-msg__bulle{box-shadow:inset 0 0 0 2px var(--color-warning-solid)}
.ds-msg__qui{display:flex;flex-wrap:wrap;gap:4px;font-size:var(--text-meta);color:var(--color-muted)}
.ds-msg__qui b{color:var(--color-text);font-weight:var(--weight-bold)}
.ds-msg__titre{margin:4px 0 0;font-size:var(--text-small);font-weight:var(--weight-medium);overflow-wrap:anywhere}
.ds-msg__texte{margin:4px 0 0;font-size:var(--text-small);white-space:pre-line;overflow-wrap:anywhere}
.ds-msg__pied{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-top:6px;font-size:var(--text-meta);color:var(--color-muted)}
.ds-msg__repondre{display:inline-flex;align-items:center;min-height:var(--touch);font-weight:var(--weight-medium);color:var(--color-text)}
.ds-ecrire{display:flex;flex-direction:column;gap:var(--space-3);padding-top:var(--space-4)}
.ds-ecrire .ds-champ{margin:0}
.ds-ecrire textarea{min-height:88px;resize:vertical}
.ds-ecrire__reponse{display:flex;gap:var(--space-2);align-items:flex-start;margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-warning-bg);font-size:var(--text-small)}
.ds-ecrire__reponse .ds-ic{flex:none;width:18px;height:18px;margin-top:2px}
.ds-ecrire__gestes{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap}
.ds-ecrire__gestes .ds-meta{flex-basis:100%;margin:0}
.ds-form{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-messagerie{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:var(--gap-cards);align-items:start}
.ds-messagerie__liste,.ds-messagerie__fil{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:var(--space-4);min-width:0}
.ds-messagerie__liste .ds-puces{margin:0 0 var(--space-3)}
.ds-messagerie__fil--vide{display:flex;align-items:center;justify-content:center;min-height:320px}
.ds-conversations{list-style:none;margin:0 calc(-1 * var(--space-2));padding:0;max-height:min(70vh,720px);overflow-y:auto}
.ds-conversations__ligne{display:flex;gap:var(--space-3);align-items:center;padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);color:inherit;text-decoration:none;min-height:var(--touch)}
.ds-conversations__ligne:hover{background:var(--color-surface-2)}
.ds-conversations__ligne[aria-current="page"]{background:var(--color-accent-soft)}
.ds-conversations__corps{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-conversations__tete{display:flex;justify-content:space-between;gap:var(--space-2);font-size:var(--text-small)}
.ds-conversations__tete b{overflow-wrap:break-word;min-width:0}
.ds-conversations__tete time{flex:none;font-size:var(--text-meta);color:var(--color-muted)}
.ds-conversations__apercu{font-size:var(--text-meta);color:var(--color-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-messagerie__tete{display:flex;align-items:center;gap:var(--space-3);margin:0 0 var(--space-3)}
.ds-messagerie__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-messagerie__tete div{min-width:0}
.ds-messagerie__tete .ds-meta{display:inline-flex;align-items:center;min-height:32px}
.ds-messagerie__retour{display:none;margin:0}

/* --- Lot G, téléphone ----------------------------------------------------- */
@media (max-width: 900px){
  .ds-messagerie{grid-template-columns:minmax(0,1fr)}
  .ds-messagerie--ouverte .ds-messagerie__liste{display:none}
  .ds-messagerie:not(.ds-messagerie--ouverte) .ds-messagerie__fil{display:none}
  .ds-messagerie__tete{flex-wrap:wrap}
  .ds-messagerie__retour{display:inline-flex;flex-basis:100%;min-height:var(--touch)}
  .ds-msg{max-width:92%}
  .ds-messagerie__liste,.ds-messagerie__fil{padding:var(--space-3)}
  .ds-conversations{max-height:none}
  .ds-messagerie__tete .ds-meta{min-height:var(--touch)}
}

/* --- Lot G : entreprises --------------------------------------------------- */
.ds-annuaire__outils{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:0 0 var(--gap-cards)}
.ds-annuaire__cherche{display:flex;gap:var(--space-2);align-items:center;flex:0 1 380px;min-width:0}
.ds-annuaire__cherche .ds-input{flex:1;min-width:0}
.ds-annuaire__entete,.ds-annuaire__ligne{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(0,1.6fr) minmax(0,1.6fr) minmax(0,1fr) auto;gap:var(--space-3);align-items:center}
.ds-annuaire__entete{padding:0 0 var(--space-2);font-size:var(--text-meta);color:var(--color-muted)}
.ds-annuaire__liste{list-style:none;margin:0;padding:0}
.ds-annuaire__ligne{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-annuaire__nom{display:flex;align-items:center;gap:var(--space-3);min-width:0;min-height:var(--touch);color:inherit;text-decoration:none}
.ds-annuaire__nom:hover b{text-decoration:underline}
.ds-annuaire__nom > span:last-child,.ds-annuaire__metier,.ds-annuaire__projets,.ds-annuaire__offres{display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-annuaire b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-annuaire small{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:break-word}
.ds-annuaire__metier .ds-badge,.ds-annuaire__offres .ds-badge{align-self:flex-start}
.ds-annuaire__contact{display:flex;gap:var(--space-1);justify-content:flex-end;min-width:88px}
.ds-fiche-entreprise{margin:0 0 var(--gap-cards)}
.ds-fiche-entreprise__tete{display:flex;align-items:center;gap:var(--space-4)}
.ds-fiche-entreprise__tete .ds-h1{margin:0;overflow-wrap:anywhere}
.ds-fiche-entreprise__badges{display:flex;gap:var(--space-2);flex-wrap:wrap;margin:var(--space-2) 0 0}
.ds-fiche-entreprise__coord{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-3);margin:var(--space-4) 0 0}
.ds-fiche-entreprise__coord dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-fiche-entreprise__coord dd{margin:2px 0 0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-fiche-entreprise__coord a{display:inline-flex;align-items:center;min-height:32px}
/* LA LIGNE D’UN ACCÈS (12 octobre 2026, 12 h 18 — Jean-David, capture de son
   iPhone : « Attention il y a un bug d’affichage sur smartphone »). Dans
   « Accès à Kablann », le nom s’écrivait une lettre par ligne et le bouton
   recouvrait le courriel : la ligne d’une liste est une rangée qui ne passe
   pas à la ligne, et l’historique de l’accès, posé dedans, y réclame toute la
   largeur. Ici la rangée s’enroule — l’historique passe DESSOUS, à
   l’ordinateur comme au téléphone — et, sous 640 px, elle devient une pile :
   le nom, le courriel (qui passe à la ligne, sans « … »), le bouton en pleine
   largeur, puis l’historique. */
.ds-fiche-entreprise__acces .ds-liste li{flex-wrap:wrap}
.ds-fiche-entreprise__acces .ds-liste li>div{flex:1 1 16rem}
.ds-fiche-entreprise__acces .ds-liste li>div span{overflow-wrap:anywhere}
.ds-fiche-entreprise__acces .ds-liste li>form{margin:0;flex:none}
@media (max-width:640px){
  .ds-fiche-entreprise__acces .ds-liste li{flex-direction:column;align-items:stretch;flex-wrap:nowrap}
  .ds-fiche-entreprise__acces .ds-liste li>div,.ds-fiche-entreprise__acces .ds-liste li>.ds-historique__bloc{flex:none}
  .ds-fiche-entreprise__acces .ds-liste li>form .ds-btn{width:100%;min-height:var(--touch);justify-content:center}
}
.ds-gerer-fiche{margin:var(--gap-cards) 0 0}
.ds-gerer{border-top:1px solid var(--color-divider)}
.ds-gerer:first-of-type{border-top:0}
.ds-gerer summary{display:flex;align-items:center;gap:var(--space-3);min-height:var(--touch);cursor:pointer;font-weight:600;font-size:var(--text-small);list-style:none}
.ds-gerer summary::-webkit-details-marker{display:none}
.ds-gerer summary::after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--color-muted);border-bottom:2px solid var(--color-muted);transform:rotate(45deg);transition:transform var(--motion-fast) var(--ease)}
.ds-gerer[open] summary::after{transform:rotate(-135deg)}
.ds-gerer__form{padding:0 0 var(--space-4);max-width:640px}
.ds-fusion{max-width:760px}
.ds-fusion__deux{display:flex;align-items:center;gap:var(--space-4);margin:var(--space-4) 0;flex-wrap:wrap}
.ds-fusion__deux > div{flex:1;min-width:200px;display:flex;flex-direction:column;gap:2px;padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-fusion__deux small{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:anywhere}
.ds-fusion__liste{margin:var(--space-2) 0 var(--space-4);padding-left:var(--space-5)}
.ds-fusion__liste li{padding:2px 0}
.ds-fusion__gestes{display:flex;justify-content:flex-end;gap:var(--space-3);flex-wrap:wrap;margin-top:var(--space-4)}
.ds-fusion__comptes{margin:var(--space-4) 0 0;padding:var(--space-4);border:1px solid var(--color-warning);border-radius:var(--radius-md);background:var(--color-warning-bg)}
.ds-case-a-cocher{display:flex;align-items:flex-start;gap:var(--space-2);min-height:var(--touch);font-size:var(--text-small);font-weight:600;cursor:pointer}
.ds-case-a-cocher input{width:20px;height:20px;margin:2px 0 0;flex:none}
.ds-case-a-cocher--discrete{font-weight:400;color:var(--color-text-2);margin:0 0 var(--space-3)}
.ds-grille-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap-cards);align-items:start}
.ds-offre-ligne__fin{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:none}
.ds-offre-ligne__fin b{font-variant-numeric:tabular-nums}
.ds-factures li{flex-wrap:wrap}
.ds-factures__fin{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:none;margin-left:auto}
.ds-factures__fin b{font-variant-numeric:tabular-nums}
.ds-factures__geste{margin:0;flex:none}
/* Ce qui retient un paiement (4 octobre 2026, lot L-5) : sous la ligne, sur toute sa largeur. */
.ds-factures__retenue{flex:1 1 100%;display:flex;align-items:flex-start;gap:var(--space-2);margin:0;color:var(--color-danger);font-size:var(--text-small)}
.ds-factures__retenue svg{flex:none;width:16px;height:16px;margin-top:2px}
.ds-liste li .ds-factures__retenue span{color:inherit;font-size:inherit}
.ds-liste li .ds-factures__retenue b{display:inline;font-size:inherit}
/* Retirer une facture (1er octobre) : le geste plié, sous la ligne. */
.ds-rattacher__annuler{display:inline-block;margin:0 0 0 8px}
.ds-factures__retirer{flex:1 1 100%}
.ds-factures__retirer summary{cursor:pointer;width:max-content}
.ds-factures__retirer form{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin-top:6px}

/* --- Lot G, entreprises au téléphone -------------------------------------- */
@media (max-width: 900px){
  .ds-annuaire__entete{display:none}
  .ds-annuaire__ligne{grid-template-columns:minmax(0,1fr) auto;row-gap:var(--space-2)}
  .ds-annuaire__nom{grid-column:1}
  .ds-annuaire__contact{grid-column:2;grid-row:1}
  .ds-annuaire__metier,.ds-annuaire__projets,.ds-annuaire__offres{grid-column:1 / -1}
  .ds-annuaire__offres{flex-direction:row;align-items:center;gap:var(--space-2)}
  .ds-annuaire__cherche{flex-basis:100%}
  .ds-grille-2{grid-template-columns:minmax(0,1fr)}
  .ds-fiche-entreprise__coord a{min-height:var(--touch)}
  .ds-fiche-entreprise__tete{align-items:flex-start}
}
/* Un badge dans une liste garde sa couleur et sa taille. */
.ds-liste li > .ds-offre-ligne__fin{flex:none}
.ds-liste li span.ds-badge{font-size:var(--text-meta)}
.ds-liste li span.ds-badge--succes{color:var(--color-success)}.ds-liste li span.ds-badge--info{color:var(--color-info)}
.ds-liste li span.ds-badge--attention{color:var(--color-warning)}.ds-liste li span.ds-badge--danger{color:var(--color-danger)}
.ds-liste li span.ds-badge--etudes{color:var(--color-studies)}.ds-liste li span.ds-badge--accent{color:var(--color-accent-strong)}
.ds-liste li span.ds-badge--neutre{color:var(--color-text-2)}
@media (max-width: 900px){
  .ds-annuaire__ligne:first-child{border-top:0}
  .ds-annuaire__metier{flex-direction:row;align-items:center;gap:var(--space-2);flex-wrap:wrap}
}

/* --- Lot G : comptes rendus ------------------------------------------------ */
.ds-grille-cr{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start}
.ds-grille-cr .ds-carte__tete{flex-wrap:wrap;gap:var(--space-2)}
.ds-cr-rappel{margin:0 0 var(--space-2)}
.ds-crpoints{list-style:none;margin:0;padding:0}
.ds-crpoint{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-crpoint:first-child{border-top:0}
.ds-crpoint > div{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-crpoint b{font-size:var(--text-small);font-weight:var(--weight-medium);overflow-wrap:anywhere}
.ds-crpoint > div span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-crpoint .ds-badge{flex:none}
.ds-crpoint__numero{flex:none;display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 6px;border-radius:var(--radius-pill);background:var(--color-surface-3);font-size:var(--text-meta);font-weight:var(--weight-bold);font-variant-numeric:tabular-nums}
.ds-crpoint--retard .ds-crpoint__numero{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-grille-cr .ds-liste li > .ds-ic{flex:none;width:20px;height:20px;color:var(--color-muted)}
.ds-grille-cr .ds-liste li a{color:inherit}
@media (max-width: 900px){
  .ds-grille-cr{grid-template-columns:minmax(0,1fr)}
  .ds-crpoint{flex-wrap:wrap}
  .ds-grille-cr .ds-liste li a{display:inline-flex;align-items:center;min-height:var(--touch)}
}

/* --- Lot I : l’accueil des espaces client et entreprise -------------------- */
.ds-lat__qui{display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-2);margin:0 0 var(--space-5);min-width:0}
.ds-lat__qui > span{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.ds-lat__qui b{color:var(--color-nav-strong);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-lat__qui span span{color:var(--color-nav-muted);font-size:var(--text-meta)}
.ds-lat__marque--bas{margin:auto 0 0;padding-top:var(--space-5)}
.ds-lat__marque--bas img.ds-lat__mot{width:104px;opacity:.7}
.ds-haut--invite{justify-content:flex-end}
.ds-haut__marque{display:none}
.ds-haut__marque img{height:18px;width:auto;display:block}
.ds-invite .ds-nav__lien .ds-compteur{margin-left:auto}
.ds-inv-haut{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:var(--gap-cards);margin:0 0 var(--gap-cards);align-items:start}
.ds-inv-projet{padding:0;overflow:hidden}
.ds-inv-projet__visuel{position:relative;aspect-ratio:16/7;background:var(--color-surface-3);display:flex;align-items:center;justify-content:center}
.ds-inv-projet__visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ds-inv-projet__initiales{font-size:48px;font-weight:var(--weight-bold);color:var(--color-text-2)}
.ds-inv-projet__photos{position:absolute;top:var(--space-3);right:var(--space-3);box-shadow:var(--shadow-card)}
.ds-inv-projet__corps{padding:var(--space-4) var(--space-5) var(--space-5);display:flex;flex-direction:column;gap:var(--space-3)}
.ds-inv-projet__tete{display:flex;justify-content:space-between;gap:var(--space-4);align-items:flex-start;flex-wrap:wrap}
.ds-inv-projet__tete .ds-h2{margin:0;overflow-wrap:anywhere}
.ds-inv-projet__pct{min-width:180px;flex:0 1 240px}
.ds-inv-frise{list-style:none;margin:0;padding:0;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);position:relative}
.ds-inv-frise::before{content:"";position:absolute;left:6%;right:6%;top:9px;height:2px;background:var(--color-surface-3)}
.ds-inv-frise__pas{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:var(--text-meta);color:var(--color-muted);text-align:center;min-width:0}
.ds-inv-frise__nom{white-space:nowrap}
.ds-inv-frise__point{width:18px;height:18px;border-radius:50%;background:var(--color-surface);border:2px solid var(--color-border);z-index:1}
.ds-inv-frise__pas--fait .ds-inv-frise__point{background:var(--color-success-solid);border-color:var(--color-success-solid)}
.ds-inv-frise__pas--ici{color:var(--color-text);font-weight:var(--weight-bold)}
.ds-inv-frise__pas--ici .ds-inv-frise__point{background:var(--color-success-solid);border-color:var(--color-success-bg);box-shadow:0 0 0 4px var(--color-success-bg)}
/* LES CHOSES À FAIRE SE LISENT (Jean-David, 5 octobre 2026, 23 h 58 : « problème
   d’affichage des tâches à réaliser sur l’interface client »). Dans une colonne
   étroite, l’icône et les deux boutons restaient sur la ligne du texte : le
   titre tenait dans 70 px, coupé lettre par lettre. Le texte garde maintenant
   sa largeur (170 px au moins) et les gestes passent DESSOUS quand la place
   manque — c’est la largeur de la liste qui en décide, pas celle de l’écran. */
.ds-inv-actions{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2);container-type:inline-size}
.ds-inv-action{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-inv-action--urgent{border-left:4px solid var(--color-danger-solid)}
.ds-inv-action__texte{flex:1 1 170px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-inv-action b{font-size:var(--text-small);overflow-wrap:break-word}
.ds-inv-action__objet{font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:break-word}
.ds-inv-action__detail{font-size:var(--text-meta);color:var(--color-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ds-inv-action__detail--entier{display:block;-webkit-line-clamp:unset}
.ds-inv-action__ic{width:36px;height:36px;border-radius:var(--radius-md);background:var(--color-warning-bg);color:var(--color-warning);display:flex;align-items:center;justify-content:center;flex:none}
.ds-inv-action--urgent .ds-inv-action__ic{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-inv-action .ds-btn{flex:none}
.ds-inv-trois{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gap-cards);align-items:start}
.ds-inv-galerie{margin:var(--gap-cards) 0 0}
.ds-inv-photos{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--space-3)}
.ds-inv-photo{display:flex;flex-direction:column;gap:var(--space-2);color:inherit;text-decoration:none;border-radius:var(--radius-md)}
.ds-inv-photo img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--radius-md);background:var(--color-surface-2);border:1px solid var(--color-border)}
.ds-inv-photo span{display:flex;flex-direction:column;min-width:0}
.ds-inv-photo b{font-size:var(--text-small);font-weight:600;overflow-wrap:break-word}
.ds-inv-photo small{font-size:var(--text-meta);color:var(--color-muted)}
.ds-inv-photo:hover img,.ds-inv-photo:focus-visible img{border-color:var(--color-accent)}
.ds-inv-deux{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap-cards);align-items:start;margin-top:var(--gap-cards)}
.ds-inv-puce{width:36px;height:36px;border-radius:var(--radius-md);background:var(--color-surface-2);display:flex;align-items:center;justify-content:center;flex:none;color:var(--color-text-2)}
.ds-inv-etapes{list-style:none;margin:0;padding:0}
.ds-inv-etapes li{display:flex;gap:var(--space-3);align-items:center;padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-inv-etapes li:first-child{border-top:0}
.ds-inv-etapes li > div{display:flex;flex-direction:column;min-width:0}
.ds-inv-etapes b{font-size:var(--text-small)}
.ds-inv-etapes div span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-inv-date{display:flex;flex-direction:column;align-items:center;min-width:44px;font-size:var(--text-meta);color:var(--color-muted);line-height:1.1}
.ds-inv-date b{font-size:20px;color:var(--color-text)}
.ds-inv-complet{margin:var(--space-5) 0 0;text-align:center}
/* L’ADRESSE DE COURRIEL DU PROJET, CHEZ L’INVITÉ (12 octobre 2026). Le
   téléphone d’abord : l’adresse passe à la ligne, entière, jamais coupée par
   « … » ; les deux gestes en pleine largeur, 44 px sous le doigt. */
.ds-inv-adresse{margin-top:var(--gap-cards)}
.ds-inv-adresse .ds-texte{margin:0}
.ds-inv-adresse__adresse{margin:var(--space-2) 0;font-size:var(--text-body);font-weight:var(--weight-bold);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}
.ds-inv-adresse__gestes{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-2);margin:var(--space-3) 0 var(--space-2)}
.ds-inv-adresse__gestes .ds-btn{min-height:var(--touch);justify-content:center}
.ds-inv-adresse__gestes .ds-btn[hidden]{display:none}
@media (min-width:641px){
  .ds-inv-adresse__gestes{flex-direction:row;flex-wrap:wrap;align-items:center}
}
.ds-inv-chantiers{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--gap-cards)}
.ds-inv-chantier{padding:0;overflow:hidden;display:flex;flex-direction:column}
.ds-inv-chantier__visuel{position:relative;aspect-ratio:16/9;background:var(--color-surface-3);display:flex;align-items:center;justify-content:center}
.ds-inv-chantier__visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ds-inv-chantier__corps{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2)}
.ds-inv-chantier__corps .ds-h3{margin:0}
.ds-inv-chantier__corps .ds-h3 a{color:inherit;text-decoration:none}
.ds-inv-chantier__corps .ds-meta{margin:0}
.ds-inv-badges{display:flex;flex-wrap:wrap;gap:var(--space-1);margin:0}
.ds-inv-alerte{display:flex;align-items:center;gap:6px;margin:0;font-size:var(--text-meta);color:var(--color-warning)}
.ds-inv-alerte--danger{color:var(--color-danger)}
.ds-inv-alerte .ds-ic{width:16px;height:16px}
.ds-inv-diode{display:flex;align-items:center;gap:var(--space-2);margin:0 0 var(--gap-cards);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);
  background:var(--color-danger-bg);color:var(--color-danger);font-weight:var(--weight-bold);font-size:var(--text-small);text-decoration:none;min-height:var(--touch)}
@media (max-width:1100px){
  .ds-lat__qui{justify-content:center;padding:0}
  .ds-lat__qui > span,.ds-lat__marque--bas{display:none}
  .ds-inv-haut,.ds-inv-trois,.ds-inv-deux{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:760px){
  .ds-haut--invite{justify-content:space-between}
  .ds-haut__marque{display:block}
  .ds-invite .ds-haut__droite .ds-profil{display:block}
  .ds-inv-projet__visuel{aspect-ratio:16/9}
  .ds-inv-projet__corps{padding:var(--space-4)}
  .ds-inv-action{flex-wrap:wrap}
  .ds-inv-action .ds-btn{width:100%;min-height:var(--touch)}
  .ds-inv-projet__photos{min-height:var(--touch)}
}
.ds-inv-trois .ds-liste li div span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ds-inv-frise{column-gap:4px}

/* --- Lot G : À traiter ------------------------------------------------------ */
.ds-atraiter__projet{display:flex;align-items:flex-end;gap:var(--space-2);min-width:0;flex:0 1 320px}
.ds-atraiter__projet .ds-champ{margin:0;flex:1;min-width:0}
.ds-atraiter__info{margin-top:var(--gap-cards)}
.ds-atraiter__info summary{cursor:pointer;list-style:none;display:flex;align-items:center;min-height:var(--touch)}
.ds-atraiter__info summary::-webkit-details-marker{display:none}
.ds-atraiter__info summary .ds-h3{margin:0}
.ds-atraiter__info .ds-liste li a{color:inherit}
.ds-atraiter__info .ds-vignette{width:36px;height:36px;flex:none}
@media (max-width:760px){.ds-atraiter__projet{flex-basis:100%}}

/* --- Lot H : K propose, vous validez ---------------------------------------- */
.ds-k__proposition{border:1px solid var(--color-border);border-left:4px solid var(--color-primary);border-radius:var(--radius-lg);background:var(--color-surface);
  padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);box-shadow:var(--shadow-card)}
.ds-k__proposition-titre{margin:0;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-k__proposition ul{margin:0;padding:0 0 0 var(--space-4);font-size:var(--text-small);display:flex;flex-direction:column;gap:2px;overflow-wrap:anywhere}
.ds-k__proposition-apres{margin:0;font-size:var(--text-meta);color:var(--color-muted)}
.ds-k__proposition-gestes{display:flex;justify-content:flex-end;gap:var(--space-2);margin:var(--space-1) 0 0}
.ds-k__proposition-gestes .ds-btn{min-height:var(--touch)}

/* Une image de pièce qui n’arrive pas (public/ds/ds.js) : le cadre le dit. */
.ds-img-absente{display:none !important}
.ds-image-absente{position:relative;background:var(--color-surface-2);min-height:64px}
.ds-image-absente::after{content:"Photo indisponible";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:var(--space-2);text-align:center;font-size:var(--text-meta);color:var(--color-muted)}

/* Le Gantt : glisser une barre pour la décaler (planningneuf.js, ds.js). */
.ds-gantt__astuce{display:flex;align-items:center;gap:var(--space-2);margin:0 0 var(--space-3)}
.ds-gantt__astuce .ds-ic{width:16px;height:16px;flex:none}
.ds-gantt__barre--glissable{cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none;transition:box-shadow var(--motion-fast) var(--ease)}
.ds-gantt__barre--glissable:hover,.ds-gantt__barre--glissable:focus-visible{box-shadow:0 0 0 2px var(--color-accent)}
.ds-gantt__barre--deplacee{overflow:visible;cursor:grabbing;z-index:3;box-shadow:0 0 0 2px var(--color-accent),var(--shadow-raised) !important;opacity:.92}
.ds-gantt__barre--envoi{opacity:.6}
.ds-gantt__poignee{position:absolute;top:0;right:0;bottom:0;width:10px;cursor:ew-resize;border-radius:0 var(--radius-sm) var(--radius-sm) 0}
.ds-gantt__barre--glissable:hover .ds-gantt__poignee{background:var(--color-accent)}
.ds-gantt__bulle{position:absolute;bottom:calc(100% + 6px);left:0;white-space:nowrap;padding:2px var(--space-2);border-radius:var(--radius-sm);background:var(--color-primary);color:var(--color-on-dark);font-size:var(--text-meta);font-weight:600;pointer-events:none}
.ds-gantt__bulle:empty{display:none}

/* Le planning se lit et se modifie (25 septembre, « ça manque beaucoup
   d’informations ») : mode d’emploi visible, dates à côté des barres, grille
   des semaines, en-tête des dates qui reste en haut, prise pour glisser. */
.ds-gantt__mode{display:flex;gap:var(--space-3);align-items:flex-start;margin:0 0 var(--space-3);padding:var(--space-3) var(--space-4);
  border-radius:var(--radius-md);background:var(--color-accent-soft);border:1px solid var(--color-accent)}
.ds-gantt__mode > .ds-ic{flex:none;width:20px;height:20px;color:var(--color-accent-strong);margin-top:2px}
.ds-gantt__mode b{display:block;font-size:var(--text-small)}
.ds-gantt__mode span{display:block;font-size:var(--text-meta);color:var(--color-text-2);margin-top:2px}
.ds-gantt__grille{position:absolute;top:0;bottom:0;left:300px;right:0;pointer-events:none;z-index:0}
.ds-gantt__grille i{position:absolute;top:0;bottom:0;width:1px;background:var(--color-divider)}
.ds-gantt__barre{height:22px}
.ds-gantt__barre--phase{height:12px}
.ds-gantt__barre--jalon{height:16px;min-width:16px;width:16px!important}
.ds-gantt__dates{position:absolute;top:50%;transform:translateY(-50%);font-size:11px;color:var(--color-text-2);white-space:nowrap;pointer-events:none;z-index:1;
  background:color-mix(in srgb,var(--color-surface) 85%,transparent);padding:0 3px;border-radius:4px}
.ds-gantt__ligne--phase .ds-gantt__dates{font-weight:600}
.ds-gantt__prise{position:absolute;left:4px;top:50%;width:6px;height:10px;transform:translateY(-50%);opacity:0;transition:opacity var(--motion-fast) var(--ease);
  background-image:radial-gradient(circle,var(--color-text-2) 1px,transparent 1.2px);background-size:3px 3.4px}
.ds-gantt__barre--glissable:hover .ds-gantt__prise,.ds-gantt__barre--glissable:focus-visible .ds-gantt__prise{opacity:.8}
.ds-gantt__barre--jalon .ds-gantt__prise{display:none}
.ds-gantt__barre--glissable,.ds-gantt__barre--phase-glissable{cursor:grab}
.ds-gantt__barre--phase-glissable{touch-action:pan-y;user-select:none;-webkit-user-select:none}
.ds-gantt__barre--phase-glissable:hover,.ds-gantt__barre--phase-glissable:focus-visible{box-shadow:0 0 0 2px var(--color-accent)}
.ds-gantt__carte{position:fixed;left:50%;bottom:var(--space-5);transform:translateX(-50%);z-index:var(--z-overlay);width:min(560px,calc(100vw - 32px));
  background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-overlay);padding:var(--space-4)}
.ds-gantt__carte p{margin:0 0 var(--space-3);font-size:var(--text-small)}
.ds-gantt__carte-gestes{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap}
.ds-gantt__carte-gestes form{margin:0}
@media (min-width:1100px){
  .ds-gantt-cadre{overflow:visible}
  .ds-gantt__ligne--entete{position:sticky;top:calc(var(--topbar) + var(--space-2));z-index:4;box-shadow:0 1px 0 var(--color-border)}
}
@media (max-width:760px){
  .ds-gantt__grille{left:190px}
}

/* La carte de bienvenue de la nouvelle interface (aujourdhui.js). */
.ds-bienvenue{margin:0 0 var(--gap-cards);padding:var(--space-5);border:1px solid var(--color-accent);background:linear-gradient(135deg,var(--color-accent-soft),var(--color-surface) 70%)}
.ds-bienvenue[hidden]{display:none}
.ds-bienvenue__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin:0 0 var(--space-4)}
.ds-bienvenue__tete .ds-h3{margin:0}
.ds-bienvenue__gestes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3)}
.ds-bienvenue__geste{display:flex;gap:var(--space-3);align-items:flex-start;width:100%;height:100%;padding:var(--space-3);border-radius:var(--radius-md);
  background:var(--color-surface);border:1px solid var(--color-border);text-align:left;color:inherit;text-decoration:none;font:inherit;
  transition:transform var(--motion-fast) var(--ease),box-shadow var(--motion-fast) var(--ease)}
a.ds-bienvenue__geste:hover,button.ds-bienvenue__geste:hover{transform:translateY(-1px);box-shadow:var(--shadow-raised);cursor:pointer}
.ds-bienvenue__ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-sm);background:var(--color-accent-soft);color:var(--color-accent-strong)}
.ds-bienvenue__ic .ds-ic{width:20px;height:20px}
.ds-bienvenue__geste b{display:block;font-size:var(--text-small)}
.ds-bienvenue__geste small{display:block;font-size:var(--text-meta);color:var(--color-text-2);margin-top:2px;line-height:1.35}
@media (max-width:1100px){ .ds-bienvenue__gestes{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:760px){ .ds-bienvenue{padding:var(--space-4)} .ds-bienvenue__gestes{grid-template-columns:minmax(0,1fr)} .ds-bienvenue__tete{flex-direction:column} }

/* --- Les lots d’un projet (nouvelle interface) ----------------------------- */
.ds-page-tete__gestes{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}
.ds-formulaire__duo--etroit{grid-template-columns:7rem minmax(0,1fr)}
.ds-lot__fiche{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2) var(--space-4);margin:0}
.ds-lot__fiche dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-lot__fiche dd{margin:2px 0 0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-lot__fiche a{color:var(--color-text)}
.ds-lots-afaire{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-lots-afaire li{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-top:1px solid var(--color-divider)}
.ds-lots-afaire li:first-child{border-top:0}
.ds-lots-afaire__ic{flex:none;display:inline-flex;color:var(--color-warning)}
.ds-lots-afaire__texte{flex:1;min-width:0;font-size:var(--text-small)}
@media (max-width:760px){
  .ds-lot__fiche{grid-template-columns:minmax(0,1fr)}
  .ds-lots-afaire li{flex-wrap:wrap}
}

/* --- Ouvrir un projet (nouvelle interface) --------------------------------- */
.ds-nouveau{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start}
.ds-nouveau .ds-texte{margin:0 0 var(--space-3);color:var(--color-text-2)}
/* Le formulaire d’import est celui de l’écran d’avant (même script) : son
   habillage seul suit les planches. */
.ds-import-dossier .ff{margin:0 !important;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-import-dossier .duo{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}
.ds-import-dossier .champ{display:flex;flex-direction:column;gap:6px}
.ds-import-dossier .champ label{font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text)}
.ds-import-dossier input:not([type=checkbox]){font:inherit;font-size:var(--text-small);padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);min-width:0}
.ds-import-dossier input[type=file]{padding:8px;background:var(--color-surface-2)}
.ds-import-dossier .pt,.ds-import-dossier .tp{font-size:var(--text-meta);color:var(--color-muted);line-height:1.5}
.ds-import-dossier .kb-depot{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;padding:var(--space-4);border:1.5px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2);font-size:var(--text-small)}
.ds-import-dossier .kb-depot[hidden]{display:none}
.ds-import-dossier .kb-depot-choisir{font:inherit;font-size:var(--text-small);font-weight:var(--weight-bold);padding:8px 14px;border:1px solid var(--color-border);border-radius:var(--radius-pill);background:var(--color-surface);color:var(--color-text);cursor:pointer;min-height:var(--touch)}
.ds-import-dossier .opt-groupe{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-import-dossier .opt,.ds-import-dossier .kb-choix{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer}
.ds-import-dossier .opt .t,.ds-import-dossier .opt .d{display:block}
.ds-import-dossier .opt .t{font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-import-dossier .opt .d{font-size:var(--text-meta);color:var(--color-muted);margin-top:4px}
.ds-import-dossier .kb-choix span{font-size:var(--text-small) !important}
.ds-import-dossier .btn{font:inherit;font-weight:var(--weight-bold);font-size:var(--text-small) !important;letter-spacing:0 !important;padding:14px 20px !important;border:0;border-radius:var(--radius-md);background:var(--color-primary);color:var(--color-on-dark);cursor:pointer;min-height:var(--touch)}
.ds-import-dossier .btn:disabled{opacity:.6;cursor:progress}
@media (max-width:1100px){.ds-nouveau{grid-template-columns:minmax(0,1fr)}}
/* --- Le premier jour d’un cabinet (Aujourd’hui sans projet) ------------- */
.ds-premier-jour__cabinet{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4);margin:var(--space-4) 0 0;border-color:var(--color-warning)}
.ds-premier-jour__cabinet>div{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-premier-jour__ic{display:inline-flex;color:var(--color-warning)}
.ds-premier-jour__titre{margin:var(--space-6) 0 var(--space-4)}
@media (max-width:640px){.ds-premier-jour__cabinet{flex-wrap:wrap}}
@media (max-width:760px){.ds-import-dossier .duo{grid-template-columns:minmax(0,1fr)}}

/* --- Validations d’étapes (nouvelle interface) ----------------------------- */
.ds-validations{display:flex;flex-direction:column;gap:var(--gap-cards);margin-bottom:var(--space-5)}
.ds-validations__titre{margin:var(--space-2) 0 var(--space-3)}
.ds-validation{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-validation--attente{border-left:3px solid var(--color-warning)}
.ds-validation__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-validation__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-validation__tete .ds-badge{flex:none}
.ds-validation__age{color:var(--color-warning)}
.ds-validation__commentaire{margin:0;max-width:80ch}
.ds-validation__pieces{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-validation__pieces a{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--color-border);border-radius:var(--radius-pill);font-size:var(--text-meta);color:var(--color-text);text-decoration:none;background:var(--color-surface-2)}
.ds-validation__decision{margin-top:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-validation__gestes{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap}
.ds-validation__reserve{margin:0;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}

/* --- Suivi d’exécution (nouvelle interface) -------------------------------- */
.ds-execs{display:flex;flex-direction:column;gap:var(--gap-cards);margin-bottom:var(--space-5)}
.ds-exec{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-exec--bloque{border-left:3px solid var(--color-danger)}
.ds-exec__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-exec__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-exec__tete .ds-badge{flex:none}
.ds-exec__frise{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:var(--space-2)}
.ds-exec__etape{display:flex;flex-direction:column;gap:4px;padding-top:var(--space-2);border-top:4px solid var(--color-divider)}
.ds-exec__etape--faite{border-top-color:var(--color-success-solid)}
.ds-exec__etape--suivante{border-top-color:var(--color-info)}
.ds-exec__etape--bloquee{border-top-color:var(--color-danger-solid)}
.ds-exec__point{display:none}
.ds-exec__nom{font-size:var(--text-meta);color:var(--color-muted);line-height:1.3}
.ds-exec__date{font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text)}
.ds-exec__etape--a-venir .ds-exec__date{color:var(--color-muted);font-weight:400}
.ds-exec__etape--bloquee .ds-exec__date{color:var(--color-danger)}
.ds-exec__note{margin:0;font-size:var(--text-small);color:var(--color-text-2);max-width:80ch}
.ds-exec__note--alerte{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-danger-bg);color:var(--color-text)}
.ds-exec__gestes{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:flex-end;padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-exec__geste{display:flex;gap:var(--space-2);align-items:flex-end;flex-wrap:wrap;margin:0}
.ds-exec__champ{display:flex;flex-direction:column;gap:4px;font-size:var(--text-meta);color:var(--color-muted)}
.ds-exec__champ .ds-input{width:6rem}
.ds-exec__champ--large .ds-input{width:16rem;max-width:100%}
@media (max-width:760px){
  .ds-exec__frise{grid-template-columns:minmax(0,1fr);gap:0}
  .ds-exec__etape{flex-direction:row;justify-content:space-between;align-items:center;padding:6px 0 6px var(--space-3);border-top:0;border-left:4px solid var(--color-divider)}
  .ds-exec__etape--faite{border-left-color:var(--color-success-solid)}
  .ds-exec__etape--suivante{border-left-color:var(--color-info)}
  .ds-exec__etape--bloquee{border-left-color:var(--color-danger-solid)}
  .ds-exec__champ--large .ds-input{width:100%}
  .ds-exec__geste{width:100%}
  .ds-exec__tete,.ds-validation__tete{flex-wrap:wrap}
}

/* --- Réception et réserves (nouvelle interface) ---------------------------- */
.ds-reserves{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--gap-cards);margin-bottom:var(--space-4)}
.ds-reserves__titre{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2);margin:var(--space-2) 0 var(--space-2)}
.ds-reserves__levees{margin:0 0 var(--space-5)}
.ds-reserves__levees>summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text-2);padding:var(--space-2) 0;min-height:var(--touch)}
.ds-reserve{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-reserve--levee{opacity:.8}
.ds-reserve__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-reserve__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-reserve__texte{margin:0}
.ds-reserve__geste{margin:auto 0 0;padding-top:var(--space-2);border-top:1px solid var(--color-divider);display:flex;justify-content:flex-end}
.ds-reception__bas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap-cards);margin-top:var(--space-4)}
.ds-reception__montant{font-size:1.9rem;font-weight:var(--weight-bold);margin:0 0 var(--space-2);color:var(--color-text)}
.ds-reception__alerte{margin:var(--space-2) 0 0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);font-size:var(--text-small);color:var(--color-text)}
.ds-reception__pv{display:grid;grid-template-columns:auto 1fr;gap:var(--space-2) var(--space-4);margin:var(--space-3) 0}
.ds-reception__pv div{display:contents}
.ds-reception__pv dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-reception__pv dd{margin:0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-reception__manque{color:var(--color-warning)}
@media (max-width:900px){.ds-reception__bas{grid-template-columns:minmax(0,1fr)}.ds-reserves{grid-template-columns:minmax(0,1fr)}}
@media (max-width:760px){.ds-reception__pv{grid-template-columns:minmax(0,1fr)}}

/* --- Écarts (nouvelle interface) ------------------------------------------- */
.ds-formulaire__trio{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-3)}
.ds-ecarts{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--space-4)}
.ds-ecarts__titre{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2);margin:var(--space-3) 0 var(--space-1)}
.ds-ecarts__note{margin:0 0 var(--space-3)}
.ds-ecart{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecart--plus{border-left:3px solid var(--color-warning)}
.ds-ecart--moins{border-left:3px solid var(--color-success-solid)}
.ds-ecart__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-ecart__tete .ds-h3{margin:2px 0 0;overflow-wrap:anywhere}
.ds-ecart__sens{margin:0;font-size:var(--text-meta);color:var(--color-muted);font-weight:var(--weight-medium)}
.ds-ecart__droite{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.ds-ecart__montant{font-size:1.15rem;color:var(--color-text)}
.ds-ecart__accord{color:var(--color-success)}
.ds-ecart__geste{display:flex;gap:var(--space-2);align-items:flex-end;flex-wrap:wrap;justify-content:flex-end;margin:0;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-ecart__champ{display:flex;flex-direction:column;gap:4px;font-size:var(--text-meta);color:var(--color-muted);flex:1;min-width:12rem;max-width:22rem}
@media (max-width:760px){.ds-formulaire__trio{grid-template-columns:minmax(0,1fr)}.ds-ecart__droite{align-items:flex-start}.ds-ecart__champ{max-width:none}}
.ds-ecart p.ds-meta,.ds-exec p.ds-meta,.ds-validation p.ds-meta,.ds-reserve p.ds-meta{margin:0}

/* --- Honoraires (nouvelle interface) --------------------------------------- */
.ds-hono__phrase{margin:0 0 var(--space-3);max-width:90ch}
.ds-honos{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-hono{display:grid;grid-template-columns:minmax(0,1fr) auto auto minmax(9rem,auto);grid-template-areas:"quoi montant etat gestes";gap:var(--space-2) var(--space-4);align-items:center;padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-hono:first-child{border-top:0}
.ds-hono--appeler{background:linear-gradient(90deg,var(--color-warning-bg),transparent 60%);margin:0 calc(-1 * var(--space-3));padding-left:var(--space-3);padding-right:var(--space-3);border-radius:var(--radius-sm)}
.ds-hono__quoi{grid-area:quoi;display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-hono__quoi b{overflow-wrap:anywhere}
.ds-hono__montant{grid-area:montant;white-space:nowrap}
.ds-hono .ds-badge{grid-area:etat;justify-self:end}
.ds-hono__gestes{grid-area:gestes;display:flex;gap:var(--space-2);justify-content:flex-end;flex-wrap:wrap}
.ds-hono__gestes:empty{display:none}
.ds-hono__geste{margin:0}
.ds-hono__poser{max-width:36rem}
@media (max-width:900px){.ds-hono{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"quoi quoi" "montant etat" "gestes gestes"}.ds-hono__gestes{justify-content:flex-start}}

/* --- Aide (nouvelle interface) --------------------------------------------- */
.ds-aide-cartes{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--gap-cards)}
.ds-aide-carte{display:flex;flex-direction:column;gap:var(--space-2);text-decoration:none;color:var(--color-text);transition:box-shadow var(--motion-fast) var(--ease)}
.ds-aide-carte:hover{box-shadow:var(--shadow-raised)}
.ds-aide-carte__ic{display:inline-flex;width:40px;height:40px;align-items:center;justify-content:center;border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-aide-carte__t{font-weight:var(--weight-bold)}
.ds-aide-carte__r{font-size:var(--text-small);color:var(--color-text-2);line-height:1.45}
.ds-aide-page{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:var(--gap-cards);align-items:start}
.ds-aide-rubrique{max-width:78ch}
.ds-aide-rubrique .ds-h1{margin:0 0 var(--space-2)}
.ds-aide-rubrique__resume{font-size:var(--text-small);color:var(--color-text-2);margin:0 0 var(--space-4)}
.ds-aide-rubrique__k{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;margin-top:var(--space-5);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-aide-rubrique__k .ds-meta{margin:0}
.ds-prose{font-size:var(--text-small);line-height:1.65;color:var(--color-text)}
.ds-prose p{margin:0 0 var(--space-3)}
.ds-prose ul,.ds-prose ol{margin:0 0 var(--space-3);padding-left:1.3em}
.ds-prose li{margin:0 0 6px}
.ds-prose h3,.ds-prose h4{font-size:var(--text-small);font-weight:var(--weight-bold);margin:var(--space-4) 0 var(--space-2)}
.ds-prose a{color:var(--color-text)}
.ds-prose code{font-size:.92em;padding:1px 5px;border-radius:var(--radius-sm);background:var(--color-surface-2)}
.ds-aide-autres ul{list-style:none;margin:var(--space-2) 0 0;padding:0;display:flex;flex-direction:column}
.ds-aide-autres a{display:flex;align-items:center;gap:var(--space-2);padding:8px 0;font-size:var(--text-small);color:var(--color-text);text-decoration:none;border-top:1px solid var(--color-divider)}
.ds-aide-autres li:first-child a{border-top:0}
.ds-aide-autres .ds-ic{width:18px;height:18px;color:var(--color-muted);flex:none}
@media (max-width:1000px){.ds-aide-page{grid-template-columns:minmax(0,1fr)}}

/* --- Mes réglages et récapitulatifs (nouvelle interface) ------------------- */
.ds-reglages-page{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start}
/* (13 octobre 2026, décision de Jean-David de 2 h 50 : « Les récapitulatifs d'abord ») « Ce que vous avez reçu »
   est le premier bloc du document. En deux colonnes, la disposition d’avant est gardée : réglages à gauche,
   récapitulatifs à droite. En une colonne (1000 px et moins), l’ordre du document s’applique : la liste d’abord. */
.ds-reglages-page>[data-reglages]{grid-column:1;grid-row:1}
.ds-reglages-page>[data-recaps]{grid-column:2;grid-row:1}
.ds-reglages__groupe{border:0;margin:0 0 var(--space-4);padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-reglages__groupe legend{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);text-transform:uppercase;letter-spacing:.06em;margin:0 0 var(--space-2);padding:0}
.ds-reglage{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md);cursor:pointer;background:var(--color-surface)}
.ds-reglage input{width:20px;height:20px;margin:2px 0 0;flex:none}
.ds-reglage--fige{cursor:default;background:var(--color-surface-2)}
.ds-reglage__t{display:block;font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text)}
.ds-reglage__verbe{font-weight:var(--weight-medium);color:var(--color-muted);margin-left:6px}
.ds-reglage__d{display:block;font-size:var(--text-meta);color:var(--color-text-2);margin-top:3px;line-height:1.45}
.ds-reglages__pied{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-reglages__pied .ds-meta{margin:0}
.ds-reglages__alerte{margin:0 0 var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);font-size:var(--text-small)}
.ds-recaps{list-style:none;margin:var(--space-2) 0 0;padding:0}
.ds-recap{border-top:1px solid var(--color-divider)}
.ds-recaps li:first-child .ds-recap{border-top:0}
.ds-recap>summary{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) 0;cursor:pointer;min-height:var(--touch)}
.ds-recap__t{flex:1;min-width:0;font-size:var(--text-small);font-weight:var(--weight-medium)}
.ds-recap__texte{white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--text-small);line-height:1.55;color:var(--color-text-2);padding:0 0 var(--space-3)}
/* (13 octobre 2026) « Ce que vous avez reçu » rangé : les non lus, les trois
   derniers, puis une ligne par semaine et par mois, repliée (src/rangerrecaps.js,
   src/reglagesneuf.js). La page ne s’allonge plus avec le temps. */
.ds-recaps-part{margin:var(--space-3) 0 0}
.ds-recaps-part__t{margin:0;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);text-transform:uppercase;letter-spacing:.06em}
.ds-recaps-part .ds-recaps{margin-top:0}
.ds-recaps-tout-lu{margin:var(--space-2) 0}
.ds-recaps-tout-lu .ds-btn{min-height:var(--touch)}
.ds-recap--lien{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) 0;min-height:var(--touch);color:inherit;text-decoration:none}
.ds-recap--lien:hover .ds-recap__t{text-decoration:underline}
.ds-recaps-pli{border-top:1px solid var(--color-divider)}
.ds-recaps-part__t+.ds-recaps-pli{border-top:0}
.ds-recaps-pli>summary{list-style:none;cursor:pointer;min-height:var(--touch);display:flex;align-items:center;padding:var(--space-1) 0}
.ds-recaps-pli__l{flex:1;min-width:0}
.ds-recaps-pli>summary::-webkit-details-marker{display:none}
.ds-recaps-pli>summary::before{content:"";flex:none;width:7px;height:7px;border-right:2px solid var(--color-muted);border-bottom:2px solid var(--color-muted);transform:rotate(-45deg);margin:0 var(--space-2) 0 var(--space-1)}
.ds-recaps-pli[open]>summary::before{transform:rotate(45deg)}
.ds-recaps-pli__t{font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-recaps-pli__n{font-size:var(--text-small);color:var(--color-muted)}
.ds-recaps-pli>.ds-recaps{margin:0 0 var(--space-2);padding-left:var(--space-4)}
@media (max-width:1000px){.ds-reglages-page{grid-template-columns:minmax(0,1fr)}.ds-reglages-page>[data-reglages],.ds-reglages-page>[data-recaps]{grid-column:auto;grid-row:auto}}

/* --- CAO (nouvelle interface) ---------------------------------------------- */
.ds-plans{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--gap-cards)}
.ds-plan{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-plan__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-plan__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-plan p.ds-meta{margin:0}
.ds-plan__diag{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2);margin:var(--space-1) 0 0}
.ds-plan__diag dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-plan__diag dd{margin:2px 0 0;font-size:var(--text-small)}
.ds-plan__note{line-height:1.45}
.ds-plan__gestes{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:auto;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}

/* --- Métrés (nouvelle interface) ------------------------------------------- */
.ds-metres{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--gap-cards)}
.ds-metre{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-metre p{margin:0}
.ds-metre__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-metre__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-metre__totaux{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2);margin:0}
.ds-metre__totaux dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-metre__totaux dd{margin:2px 0 0;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-metre__ecart{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);font-size:var(--text-small)}
.ds-metre__lignes>summary{cursor:pointer;font-size:var(--text-small);color:var(--color-text-2);min-height:var(--touch);display:flex;align-items:center}
.ds-metre__lignes ul{list-style:none;margin:0;padding:0}
.ds-metre__lignes li{display:flex;justify-content:space-between;gap:var(--space-3);padding:6px 0;border-top:1px solid var(--color-divider);font-size:var(--text-small)}
.ds-metre__gestes{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center;margin-top:auto;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-metre__gestes form{margin:0}

/* --- Choix et finitions (nouvelle interface) ------------------------------- */
.ds-choixs{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--space-4)}
.ds-choix__titre{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2);margin:var(--space-3) 0 var(--space-1)}
.ds-choix{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-choix p{margin:0}
.ds-choix__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-choix__tete .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-choix__face{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3)}
.ds-choix__face>div{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-surface-2)}
.ds-choix__face p{font-size:var(--text-small);display:flex;flex-direction:column;gap:2px;margin-top:2px}
.ds-choix__effet{font-size:var(--text-small)}
.ds-choix__ecart--plus{color:var(--color-warning)}
.ds-choix__ecart--moins{color:var(--color-success)}
.ds-choix__geste{padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-choix__boutons{display:flex;gap:var(--space-2);justify-content:flex-end;flex-wrap:wrap}
.ds-fourns__tete{margin-top:var(--space-5)}
.ds-fourns{list-style:none;margin:0;padding:0}
.ds-fourn{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--space-3);align-items:center;padding:var(--space-2) 0;border-top:1px solid var(--color-divider)}
.ds-fourn:first-child{border-top:0}
.ds-fourn__quoi{display:flex;flex-direction:column;gap:2px;min-width:0}
.ds-fourn form{margin:0}
.ds-fourn__pourcompte{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2)}
.ds-fourn__pourcompte .ds-champ{margin:0}
@media (max-width:760px){.ds-choix__face{grid-template-columns:minmax(0,1fr)}.ds-fourn{grid-template-columns:minmax(0,1fr)}.ds-fourn>.ds-badge{justify-self:start}.ds-fourn form{grid-column:1 / -1}}

/* --- Planches d’ambiance (nouvelle interface) ------------------------------ */
.ds-planches{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--gap-cards);margin-bottom:var(--space-4)}
.ds-planche{display:flex;flex-direction:column;padding:0;overflow:hidden;text-decoration:none;color:var(--color-text);transition:box-shadow var(--motion-fast) var(--ease)}
.ds-planche:hover{box-shadow:var(--shadow-raised)}
.ds-planche__image{display:block;aspect-ratio:4/3;background:var(--color-surface-2)}
.ds-planche__image img{width:100%;height:100%;object-fit:cover;display:block}
.ds-planche__vide{display:flex;width:100%;height:100%;align-items:center;justify-content:center;color:var(--color-muted)}
.ds-planche__corps{display:flex;flex-direction:column;gap:6px;padding:var(--space-3);align-items:flex-start}
.ds-planche__t{font-weight:var(--weight-bold)}
.ds-orphelins{list-style:none;margin:var(--space-2) 0 0;padding:0}
.ds-orphelin{display:flex;gap:var(--space-3);align-items:flex-end;flex-wrap:wrap;padding:var(--space-2) 0;border-top:1px solid var(--color-divider);margin:0}
.ds-orphelin__nom{flex:1;min-width:12rem;font-size:var(--text-small);align-self:center}
.ds-planche-fiche{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start;margin-top:var(--space-3)}
.ds-planche-fiche__cote{display:flex;flex-direction:column;gap:var(--gap-cards)}
.ds-planche-images{list-style:none;margin:0 0 var(--space-3);padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--space-3)}
.ds-planche-images img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;border-radius:var(--radius-sm);background:var(--color-surface-2)}
.ds-planche-images__pied{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.ds-planche-images__gestes{display:flex;gap:var(--space-3);font-size:var(--text-meta)}
.ds-planche-images__gestes a{color:var(--color-text)}
.ds-planche-images__gestes form{margin:0}
.ds-lien-bouton{border:0;background:none;padding:0;font:inherit;font-size:var(--text-meta);color:var(--color-text);text-decoration:underline;cursor:pointer}
.ds-planche-ajout{display:flex;gap:var(--space-2);align-items:flex-end;flex-wrap:wrap;margin:0 0 var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-planche-ajout .ds-champ{flex:1;min-width:14rem;margin:0}
.ds-refs,.ds-notes{list-style:none;margin:0 0 var(--space-3);padding:0}
.ds-refs li{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:var(--space-2) 0;border-top:1px solid var(--color-divider)}
.ds-refs li:first-child,.ds-notes li:first-child{border-top:0}
.ds-refs__quoi{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:var(--text-small)}
.ds-notes li{padding:var(--space-2) 0 var(--space-2) var(--space-3);border-left:2px solid var(--color-border);margin:0 0 var(--space-2)}
.ds-notes p{margin:0 0 2px;font-size:var(--text-small)}
@media (max-width:1000px){.ds-planche-fiche{grid-template-columns:minmax(0,1fr)}}

/* --- Le bandeau de l’atelier (KABLANN_ATELIER=oui) ------------------------
   Il était servi dans la coque neuve sans règle (sa feuille, kb.css, n’y est
   pas chargée) : une ligne de texte brut en haut de chaque écran. Il ne colle
   pas en haut : la barre du haut et la barre latérale le font déjà. */
body.ds .kb-atelier{display:block;background:var(--color-primary);color:var(--color-on-dark);font-size:var(--text-meta);
  font-weight:var(--weight-bold);letter-spacing:.06em;text-align:center;padding:6px var(--space-3);line-height:1.4}

/* --- La porte d’entrée : connexion, mentions, déconnexion, erreurs ---------
   (src/porte.js). Une page sans barre : la marque, une carte, le pied. */
.ds-porte__page{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:var(--space-6) var(--space-4) var(--space-5)}
.ds-porte__tete{width:100%;max-width:520px;margin:0 0 var(--space-5)}
.ds-porte__marque{width:132px;height:auto;display:block}
.ds-porte__main{width:100%;display:flex;justify-content:center;flex:1}
.ds-porte__carte{width:100%;max-width:520px;padding:var(--space-6);border-radius:var(--radius-lg);box-shadow:var(--shadow-raised);align-self:flex-start}
.ds-porte__carte--large{max-width:720px}
.ds-porte__surtitre{font-size:var(--text-meta);font-weight:var(--weight-bold);letter-spacing:.08em;text-transform:uppercase;color:var(--color-muted);margin:0 0 var(--space-2)}
.ds-porte__intro{margin:var(--space-3) 0 var(--space-5)}
.ds-porte__form{display:flex;flex-direction:column;gap:var(--space-3);margin:0 0 var(--space-4)}
.ds-porte__form .ds-btn{align-self:flex-start}
.ds-porte__ou{font-size:var(--text-small);color:var(--color-muted);margin:var(--space-4) 0 var(--space-3)}
.ds-porte__avis{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2);border:1px solid var(--color-border);font-size:var(--text-small)}
.ds-porte__avis--succes{background:var(--color-success-bg);border-color:var(--color-success)}
.ds-porte__avis--danger{background:var(--color-danger-bg);border-color:var(--color-danger)}
.ds-porte__prose{margin:var(--space-4) 0 0}
.ds-porte__prose h2{font-size:var(--text-h3);font-weight:var(--weight-bold);margin:var(--space-5) 0 var(--space-2)}
.ds-porte__retour{margin:var(--space-5) 0 0}
.ds-porte__gestes{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}
.ds-porte__gestes form{margin:0}
.ds-porte__pied{margin:var(--space-6) 0 0;text-align:center;font-size:var(--text-meta);color:var(--color-muted)}
.ds-porte__pied p{margin:0 0 2px}
.ds-porte__pied a{color:inherit}
@media (max-width:640px){.ds-porte__page{padding:var(--space-4) var(--space-3)}.ds-porte__carte{padding:var(--space-5) var(--space-4)}}

/* --- Surfaces pièce par pièce (src/surfacesneuf.js) ---------------------- */
.ds-surf__bloc{margin:var(--space-5) 0 0}
.ds-surf__bloc > .ds-h3,.ds-surf__titre{margin:0 0 var(--space-3)}
.ds-surf__titre{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--space-2)}
.ds-surf__section{margin:var(--space-5) 0 0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-surf__section .ds-carte__tete{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--space-2)}
.ds-surf__alerte{margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg);border:1px solid var(--color-warning);font-size:var(--text-small)}
.ds-surf__manque{font-size:var(--text-small);color:var(--color-warning)}
.ds-surf__hauteur{display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3)}
.ds-surf__hauteur .ds-champ{flex:0 1 320px;margin:0}
.ds-surf__porter{border-top:1px solid var(--color-divider);padding-top:var(--space-3)}
.ds-surf__porter .ds-btn{align-self:flex-start}
.ds-surf__hors summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-plans{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--gap-cards)}
.ds-plan{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-plan--ouvert{border-color:var(--color-primary)}
.ds-plan__tete,.ds-piece-surf__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-plan__tete .ds-h3,.ds-piece-surf__tete .ds-h3{overflow-wrap:anywhere}
.ds-plan__tete .ds-badge,.ds-piece-surf__tete .ds-badge{flex:none}
.ds-plan__gestes,.ds-piece-surf__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}
.ds-plan__gestes form,.ds-piece-surf__gestes form{margin:0}
.ds-plan__type{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);border-top:1px solid var(--color-divider);padding-top:var(--space-3)}
.ds-plan__type .ds-champ{flex:1 1 160px;margin:0}
.ds-pieces-surf{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--gap-cards)}
.ds-piece-surf{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-piece-surf__fiche{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2) var(--space-4);margin:0}
.ds-piece-surf__fiche dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-piece-surf__fiche dd{margin:2px 0 0;font-size:var(--text-small);display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.ds-postes{list-style:none;margin:0;padding:0}
.ds-poste{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);padding:var(--space-3) 0;border-bottom:1px solid var(--color-divider)}
.ds-poste:last-child{border-bottom:0}
.ds-poste__corps{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.ds-poste__qte{flex:none;text-align:right;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;max-width:45%}
.ds-poste--total{border-top:1px solid var(--color-border)}
@media (max-width:640px){
  .ds-plans,.ds-pieces-surf{grid-template-columns:minmax(0,1fr)}
  .ds-poste{flex-direction:column;gap:var(--space-2)}
  .ds-poste__qte{text-align:left;justify-content:flex-start;max-width:none}
}

/* --- Pièces écrites (src/ecritesneuf.js) --------------------------------- */
.ds-ecr-avis{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-surface-2);font-size:var(--text-small)}
.ds-ecr-avis p{margin:var(--space-1) 0 0}
.ds-ecr-avis a{color:var(--color-text)}
.ds-ecr-avis--succes{background:var(--color-success-bg);border-color:var(--color-success)}
.ds-ecr-avis--danger{background:var(--color-danger-bg);border-color:var(--color-danger)}
.ds-ecr-avis--attention{background:var(--color-warning-bg);border-color:var(--color-warning)}
.ds-ecr-badges{display:flex;flex-wrap:wrap;gap:6px}
.ds-ecr-badges a.ds-badge{text-decoration:none}
.ds-ecr-atelier{margin:var(--space-5) 0 0;display:flex;flex-direction:column;gap:var(--space-3);scroll-margin-top:var(--space-6)}
.ds-ecr-atelier > .ds-carte__tete{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2)}
.ds-ecr-etapes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-2)}
.ds-ecr-etapes__e{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);
  font-size:var(--text-small);color:var(--color-text);text-decoration:none;background:var(--color-surface);min-height:var(--touch)}
.ds-ecr-etapes__n{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--radius-pill);background:var(--color-surface-3);font-weight:var(--weight-bold);font-size:var(--text-meta)}
.ds-ecr-etapes__e--ici{border-color:var(--color-primary);font-weight:var(--weight-bold)}
.ds-ecr-etapes__e--ici .ds-ecr-etapes__n{background:var(--color-primary);color:var(--color-on-dark)}
.ds-ecr-etapes__e--faite .ds-ecr-etapes__n{background:var(--color-success-bg);color:var(--color-success)}
.ds-ecr-etapes__e--fermee{color:var(--color-disabled);background:var(--color-surface-2)}
.ds-ecr-etape{display:flex;flex-direction:column;gap:var(--space-3);border-top:1px solid var(--color-divider);padding-top:var(--space-4)}
.ds-ecr-etape form{margin:0}
.ds-ecr-geste{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}
.ds-ecr-gestes{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}
.ds-ecr-gestes form{margin:0}
.ds-ecr-proposition{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4)}
.ds-ecr-prop{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--color-divider)}
.ds-ecr-prop__garder{padding-top:10px}
.ds-ecr-prop__champs{flex:1;display:grid;grid-template-columns:minmax(0,1fr) 110px 110px;gap:var(--space-2)}
.ds-ecr-article{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);margin:0}
.ds-ecr-article legend{font-weight:var(--weight-bold);padding:0 var(--space-1)}
.ds-ecr-case{display:flex;align-items:flex-start;gap:var(--space-2);font-size:var(--text-small);margin:0 0 var(--space-3)}
.ds-ecr-ajout{border:1px solid var(--color-divider);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4)}
.ds-ecr-ajout .ds-btn{align-self:flex-start}
.ds-ecr-volet{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);background:var(--color-surface)}
.ds-ecr-volet > summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-ecr-volet[open] > summary{margin-bottom:var(--space-3)}
.ds-ecr-charpente{margin:0;padding-left:1.3em;display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--text-small)}
.ds-ecr-charpente .ds-meta{display:block}
.ds-ecr-charpente ul{margin:var(--space-1) 0 0;padding-left:1.1em;color:var(--color-text-2)}
.ds-ecr-articles{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecr-art{padding:var(--space-3) var(--space-4)}
.ds-ecr-art__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-ecr-art__tete b{overflow-wrap:anywhere}
.ds-ecr-art__texte{margin:var(--space-1) 0 0;font-size:var(--text-small);color:var(--color-text-2);white-space:pre-line;overflow-wrap:anywhere}
.ds-ecr-lots{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--gap-cards)}
.ds-ecr-lot{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecr-ccap{margin:var(--space-5) 0 0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecr-ccap > .ds-carte__tete{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}
@media (max-width:760px){
  .ds-ecr-etapes{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ds-ecr-prop__champs{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .ds-ecr-prop__champs .ds-input[type=text]{grid-column:1 / -1}
  .ds-ecr-lots{grid-template-columns:minmax(0,1fr)}
}
.ds-ecr-afaire .ds-lots-afaire__texte .ds-meta{display:block;margin-top:2px;font-weight:var(--weight-regular)}
/* Les cartes « à faire » des invités portent leur geste (src/espacesneuf.js). */
.ds-inv-action__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);justify-content:flex-end;flex:0 1 auto;margin-left:auto;max-width:100%}
/* Liste étroite (la colonne de droite de l’accueil, le téléphone) : les gestes
   prennent toute la ligne sous le texte, le geste dominant en dernier. */
@container (max-width:520px){
  .ds-inv-action__gestes{flex:1 1 100%;margin-left:0}
  .ds-inv-action__gestes .ds-btn{flex:1 1 180px;width:auto;min-height:var(--touch)}
}
.ds-inv-geste{margin:var(--space-2) 0 0}
.ds-inv-geste__champs{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-2)}
.ds-inv-geste__champs .ds-champ{margin:0}
@media (max-width:760px){
  .ds-inv-action__gestes{flex:1 1 100%;margin-left:0}
}
/* La frise des phases : les noms entiers, ou la légende quand la place manque (src/espacesneuf.js). */
.ds-inv-frise-cadre{container-type:inline-size}
.ds-inv-frise__legende{display:none;margin:var(--space-2) 0 0;font-size:var(--text-meta);color:var(--color-muted);text-align:center}
.ds-inv-frise__legende b{color:var(--color-text)}
/* Entre deux : les noms alternent au-dessus et au-dessous de la ligne, chacun a deux cases de large. */
@container (min-width:441px) and (max-width:719px){
  .ds-inv-frise::before{top:31px}
  .ds-inv-frise__pas{display:grid;grid-template-rows:18px 18px 18px;row-gap:4px;justify-items:center}
  .ds-inv-frise__point{grid-row:2}
  .ds-inv-frise__nom{grid-row:3;line-height:18px}
  .ds-inv-frise__pas:nth-child(even) .ds-inv-frise__nom{grid-row:1}
}
/* Trop étroit : la légende dit l’étape en toutes lettres. */
@container (max-width:440px){
  .ds-inv-frise__nom{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .ds-inv-frise__legende{display:block}
}
/* La bibliothèque de descriptifs (src/bibliothequeneuf.js). */
.ds-bib-intro{max-width:70ch}
.ds-bib-outils{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;margin:0 0 var(--space-4)}
.ds-bib-doublons{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin:0}
.ds-bib-sous{margin:0 0 var(--space-3)}
.ds-bib-corps{display:flex;flex-direction:column;gap:var(--space-4)}
.ds-bib-entree{border-top:1px solid var(--color-border)}
.ds-bib-entree > summary{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);align-items:baseline;padding:var(--space-3) 0;cursor:pointer;min-height:var(--touch)}
.ds-bib-entree > summary{list-style:none;position:relative;padding-right:var(--space-6)}
.ds-bib-entree > summary::-webkit-details-marker{display:none}
.ds-bib-entree > summary::after{content:"";position:absolute;right:var(--space-2);top:50%;width:8px;height:8px;margin-top:-6px;border-right:2px solid var(--color-muted);border-bottom:2px solid var(--color-muted);transform:rotate(45deg);transition:transform var(--motion-fast) var(--ease)}
.ds-bib-entree[open] > summary::after{transform:rotate(-135deg);margin-top:-2px}
.ds-bib-entree__t{font-weight:var(--weight-bold);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-bib-entree[open] > summary{padding-bottom:var(--space-2)}
.ds-bib-form{padding:0 0 var(--space-4)}
.ds-bib-duo{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--space-3)}
.ds-bib-form textarea{min-height:10rem;width:100%}
.ds-bib-gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin-top:var(--space-3)}
/* Supprimer un projet (src/supprimerneuf.js). */
.ds-suppr{max-width:720px;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-suppr__avis{margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-danger);background:var(--color-danger-bg);font-size:var(--text-small)}
.ds-suppr__liste{margin:0;padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-small)}
.ds-suppr__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-fiche-supprimer{margin:var(--space-3) 0 0;padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-fiche-supprimer a{color:var(--color-danger)}
/* Clore le projet, le rouvrir, les archives (src/clotureneuf.js). */
.ds-clos{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4);margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-left:4px solid var(--color-warning);border-radius:var(--radius-md);background:var(--color-warning-bg);font-size:var(--text-small);line-height:1.45}
.ds-clos p{margin:0;flex:1 1 260px;min-width:0}
.ds-clore{max-width:760px;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-clore__bilan{margin:0;padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-clore__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-archives{display:flex;flex-direction:column;gap:var(--space-2);margin:0;padding:0;list-style:none}
.ds-archives li{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-archives li>div{flex:1 1 240px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-archives li>div b{overflow-wrap:anywhere}
.ds-archives form{margin:0}
/* Un seul menu à votre nom, en haut à droite, sur tous les écrans (src/coque.js). */
.ds-menu__qui{display:flex;flex-direction:column;gap:2px;margin:0 0 var(--space-2);padding:var(--space-2) var(--space-3) var(--space-3);border-bottom:1px solid var(--color-divider);font-size:var(--text-small);overflow-wrap:break-word}
.ds-menu__qui span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-menu--bas{max-width:calc(100vw - 2 * var(--space-4))}
/* La coche d’une tâche faite se décoche (src/planningneuf.js). */
.ds-fait__bouton--coche::before{border-color:var(--color-success-solid);background:var(--color-success-solid)}
.ds-fait__bouton--coche .ds-ic{opacity:1;color:var(--color-on-dark);stroke-width:2.6}
.ds-fait__bouton--coche:hover::before,.ds-fait__bouton--coche:focus-visible::before{background:var(--color-surface);border-color:var(--color-border)}
.ds-fait__bouton--coche:hover .ds-ic,.ds-fait__bouton--coche:focus-visible .ds-ic{opacity:.35;color:var(--color-muted)}
/* Le budget convenu se pose sur l’onglet Budget (src/consultationneuf.js). */
.ds-budget-convenu{margin:0 0 var(--gap-cards)}
.ds-budget-convenu__form{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:flex-end}
.ds-budget-convenu__form .ds-champ{flex:1 1 220px;max-width:320px;margin:0}
/* Corriger le type et le lot d’une pièce, dans sa fiche (src/documentsneuf.js). */
.ds-vis-rangement{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-vis-rangement .ds-meta{margin:0}
/* Les comptes rendus : lever un point, rédiger (src/comptesrendusneuf.js). */
.ds-crpoint__geste{margin:0;flex:none}
.ds-cr-rediger{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start}
.ds-cr-k{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;justify-content:space-between;margin:0 0 var(--gap-cards);border-left:3px solid var(--color-accent)}
.ds-cr-k__texte{flex:1 1 320px;min-width:0}
.ds-cr-k form{margin:0}
.ds-cr-form textarea{width:100%}
.ds-cr-presents{border:0;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1)}
.ds-cr-presents legend{margin:0 0 var(--space-2);padding:0}
.ds-presence{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-2) 0;border-bottom:1px solid var(--color-divider)}
.ds-presence__nom{font-size:var(--text-small);font-weight:var(--weight-medium);overflow-wrap:break-word;min-width:0}
.ds-presence__choix{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.ds-presence__opt{position:relative;display:inline-flex}
.ds-presence__opt input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.ds-presence__opt span{display:inline-flex;align-items:center;min-height:var(--touch);padding:0 var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-pill);font-size:var(--text-meta);color:var(--color-text-2);background:var(--color-surface)}
.ds-presence__opt input:checked + span{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-dark)}
.ds-presence__opt input:focus-visible + span{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-cr-carnet{margin-top:var(--space-2)}
.ds-cr-carnet > summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-size:var(--text-small);font-weight:var(--weight-medium)}
.ds-cr-form__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2)}
@media (max-width:1100px){.ds-cr-rediger{grid-template-columns:minmax(0,1fr)}}
/* En rédigeant, chaque point choisit son lot (10 octobre 2026) : un point = un
   bloc — son texte, puis son menu « Lot », puis « Retirer ». Côte à côte au
   bureau, l’un sous l’autre au téléphone : le menu ne s’étrangle jamais. */
.ds-cr-points{border:0;margin:0;padding:0;min-width:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cr-points legend{padding:0;margin:0}
.ds-cr-points>.ds-meta{margin:0}
.ds-cr-points__titre{margin:var(--space-2) 0 0;font-size:var(--text-small);font-weight:var(--weight-semibold);color:var(--color-text)}
.ds-cr-points__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cr-point{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,18rem) auto;gap:var(--space-3);align-items:start;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-cr-point--repris{grid-template-columns:minmax(0,1fr) minmax(0,18rem);background:var(--color-bg)}
.ds-cr-point--retard{border-left:3px solid var(--color-danger)}
.ds-cr-point [hidden]{display:none}
.ds-cr-point__texte{min-width:0;display:flex;flex-direction:column;gap:var(--space-1);overflow-wrap:anywhere}
.ds-cr-point__texte>b{font-size:var(--text-small);font-weight:var(--weight-semibold)}
.ds-cr-point__ref{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}
.ds-cr-point__texte .ds-crpoint__etats{align-self:flex-start}
.ds-cr-point__lot{min-width:0}
.ds-cr-point__lot .ds-select{width:100%;max-width:100%}
.ds-cr-point__lot .ds-btn{margin-top:var(--space-1)}
.ds-cr-point>.ds-btn{align-self:end}
.ds-cr-point__reformuler>summary{cursor:pointer;min-height:var(--touch);display:inline-flex;align-items:center;font-size:var(--text-meta);color:var(--color-text-2)}
.ds-cr-point__reformuler[open]{display:flex;flex-direction:column;gap:var(--space-1)}
.ds-cr-points__ajouter{display:flex}
/* (10 octobre 2026) Une personne extérieure parmi les présents : son nom, sa
   qualité, puis sa présence — côte à côte au bureau, l'un sous l'autre au
   téléphone. */
.ds-cr-exterieures{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
.ds-cr-exterieures>.ds-meta{margin:0}
.ds-cr-exterieures>.ds-cr-famille{margin-top:var(--space-3)}
.ds-cr-exterieures [hidden]{display:none}
.ds-cr-exterieures__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-cr-ext-avant{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);overflow-wrap:anywhere}
.ds-cr-ext-avant>span{min-width:0}
.ds-presence--ext{align-items:flex-end;justify-content:flex-start}
.ds-presence__qui{flex:1 1 22rem;min-width:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}
.ds-presence__qui .ds-input{width:100%;min-width:0}
@media (max-width:760px){
  .ds-cr-point,.ds-cr-point--repris{grid-template-columns:minmax(0,1fr)}
  .ds-cr-point>.ds-btn{justify-self:start}
  .ds-cr-points__ajouter .ds-btn{width:100%;justify-content:center}
  .ds-presence__qui{flex-basis:100%;grid-template-columns:minmax(0,1fr)}
}
/* Supprimer une pièce, depuis sa fiche (src/documentsneuf.js). */
.ds-vis-suppr{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-vis-visa{margin-top:var(--space-3)}
.ds-vis-reserve{white-space:pre-wrap;overflow-wrap:break-word}
/* Supprimer une tâche du planning (src/planningneuf.js). */
.ds-tache-suppr{margin-left:auto}
.ds-tache-suppr__bouton{display:inline-flex;align-items:center;justify-content:center;width:32px;min-height:var(--touch);border:0;background:transparent;color:var(--color-muted);cursor:pointer;border-radius:var(--radius-sm);opacity:.55}
.ds-tache-suppr__bouton .ds-ic{width:14px;height:14px}
.ds-tache-suppr__bouton:hover,.ds-tache-suppr__bouton:focus-visible{opacity:1;color:var(--color-danger);background:var(--color-danger-bg)}
/* Les décalages en attente d’accord, et l’accord recueilli hors de l’outil (src/planningneuf.js). */
.ds-decalages{margin:0 0 var(--gap-cards)}
.ds-decalage{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-decalage .ds-h3{margin:0 0 var(--space-1)}
.ds-accords{list-style:none;margin:var(--space-2) 0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-accord{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-accord__qui{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:2px;font-size:var(--text-small)}
.ds-accord__qui span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-accord__geste{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);flex:1 1 100%}
.ds-accord__geste .ds-champ{margin:0;min-width:160px}
.ds-accord__boutons{display:flex;flex-wrap:wrap;gap:var(--space-2)}
/* La phase du projet, et ce qui la termine (src/phaseneuve.js). */
.ds-phase{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-phase__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-phase__tete .ds-meta{margin:0}
.ds-phase .ds-texte{margin:0;overflow-wrap:break-word}
.ds-phase__ecrans{margin:0;padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-phase__terminer{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3)}
.ds-phase__terminer .ds-champ{margin:0}
.ds-phase__rouvrir{margin:0}
@media (max-width:760px){.ds-phase__terminer{flex-direction:column;align-items:stretch}.ds-phase__terminer .ds-btn{white-space:normal;text-align:center}}
/* Doublons probables (src/documentsneuf.js). */
.ds-doc__doublon{color:var(--color-danger);font-size:var(--text-meta)}
/* Déclarer une étape pour une entreprise (src/validationsneuf.js). */
.ds-declarer{margin-top:var(--space-3)}
/* Écarter une référence pour le compte du client (src/moodboardsneuf.js). */
.ds-refs__ecarter{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:0}
.ds-refs__ecarter .ds-champ{margin:0}
#pour-le-client .ds-refs li{flex-wrap:wrap}
#pour-le-client .ds-refs__quoi{flex:1 1 12rem;min-width:0}
/* Inviter dans la nouvelle interface (/cabinet/inviter, 28 septembre). */
.ds-inviter__question{margin:var(--space-4) 0 var(--space-3)}
.ds-inviter__roles .ds-carte{min-height:var(--touch)}
.ds-inviter__role{display:flex;align-items:center;gap:var(--space-2);margin:0 0 var(--space-1)}
.ds-inviter__role .ds-ic{width:20px;height:20px;flex:none;color:var(--color-muted)}
.ds-inviter__portee{border:0;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1)}
.ds-inviter__projets{padding-left:var(--space-5);display:flex;flex-direction:column}
.ds-inviter__actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}
.ds-inviter__intro{margin:0 0 var(--space-4)}
/* Les rubriques de la barre de gauche des invités (espacesneuf.js). */
.ds-nav__groupe{padding:var(--space-3) var(--space-3) var(--space-1);font-size:11.5px;font-weight:var(--weight-bold);color:var(--color-nav-muted)}
@media (max-width:1100px){.ds-nav__groupe{display:none}}

/* Le registre des surfaces par niveau (plans à plusieurs étages). */
.ds-surf__niveaux{list-style:none;margin:0 0 var(--space-4,16px);padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2,8px) var(--space-5,24px)}
.ds-surf__niveau{margin-top:var(--space-5,24px)}
.ds-surf__niveau > .ds-h3{margin-bottom:var(--space-3,12px);display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2,8px)}

/* Ranger par groupe : une case par pièce, et la barre des gestes, collée en
   haut de la liste pendant qu’on descend. */
.ds-doc__coche{display:flex;align-items:center;justify-content:center;min-width:var(--touch);min-height:var(--touch);margin:calc(var(--space-2) * -1) 0;cursor:pointer}
.ds-doc__coche input,.ds-docs-groupe__tout input{width:18px;height:18px;accent-color:var(--color-primary);cursor:pointer}
.ds-docs-groupe__barre{position:sticky;top:0;z-index:2;display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3);padding:var(--space-3) 0;margin-bottom:var(--space-2);background:var(--color-surface);border-bottom:1px solid var(--color-divider)}
.ds-docs-groupe__barre .ds-champ{margin:0;min-width:160px;flex:1 1 160px;max-width:260px}
.ds-docs-groupe__tout{display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch);font-weight:var(--weight-bold);margin-right:auto}
.ds-docs-groupe__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-docs-groupe__gestes .ds-btn[disabled]{opacity:.45;cursor:not-allowed}

/* Documents : le filtre par lot et le bloc « À traiter » (29 septembre). */
.ds-docs-lot{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:0 0 var(--space-3)}
.ds-docs-lot .ds-champ{margin:0;min-width:220px;max-width:420px;flex:1 1 220px}
.ds-docs-afaire .ds-liste li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3)}
.ds-docs-afaire form{margin:0}
.ds-docs-lot [hidden]{display:none}

/* Lots : les gestes repris de l’écran complet (29 septembre). */
.ds-lots-bloc{margin-top:var(--gap-cards)}
.ds-lots-bloc .ds-liste li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3)}
.ds-lots-bloc .ds-liste li > div{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 280px}
.ds-lots-bloc form{margin:0}
.ds-coche-ligne{display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch);cursor:pointer;font-size:var(--text-small)}
.ds-coche-ligne input{width:18px;height:18px;accent-color:var(--color-primary);flex:none}
.ds-lots-catalogue{margin:var(--space-3) 0}
.ds-lots-catalogue summary{cursor:pointer;font-weight:var(--weight-bold);font-size:var(--text-small);min-height:var(--touch);display:flex;align-items:center}
.ds-lots-catalogue__cases{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:0 var(--space-4)}
.ds-lots-domaines{border:0;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:0 var(--space-4)}
.ds-lots-alerte{font-size:var(--text-meta);color:var(--color-warning-text,var(--color-text))}
.ds-lots-reponse{display:block;margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-surface-2);font-size:var(--text-small)}
.ds-lots-repondre{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin-top:var(--space-2)}
.ds-lots-repondre .ds-champ{margin:0;flex:1 1 260px}
.ds-lot__marche{display:inline}
/* Une offre retenue se lit retenue (9 octobre 2026) : le choix sous la tête de la carte, la suite au pied. */
.ds-lot__choix{display:flex;flex-wrap:wrap;gap:6px;margin:0}
.ds-lot__choix .ds-badge{font-size:var(--text-small);font-weight:600}
.ds-lot__suites{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin-left:auto}
.ds-lot__suite{display:inline;margin:0}
.ds-lots-bloc .ds-formulaire > .ds-btn{align-self:flex-start}
.ds-canaux{margin-top:var(--gap-cards)} .ds-canaux .ds-liste li > div{display:flex;flex-direction:column;gap:2px}
/* Consultation : les offres à rattacher, par groupe (29 septembre). */
.ds-rattacher-barre{position:sticky;top:0;z-index:2;display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3);padding:var(--space-3) 0;margin:var(--space-2) 0;background:var(--color-surface);border-bottom:1px solid var(--color-divider)}
.ds-rattacher-barre__tout{font-weight:var(--weight-bold);margin-right:auto}
.ds-rattacher-barre__geste{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);min-width:0}
.ds-rattacher-barre__geste .ds-champ{margin:0;min-width:0;flex:1 1 180px;max-width:280px}
.ds-rattacher-barre .ds-btn[disabled]{opacity:.45;cursor:not-allowed}
.ds-rattacher__groupes{list-style:none;margin:0;padding:0}
.ds-rattacher__groupe{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-rattacher__groupe:first-child{border-top:0}
.ds-rattacher__tete{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-2)}
.ds-rattacher__tete .ds-meta{flex:1 1 100%}
.ds-rattacher__prop{flex:1 1 100%;font-size:var(--text-small)}
.ds-rattacher__geste{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:var(--space-2) 0}
.ds-rattacher__geste .ds-champ{margin:0;min-width:0;flex:1 1 200px;max-width:320px}
.ds-rattacher__offres{list-style:none;margin:0;padding:0}
.ds-rattacher__offres li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0 var(--space-3)}
.ds-rattacher__offres .ds-coche-ligne{flex:1 1 auto;min-width:0}
.ds-rattacher__offres .ds-coche-ligne span{overflow-wrap:anywhere}
.ds-rattacher__voir{font-size:var(--text-meta);color:var(--color-text);text-decoration:underline;min-height:var(--touch);display:inline-flex;align-items:center}
/* Planning : régler sur l’écran neuf (29 septembre). */
.ds-gantt__modifier{color:inherit;text-decoration:none}
.ds-gantt__modifier:hover b,.ds-gantt__modifier:focus-visible b{text-decoration:underline}
.ds-phases__liste,.ds-enchainements__liste,.ds-proposer__phases{list-style:none;margin:0;padding:0}
.ds-phases__ligne{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-phases__ligne:first-child{border-top:0}
.ds-phases__tete{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-2);margin-bottom:var(--space-2)}
.ds-phases__tete .ds-meta{flex:1 1 100%}
.ds-phases__regler,.ds-phases__cloture,.ds-tache-reglages__form,.ds-calendrier__livraison{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:0 0 var(--space-2)}
.ds-phases__regler .ds-champ,.ds-phases__cloture .ds-champ,.ds-tache-reglages__form .ds-champ,.ds-calendrier__livraison .ds-champ{margin:0;min-width:0;flex:1 1 150px;max-width:260px}
.ds-calendrier__livraison .ds-meta{flex:1 1 100%}
.ds-calendrier__pli summary,.ds-enchainements__titre,.ds-planning-sansdate summary,.ds-proposer__detail summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-enchainements__titre{font-size:var(--text-body)}
.ds-calendrier__composer{display:flex;flex-direction:column;gap:var(--space-2);margin:var(--space-2) 0}
.ds-calendrier__boutons{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-calendrier__alerte{padding:var(--space-3);border-radius:var(--radius-sm);background:var(--color-danger-bg);margin:var(--space-2) 0}
.ds-calendrier__phases li{flex-wrap:wrap}
.ds-calendrier__dates{font-size:var(--text-small);white-space:nowrap}
.ds-enchainements__liste li{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.6fr) minmax(90px,.5fr);gap:var(--space-2) var(--space-3);align-items:start;padding:var(--space-2) 0;border-top:1px solid var(--color-divider)}
.ds-enchainements__tache{display:flex;flex-direction:column;min-width:0;overflow-wrap:anywhere}
.ds-enchainements__liste .ds-champ{margin:0;min-width:0}
.ds-enchainements__liste select[multiple]{min-height:84px}
.ds-enchainements form>.ds-btn{margin-top:var(--space-3)}
@media (max-width:640px){.ds-enchainements__liste li{grid-template-columns:minmax(0,1fr)}}
.ds-proposer__phases>li{padding:var(--space-2) 0;border-top:1px solid var(--color-divider)}
.ds-planning-sansdate{margin-top:var(--space-3)}
.ds-phases__vides summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-small);border-top:1px solid var(--color-divider)}
/* 11 octobre 2026 — les phases terminées se replient derrière une ligne, dans
   la frise et dans « Les phases » (« ça prend de la place sur la page pour
   rien »). Dans la frise, la ligne est un lien (la page se recharge sur une
   autre fenêtre de dates) ; dans « Les phases », un <details> natif. */
.ds-gantt__ligne--terminees{color:inherit;text-decoration:none;cursor:pointer}
.ds-gantt__ligne--terminees:focus-visible{outline:2px solid var(--color-focus);outline-offset:-2px}
.ds-gantt__ligne--terminees .ds-gantt__txt b{color:var(--color-text-2)}
.ds-gantt__ligne--terminees[aria-expanded="true"] .ds-gantt__chevron .ds-ic{transform:rotate(90deg)}
.ds-phases__terminees > summary{cursor:pointer;min-height:var(--touch);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3);font-size:var(--text-small);color:var(--color-text-2);font-weight:var(--weight-bold)}
.ds-phases__terminees[open] > summary{border-bottom:1px solid var(--color-divider)}
.ds-phases__terminees + .ds-phases__liste{border-top:1px solid var(--color-divider)}
.ds-gantt__txt .ds-pli__geste,.ds-pli__geste{color:var(--color-accent-strong);text-decoration:underline;font-weight:var(--weight-medium)}
.ds-pli__masquer,details[open] > summary .ds-pli__afficher{display:none}
details[open] > summary .ds-pli__masquer{display:inline}
/* Équipe : les gestes sur l’écran neuf (29 septembre). */
.ds-equipe__fiche{color:inherit;text-decoration:none}
.ds-equipe__fiche:hover b,.ds-equipe__fiche:focus-visible b{text-decoration:underline}
.ds-equipe__ligne--ouverte{background:var(--color-surface-2)}
.ds-equipe__renvois{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.ds-fiche__tete{display:flex;align-items:center;gap:var(--space-3);min-width:0}
.ds-fiche__tete .ds-meta{overflow-wrap:anywhere}
.ds-fiche__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-3)}
.ds-fiche__bloc{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-fiche__form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:0 0 var(--space-2)}
.ds-fiche__form .ds-champ{margin:0;min-width:0;flex:1 1 200px;max-width:340px}
.ds-fiche__form .ds-meta{flex:1 1 100%;margin:0}
.ds-fiche__form--pile{flex-direction:column;align-items:stretch}
.ds-fiche__form--pile .ds-champ{max-width:none}
.ds-fiche__form--pile .ds-btn{align-self:flex-start}
.ds-fiche__choix{border:0;padding:0;margin:0;flex:1 1 100%;min-width:0}
.ds-fiche__projets{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:0 var(--space-3);padding-left:var(--space-5)}
.ds-fiche__pli{border-top:1px solid var(--color-divider);padding:var(--space-1) 0}
.ds-fiche__pli>summary,.ds-cabinet-pli__titre{cursor:pointer;min-height:var(--touch);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-cabinet-pli__titre{font-size:var(--text-h3,1.125rem)}
.ds-fiche__famille{margin:var(--space-2) 0}
.ds-fiche__droits{display:flex;flex-wrap:wrap;gap:var(--space-1)}
.ds-fiche__droits form{margin:0}
.ds-droit{display:inline-flex;align-items:center;min-height:var(--touch);padding:0 var(--space-3);border-radius:999px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font:inherit;font-size:var(--text-meta);cursor:pointer}
.ds-droit--oui{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-primary,var(--color-surface))}
.ds-droit--derogation{box-shadow:0 0 0 2px var(--color-warning)}
.ds-justifs{list-style:none;margin:0;padding:0}
.ds-justif{padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-justif__tete{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-2)}
.ds-justif__fichier{flex:1 1 220px;min-width:0;max-width:360px}
.ds-grille-droits{overflow-x:auto;max-width:100%;margin-top:var(--space-2)}
.ds-grille-droits table{border-collapse:collapse;font-size:var(--text-meta)}
.ds-grille-droits th,.ds-grille-droits td{padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--color-divider);text-align:center}
.ds-grille-droits thead th{font-weight:var(--weight-bold);vertical-align:bottom}
.ds-grille-droits thead small{display:block;font-weight:var(--weight-regular);color:var(--color-muted)}
.ds-grille-droits th.ds-grille-droits__nom,.ds-grille-droits thead th:first-child{text-align:left;min-width:160px;font-weight:var(--weight-regular);position:sticky;left:0;z-index:1;background:var(--color-surface)}
.ds-grille-droits th.ds-grille-droits__fam{text-align:left;font-weight:var(--weight-bold);background:var(--color-surface-2)}
.ds-grille-droits__case{display:inline-flex;align-items:center;justify-content:center;width:var(--touch);height:var(--touch);border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-surface);font:inherit;cursor:pointer}
.ds-grille-droits__case--oui{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-primary,var(--color-surface))}
span.ds-grille-droits__case{cursor:default}
/* Un droit réservé à l'administrateur (3 octobre 2026) : la case se lit, elle ne se coche pas. */
.ds-grille-droits__case--reserve{border-style:dashed;background:var(--color-surface-2);color:var(--color-muted)}

/* L’APERÇU ET LE FORMAT DE CHAQUE PIÈCE (src/apercus.js, 30/09) */
.ds-apercu{position:relative;flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-md);background:var(--color-surface-3);color:var(--color-text-2)}
.ds-apercu--petit{width:48px;height:48px}
.ds-apercu--moyen{width:132px;height:96px}
.ds-apercu--grand{width:100%;height:auto;aspect-ratio:4/3;border-radius:var(--radius-md) var(--radius-md) 0 0}
.ds-apercu img,.ds-apercu__page{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top}
.ds-apercu__page{opacity:0;transition:opacity .2s;background:var(--color-surface)}
.ds-apercu--rendu .ds-apercu__page{opacity:1}
.ds-apercu__tuile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:6px;text-align:center}
.ds-apercu__ic{width:20px;height:20px}
.ds-apercu--moyen .ds-apercu__ic,.ds-apercu--grand .ds-apercu__ic{width:30px;height:30px}
.ds-apercu__dit{font-size:var(--text-meta);line-height:1.2}
.ds-apercu__type{position:absolute;right:4px;bottom:4px;z-index:1;font-size:10px;line-height:1;letter-spacing:.04em;padding:3px 5px;border-radius:6px;background:var(--color-primary);color:var(--color-on-dark)}
.ds-apercu--petit .ds-apercu__type{font-size:9px;padding:2px 4px;right:2px;bottom:2px}
.ds-apercu--pdf{background:var(--color-danger-bg);color:var(--color-danger)}.ds-apercu--pdf .ds-apercu__type{background:var(--color-danger-solid)}
.ds-apercu--cao{background:var(--color-studies-bg);color:var(--color-studies)}.ds-apercu--cao .ds-apercu__type{background:var(--color-studies-solid)}
.ds-apercu--image{background:var(--color-info-bg);color:var(--color-info)}.ds-apercu--image .ds-apercu__type{background:var(--color-info-solid)}
.ds-apercu--tableur{background:var(--color-success-bg);color:var(--color-success)}.ds-apercu--tableur .ds-apercu__type{background:var(--color-success-solid)}
.ds-apercu--texte{background:var(--color-info-bg);color:var(--color-info)}
.ds-apercu--archive,.ds-apercu--autre,.ds-apercu--fiche{background:var(--color-surface-3);color:var(--color-text-2)}
.ds-apercu--media{background:var(--color-warning-bg);color:var(--color-warning)}.ds-apercu--media .ds-apercu__type{background:var(--color-warning-solid)}
.ds-plan__vue{display:flex;gap:var(--space-3);align-items:flex-start}


/* L’HISTORIQUE D’UNE FICHE (src/historique.js, 30/09) */
.ds-historique{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-historique li{display:grid;grid-template-columns:minmax(150px,auto) 1fr;gap:var(--space-3);padding:var(--space-2) 0;border-top:1px solid var(--color-divider);font-size:var(--text-small)}
.ds-historique li:first-child{border-top:0}
.ds-historique time{color:var(--color-muted);font-variant-numeric:tabular-nums}
.ds-historique small{display:block;color:var(--color-muted)}
.ds-historique__repli summary{cursor:pointer;font-size:var(--text-small);color:var(--color-text-2);padding:var(--space-1) 0}
.ds-historique__repli[open] summary{margin-bottom:var(--space-2)}
.ds-historique__bloc{flex-basis:100%;width:100%;margin-top:var(--space-2);border-top:1px solid var(--color-divider);padding-top:var(--space-1)}
.ds-historique__origine{display:inline-block;margin-left:4px;padding:0 6px;border-radius:var(--radius-pill);background:var(--color-surface-3);font-size:var(--text-meta);color:var(--color-text-2)}
@media (max-width:600px){.ds-historique li{grid-template-columns:1fr;gap:2px}}
/* LA SUITE D’UN FIL : « Voir plus ancien » (tout se retrace, 30/09) */
.ds-fil__suite,.ds-timeline__suite{display:flex;justify-content:center;margin:var(--space-3) 0}

/* LE COMPARATIF D’UN LOT (src/comparatifneuf.js, 1er octobre) : le guide, la
   règle des prix, une carte par offre, les questions. La couleur ne dit
   jamais seule : chaque pastille porte son mot, chaque liste son titre. */
.ds-cmp{display:flex;flex-direction:column;gap:var(--space-4);margin:0 0 var(--space-5)}
.ds-cmp-retour{margin:0 0 var(--space-3);font-size:var(--text-small)}
.ds-cmp-retour a{color:var(--color-text-2);font-weight:var(--weight-medium)}
.ds-cmp-avis{margin:0 0 var(--space-4)}
.ds-cmp-tete{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:flex-end;justify-content:space-between}
.ds-cmp-tete .ds-h2{overflow-wrap:anywhere}
.ds-cmp-tete .ds-meta{margin:var(--space-1) 0 0;font-size:var(--text-small);font-variant-numeric:tabular-nums}
.ds-cmp-guide{display:flex;gap:var(--space-3);align-items:flex-start;background:var(--color-primary);color:var(--color-on-dark);border-radius:var(--radius-lg);padding:var(--space-4) var(--pad-card)}
.ds-cmp-guide__k{flex:none;width:36px;height:36px;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-primary);font-weight:var(--weight-bold);display:grid;place-items:center;font-size:var(--text-h3)}
.ds-cmp-guide__corps{display:flex;flex-direction:column;gap:var(--space-1);min-width:0;align-items:flex-start}
.ds-cmp-guide__corps p{margin:0;opacity:.88;font-size:var(--text-body)}
.ds-cmp-guide__corps .ds-cmp-guide__titre{opacity:1;font-size:var(--text-h3);font-weight:var(--weight-bold);line-height:var(--leading-tight)}
.ds-cmp-guide__corps form{margin:var(--space-2) 0 0}
.ds-cmp-guide__corps>.ds-btn{margin-top:var(--space-2)}
.ds-cmp-regle{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cmp-regle__piste{position:relative;height:104px;margin:var(--space-2) var(--space-3) 0}
.ds-cmp-regle__axe{position:absolute;left:0;right:0;top:46px;height:6px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-cmp-regle__zone{position:absolute;top:36px;height:26px;border-radius:var(--radius-sm);background:var(--color-success-bg);border:1px dashed var(--color-success-solid)}
.ds-cmp-regle__zone span{position:absolute;top:-36px;left:50%;transform:translateX(-50%);font-size:var(--text-meta);color:var(--color-success);white-space:nowrap;font-weight:var(--weight-medium)}
.ds-cmp-regle__est{position:absolute;top:32px;width:2px;height:34px;background:var(--color-primary)}
.ds-cmp-regle__est span{position:absolute;top:52px;right:0;font-size:var(--text-meta);white-space:nowrap;color:var(--color-text);font-weight:var(--weight-bold);font-variant-numeric:tabular-nums}
.ds-cmp-regle__est--gauche span{right:auto;left:0}
/* La cible tactile fait 32 px ; la pastille visible, 22 px, au centre. */
.ds-cmp-point{position:absolute;top:33px;width:32px;height:32px;margin-left:-16px;border-radius:50%;display:grid;place-items:center}
.ds-cmp-point i{width:22px;height:22px;border-radius:50%;border:3px solid var(--color-surface);background:var(--color-disabled)}
.ds-cmp-point--haut{top:17px}.ds-cmp-point--bas{top:49px}
.ds-cmp-point--succes i{background:var(--color-success-solid)}.ds-cmp-point--attention i{background:var(--color-warning-solid)}
.ds-cmp-point--danger i{background:var(--color-danger-solid)}.ds-cmp-point--neutre i{background:var(--color-disabled)}
.ds-cmp-point:hover,.ds-cmp-point:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px;z-index:2}
.ds-cmp-regle__legende{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);font-size:var(--text-meta);color:var(--color-text-2);margin:0}
.ds-cmp-regle__legende span{display:inline-flex;align-items:center;gap:6px}
.ds-cmp-ancre{display:flex;flex-direction:column;gap:var(--space-3);scroll-margin-top:var(--topbar)}
.ds-cmp-outils{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;justify-content:space-between}
.ds-cmp-droit{margin:0}
/* « Ce que voit le client » (11 octobre 2026, L-83, src/partageoffres.js) : l'état, puis le geste « Partager avec le client ». */
.ds-partage{display:flex;flex-direction:column;gap:var(--space-2);background:var(--color-surface);border:1px solid var(--color-border);border-left:4px solid var(--color-muted);border-radius:var(--radius-lg);padding:var(--space-4) var(--pad-card);margin:0 0 var(--space-4);scroll-margin-top:calc(var(--topbar) + var(--space-4))}
.ds-partage--ouvert{border-left-color:var(--color-success)}
.ds-partage--masque{border-left-color:var(--color-warning)}
.ds-partage--avis{border-left-color:var(--color-info)}
.ds-partage__alerte{display:flex;gap:var(--space-2);align-items:flex-start;margin:0;padding:var(--space-2) var(--space-3);background:var(--color-warning-bg);border-radius:var(--radius-md);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-partage__alerte .ds-ic{flex:none;width:18px;height:18px;color:var(--color-warning);margin-top:2px}
.ds-partage__nom{margin:0;font-size:var(--text-meta);font-weight:var(--weight-bold);letter-spacing:.04em;text-transform:uppercase;color:var(--color-muted)}
.ds-partage__titre{display:flex;gap:var(--space-2);align-items:center;margin:0;font-size:var(--text-body);overflow-wrap:anywhere}
.ds-partage__titre .ds-ic{flex:none;width:20px;height:20px;color:var(--color-muted)}
.ds-partage--ouvert .ds-partage__titre .ds-ic{color:var(--color-success)}
.ds-partage__detail{margin:0;font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.ds-partage__form{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;margin:var(--space-2) 0 0}
.ds-partage__form .ds-meta{margin:0}
.ds-partage__form--fermer{flex-direction:row;flex-wrap:wrap;align-items:center}
.ds-partage__offres{display:flex;flex-direction:column;width:100%}
.ds-partage__ligne{align-items:flex-start;padding:var(--space-1) 0}
.ds-partage__ligne input{margin-top:3px}
.ds-partage__ligne span{min-width:0;overflow-wrap:anywhere}
.ds-cmp-offres{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(310px,100%),1fr));gap:var(--gap-cards);align-items:start}
.ds-cmp-offre{display:flex;flex-direction:column;gap:var(--space-3);min-width:0;scroll-margin-top:calc(var(--topbar) + var(--space-4))}
.ds-cmp-offre--ecartee{opacity:.7}
.ds-cmp-offre--ecartee:focus-within,.ds-cmp-offre--ecartee:hover{opacity:1}
.ds-cmp-effet{color:var(--color-text)}
.ds-cmp-offre--retenue{border-color:var(--color-success-solid);box-shadow:0 0 0 2px var(--color-success-bg)}
.ds-cmp-offre:target{border-color:var(--color-accent);box-shadow:0 0 0 2px var(--color-accent-soft);opacity:1}
.ds-cmp-offre__tete{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-2);align-items:flex-start}
.ds-cmp-offre__tete>div{flex:1 1 150px;min-width:0}
.ds-cmp-offre__tete .ds-badge{flex:none}
.ds-cmp-offre__tete .ds-meta{margin:2px 0 0;overflow-wrap:anywhere}
.ds-cmp-offre__nom{font-size:var(--text-body);font-weight:var(--weight-bold);margin:0;overflow-wrap:break-word}
.ds-cmp-offre__prix{font-size:var(--text-h2);font-weight:var(--weight-bold);letter-spacing:-.01em;margin:0;font-variant-numeric:tabular-nums}
.ds-cmp-offre__prix small{font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-muted)}
.ds-cmp-offre>.ds-meta{margin:0}
.ds-cmp-offre__marques{display:flex;flex-wrap:wrap;gap:var(--space-1);margin:0}
.ds-cmp-jauge{display:flex;flex-direction:column;gap:6px}
.ds-cmp-jauge__piste{position:relative;height:8px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-cmp-jauge__barre{position:absolute;left:0;top:0;bottom:0;border-radius:var(--radius-pill);background:var(--color-text-2)}
.ds-cmp-jauge__barre--succes{background:var(--color-success-solid)}.ds-cmp-jauge__barre--attention{background:var(--color-warning-solid)}
.ds-cmp-jauge__barre--danger{background:var(--color-danger-solid)}.ds-cmp-jauge__barre--neutre{background:var(--color-text-2);opacity:.5}
.ds-cmp-jauge__est{position:absolute;top:-4px;width:2px;height:16px;background:var(--color-primary)}
.ds-cmp-jauge__mot{font-size:var(--text-meta);font-weight:var(--weight-medium);font-variant-numeric:tabular-nums}
.ds-cmp-ton--succes{color:var(--color-success)}.ds-cmp-ton--attention{color:var(--color-warning)}
.ds-cmp-ton--danger{color:var(--color-danger)}.ds-cmp-ton--neutre{color:var(--color-text-2)}
.ds-cmp-points__titre{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);margin:0 0 calc(-1 * var(--space-1))}
.ds-cmp-points{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.ds-cmp-points li{display:flex;gap:var(--space-2);font-size:var(--text-small);align-items:flex-start;overflow-wrap:anywhere;min-width:0}
.ds-cmp-points li::before{flex:none;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:var(--text-meta);font-weight:var(--weight-bold);margin-top:1px}
.ds-cmp-points__plus::before{content:"✓";background:var(--color-success-bg);color:var(--color-success)}
.ds-cmp-points__moins::before{content:"!";background:var(--color-warning-bg);color:var(--color-warning)}
.ds-cmp-points li.ds-cmp-points__stop::before{content:"!!";width:auto;min-width:18px;padding:0 5px;border-radius:var(--radius-pill);background:var(--color-danger-bg);color:var(--color-danger)}
.ds-cmp-notes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-meta);color:var(--color-muted)}
.ds-cmp-offre__pied{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:flex-start;border-top:1px solid var(--color-divider);padding-top:var(--space-3)}
.ds-cmp-offre__pied form{margin:0}
.ds-cmp-geste>summary{list-style:none;cursor:pointer}
.ds-cmp-geste>summary::-webkit-details-marker{display:none}
.ds-cmp-geste>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-cmp-geste[open]{flex-basis:100%}
.ds-cmp-confirmer,.ds-cmp-autres{display:flex;flex-direction:column;gap:var(--space-3);align-items:flex-start;background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);margin-top:var(--space-2)}
.ds-cmp-confirmer .ds-champ,.ds-cmp-autre .ds-champ{width:100%}
.ds-cmp-autre{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;width:100%;padding-bottom:var(--space-3);border-bottom:1px solid var(--color-divider)}
.ds-cmp-autre .ds-meta{margin:0}
.ds-cmp-autre__liens{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin:0;font-size:var(--text-small)}
.ds-cmp-autre__liens a{color:var(--color-info);font-weight:var(--weight-medium)}
.ds-cmp-signature{font-size:var(--text-small)}
.ds-cmp-tableau__boite{overflow-x:auto}
.ds-cmp-tableau table{border-collapse:collapse;width:100%;min-width:640px;font-size:var(--text-small)}
.ds-cmp-tableau thead th{font-size:var(--text-meta);color:var(--color-muted);font-weight:var(--weight-medium);text-align:left;padding:var(--space-2) var(--space-2);border-bottom:1px solid var(--color-border)}
.ds-cmp-tableau tbody th,.ds-cmp-tableau td{padding:var(--space-3) var(--space-2);border-bottom:1px solid var(--color-divider);vertical-align:top;text-align:left;font-weight:var(--weight-regular)}
.ds-cmp-tableau tbody th a{color:var(--color-text);font-weight:var(--weight-bold)}
.ds-cmp-tableau .ds-cmp-d{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ds-cmp-tableau__ecartee{opacity:.7}
.ds-cmp-tableau tr:target{background:var(--color-accent-soft)}
.ds-cmp-tableau>.ds-meta{margin:var(--space-3) 0 0}
/* La vue Tableau du comparatif (capture d'iPhone du 1er octobre : lignes
   étirées, colonnes coupées). Les points à vérifier : une ligne chacun, dans
   une colonne assez large. Au téléphone : plus de tableau qui défile — chaque
   offre est un bloc, chaque cellule dit le nom de sa colonne. */
.ds-cmp-tableau__verifier{min-width:240px}
.ds-cmp-tableau__verifier ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1)}
@media (max-width:640px){
  .ds-cmp-tableau table{min-width:0;display:block}
  .ds-cmp-tableau thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .ds-cmp-tableau tbody{display:flex;flex-direction:column}
  .ds-cmp-tableau tbody tr{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2) var(--space-3);padding:var(--space-4) 0;border-bottom:1px solid var(--color-divider)}
  .ds-cmp-tableau tbody tr:last-child{border-bottom:0}
  .ds-cmp-tableau tbody th,.ds-cmp-tableau tbody td{display:block;padding:0;border:0;text-align:left;min-width:0}
  .ds-cmp-tableau tbody th{grid-column:1 / -1;font-size:var(--text-body)}
  .ds-cmp-tableau tbody td[data-t]::before{content:attr(data-t);display:block;font-size:var(--text-meta);color:var(--color-muted);font-weight:var(--weight-medium)}
  .ds-cmp-tableau .ds-cmp-d{text-align:left;white-space:normal}
  .ds-cmp-tableau td[data-t="Avis"],.ds-cmp-tableau__verifier{grid-column:1 / -1}
  .ds-cmp-tableau__verifier{min-width:0}
}
.ds-cmp-questions{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cmp-questions .ds-meta{margin:0}
.ds-cmp-questions form{margin:0}
.ds-cmp-questions__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-cmp-questions__liste li{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-3);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-cmp-groupe>summary{cursor:pointer;font-weight:var(--weight-bold);font-size:var(--text-body)}
.ds-cmp-groupe>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-cmp-groupe[open]>summary{margin-bottom:var(--space-3)}
.ds-cmp-groupe__offres{list-style:none;margin:var(--space-2) 0 var(--space-3);padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr));gap:0 var(--space-4)}
.ds-cmp-suite{margin:var(--space-3) 0 0;color:var(--color-text-2)}
@media (max-width:760px){
  .ds-cmp-offre__prix{font-size:var(--text-h3)}
  .ds-cmp-guide{padding:var(--space-4)}
}

/* LE BAS DU DÉTAIL D’UN LOT (src/basdulotneuf.js, 2 octobre) : le rail des
   trois étapes, puis des blocs repliés — un nom, une ligne de résumé, un
   geste. Tout se lit et s’ouvre sans script (<details>). */
.ds-lotbas{display:flex;flex-direction:column;gap:var(--space-3);margin:0 0 var(--space-5);scroll-margin-top:var(--topbar)}
.ds-lotbas-etapes{display:flex;flex-wrap:wrap;gap:var(--space-2);list-style:none;margin:0;padding:0}
.ds-lotbas-etapes li{flex:1;min-width:min(200px,100%)}
.ds-lotbas-etape{display:flex;gap:var(--space-2);align-items:center;height:100%;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);color:var(--color-text);text-decoration:none;min-height:var(--touch)}
.ds-lotbas-etape:hover{background:var(--color-surface-2)}
.ds-lotbas-etape:focus-visible,.ds-lotbas-bloc__tete:focus-visible,.ds-lotbas-confirmer>summary:focus-visible,.ds-lotbas-pli>summary:focus-visible,.ds-lotbas-lien:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-lotbas-etape__rond{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:var(--text-meta);font-weight:var(--weight-bold);background:var(--color-surface-3);color:var(--color-text-2)}
.ds-lotbas-etape--faite .ds-lotbas-etape__rond{background:var(--color-success-bg);color:var(--color-success)}
.ds-lotbas-etape b{display:block;font-size:var(--text-small)}
.ds-lotbas-etape span span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-lotbas-blocs{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-lotbas-bloc{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}
.ds-lotbas-bloc[open]{border-color:var(--color-accent)}
.ds-lotbas-bloc__tete{display:flex;gap:var(--space-3);align-items:center;padding:var(--space-3) var(--space-4);cursor:pointer;list-style:none;border-radius:var(--radius-lg)}
.ds-lotbas-bloc__tete::-webkit-details-marker{display:none}
.ds-lotbas-bloc__tete::before{content:"";flex:none;width:8px;height:8px;border-right:2px solid var(--color-muted);border-bottom:2px solid var(--color-muted);transform:rotate(-45deg);transition:transform var(--motion-fast);margin:0 var(--space-1)}
.ds-lotbas-bloc[open]>.ds-lotbas-bloc__tete::before{transform:rotate(45deg)}
.ds-lotbas-bloc__textes{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.ds-lotbas-bloc__nom{font-size:var(--text-body);font-weight:var(--weight-bold)}
.ds-lotbas-bloc__resume{font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.ds-lotbas-bloc__geste{flex:none;pointer-events:none}
.ds-lotbas-bloc__corps{border-top:1px solid var(--color-divider);padding:var(--space-4) var(--pad-card) var(--pad-card);display:flex;flex-direction:column;gap:var(--space-3);scroll-margin-top:calc(var(--topbar) + var(--space-7))}
.ds-lotbas-bloc{min-width:0}
.ds-lotbas-bloc__corps>*,.ds-lotbas-panneau>*,.ds-lotbas-form>*{min-width:0;max-width:100%}
.ds-lotbas-bloc__corps p,.ds-lotbas-bloc__corps form{margin:0}
.ds-lotbas-bloc__corps .ds-meta{font-size:var(--text-small)}
.ds-lotbas-rangee{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);align-items:flex-end}
.ds-lotbas-rangee .ds-champ{flex:1 1 180px;max-width:420px}
.ds-lotbas-form{display:flex;flex-direction:column;gap:var(--space-3);align-items:stretch}
.ds-lotbas-form>.ds-btn{align-self:flex-start}
.ds-lotbas-etiquette{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-text-2)}
.ds-lotbas-soustitre{font-size:var(--text-small);font-weight:var(--weight-bold);margin:0}
.ds-lotbas-panneau{display:flex;flex-direction:column;gap:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4)}
.ds-lotbas-fiche{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);align-items:baseline}
.ds-lotbas-fiche b{font-size:var(--text-body)}
.ds-lotbas-descriptif{white-space:pre-line;overflow-wrap:anywhere}
.ds-lotbas-alerte{font-size:var(--text-small);background:var(--color-warning-bg);color:var(--color-warning);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}
.ds-lotbas-mention{font-size:var(--text-small);color:var(--color-text-2);background:var(--color-surface-3);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3)}
.ds-lotbas-mention b{color:var(--color-text)}
.ds-lotbas-autres{border-top:1px solid var(--color-divider);padding-top:var(--space-3);display:flex;flex-direction:column;gap:var(--space-2)}
.ds-lotbas-autres__liste{display:flex;flex-direction:column;gap:var(--space-1);align-items:flex-start}
.ds-lotbas-confirmer{max-width:100%;min-width:0}
.ds-lotbas-confirmer>summary{list-style:none;cursor:pointer;white-space:normal;text-align:left;max-width:100%;padding-top:var(--space-1);padding-bottom:var(--space-1)}
.ds-lotbas-autres__liste>*{max-width:100%}
.ds-lotbas-confirmer>summary::-webkit-details-marker{display:none}
.ds-lotbas-confirmer[open]{flex-basis:100%;width:100%}
.ds-lotbas-confirmer__corps{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);margin-top:var(--space-2)}
.ds-lotbas-confirmer__corps .ds-champ{width:100%}
.ds-lotbas-pli>summary{cursor:pointer;font-size:var(--text-small);color:var(--color-text-2);text-decoration:underline;text-underline-offset:3px}
.ds-lotbas-liste{margin:var(--space-2) 0 0;padding-left:var(--space-4);display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-small);color:var(--color-text-2)}
.ds-lotbas-lien{font-size:var(--text-small);color:var(--color-info);font-weight:var(--weight-medium)}
.ds-lotbas-encarts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:var(--space-3)}
.ds-lotbas-encart{border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-2);font-size:var(--text-small);min-width:0;overflow-wrap:anywhere}
.ds-lotbas-encart h3{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-text-2);margin:0}
.ds-lotbas-encart ul{margin:0;padding-left:var(--space-4);display:flex;flex-direction:column;gap:6px}
.ds-lotbas-encart--info{background:var(--color-info-bg);border-color:transparent}.ds-lotbas-encart--info h3{color:var(--color-info)}
.ds-lotbas-encart--attention{background:var(--color-warning-bg);border-color:transparent}.ds-lotbas-encart--attention h3{color:var(--color-warning)}
.ds-lotbas-tableau{overflow-x:auto;border:1px solid var(--color-border);border-radius:var(--radius-md)}
.ds-lotbas-tableau table{border-collapse:collapse;width:100%;min-width:680px;font-size:var(--text-small);font-variant-numeric:tabular-nums}
.ds-lotbas-tableau--petit table{min-width:0}
.ds-lotbas-tableau thead th{font-size:var(--text-meta);color:var(--color-muted);font-weight:var(--weight-medium);text-align:left;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);background:var(--color-surface-2)}
.ds-lotbas-tableau tbody th,.ds-lotbas-tableau td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-divider);vertical-align:top;text-align:left;font-weight:var(--weight-regular)}
.ds-lotbas-tableau tbody th small{display:block;color:var(--color-muted);font-size:var(--text-meta)}
.ds-lotbas-tableau tr:last-child th,.ds-lotbas-tableau tr:last-child td{border-bottom:0}
.ds-lotbas-tableau .ds-lotbas-d{text-align:right;white-space:nowrap}
.ds-lotbas-vide{color:var(--color-warning);font-style:italic}
.ds-lotbas-total th,.ds-lotbas-total td{font-weight:var(--weight-bold);background:var(--color-surface-2)}
.ds-lotbas-avis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:var(--space-4);align-items:start}
.ds-lotbas-apercu{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;background:var(--color-surface-2);margin-top:var(--space-1)}
.ds-lotbas-apercu__barre{font-size:var(--text-meta);color:var(--color-muted);background:var(--color-surface-3);padding:6px var(--space-3)}
.ds-lotbas-apercu__corps{padding:var(--space-3) var(--space-4);display:flex;flex-direction:column;gap:6px}
.ds-lotbas-apercu__titre{font-weight:var(--weight-bold)}
.ds-lotbas-apercu__texte{font-size:var(--text-small);white-space:pre-wrap;overflow-wrap:anywhere}
.ds-lotbas-frise{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-lotbas-frise li{position:relative;padding:0 0 var(--space-3) var(--space-5);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-lotbas-frise li::before{content:"";position:absolute;left:4px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--color-accent)}
.ds-lotbas-frise li::after{content:"";position:absolute;left:8px;top:18px;bottom:0;width:1px;background:var(--color-border)}
.ds-lotbas-frise li:last-child{padding-bottom:0}.ds-lotbas-frise li:last-child::after{display:none}
.ds-lotbas-frise time{color:var(--color-muted);margin-right:var(--space-2);white-space:nowrap}
@media (max-width:640px){
  .ds-lotbas-bloc__tete{flex-wrap:wrap;padding:var(--space-3)}
  .ds-lotbas-bloc__geste{margin-left:var(--space-5)}
  .ds-lotbas-bloc__corps{padding:var(--space-3)}
}
/* La synthèse de l’analyse et la piste de K (comparatifneuf, 2 octobre). */
.ds-cmp-synthese,.ds-cmp-piste{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-cmp-synthese p,.ds-cmp-piste p,.ds-cmp-synthese form{margin:0}
.ds-cmp-synthese .ds-meta,.ds-cmp-piste .ds-meta{font-size:var(--text-small)}
.ds-cmp-synthese a,.ds-cmp-piste__lien{color:var(--color-info);font-weight:var(--weight-medium)}
.ds-cmp-piste{border-color:var(--color-accent)}
.ds-cmp-piste .ds-h3{overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.ds-cmp-piste__regles>summary{cursor:pointer;font-size:var(--text-small);color:var(--color-text-2);text-decoration:underline;text-underline-offset:3px}
.ds-cmp-piste__regles>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-cmp-piste__regles ol{margin:var(--space-2) 0 0;padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-small);color:var(--color-text-2)}

/* L’écran « Récupérer vos données » (connexion en lecture seule pendant le
   préavis de suppression, 4 octobre 2026) : au téléphone, le nom du projet
   passe au-dessus de son bouton au lieu d’être coupé en colonne étroite. */
.ds-recup__titre{margin-top:var(--space-5)}
.ds-recup__projets li{flex-wrap:wrap}
.ds-recup__projets li > div{flex:1 1 12rem}
/* ===================================================================   AUDIT D’ERGONOMIE DU 2 OCTOBRE 2026 — corrections (lots 3 et 4)
   ========================================================================== */
/* E-001, puis « Menu » au lieu de « Chercher » (3 octobre 2026) — au téléphone,
   la quatrième place de la barre du bas ouvre la liste de tous les écrans
   (src/coque.js, menuDesEcrans) : deux colonnes, comme le bouton « Rubrique »
   d’un projet. */
.ds-menu-ecrans{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-1) var(--space-2)}
.ds-menu-ecrans a{display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch);padding:0 var(--space-3);border-radius:var(--radius-sm);color:var(--color-text);text-decoration:none;font-size:var(--text-small);font-weight:var(--weight-medium);min-width:0}
.ds-menu-ecrans a:hover{background:var(--color-surface-2)}
.ds-menu-ecrans a .ds-ic{width:18px;height:18px;color:var(--color-text-2)}
.ds-menu-ecrans a span{min-width:0;overflow-wrap:anywhere}
.ds-menu-ecrans a[aria-current="page"]{background:var(--color-surface-2);font-weight:var(--weight-bold)}
@media (max-width:760px){
  .ds-profil .ds-menu--bas{max-height:calc(100vh - var(--topbar) - var(--bottom-nav) - var(--space-5));max-height:calc(100dvh - var(--topbar) - var(--bottom-nav) - var(--space-5));overflow-y:auto}
}
/* E-007 — sous 768 px, tout champ de saisie fait 16 px : en dessous, l’iPhone
   agrandit toute la page à chaque saisie et il faut dézoomer à la main. Vaut
   pour l’agence, la connexion et l’espace des invités (dont des champs portent
   leur taille en ligne : d’où !important). Cases et boutons radio exclus. */
@media (max-width:767px){
  body.ds :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=hidden]),select,textarea){font-size:16px!important}
}
/* E-006 — le planning d’un projet au téléphone : la colonne des tâches prend
   60 % de l’écran (190 px ne laissaient qu’une soixantaine de pixels au texte,
   entre la case et la croix) et un intitulé ne se coupe plus au milieu d’un
   mot : il passe à la ligne entre deux mots (seul un mot plus long que la
   colonne entière se coupe encore). La frise garde sa largeur (430 px). */
@media (max-width:760px){
  .ds-gantt{--gantt-nom:clamp(190px,60vw,300px);min-width:calc(var(--gantt-nom) + 430px)}
  .ds-gantt__ligne{grid-template-columns:var(--gantt-nom) minmax(0,1fr)}
  .ds-gantt__grille{left:var(--gantt-nom)}
  .ds-gantt__nom{gap:var(--space-1);padding-left:var(--space-2);padding-right:var(--space-1)}
  .ds-gantt__txt b,.ds-gantt__txt span,.ds-gantt__txt a{overflow-wrap:break-word;word-break:normal;hyphens:none;-webkit-hyphens:none}
}
/* E-021 — une ancre (#a-faire, #justificatifs, #rubrique…) ou un champ en
   erreur que le navigateur amène à l’écran s’arrête SOUS l’en-tête collant, au
   lieu de se glisser dessous. E-008 — le bouton « Rubrique » est cette ancre
   au téléphone (src/projet.js, rubriquesTelephone). */
html{scroll-padding-top:calc(var(--topbar) + var(--space-4))}
/* E-020 — budget « Lot par lot » au téléphone : la ligne d’intitulés est
   masquée, chaque montant porte donc le sien (src/consultationneuf.js,
   data-intitule). */
@media (max-width:760px){
  .ds-budget-ligne > [role="cell"][data-intitule]::before{content:attr(data-intitule);display:block;font-size:var(--text-meta);color:var(--color-muted);font-weight:var(--weight-medium)}
}
/* E-010 — documents d’un projet au téléphone : la barre « Tout choisir / Type
   / Lot / Appliquer… » ne reste plus collée en haut (283 px sur un écran de
   844) ; elle défile avec la liste. À l’ordinateur elle reste collante. */
@media (max-width:767px){
  .ds-docs-groupe__barre{position:static}
}
/* E-018 — Aujourd’hui au téléphone : un bloc (« À faire »…) ne défile plus
   dans une petite fenêtre à l’intérieur de la page ; il prend sa hauteur et la
   page défile seule. La mention « La suite en faisant défiler le bloc »
   n’a plus d’objet. À l’ordinateur les blocs gardent leur hauteur commune. */
@media (max-width:760px){
  .ds-blocs > .ds-bloc:not(.ds-bloc--auto){height:auto;max-height:none}
  .ds-blocs > .ds-bloc--nu:not(.ds-bloc--auto){overflow-y:visible}
  .ds-blocs .ds-bloc__corps{overflow-y:visible;overscroll-behavior:auto;-webkit-mask-image:none!important;mask-image:none!important}
  .ds-blocs .ds-bloc__encore{display:none!important}
}
/* E-022 — « Créer les lots cochés » vit avec ses cases, dans la liste dépliée (src/lotsneuf.js). */
.ds-lots-catalogue__geste{margin:var(--space-3) 0 0}
/* E-019 — À L’IMPRESSION (Ctrl+P, « Enregistrer en PDF ») : la feuille porte
   le contenu, pas l’outil. La barre de gauche, la barre du haut, la barre du
   bas, les onglets, les boutons, les messages et l’assistant ne s’impriment
   pas ; de l’en-tête du projet il reste le nom, la phase et les repères. Le
   planning s’imprime en entier (plus de défilement de côté). */
@media print{
  .ds-lat,.ds-haut,.ds-bas,.ds-toasts,.ds-tiroir,.ds-retour-liste,.ds-cmp-retour,.ds-rubriques,.ds-projet-onglets,.ds-onglets,
  .ds-projet-entete__visuel,.ds-btn,.ds-fait,.ds-gantt__mode,.ds-planning-outils,.ds-plus-tard,.ds-outil,.ds-docs-groupe__barre,[data-bandeau-cabinet]{display:none!important}
  html,body.ds{background:var(--color-surface)!important}
  .ds-app{display:block;min-height:0}
  .ds-principal{display:block}
  .ds-contenu{padding:0!important;max-width:none}
  .ds-carte{box-shadow:none!important;break-inside:avoid}
  .ds-projet-entete__carte{border:0;padding:0}
  .ds-gantt-cadre{overflow:visible!important;border:0}
  /* 11 octobre 2026 — « Tout le projet, toujours » : la feuille porte toutes
     les phases, terminées comprises, même si l’écran est replié. La copie
     d’impression (cachée à l’écran par hidden) remplace la frise repliée et
     le repli de « Les phases ». */
  .ds-impression[hidden]{display:block!important}
  .ds-ecran-seul,.ds-gantt__ligne--terminees,.ds-phases__terminees{display:none!important}
  .ds-gantt{min-width:0!important}
  .ds-gantt__nom,.ds-gantt__ligne--entete{position:static!important}
  .ds-blocs > .ds-bloc:not(.ds-bloc--auto){height:auto;max-height:none}
  .ds-bloc__corps{overflow:visible!important;-webkit-mask-image:none!important;mask-image:none!important}
  a{text-decoration:none}
}
/* « Prochaines étapes » s’ouvrent (Jean-David, 3 octobre 2026) : l’étape visée
   se signale à l’arrivée dans le planning ; sur l’accueil du client, la ligne
   entière est le lien. */
.ds-gantt__ligne:target > .ds-gantt__nom{background:var(--color-accent-soft);box-shadow:inset 3px 0 0 var(--color-accent)}
.ds-gantt__ligne{scroll-margin-top:calc(var(--topbar) + var(--space-7))}
.ds-inv-etapes li > a.ds-inv-etapes__ligne{display:flex;flex:1;min-width:0;gap:var(--space-3);align-items:center;color:inherit;text-decoration:none;border-radius:var(--radius-sm);margin:calc(-1 * var(--space-2));padding:var(--space-2)}
.ds-inv-etapes li > a.ds-inv-etapes__ligne:hover{background:var(--color-surface-2)}
.ds-inv-etapes li > a > div{display:flex;flex-direction:column;min-width:0}

/* AU TÉLÉPHONE, UN BLOC MONTRE SES CINQ PREMIÈRES LIGNES, PUIS « TOUT VOIR »
   — Jean-David, 4 octobre 2026, vers 7 h : « les cinq premières lignes + Tout
   voir ». Sans script : la page est servie avec les cinq premières lignes au
   moins ; sur ordinateur, `data-ds-lignes` rend au bloc le nombre de lignes
   que sa taille (S, M) lui donnait ; au téléphone, ce qui dépasse la
   cinquième ligne se masque et « Tout voir (N) » mène à l’écran complet.
   Vaut pour l’accueil (.ds-bloc--cinq, src/aujourdhui.js) et pour les listes
   de la vue d’un projet (.ds-cinq-au-telephone, src/projet.js). */
.ds-tout-voir{display:none;margin:var(--space-3) 0 0}
.ds-tout-voir .ds-btn{width:100%;justify-content:center}
@media (min-width:761px){
  [data-ds-lignes="2"] > :nth-child(n+3),
  [data-ds-lignes="3"] > :nth-child(n+4),
  [data-ds-lignes="4"] > :nth-child(n+5){display:none}
}
@media (max-width:760px){
  .ds-tout-voir{display:block}
  .ds-bloc--cinq .ds-liste > li:nth-child(n+6),
  .ds-bloc--cinq .ds-actions > .ds-action:nth-child(n+6),
  .ds-bloc--cinq .ds-jour__evts > .ds-evt:nth-child(n+6),
  .ds-bloc--cinq .ds-projets > li:nth-child(n+6),
  .ds-bloc--cinq .ds-projets-grands > li:nth-child(n+6),
  .ds-cinq-au-telephone > li:nth-child(n+6),
  .ds-hors-cinq{display:none}
  /* « Et N de plus » ne compte plus juste quand le téléphone montre cinq
     lignes : « Tout voir (N) » le remplace. */
  .ds-bloc--cinq .ds-encore-n,.ds-bloc--cinq .ds-encore{display:none}
  /* Mes projets : un seul lien vers la liste, celui du bas. */
  .ds-bloc--suite[data-type="projets"] .ds-carte__tete a{display:none}
}
/* L’AVANCEMENT DES TRAVAUX D’UN LOT, dit par l’agence (2 octobre 2026,
   src/travauxneuf.js) : le pli sur la carte d’un lot, la carte du détail et
   de l’exécution, les trois gestes, le retour, l’historique. */
.ds-travaux{scroll-margin-top:calc(var(--space-6) * 3)}
.ds-travaux--pli{border:1px solid var(--color-divider);border-radius:var(--radius-md,10px);background:var(--color-surface)}
.ds-travaux--pli>summary{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);cursor:pointer;list-style:none;min-height:44px}
.ds-travaux--pli>summary::-webkit-details-marker{display:none}
.ds-travaux--pli>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-travaux__titre{font-size:var(--text-small);font-weight:var(--weight-bold);text-decoration:underline;text-underline-offset:3px}
.ds-travaux--pli[open]>summary{border-bottom:1px solid var(--color-divider)}
.ds-travaux--pli:target{outline:2px solid var(--color-accent);outline-offset:2px}
.ds-travaux__corps{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-3)}
.ds-travaux--carte{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-travaux__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}
.ds-travaux__tete .ds-h3{overflow-wrap:anywhere;margin:0}
.ds-travaux__tete .ds-badge,.ds-travaux--pli>summary .ds-badge{flex:none}
.ds-travaux__etat{margin:0}
.ds-travaux p{margin:0}
.ds-travaux__avis{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md,10px);font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-travaux__avis--succes{background:var(--color-success-bg);color:var(--color-success)}
.ds-travaux__avis--info{background:var(--color-info-bg);color:var(--color-info)}
.ds-travaux__avis--danger{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-travaux__alerte{display:flex;gap:var(--space-2);align-items:flex-start;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md,10px);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small)}
.ds-travaux__alerte svg{flex:none;width:18px;height:18px;margin-top:1px}
.ds-travaux__mot{margin:0;font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-travaux__gestes{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--space-3);align-items:start}
.ds-travaux__geste{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md,10px);min-width:0}
.ds-travaux__ligne{display:flex;gap:var(--space-3);align-items:flex-end;flex-wrap:wrap}
.ds-travaux__ligne .ds-champ{flex:1 1 160px;min-width:0}
.ds-travaux__geste .ds-input{max-width:100%;min-width:0}
.ds-travaux__revenir{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-travaux__revenir p{flex:1 1 220px}
.ds-travaux__reserve{padding-top:var(--space-2);border-top:1px solid var(--color-divider)}
.ds-travaux__historique>summary{cursor:pointer;font-size:var(--text-small);color:var(--color-text-2);text-decoration:underline;text-underline-offset:3px}
.ds-travaux__historique>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-travaux__historique ul{margin:var(--space-2) 0 0;padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-small)}
.ds-travaux__annule>span:first-child{text-decoration:line-through;color:var(--color-muted)}
.ds-travaux-liste{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:var(--gap-cards);margin-bottom:var(--gap-cards);align-items:start}
.ds-travaux-invite{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-travaux-invite__tete{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-1)}
.ds-travaux-invite__tete b{overflow-wrap:anywhere;font-size:var(--text-small)}
.ds-travaux-invite__tete .ds-badge{flex:none}
.ds-inv-travaux{margin:var(--gap-cards) 0 0}
.ds-validations__soi{margin:var(--space-3) 0}
@media (max-width:640px){
  .ds-travaux__gestes{grid-template-columns:minmax(0,1fr)}
  .ds-travaux--pli>summary{flex-wrap:wrap}
}
.ds-travaux__maj>summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-bold);text-decoration:underline;text-underline-offset:3px;min-height:32px}
.ds-travaux__maj>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-travaux__maj[open]>summary{margin-bottom:var(--space-3)}
.ds-travaux__maj{display:flex;flex-direction:column;gap:var(--space-3)}

/* « ÉCRIRE À KABLANN » (5 octobre 2026) — la fenêtre posée par la coque, le
   bouton du tiroir de K, et la liste « Vos messages à Kablann » de l’aide.
   Au téléphone : les motifs passent sur deux colonnes, rien ne défile de côté. */
.ds-ecrire[hidden],.ds-ecrire__recu[hidden],.ds-ecrire__souci[hidden],#ds-ecrire .ds-btn[hidden]{display:none}
.ds-ecrire__motifs{border:0;margin:0;padding:0;min-width:0}
.ds-ecrire__motifs legend{padding:0;margin-bottom:var(--space-2)}
.ds-ecrire__choix{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}
.ds-ecrire__motif{position:relative;display:flex;min-width:0}
.ds-ecrire__motif input{position:absolute;opacity:0;inset:0;width:100%;height:100%;margin:0;cursor:pointer}
.ds-ecrire__motif span{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;min-height:var(--touch,44px);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md,10px);font-size:var(--text-small);font-weight:var(--weight-bold);background:var(--color-surface);overflow-wrap:anywhere}
.ds-ecrire__motif input:checked + span{border-color:var(--color-text);background:var(--color-surface-2);box-shadow:inset 0 0 0 1px var(--color-text)}
.ds-ecrire__motif input:focus-visible + span{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-ecrire__joint{margin:0}
.ds-ecrire__souci{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md,10px);background:var(--color-danger-bg);color:var(--color-danger);font-size:var(--text-small)}
.ds-ecrire__recu{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);padding:var(--space-3) 0}
.ds-ecrire__recu-ic{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:var(--color-success-bg);color:var(--color-success)}
.ds-ecrire__recu-mot{margin:0;font-size:var(--text-body);font-weight:var(--weight-bold)}
.ds-ecrire__avis{display:flex;gap:var(--space-3);align-items:flex-start;margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md,10px);background:var(--color-success-bg);color:var(--color-success);font-size:var(--text-small)}
.ds-ecrire__avis span{color:var(--color-text);overflow-wrap:anywhere}
.ds-ecrire__avis--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-ecrire__avis--danger{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-aide-gestes{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center}
.ds-ecrire-liste{margin-top:var(--gap-cards);display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecrire-liste__tete{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-wrap:wrap}
.ds-ecrire-liste__tete p{margin:var(--space-1) 0 0}
.ds-ecrire-msgs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-ecrire-msg{padding:var(--space-3) 0;border-top:1px solid var(--color-divider);min-width:0}
.ds-ecrire-msg__tete{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3)}
.ds-ecrire-msg__tete .ds-badge{flex:none}
.ds-ecrire-msg__texte{margin:var(--space-1) 0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-ecrire-msg .ds-meta{margin:0}
.ds-k__ecrire{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap;margin:var(--space-2) 0 0;font-size:var(--text-meta);color:var(--color-muted)}
.ds-k__transmettre{align-self:flex-start}
/* L’aide mène à « Tous les tutoriels vidéo » (5 octobre 2026 ; 10 octobre :
   le triangle de lecture, plein, et le libellé entier — jamais d’ellipse). */
.ds-aide-tutoriels .ds-btn{max-width:100%;white-space:normal;height:auto;text-align:left;padding-top:var(--space-2);padding-bottom:var(--space-2)}
.ds-aide-tutoriels .ds-btn .ds-ic{width:16px;height:16px;fill:currentColor;stroke-width:1.4}
.ds-aide-tutoriels{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:0 0 var(--space-4)}
.ds-aide-tutoriels .ds-meta{margin:0}
.ds-k__tutoriel{align-self:flex-start;font-size:var(--text-small);font-weight:600}
.ds-mention-exploitation{margin:var(--space-2) 0 var(--space-4);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md,10px);background:var(--color-surface-3);overflow-wrap:anywhere}
.ds-tiroir__pied .ds-mention-exploitation{margin:var(--space-2) 0 0}
.ds-aide-rubrique__geste{margin:0 0 var(--space-4)}
/* Dans le budget, le nom d’un lot ouvre le lot (5 octobre 2026) : le nom seul
   est un lien ; au téléphone, sa cible prend la hauteur d’un doigt. */
.ds-budget-ligne__nom{color:inherit;text-decoration:underline;text-decoration-color:var(--color-border);text-underline-offset:3px;align-self:flex-start;max-width:100%}
.ds-budget-ligne__nom:hover{text-decoration-color:currentColor}
.ds-budget-ligne__nom:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-budget-ligne:target{box-shadow:inset 3px 0 0 var(--color-info-solid)}
@media (max-width:767px){.ds-budget-ligne__nom{display:flex;align-items:center;min-height:var(--touch,44px)}}
/* Écran Lots (9 octobre 2026, LOT01) : le titre d'une carte ouvre la fiche du lot ; il se lit comme un lien et, au téléphone, a la hauteur d'un doigt. */
.ds-lot__tete .ds-titre-lien[data-ouvrir-lot]{text-decoration:underline;text-decoration-color:var(--color-border);text-underline-offset:3px}
.ds-lot__tete .ds-titre-lien[data-ouvrir-lot]:hover{text-decoration-color:currentColor}
@media (max-width:767px){.ds-lot__tete .ds-titre-lien[data-ouvrir-lot]{display:inline-flex;align-items:center;min-height:var(--touch,44px)}}


/* L’ÉCRAN DE CONFIRMATION (src/confirmationneuf.js, 5 octobre) : ce que le
   geste engage, les faits, la pièce sous les yeux, puis le bouton. */
.ds-conf{display:flex;flex-direction:column;gap:var(--space-4);max-width:820px}
.ds-conf__etape{margin:0}
.ds-conf__engagement{margin:0;font-size:var(--text-body);color:var(--color-text)}
.ds-conf__faits{margin:0;display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}
.ds-conf__faits>div{display:grid;grid-template-columns:minmax(120px,200px) 1fr;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-top:1px solid var(--color-divider)}
.ds-conf__faits>div:first-child{border-top:0}
.ds-conf__faits dt{color:var(--color-muted);font-size:var(--text-small)}
.ds-conf__faits dd{margin:0;font-weight:var(--weight-bold);font-size:var(--text-small);overflow-wrap:anywhere;min-width:0}
.ds-conf__points{margin:0;padding:0 0 0 var(--space-4);font-weight:var(--weight-regular);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-conf__note{display:flex;gap:var(--space-2);align-items:flex-start;margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small)}
.ds-conf__note .ds-ic{flex:none;width:18px;height:18px;margin-top:1px}
.ds-conf__piece iframe{display:block;width:100%;height:480px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-conf__piece p{margin:var(--space-2) 0 0}
.ds-conf__form{display:flex;flex-direction:column;gap:var(--space-4);margin:0}
.ds-conf__saisies{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:var(--space-4)}
.ds-conf__outre{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-danger-bg)}
.ds-conf__outre p{margin:0}
.ds-conf__alerte{color:var(--color-danger)}
.ds-conf__gestes{display:flex;flex-wrap:wrap;gap:var(--space-3)}
@media (max-width:640px){
  .ds-conf__faits>div{grid-template-columns:1fr;gap:2px}
  .ds-conf__piece iframe{height:360px}
  .ds-conf__gestes .ds-btn{flex:1 1 100%}
}

/* LE PARCOURS D’UN LOT, REPENSÉ (src/comparatifneuf.js, 5 octobre 2026) :
   où en est le lot, une phrase et un geste, les offres en barres, ce qui
   compte avant de décider, puis les cartes. La couleur ne dit jamais seule. */
.ds-avis{display:flex;gap:var(--space-3);align-items:flex-start;margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--text-small)}
.ds-avis p{margin:0;min-width:0;overflow-wrap:anywhere}
.ds-avis__ic{flex:none;display:grid;place-items:center;width:24px;height:24px;border-radius:50%}
.ds-avis__ic .ds-ic{width:16px;height:16px}
.ds-avis--succes{background:var(--color-success-bg);color:var(--color-success)}
.ds-avis--danger{background:var(--color-danger-bg);color:var(--color-danger)}
.ds-cmp-rail{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-2)}
.ds-cmp-rail__etape{display:flex;gap:var(--space-2);align-items:flex-start;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface);border:1px solid var(--color-border);min-width:0}
.ds-cmp-rail__rond{flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:var(--text-meta);font-weight:var(--weight-bold);background:var(--color-surface-3);color:var(--color-text-2)}
.ds-cmp-rail__textes{display:flex;flex-direction:column;min-width:0;font-size:var(--text-meta);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-cmp-rail__textes b{font-size:var(--text-small);color:var(--color-text)}
.ds-cmp-rail__etape--faite{background:var(--color-success-bg);border-color:transparent}
.ds-cmp-rail__etape--faite .ds-cmp-rail__rond{background:var(--color-success-solid);color:var(--color-on-dark)}
.ds-cmp-rail__etape--courante{border-color:var(--color-accent);box-shadow:0 0 0 2px var(--color-accent-soft)}
.ds-cmp-rail__etape--courante .ds-cmp-rail__rond{background:var(--color-accent);color:var(--color-primary)}
.ds-cmp-guide__k .ds-ic{width:20px;height:20px}
.ds-cmp-guide__corps .ds-cmp-guide__etape{font-size:var(--text-meta);font-weight:var(--weight-bold);letter-spacing:.04em;text-transform:uppercase;color:var(--color-accent);opacity:1}
.ds-cmp-guide__corps .ds-cmp-guide__propose{opacity:1}
.ds-cmp-guide__corps a{color:var(--color-on-dark);font-weight:var(--weight-bold)}
.ds-cmp-guide__decompte{font-size:var(--text-small);opacity:.92}
.ds-cmp-guide__decompte summary{cursor:pointer;min-height:var(--touch);display:inline-flex;align-items:center;font-weight:var(--weight-medium)}
.ds-cmp-guide__decompte summary:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}
.ds-cmp-guide__decompte p{margin:0 0 var(--space-1)}
.ds-cmp-guide__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin-top:var(--space-2)}
.ds-cmp-guide__gestes form{margin:0}
.ds-cmp-guide__gestes .ds-btn--discret{color:var(--color-on-dark);border:1px solid var(--color-nav-muted)}
.ds-cmp-guide__gestes .ds-btn--discret:hover{background:var(--color-primary-hover)}
.ds-cmp-guide__gestes .ds-btn--secondaire{background:transparent;color:var(--color-on-dark);border-color:var(--color-on-dark)}
.ds-cmp-guide__corps .ds-cmp-guide__promesse{font-size:var(--text-meta);opacity:.75}
.ds-cmp-duo{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:var(--gap-cards);align-items:start}
.ds-cmp-duo .ds-carte{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-cmp-duo .ds-carte p{margin:0}
.ds-cmp-duo form{margin:0}
.ds-cmp-piste__regles summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-medium);min-height:var(--touch);display:inline-flex;align-items:center}
.ds-cmp-piste__regles ol{margin:var(--space-2) 0 0;padding-left:var(--space-5);font-size:var(--text-small);color:var(--color-text-2);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-cmp-piste__lien{color:var(--color-info);font-weight:var(--weight-medium);font-size:var(--text-small)}
.ds-cmp-barres{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cmp-barres>.ds-meta{margin:0}
.ds-cmp-barres__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-cmp-barre{display:grid;grid-template-columns:minmax(120px,1.1fr) minmax(120px,2.4fr) auto minmax(150px,1.2fr);gap:var(--space-2) var(--space-3);align-items:center;min-height:var(--touch);padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);text-decoration:none}
.ds-cmp-barre:hover{background:var(--color-surface-2)}
.ds-cmp-barre:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px}
.ds-cmp-barre__nom{font-weight:var(--weight-bold);font-size:var(--text-small);overflow-wrap:anywhere;min-width:0}
.ds-cmp-barre__piste{position:relative;height:14px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-cmp-barre__plein{position:absolute;left:0;top:0;bottom:0;border-radius:var(--radius-pill);background:var(--color-disabled)}
.ds-cmp-barre--succes .ds-cmp-barre__plein{background:var(--color-success-solid)}
.ds-cmp-barre--attention .ds-cmp-barre__plein{background:var(--color-warning-solid)}
.ds-cmp-barre--danger .ds-cmp-barre__plein{background:var(--color-danger-solid)}
.ds-cmp-barre__zone{position:absolute;top:-4px;bottom:-4px;border-radius:4px;background:var(--color-success-bg);border:1px dashed var(--color-success-solid)}
.ds-cmp-barre__est{position:absolute;top:-6px;bottom:-6px;width:2px;background:var(--color-primary)}
.ds-cmp-barre__prix{font-variant-numeric:tabular-nums;font-weight:var(--weight-bold);font-size:var(--text-small);white-space:nowrap;text-align:right}
.ds-cmp-barre__mot{font-size:var(--text-meta);font-weight:var(--weight-medium);min-width:0}
.ds-cmp-barre--ecartee{opacity:.6}
.ds-cmp-barre--retenue{background:var(--color-success-bg)}
.ds-cmp-barres__legende{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);font-size:var(--text-meta);color:var(--color-text-2);margin:0}
.ds-cmp-barres__legende span{display:inline-flex;align-items:center;gap:6px}
.ds-cmp-barres__trait{display:inline-block;width:2px;height:14px;background:var(--color-primary)}
.ds-cmp-barres__bande{display:inline-block;width:18px;height:12px;border-radius:3px;background:var(--color-success-bg);border:1px dashed var(--color-success-solid)}
.ds-cmp-ecarts{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-cmp-ecarts__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-cmp-ecart{position:relative;padding:var(--space-2) var(--space-3) var(--space-2) 38px;border-radius:var(--radius-md);font-size:var(--text-small);background:var(--color-surface-2);overflow-wrap:anywhere}
.ds-cmp-ecart::before{position:absolute;left:var(--space-3);top:9px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:var(--text-meta);font-weight:var(--weight-bold)}
.ds-cmp-ecart--danger{background:var(--color-danger-bg)}.ds-cmp-ecart--danger::before{content:"!!";width:auto;min-width:18px;border-radius:var(--radius-pill);color:var(--color-danger)}
.ds-cmp-ecart--attention{background:var(--color-warning-bg)}.ds-cmp-ecart--attention::before{content:"!";background:var(--color-surface);color:var(--color-warning)}
.ds-cmp-ecart--info::before{content:"i";background:var(--color-info-bg);color:var(--color-info)}
.ds-cmp-ecarts__suite summary{cursor:pointer;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-info);min-height:var(--touch);display:inline-flex;align-items:center}
.ds-cmp-ecarts__suite[open] summary{margin-bottom:var(--space-2)}
.ds-cmp-ecarts__pied{margin:0;font-size:var(--text-small)}
.ds-cmp-ecarts__pied a{color:var(--color-info);font-weight:var(--weight-medium)}
.ds-cmp-fete{display:flex;gap:var(--space-3);align-items:center;padding:var(--space-4) var(--pad-card);border-radius:var(--radius-lg);background:var(--color-success-bg);color:var(--color-success);
  background-image:radial-gradient(circle at 92% 30%,var(--color-accent) 0 5px,transparent 6px),radial-gradient(circle at 84% 72%,var(--color-success-solid) 0 4px,transparent 5px),radial-gradient(circle at 76% 22%,var(--color-info-solid) 0 3px,transparent 4px),radial-gradient(circle at 96% 78%,var(--color-studies-solid) 0 3px,transparent 4px)}
.ds-cmp-fete p{margin:0;font-size:var(--text-small)}
.ds-cmp-fete .ds-cmp-fete__titre{font-size:var(--text-h3);font-weight:var(--weight-bold);line-height:var(--leading-tight);padding-right:var(--space-7)}
.ds-cmp-fete__rond{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--color-success-solid);color:var(--color-on-dark);animation:ds-apparait var(--motion) var(--ease)}
.ds-cmp-offre--piste{border-color:var(--color-accent)}
.ds-cmp-offre .ds-modale{text-align:left}
.ds-cmp-fenetre__titre{margin:0;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em}
.ds-cmp-suites{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-2);width:100%}
.ds-cmp-suites li{position:relative;padding-left:26px;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-cmp-suites li::before{content:"";position:absolute;left:4px;top:7px;width:8px;height:8px;border-radius:50%;background:var(--color-accent)}
.ds-cmp-fenetre__alerte{display:flex;gap:var(--space-2);align-items:flex-start;margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small);width:100%}
.ds-cmp-fenetre__alerte .ds-ic{flex:none;width:18px;height:18px;margin-top:1px}
.ds-modale .ds-cmp-confirmer,.ds-modale .ds-cmp-autres{background:none;border:0;padding:0;margin:0}
.ds-modale .ds-cmp-confirmer .ds-meta{margin:0}
.ds-sig{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-2);border:1px solid var(--color-border);font-size:var(--text-small)}
.ds-sig p{margin:0}
.ds-sig__titre{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted)}
.ds-sig__fait,.ds-sig__lecture{display:flex;gap:var(--space-2);align-items:flex-start}
.ds-sig__fait{color:var(--color-success);font-weight:var(--weight-medium)}
.ds-sig__fait a{color:inherit}
.ds-sig__lecture{color:var(--color-accent-strong);font-weight:var(--weight-medium)}
.ds-sig .ds-ic{flex:none;width:18px;height:18px;margin-top:1px}
.ds-sig__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-sig form{margin:0}
.ds-sig__acompte{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:flex-end}
.ds-sig__acompte .ds-champ{flex:0 1 190px}
.ds-cmp-envoi{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-cmp-groupe__form{display:flex;flex-direction:column;gap:var(--space-3);margin:0}
.ds-cmp-groupe__gestes{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:var(--space-3);align-items:end}
.ds-cmp-groupe__geste{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md)}
.ds-cmp-groupe__geste .ds-champ{width:100%}
.ds-cmp-groupe>summary{min-height:var(--touch);display:flex;align-items:center}
.ds-verrou{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;padding:var(--space-3) var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-verrou__ic{flex:none;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--color-accent-soft);color:var(--color-accent-strong)}
.ds-verrou__ic .ds-ic{width:18px;height:18px}
.ds-verrou__texte{flex:1 1 260px;display:flex;flex-direction:column;font-size:var(--text-small);color:var(--color-text-2);min-width:0}
.ds-verrou__texte b{color:var(--color-text)}
/* (L-92, 13 octobre 2026) Le verrou à sa place : sur la page d’un écran réservé, dans la carte des canaux, sous une étape du déroulé, à la place de la case de lecture. */
.ds-porte__bloc{margin:var(--space-4) 0 0}
.ds-canaux .ds-verrou{margin-top:var(--space-3)}
.ds-deroule__verrou{margin-top:var(--space-2)}
.ds-lots-verrou{margin:var(--space-4) 0}
.ds-import__lecture--verrou{padding:0;border:0;background:none}
.ds-cmp-selecteur{display:none}
@media (max-width:760px){
  /* Au téléphone : une offre par carte, qu’on balaie de côté — seul ce bloc
     défile, jamais la page ; le sélecteur mène à chaque offre. */
  .ds-cmp-selecteur{display:flex}
  .ds-cmp-offres{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:var(--space-3);padding-bottom:var(--space-2);scroll-padding:0 var(--space-1);-webkit-overflow-scrolling:touch}
  .ds-cmp-offres>.ds-cmp-offre{flex:0 0 88%;scroll-snap-align:start}
  .ds-cmp-offres>.ds-cmp-offre:only-child{flex-basis:100%}
  .ds-cmp .ds-btn--petit,.ds-cmp .ds-puce,.ds-sig .ds-btn--petit{min-height:var(--touch)}
  .ds-cmp-rail{grid-template-columns:1fr 1fr}
  .ds-cmp-barre{grid-template-columns:1fr auto;gap:2px var(--space-3);padding:var(--space-3) var(--space-2)}
  .ds-cmp-barre__piste{grid-column:1 / -1;order:3;margin:var(--space-1) 0}
  .ds-cmp-barre__mot{grid-column:1 / -1;order:4}
  .ds-cmp-guide__gestes .ds-btn{flex:1 1 100%}
  .ds-cmp-fete .ds-cmp-fete__titre{padding-right:0;font-size:var(--text-body)}
  .ds-cmp-envoi .ds-btn,.ds-cmp-envoi form{width:100%}
}

/* RÉPARTIR UN DEVIS ENTRE LES LOTS (src/repartitionneuf.js, 5 octobre 2026) :
   lot par lot, deux barres — ce devis, la meilleure offre du lot ; puis les
   postes, un par ligne, son montant et son lot. */
.ds-rep-lots,.ds-rep-postes{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-rep-lots>.ds-meta,.ds-rep-pli .ds-meta{margin:0}
.ds-rep-lots__liste,.ds-rep-postes__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-rep-lot{display:flex;flex-direction:column;gap:6px;padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-rep-lot:first-child{border-top:0;padding-top:0}
.ds-rep-lot__tete{display:flex;flex-wrap:wrap;gap:var(--space-2);justify-content:space-between;align-items:center}
.ds-rep-lot .ds-meta{margin:0}
.ds-rep-barre{display:grid;grid-template-columns:minmax(120px,1fr) minmax(100px,2.4fr) minmax(96px,auto);gap:var(--space-3);align-items:center;font-size:var(--text-small)}
.ds-rep-barre__mot{overflow-wrap:anywhere;min-width:0;color:var(--color-text-2)}
.ds-rep-barre__piste{position:relative;height:12px;border-radius:var(--radius-pill);background:var(--color-surface-3)}
.ds-rep-barre__plein{position:absolute;left:0;top:0;bottom:0;border-radius:var(--radius-pill);background:var(--color-info-solid)}
.ds-rep-barre__plein--devis{background:var(--color-accent)}
.ds-rep-barre__prix{text-align:right;font-weight:var(--weight-bold);font-variant-numeric:tabular-nums;white-space:nowrap}
.ds-rep-postes form{margin:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-rep-poste{display:grid;grid-template-columns:minmax(0,2fr) minmax(120px,160px) minmax(160px,1.2fr);gap:var(--space-3);align-items:end;padding:var(--space-3) 0;border-top:1px solid var(--color-divider)}
.ds-rep-poste:first-child{border-top:0}
.ds-rep-poste__nom{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere;font-size:var(--text-small);align-self:center}
.ds-rep-poste__nom .ds-meta{margin:0}
.ds-rep-poste__lu{font-size:var(--text-small);align-self:center}
.ds-rep-postes__pied{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}
.ds-rep-postes__pied .ds-meta{margin:0;flex:1 1 260px}
.ds-rep-pli>summary{cursor:pointer;font-weight:var(--weight-bold);min-height:var(--touch);display:flex;align-items:center}
.ds-rep-pli>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-rep-pli[open]>summary{margin-bottom:var(--space-2)}
.ds-rep-pli form{margin:var(--space-3) 0 0}
.ds-rep-ajout{display:grid;grid-template-columns:minmax(0,2fr) minmax(120px,160px) minmax(160px,1.2fr) auto;gap:var(--space-3);align-items:end}
.ds-sig--lecture{color:var(--color-text-2)}
@media (max-width:760px){
  .ds-rep-barre{grid-template-columns:1fr auto}
  .ds-rep-barre__piste{grid-column:1 / -1;order:3}
  .ds-rep-poste,.ds-rep-ajout{grid-template-columns:1fr}
  .ds-rep .ds-btn--petit{min-height:var(--touch)}
  .ds-rep-postes__pied .ds-btn,.ds-rep-ajout .ds-btn{width:100%}
}

/* LE TABLEAU POSTE PAR POSTE AU TÉLÉPHONE (5 octobre 2026) : un bloc par
   poste, une ligne par devis — plus aucun défilement de côté. */
@media (max-width:640px){
  .ds-lotbas-tableau--postes{overflow-x:visible;border:0;border-radius:0}
  .ds-lotbas-tableau--postes table{min-width:0;display:block}
  .ds-lotbas-tableau--postes thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .ds-lotbas-tableau--postes tbody{display:flex;flex-direction:column;gap:var(--space-2)}
  .ds-lotbas-tableau--postes tbody tr{display:block;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);background:var(--color-surface)}
  .ds-lotbas-tableau--postes tbody th{display:block;padding:var(--space-1) 0 var(--space-2);border:0;font-weight:var(--weight-bold);background:none;overflow-wrap:anywhere}
  .ds-lotbas-tableau--postes tbody td{display:flex;justify-content:space-between;gap:var(--space-3);padding:var(--space-2) 0;border:0;border-top:1px solid var(--color-divider);text-align:right;white-space:normal;background:none}
  .ds-lotbas-tableau--postes tbody td::before{content:attr(data-t);text-align:left;color:var(--color-text-2);font-weight:var(--weight-regular);font-style:normal;min-width:0;overflow-wrap:anywhere}
  .ds-lotbas-tableau--postes .ds-lotbas-total{background:var(--color-surface-2)}
}
.ds-rep-pli>summary,.ds-cmp-groupe>summary{list-style:none;justify-content:space-between;gap:var(--space-3)}
.ds-rep-pli>summary::-webkit-details-marker,.ds-cmp-groupe>summary::-webkit-details-marker{display:none}
.ds-rep-pli>summary::after,.ds-cmp-groupe>summary::after{content:"+";font-size:var(--text-h3);font-weight:var(--weight-regular);color:var(--color-muted)}
.ds-rep-pli[open]>summary::after,.ds-cmp-groupe[open]>summary::after{content:"−"}
.ds-avis--info{background:var(--color-info-bg);color:var(--color-info)}

/* L’AVANCEMENT DES TRAVAUX DANS LE DÉTAIL D’UN LOT (5 octobre 2026, 18 h) :
   replié en une ligne en bas tant que le marché n’est pas signé. */
.ds-lot-travaux>summary{list-style:none;cursor:pointer;min-height:var(--touch);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3)}
.ds-lot-travaux>summary::-webkit-details-marker{display:none}
.ds-lot-travaux>summary::after{content:"+";margin-left:auto;font-size:var(--text-h3);color:var(--color-muted)}
.ds-lot-travaux[open]>summary::after{content:"−"}
.ds-lot-travaux>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-lot-travaux__nom{font-weight:var(--weight-bold)}
.ds-lot-travaux__etat{font-size:var(--text-small);color:var(--color-text-2)}
.ds-lot-travaux[open]>summary{margin-bottom:var(--space-3)}
.ds-lot-travaux--haut{margin:0 0 var(--space-5)}
.ds-cmp-suggestion{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);align-items:center;margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-accent-soft);font-size:var(--text-small);width:100%}
.ds-cmp-suggestion>span{flex:1 1 220px;min-width:0;overflow-wrap:anywhere}

/* RETIRER UN LOT ET LE REMETTRE (lot « retirer et fusionner des lots », 5 octobre 2026) :
   la fenêtre qui dit avant ce qui va se passer, et « Lots retirés » en bas de l’onglet. */
.ds-lot-retrait{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-lot-retrait p{margin:0;overflow-wrap:anywhere}
.ds-lots-retires>summary{list-style:none;cursor:pointer;min-height:var(--touch);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}
.ds-lots-retires>summary::-webkit-details-marker{display:none}
.ds-lots-retires>summary::after{content:"+";font-size:var(--text-h3);color:var(--color-muted)}
.ds-lots-retires[open]>summary::after{content:"−"}
.ds-lots-retires>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-lots-retires .ds-liste li{flex-wrap:wrap;gap:var(--space-2) var(--space-3)}
.ds-lots-retires .ds-liste li>div{flex:1 1 220px;min-width:0;overflow-wrap:anywhere}
@media (max-width:640px){
  .ds-lot__gestes .ds-btn--petit,.ds-lots-retires .ds-btn--petit{min-height:var(--touch)}
}

/* LOT « LES FACTURES ET LES NOTIFICATIONS DU CLIENT, NEUVES » (src/clientneuf.js,
   5 octobre 2026 : « je ne peux pas rentrer sur les factures dans l’interface
   client […] je n’aime pas du tout le bandeau de notification »). Une facture
   est une carte qui s’ouvre ; une notification, une ligne qui mène quelque
   part. Ton sobre : c’est de l’argent. La couleur ne dit jamais seule. */
.ds-client{max-width:860px}
.ds-client-totaux{grid-template-columns:repeat(3,minmax(0,1fr))}
.ds-client-totaux .ds-chiffre b{font-size:20px;white-space:nowrap}
.ds-client-liste{list-style:none;margin:0 0 var(--space-4);padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-client-liste>li{scroll-margin-top:80px}
.ds-client-facture{padding:0}
.ds-client-facture>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:var(--touch);padding:var(--space-4) var(--pad-card);border-radius:var(--radius-lg)}
.ds-client-facture>summary::-webkit-details-marker{display:none}
.ds-client-facture>summary::after{content:"+";flex:none;font-size:var(--text-h3);color:var(--color-muted);width:20px;text-align:center}
.ds-client-facture[open]>summary::after{content:"−"}
.ds-client-facture>summary:hover{background:var(--color-surface-2)}
.ds-client-facture>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-client-facture--aregler{border-color:var(--color-warning)}
.ds-client-facture__qui{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.ds-client-facture__qui b{overflow-wrap:anywhere}
.ds-client-facture__qui span{font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-client-facture__combien{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-1);flex:none}
.ds-client-facture__combien b{font-size:var(--text-h3);white-space:nowrap;font-variant-numeric:tabular-nums}
.ds-client-facture__corps{padding:0 var(--pad-card) var(--pad-card);display:flex;flex-direction:column;gap:var(--space-4)}
.ds-client-facture__corps>p{margin:0}
.ds-client-frise{padding-top:var(--space-2)}
.ds-client-attendu{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2);font-size:var(--text-small)}
.ds-client-attendu b{display:block}
.ds-client-attendu span{color:var(--color-text-2)}
.ds-client-attendu--vous{background:var(--color-warning-bg)}
.ds-client-attendu--fait{background:var(--color-success-bg)}
.ds-client-fiche{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2) var(--space-5)}
.ds-client-fiche>div{min-width:0}
.ds-client-fiche dt{font-size:var(--text-meta);color:var(--color-muted)}
.ds-client-fiche dd{margin:0;font-size:var(--text-small);overflow-wrap:anywhere}
.ds-client-facture__gestes{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--space-3)}
.ds-client-facture__geste{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-2);margin-left:auto;max-width:420px}
.ds-client-facture__geste p{margin:0;text-align:right}
.ds-client-facture__sanspiece{margin:0}
.ds-client-regle{margin:0 0 var(--space-4)}
.ds-client-vide{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2)}
.ds-client-vide p{margin:0}
.ds-client-vide__ic{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--color-surface-2);color:var(--color-muted)}
.ds-client-depot,.ds-client-reglage{margin:0 0 var(--space-4)}
.ds-client-depot>summary,.ds-client-reglage>summary,.ds-client-suite>summary,.ds-client-recap>summary{list-style:none;cursor:pointer;min-height:var(--touch);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-client-depot>summary::-webkit-details-marker,.ds-client-reglage>summary::-webkit-details-marker,.ds-client-suite>summary::-webkit-details-marker,.ds-client-recap>summary::-webkit-details-marker{display:none}
.ds-client-depot>summary::after,.ds-client-reglage>summary::after,.ds-client-recap>summary::after{content:"+";flex:none;font-size:var(--text-h3);font-weight:var(--weight-regular);color:var(--color-muted)}
.ds-client-depot[open]>summary::after,.ds-client-reglage[open]>summary::after,.ds-client-recap[open]>summary::after{content:"−"}
.ds-client-depot form{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-3);padding-top:var(--space-3)}
.ds-client-depot form p{margin:0}
.ds-client-depot__fichier{width:100%;padding:var(--space-2) var(--space-3);height:auto}
.ds-client-depot__recu:empty{display:none}
.ds-client-depot__recu--mal{color:var(--color-danger)}
.ds-client-reglage p{margin:0 0 var(--space-3)}
.ds-client-notifs>.ds-carte{margin:0 0 var(--gap-cards)}
.ds-client-lignes{list-style:none;margin:0;padding:0}
.ds-client-lignes>li{border-top:1px solid var(--color-divider)}
.ds-client-lignes>li:first-child{border-top:0}
.ds-client-ligne{display:flex;align-items:center;gap:var(--space-3);min-height:var(--touch);padding:var(--space-2);margin:0 calc(-1 * var(--space-2));border-radius:var(--radius-sm);color:inherit;text-decoration:none}
a.ds-client-ligne:hover{background:var(--color-surface-2)}
a.ds-client-ligne:hover b{text-decoration:underline}
a.ds-client-ligne:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
/* (12 octobre 2026) Une notification non vue : sa ligne est un bouton — le clic l'enregistre comme vue, puis mène à son objet. Même dessin que le lien. */
.ds-client-ligne-form{margin:0}
button.ds-client-ligne{width:calc(100% + 2 * var(--space-2));border:0;background:none;font:inherit;text-align:left;cursor:pointer}
button.ds-client-ligne:hover{background:var(--color-surface-2)}
button.ds-client-ligne:hover b{text-decoration:underline}
button.ds-client-ligne:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-client-ligne--nouvelle .ds-badge{flex:none}
.ds-client-tout-lu{margin:0}
/* (12 octobre 2026, retouche) Au téléphone, « Nouveau » passe AU-DESSUS du titre de la ligne : posé à droite, il écrasait le texte en une colonne étroite. Le texte reprend toute la largeur ; l'ordinateur ne change pas. */
@media (max-width:560px){
  .ds-client-ligne--nouvelle{display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:var(--space-3);row-gap:var(--space-1);align-items:center}
  .ds-client-ligne--nouvelle .ds-badge{grid-column:2;grid-row:1;justify-self:start}
  .ds-client-ligne--nouvelle .ds-inv-puce{grid-column:1;grid-row:2}
  .ds-client-ligne--nouvelle .ds-client-ligne__texte{grid-column:2;grid-row:2;min-width:0}
  .ds-client-ligne--nouvelle .ds-client-ligne__va{grid-column:3;grid-row:2}
  .ds-client-passe .ds-carte__tete{flex-wrap:wrap}
}
.ds-client-ligne__texte{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-client-ligne__texte b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-client-ligne__texte span{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:anywhere}
.ds-client-ligne__va{flex:none;color:var(--color-muted);font-size:var(--text-h3)}
.ds-client-suite>summary{justify-content:center;color:var(--color-info);border-top:1px solid var(--color-divider)}
.ds-client-suite[open]>summary{display:none}
.ds-client-suite>.ds-client-lignes{border-top:1px solid var(--color-divider)}
.ds-client-recap{border-top:1px solid var(--color-divider)}
.ds-client-recap:first-of-type{border-top:0}
.ds-client-recap__texte{margin:0 0 var(--space-3);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--color-text-2);font-size:var(--text-small)}
.ds-client-rien{display:flex;align-items:flex-start;gap:var(--space-3);margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-success-bg)}
.ds-client-rien .ds-ic{color:var(--color-success);flex:none}
.ds-client-retour{margin:0}
@media (max-width:640px){
  .ds-client-totaux{grid-template-columns:minmax(0,1fr)}
  .ds-client-facture>summary{padding:var(--space-3) var(--space-4);flex-wrap:wrap}
  .ds-client-facture__combien{flex-direction:row;align-items:center;flex-basis:100%;justify-content:space-between;order:3}
  .ds-client-facture>summary::after{order:2}
  .ds-client-facture__corps{padding:0 var(--space-4) var(--space-4)}
  .ds-client-fiche{grid-template-columns:minmax(0,1fr)}
  .ds-client-facture__gestes{flex-direction:column;align-items:stretch}
  .ds-client-facture__gestes>.ds-btn{width:100%}
  .ds-client-facture__geste{align-items:stretch;margin-left:0;max-width:none}
  .ds-client-facture__geste p{text-align:left}
  .ds-client-facture__geste .ds-btn,.ds-client-depot form .ds-btn,.ds-client-reglage .ds-btn,.ds-client-retour .ds-btn,.ds-client-vide .ds-btn{width:100%}
}

/* LOT « UNE PREUVE DE PAIEMENT SE JOINT AU RÈGLEMENT » (src/preuve.js, 6 octobre
   2026) : la mention sur la facture réglée, et le geste replié, facultatif. */
.ds-preuve__mention{display:flex;align-items:center;gap:var(--space-2);margin:0;font-size:var(--text-small);color:var(--color-success)}
.ds-preuve__mention .ds-ic{flex:none;width:16px;height:16px}
.ds-preuve__mention a{color:inherit;font-weight:var(--weight-bold)}
.ds-preuve>summary{list-style:none;cursor:pointer;min-height:var(--touch);display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-info)}
.ds-preuve>summary::-webkit-details-marker{display:none}
.ds-preuve>summary::before{content:"+";font-weight:var(--weight-regular)}
.ds-preuve[open]>summary::before{content:"−"}
.ds-preuve>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-preuve form{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);padding:var(--space-2) 0 var(--space-3);max-width:520px}
.ds-preuve form p{margin:0}
.ds-preuve__fichier{width:100%;height:auto;padding:var(--space-2) var(--space-3)}
.ds-client-facture__preuve{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-liste li .ds-factures__preuve{flex:1 1 100%;display:flex;flex-direction:column;gap:var(--space-1)}
.ds-liste li .ds-factures__preuve span{font-size:inherit;color:inherit}
@media (max-width:640px){
  .ds-preuve form .ds-btn{width:100%;min-height:var(--touch)}
  .ds-preuve__mention a{display:inline-flex;align-items:center;min-height:var(--touch)}
}

/* L’ADRESSE DU PROJET OUVRE LE PLAN (lot « l’adresse du projet ouvre le plan », 6 octobre 2026) :
   le lien garde la couleur du texte qui l’entoure, souligné, avec le repère devant. */
.ds-lien-plan{color:inherit;text-decoration:underline;text-decoration-color:var(--color-muted);text-underline-offset:3px;overflow-wrap:anywhere}
.ds-lien-plan:hover{color:var(--color-text);text-decoration-color:currentColor}
.ds-lien-plan:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px;border-radius:2px}
.ds-lien-plan .ds-ic{width:1.05em;height:1.05em;vertical-align:-0.16em;margin-right:4px}
@media (max-width:640px){
  .ds-lien-plan{display:inline-block;padding:10px 0}
}
/* ===== LOT « LA VIGNETTE DU CHANTIER EST CLIQUABLE » (5 octobre 2026) =====
   Accueil de l'entreprise invitée : le lien du nom du chantier couvre toute
   la carte (photo comprise) ; les liens et gestes du dedans passent devant. */
.ds-inv-chantier{position:relative;cursor:pointer;transition:box-shadow .15s ease,transform .15s ease}
.ds-inv-chantier:hover{box-shadow:var(--shadow-raised)}
.ds-inv-chantier__lien::after{content:"";position:absolute;inset:0;z-index:1}
.ds-inv-chantier__lien:focus-visible::after{outline:2px solid var(--color-focus);outline-offset:-2px;border-radius:inherit}
.ds-inv-chantier__corps a:not(.ds-inv-chantier__lien),.ds-inv-chantier__corps button,.ds-inv-chantier__corps summary,.ds-inv-chantier__corps details,.ds-inv-chantier__corps label,.ds-inv-chantier__corps input,.ds-inv-chantier__corps select,.ds-inv-chantier__corps textarea{position:relative;z-index:2}
@media (prefers-reduced-motion:reduce){.ds-inv-chantier{transition:none}}

/* ===== LOT « LA COUVERTURE SE VOIT CHEZ LES INVITÉS » (5 octobre 2026) =====
   En-tête du projet, côté cabinet : sous la photo, la ligne qui dit que la
   couverture est visible des invités du projet. Le bouton « Changer la
   photo » reste posé sur la photo (son cadre à elle). */
.ds-projet-entete__photo{position:relative}
.ds-couverture-mention{margin:var(--space-1) 0 0;font-size:var(--text-small);line-height:1.35}
@media (max-width:760px){.ds-couverture-mention{margin:var(--space-2) var(--space-4) 0}}

/* Une preuve de paiement n’a pas de case à cocher dans Documents : sa ligne garde l’alignement des autres. */
.ds-doc__coche--sans{cursor:default}


/* LES FACTURES QUI SEMBLENT EN DOUBLE (lot « factures en double », 5 octobre
   2026 — src/consultationneuf.js, src/confirmationneuf.js, src/controlerneuf.js).
   L'alerte du dépôt en tête du budget, la liste des paires, la pastille sur la
   ligne, et l'encart d'avant paiement. Sobre : il s'agit d'argent. */
.ds-doubles{border-left:4px solid var(--color-warning)}
.ds-doubles .ds-carte__tete h2{display:flex;align-items:center;gap:var(--space-2)}
.ds-doubles .ds-carte__tete h2 svg{flex:none;width:18px;height:18px;color:var(--color-warning)}
.ds-doubles__liste li{flex-wrap:wrap;align-items:flex-start}
.ds-doubles__liste li > div:first-child{flex:1 1 100%}
.ds-doubles__gestes{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);align-items:flex-start}
.ds-doubles__gestes .ds-factures__retirer{flex:1 1 280px}
.ds-doubles__gestes .ds-factures__retirer summary{min-height:32px;display:flex;align-items:center}
.ds-liste li .ds-doubles__ferme{flex:1 1 100%;margin:0;font-size:var(--text-small)}
@media (max-width:767px){
  .ds-doubles__gestes .ds-factures__geste,.ds-doubles__gestes .ds-factures__geste .ds-btn{width:100%}
  .ds-doubles__gestes .ds-factures__retirer summary{min-height:var(--touch,44px)}
  .ds-doubles__gestes .ds-factures__retirer form{flex-direction:column;align-items:stretch}
}
.ds-conf__outre--attention{background:var(--color-warning-bg)}
.ds-mission__avis--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-doubles__ligne{text-decoration:none}
.ds-doubles__ligne:hover b{text-decoration:underline}
.ds-doubles__ex{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3);padding:2px 0}
.ds-liste li .ds-doubles__ex a{font-size:var(--text-small);font-weight:var(--weight-bold);color:inherit;overflow-wrap:anywhere}
.ds-liste li .ds-doubles__pourquoi{display:block;margin-top:var(--space-1);font-size:var(--text-small);color:var(--color-text)}
.ds-liste li .ds-doubles__pourquoi b{display:inline}
.ds-doubles__suite summary{cursor:pointer;min-height:var(--touch,44px);display:flex;align-items:center}
.ds-factures__double{flex:1 1 100%;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin:0;font-size:var(--text-small)}
.ds-liste li .ds-factures__double span{font-size:inherit}
@media (max-width:767px){.ds-doubles__ex a,.ds-factures__double a{display:inline-flex;align-items:center;min-height:var(--touch,44px)}}
/* Un libellé long (« Confirmer quand même : cette facture est réglée ») passe à la ligne au téléphone au lieu de pousser la page de côté. */
@media (max-width:640px){.ds-conf__gestes .ds-btn{white-space:normal;height:auto;min-height:var(--touch,44px);text-align:center;padding-top:var(--space-2);padding-bottom:var(--space-2)}}
.ds-domino__alerte.ds-doubles__ligne{background:var(--color-warning-bg);color:var(--color-warning)}
/* « Ce n’est pas un doublon » dans Documents (même lot, 5 octobre 2026). */
.ds-docs-doublons-aide{margin:var(--space-2) 0 var(--space-3)}
.ds-vis-doublons li{align-items:flex-start}
.ds-liste.ds-vis-doublons li span{font-size:var(--text-small)}
.ds-vis-doublons form{margin:0;flex:none}
@media (max-width:767px){[data-carte-doublon] a{display:inline-flex;align-items:center;min-height:var(--touch,44px)}}
.ds-doubles__dites summary{cursor:pointer;min-height:var(--touch,44px);display:flex;align-items:center}
.ds-doubles__dites .ds-factures__geste{flex:none}


/* LE DOUBLON EN FACE (lot « un doublon se montre en face », 6 octobre 2026 —
   src/doublonfaceneuf.js) : deux pièces côte à côte, l'une sous l'autre au
   téléphone ; ce qui est identique et ce qui diffère en une ligne. */
.ds-face{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4);margin:var(--space-4) 0}
.ds-face__piece{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-face__cote{margin:0;text-transform:uppercase;letter-spacing:.04em}
.ds-face__apercu{display:block}
.ds-face__apercu .ds-apercu{width:100%}
.ds-face__piece h2{margin:0;overflow-wrap:anywhere}
.ds-face__piece h2 a{color:inherit}
.ds-face__faits{margin:0;display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}
.ds-face__faits>div{display:grid;grid-template-columns:minmax(96px,130px) 1fr;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-top:1px solid var(--color-divider)}
.ds-face__faits>div:first-child{border-top:0}
.ds-face__faits dt{color:var(--color-muted);font-size:var(--text-small)}
.ds-face__faits dd{margin:0;font-size:var(--text-small);font-weight:var(--weight-bold);overflow-wrap:anywhere;min-width:0}
.ds-face__geste{margin:auto 0 0}
.ds-face__geste .ds-btn{width:100%;white-space:normal;height:auto;min-height:var(--touch,44px)}
.ds-face__k{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-face__ligne{margin:0;display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-body)}
.ds-face__traiter{display:flex;flex-direction:column;gap:var(--space-3);align-items:flex-start}
.ds-face__traiter form,.ds-face__traiter p{margin:0}
@media (max-width:767px){
  .ds-face{grid-template-columns:1fr}
  .ds-face__traiter form,.ds-face__traiter .ds-btn{width:100%}
  .ds-face__piece h2 a,[data-face-autres] a{display:inline-flex;align-items:center;min-height:var(--touch,44px)}
}
/* Trois gestes sur une ligne de pièce (Comparer, Ce n'est pas un doublon, Ouvrir) : au téléphone ils passent à la ligne au lieu de pousser la page. */
@media (max-width:760px){.ds-doc .ds-doc__gestes{flex:1 1 100%;flex-wrap:wrap;margin-left:0;min-width:0}}
.ds-face__retirer summary{cursor:pointer;min-height:var(--touch,44px);display:flex;align-items:center;font-weight:var(--weight-bold)}
.ds-face__avert{display:flex;gap:var(--space-2);align-items:flex-start;margin:var(--space-2) 0 var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-danger-bg);color:var(--color-danger);font-size:var(--text-small)}
.ds-face__avert .ds-ic{flex:none;width:18px;height:18px;margin-top:1px}
.ds-face__choix li{align-items:flex-start}
.ds-face__choix form{margin:0;flex:1 1 100%}
.ds-liste.ds-face__choix li span{font-size:var(--text-small)}

/* ==========================================================================
   LOT « DOSSIER-NEUF » — « Importer un dossier » redessiné (5 octobre 2026).
   src/importneuf.js, public/ds/import.js. Une zone où glisser, deux gestes
   pour choisir, ce que l’outil a reconnu en pastilles, une vraie jauge.
   ========================================================================== */
.ds-import{display:flex;flex-direction:column;gap:var(--space-4);margin:0;min-width:0}
.ds-import__avant{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}
.ds-import__avant[hidden],.ds-import__suivi[hidden],.ds-import__bilan[hidden],.ds-import__zone[hidden],.ds-import__pied[hidden]{display:none}
.ds-import__zone{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);text-align:center;padding:var(--space-6) var(--space-4);border:2px dashed var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface-2);transition:border-color var(--motion-fast) var(--ease),background var(--motion-fast) var(--ease)}
.ds-import__zone.on{border-color:var(--color-info-solid);background:var(--color-info-bg)}
.ds-import__ic{display:flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;background:var(--color-accent-soft);color:var(--color-accent-strong);flex:none}
.ds-import__ic .ds-ic{width:26px;height:26px}
.ds-import__appel{margin:0;display:flex;flex-direction:column;gap:2px;font-size:var(--text-body)}
.ds-import__choix{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-2)}
.ds-import__fichiers{cursor:pointer}
.ds-import__mot-etroit{display:none}
.ds-import--choisi .ds-import__zone{flex-direction:row;flex-wrap:wrap;justify-content:flex-start;text-align:left;padding:var(--space-3) var(--space-4)}
.ds-import--choisi .ds-import__zone .ds-import__ic,.ds-import--choisi .ds-import__appel{display:none}
.ds-import__champs{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-import--vivant .ds-import__champs{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ds-import__bilan{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-success-bg)}
.ds-import__bilan-tete{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}
.ds-import__phrase{margin:0;font-weight:var(--weight-bold);font-size:var(--text-body);color:var(--color-text);overflow-wrap:anywhere;min-width:0}
.ds-import__reconnu{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-import__reconnu:empty{display:none}
.ds-import__reconnu .ds-badge{background:var(--color-surface);font-size:var(--text-small);padding:4px 12px}
.ds-import__reconnu .ds-badge--attention{background:var(--color-warning-bg)}
.ds-import__bilan .ds-meta{margin:0;color:var(--color-text-2);overflow-wrap:anywhere}
.ds-import__refus{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-import__identite{margin:0}
.ds-import__nom-propose{margin:calc(-1 * var(--space-2)) 0 0}
.ds-import__reglages{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-import__reglage{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;min-height:var(--touch)}
.ds-import__reglage input{width:20px;height:20px;margin:2px 0 0;flex:none;accent-color:var(--color-primary)}
.ds-import__reglage>span{display:flex;flex-direction:column;gap:2px;font-size:var(--text-small);min-width:0}
.ds-import__plus summary,.ds-import__tailles summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text-2)}
.ds-import__plus[open] summary{margin-bottom:var(--space-1)}
.ds-import__tailles p{margin:0}
.ds-import__suivi{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-5) var(--space-4);border-radius:var(--radius-md);background:var(--color-info-bg)}
.ds-import__suivi[data-etat=attention]{background:var(--color-warning-bg)}
.ds-import__suivi[data-etat=danger]{background:var(--color-danger-bg)}
.ds-import__suivi[data-etat=succes]{background:var(--color-success-bg)}
.ds-import__suivi .ds-progression__piste{height:10px;background:var(--color-surface)}
.ds-import__suivi .ds-progression__valeur{min-width:46px;font-size:var(--text-small)}
.ds-import__jauge{margin:0;font-weight:var(--weight-bold);font-size:var(--text-body);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);overflow-wrap:anywhere}
.ds-import__suivi .ds-meta{margin:0;color:var(--color-text-2)}
.ds-import__message{margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small)}
.ds-import__message[hidden]{display:none}
.ds-import__reprise{margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-accent-soft);color:var(--color-text);font-size:var(--text-small);flex:1 1 100%}
.ds-import__pied{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-import__pied .ds-btn{flex:1 1 100%;min-height:52px;font-size:var(--text-body)}
.ds-import--ferme{flex-direction:row;align-items:flex-start;padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg)}
.ds-import--ferme .ds-import__ic{width:36px;height:36px;background:var(--color-surface);color:var(--color-warning)}
.ds-import--ferme .ds-import__ic .ds-ic{width:20px;height:20px}
.ds-import-pastille{position:fixed;right:var(--space-4);bottom:var(--space-4);z-index:40;display:inline-flex;align-items:center;gap:var(--space-2);min-height:var(--touch);padding:0 var(--space-4);border:0;border-radius:var(--radius-pill);background:var(--color-primary);color:var(--color-on-dark);font:inherit;font-size:var(--text-small);font-weight:var(--weight-bold);box-shadow:var(--shadow-raised);cursor:pointer}
.ds-import-pastille[hidden]{display:none}
@media (max-width:760px){
  .ds-import__zone{padding:var(--space-5) var(--space-3)}
  .ds-import__zone [data-import-choisir=dossier]{display:none}
  .ds-import__mot-large{display:none}
  .ds-import__mot-etroit{display:inline}
  .ds-import__appel{display:none}
  .ds-import__choix,.ds-import__choix .ds-btn{width:100%}
  .ds-import-pastille{left:var(--space-4);right:var(--space-4);bottom:calc(72px + env(safe-area-inset-bottom,0px));justify-content:center}
}
.ds-import__suivi .ds-progression[hidden]{display:none}
/* Dans une fenêtre, le geste dominant reste sous le pouce : le pied colle au bas pendant que le corps défile. */
.ds-modale .ds-import__pied{position:sticky;bottom:0;z-index:1;margin:0 0 calc(-1 * var(--space-5));padding:var(--space-3) 0 var(--space-5);background:var(--color-surface)}
/* La carte de lecture (« Lire mes pièces », 5 octobre 2026) — src/lectureneuf.js, public/ds/lecture.js. */
.ds-lecture{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--gap-cards);border-left:4px solid var(--color-accent)}
.ds-lecture[data-lecture=a-lire]{background:var(--color-accent-soft)}
.ds-lecture[data-lecture=en-cours]{border-left-color:var(--color-info-solid)}
.ds-lecture[data-lecture=terminee]{border-left-color:var(--color-success-solid);background:var(--color-success-bg)}
.ds-lecture[data-lecture=echecs]{border-left-color:var(--color-warning-solid)}
.ds-lecture__tete{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-lecture__tete .ds-h3{margin:0;flex:1 1 200px;min-width:0}
.ds-lecture__ic{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--color-surface);color:var(--color-accent-strong);flex:none}
.ds-lecture__phrase{margin:0;font-size:var(--text-body);font-weight:var(--weight-medium);color:var(--color-text)}
.ds-lecture .ds-meta,.ds-lecture .ds-texte{margin:0;color:var(--color-text-2)}
.ds-lecture__geste{margin:0;display:flex}
.ds-lecture[data-lecture=a-lire] .ds-lecture__geste .ds-btn{min-height:52px;padding:0 var(--space-5);font-size:var(--text-body)}
.ds-lecture .ds-progression__piste{height:10px}
.ds-lecture .ds-progression__valeur{min-width:46px}
.ds-lecture__non-lues summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text-2)}
.ds-lecture__non-lues li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}
.ds-lecture__non-lues li>span{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.ds-lecture__fin[hidden]{display:none}
@media (max-width:760px){.ds-lecture__geste .ds-btn,.ds-lecture__fin .ds-btn{width:100%}}
.ds-import__lecture{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-import__lecture .ds-import__reglage{border:1px solid var(--color-accent);background:var(--color-accent-soft)}
.ds-import__sans-lire{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-warning)}

/* LOT « DOSSIER-NEUF » — « Ranger le dossier » redessiné (5 octobre 2026) : src/rangerneuf.js, public/ds/ranger.js.
   Une phrase et un anneau, un geste, des cartes par lot proposé ; ni tableau, ni bloc qui défile en lui-même. */
.ds-ranger{display:flex;flex-direction:column;gap:var(--gap-cards);min-width:0}
.ds-ranger .ds-avis{margin:0}
.ds-ranger .ds-lecture{margin-bottom:0}
.ds-ranger__tete{display:flex;align-items:center;gap:var(--space-4)}
.ds-ranger__tete .ds-anneau{flex:none}
.ds-ranger__tete .ds-h2{margin:0 0 var(--space-1);font-size:var(--text-h3)}
.ds-ranger__phrase{margin:0;font-size:var(--text-body);font-weight:var(--weight-medium);color:var(--color-text)}
.ds-ranger__tete .ds-meta{margin:var(--space-2) 0 0}
.ds-ranger__geste{display:flex;flex-direction:column;gap:var(--space-3);border-left:4px solid var(--color-accent);background:var(--color-accent-soft)}
.ds-ranger__engagement{margin:0;font-size:var(--text-body);color:var(--color-text)}
.ds-ranger__lancer{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-ranger__lancer .ds-btn{min-height:52px;padding:0 var(--space-5);font-size:var(--text-body)}
.ds-ranger__section{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-ranger__titre-section{margin:var(--space-2) 0 0}
.ds-ranger__groupe{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-ranger__groupe-tete{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-ranger__groupe-tete .ds-h3{margin:0}
.ds-ranger__resume{margin:0;font-size:var(--text-small);color:var(--color-text-2)}
.ds-ranger__groupe>.ds-meta{margin:0}
.ds-ranger__creer{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-accent-soft);font-size:var(--text-small);min-height:var(--touch)}
.ds-ranger__creer input[type=checkbox],.ds-ranger__choix input[type=checkbox]{width:20px;height:20px;flex:none;accent-color:var(--color-primary)}
.ds-ranger__creer .ds-input{flex:1 1 180px;min-width:0}
.ds-ranger__pieces{display:flex;flex-direction:column}
.ds-ranger__piece{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-top:1px solid var(--color-divider);min-width:0}
.ds-ranger__piece:first-child{border-top:0}
.ds-ranger__choix{display:flex;align-items:center;gap:var(--space-3);flex:1 1 auto;min-width:0;min-height:var(--touch);cursor:pointer}
span.ds-ranger__choix{cursor:default}
.ds-ranger__titre{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere;font-size:var(--text-small)}
.ds-ranger__etat{flex:none}
.ds-ranger__gestes{display:flex;gap:var(--space-2);flex:none;align-items:center}
.ds-ranger__gestes .ds-btn{min-height:var(--touch)}
.ds-ranger__ecarter{margin:0;display:flex;justify-content:flex-end}
.ds-ranger__ecarter .ds-btn{min-height:var(--touch);color:var(--color-muted)}
.ds-ranger__lot-de-plus summary,.ds-ranger__deja summary,.ds-ranger__deja-fin summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;font-size:var(--text-small);color:var(--color-text-2)}
.ds-ranger__lot-de-plus .ds-formulaire{margin-top:var(--space-2)}
.ds-ranger__fin{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-3);border-left:4px solid var(--color-success-solid);background:var(--color-success-bg)}
.ds-ranger__fin-ic{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--color-surface);color:var(--color-success)}
.ds-ranger__fin .ds-texte{margin:0;color:var(--color-text)}
.ds-ranger__deja-fin{width:100%}
.ds-ranger__pouce{display:none}
.ds-ranger__apercu{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);margin:0 0 var(--space-4)}
.ds-ranger__apercu[hidden]{display:none}
.ds-ranger__apercu img{display:block;width:100%;height:auto;border-radius:var(--radius-md);border:1px solid var(--color-border)}
.ds-ranger__apercu iframe{display:block;width:100%;height:300px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}
@media (max-width:760px){
  .ds-ranger__tete{align-items:flex-start}
  .ds-ranger__piece{flex-wrap:wrap}
  .ds-ranger__choix{flex:1 1 100%}
  .ds-ranger__etat{margin-left:calc(20px + var(--space-3))}
  .ds-ranger__gestes{margin-left:auto}
  .ds-ranger__geste:not(.ds-ranger__geste--second) .ds-ranger__lancer{display:none}
  .ds-ranger__geste--second .ds-ranger__lancer .ds-btn{width:100%}
  .ds-ranger__pouce{display:block;position:sticky;bottom:calc(72px + env(safe-area-inset-bottom,0px));z-index:5;padding:var(--space-2) 0}
  .ds-ranger__pouce .ds-btn{width:100%;min-height:52px;font-size:var(--text-body);box-shadow:var(--shadow-raised)}
  .ds-ranger__fin .ds-ranger__lancer,.ds-ranger__fin .ds-ranger__lancer .ds-btn{width:100%}
}
.ds-ranger__groupes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ranger__geste--second{border-left-color:var(--color-border);background:var(--color-surface)}
.ds-lecture__non-lues .ds-btn{min-height:var(--touch)}
#rg-corriger .ds-btn[hidden]{display:none}

/* --- Lot « la feuille de présence ne propose que les intervenants du projet » (L-59, 6 octobre 2026) --- */
.ds-cr-famille{margin:var(--space-3) 0 0;font-weight:var(--weight-medium);text-transform:uppercase;letter-spacing:.06em}
.ds-cr-seuls{margin-top:var(--space-3)}

/* ---------------------------------------------------------------------------
   Lot « ce n’est pas un compte rendu qui est levé, c’est un point » (6 octobre
   2026, étape 0 du plan des comptes rendus) : la phrase de tête, les deux blocs
   « Les points » et « Les comptes rendus », chacun ses chiffres, et la fenêtre
   « Lever le point n° … ».
   --------------------------------------------------------------------------- */
.ds-cr-tete{align-items:center}
.ds-cr-tete__phrase{margin:0 0 var(--space-1);font-size:var(--text-h3);font-weight:var(--weight-bold);line-height:var(--leading-tight);overflow-wrap:anywhere}
.ds-cr-tete__phrase > span{display:inline-block}
.ds-cr-tete .ds-meta{margin:0}
.ds-cr-tete > .ds-btn{flex:none}
.ds-cr-bloc__chapeau{margin:0 0 var(--space-3)}
.ds-cr-chiffres{grid-template-columns:repeat(3,minmax(0,1fr));margin:0 0 var(--space-4)}
.ds-cr-bilan{display:flex;flex-direction:column;gap:var(--space-2);margin:0 0 var(--space-3)}
.ds-cr-dernier{display:flex;flex-direction:column;gap:2px;margin:0;padding:var(--space-3) var(--space-4);border:1px solid var(--color-divider);border-radius:var(--radius-lg)}
.ds-cr-dernier b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-cr-dernier > span:last-child{font-size:var(--text-small);color:var(--color-text-2)}
.ds-cr-lever__point{margin:0 0 var(--space-3);padding:var(--space-3) var(--space-4);border-left:4px solid var(--color-success-solid);background:var(--color-success-bg);border-radius:var(--radius-md);font-weight:var(--weight-medium);overflow-wrap:anywhere}
.ds-cr-lever__effets{margin:var(--space-2) 0 var(--space-3);padding-left:var(--space-5);display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--text-small)}
.ds-cr-lever__form{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap;margin:0;width:100%}
@media (max-width: 900px){
  .ds-cr-tete{align-items:stretch}
  .ds-cr-tete > .ds-btn{width:100%;min-height:52px}
  .ds-cr-chiffres{grid-template-columns:minmax(0,1fr)}
  .ds-cr-bloc .ds-crpoint > div{flex:1 1 calc(100% - 48px)}
  .ds-cr-bloc .ds-crpoint > .ds-badge{margin-left:44px}
  .ds-cr-bloc .ds-crpoint__geste{margin-left:auto}
  .ds-crpoint__geste .ds-btn,.ds-cr-lever__form .ds-btn{min-height:var(--touch)}
  .ds-cr-lever__form .ds-btn{flex:1 1 auto}
}
/* ===== LOT « UN FOURNISSEUR NE DOIT PAS DE PIÈCES » (6 octobre 2026) =====
   Fiche d'une entreprise : la ligne qui porte le geste « C'est un
   fournisseur » (ou son retour), la raison quand il est fermé, et le
   formulaire de la fenêtre de confirmation. À l'invitation : la ligne qui
   dit la différence entre une entreprise de travaux et un fournisseur. */
.ds-nature{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:var(--space-3) 0 0;padding-top:var(--space-3);border-top:1px solid var(--color-border);font-size:var(--text-small);color:var(--color-muted)}
.ds-nature .ds-btn{min-height:44px}
.ds-nature--ferme{align-items:flex-start;flex-wrap:nowrap;gap:var(--space-2)}
.ds-nature--ferme .ds-ic{flex:none;width:1.1em;height:1.1em;margin-top:2px}
.ds-nature__form{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap;margin:0;width:100%}
.ds-inviter__difference{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2);font-size:var(--text-small);line-height:1.45}
.ds-inviter__difference a{white-space:nowrap}
.ds-gerer__confirmer{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg)}
@media (max-width:640px){
  .ds-nature{flex-direction:column;align-items:stretch}
  .ds-nature--ferme{flex-direction:row}
  .ds-nature .ds-btn,.ds-nature__form .ds-btn{width:100%}
  .ds-nature__form{flex-direction:column-reverse}
}
/* --- Lot « Les entreprises d’un projet » (L-57, 6 octobre 2026) -----------
   L’onglet « Entreprises » d’un projet : une carte par entreprise, ses lots
   et leur état, le dossier en un mot, UN geste dominant en bas de carte. */
.ds-entp-tete{align-items:center}
.ds-entp-tete .ds-h2{margin:0}
.ds-entp-note{margin:0 0 var(--space-4)}
.ds-entp-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--gap-cards);align-items:start}
.ds-entp{display:flex;flex-direction:column;gap:var(--space-3);border-left:4px solid var(--color-border);min-width:0}
.ds-entp[data-etat="retenue"]{border-left-color:var(--color-success-solid)}
.ds-entp[data-etat="consultee"]{border-left-color:var(--color-info)}
.ds-entp[data-etat="ecartee"]{opacity:.86}
.ds-entp__tete{display:flex;align-items:center;gap:var(--space-3);min-width:0}
.ds-entp__qui{min-width:0}
.ds-entp__qui .ds-h3{margin:0;overflow-wrap:anywhere}
.ds-entp__badges{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);margin:var(--space-1) 0 0}
.ds-entp__lots{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;border-top:1px solid var(--color-divider)}
.ds-entp__lot{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-1) var(--space-3);
  min-height:var(--touch);padding:var(--space-2) 0;border-bottom:1px solid var(--color-divider)}
.ds-entp__lot-nom{flex:1 1 150px;min-width:0;overflow-wrap:anywhere;font-weight:var(--weight-medium);color:var(--color-text);text-decoration:none;
  min-height:var(--touch);display:flex;align-items:center}
.ds-entp__lot-nom:hover{text-decoration:underline}
.ds-entp__lot-fin{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-1) var(--space-2)}
.ds-entp__montant{font-variant-numeric:tabular-nums;white-space:nowrap}
.ds-entp__lot-fin small{color:var(--color-muted);font-size:var(--text-meta)}
.ds-entp__depuis{flex-basis:100%;text-align:right}
.ds-entp__sans{margin:0}
.ds-entp__etats{display:flex;align-items:flex-start;flex-wrap:wrap;gap:var(--space-2)}
.ds-entp__dossier{min-width:0}
.ds-entp__dossier summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;min-height:var(--touch);margin:calc((var(--touch) - 26px) / -2) 0}
.ds-entp__dossier summary::-webkit-details-marker{display:none}
.ds-entp__dossier summary .ds-badge::after{content:"›";margin-left:4px;font-weight:var(--weight-bold)}
.ds-entp__dossier[open]{flex-basis:100%}
.ds-entp__dossier[open] summary .ds-badge::after{content:"⌄"}
.ds-entp__pieces{list-style:none;margin:var(--space-2) 0;padding:0;display:flex;flex-direction:column;gap:var(--space-1)}
.ds-entp__pieces li{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);font-size:var(--text-small)}
.ds-entp__dossier .ds-meta{margin:0}
.ds-entp__voir{display:inline-flex;align-items:center;min-height:var(--touch);font-size:var(--text-small);font-weight:var(--weight-medium)}
.ds-entp__contacts{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);margin:0}
.ds-entp__contact{display:inline-flex;align-items:center;gap:var(--space-2);min-height:var(--touch);min-width:0;color:var(--color-text-2);
  text-decoration:none;font-size:var(--text-small)}
.ds-entp__contact span{overflow-wrap:anywhere;min-width:0}
.ds-entp__contact:hover span{text-decoration:underline}
.ds-entp__contact svg{flex:none;width:18px;height:18px}
.ds-entp__gestes{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-2);margin-top:auto}
.ds-entp__gestes .ds-btn{min-height:var(--touch)}
.ds-entp__seconds{display:flex;flex-wrap:wrap;gap:var(--space-1);margin-left:auto}
.ds-entp-vide{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2)}
.ds-entp-vide .ds-h3,.ds-entp-vide .ds-texte{margin:0}
.ds-entp-vide__geste{margin:var(--space-2) 0 0}
@media (max-width:640px){
  .ds-entp-tete{flex-direction:column;align-items:stretch;gap:var(--space-3)}
  .ds-entp-tete .ds-btn{min-height:var(--touch)}
  .ds-entp-grille{grid-template-columns:minmax(0,1fr)}
  .ds-entp__gestes{flex-direction:column;align-items:stretch}
  .ds-entp__gestes > .ds-btn{width:100%;min-height:48px}
  .ds-entp__seconds{margin-left:0;justify-content:space-between}
  .ds-entp-vide__geste,.ds-entp-vide__geste .ds-btn{width:100%}
}

/* --- Lot « une pièce manquante se dépose depuis le rappel » (6 octobre 2026) :
   les gestes discrets d’un rappel de pièce et ses fenêtres (src/rappelpieceneuf.js). --- */
.ds-rappel__discrets{display:flex;align-items:center;flex-wrap:wrap;gap:0 var(--space-2);margin-top:4px;font-size:var(--text-small);color:var(--color-muted)}
.ds-rappel__lien{border:0;background:none;padding:0;font:inherit;color:var(--color-muted);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.ds-rappel__lien:hover,.ds-rappel__lien:focus-visible{color:var(--color-text)}
.ds-rappel{display:flex;flex-direction:column;gap:var(--space-3);margin:0}
.ds-rappel__pose{margin:0;display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-3)}
.ds-rappel__pose>div{display:flex;gap:var(--space-3);align-items:baseline}
.ds-rappel__pose dt{flex:0 0 64px;font-size:var(--text-small);color:var(--color-muted)}
.ds-rappel__pose dd{margin:0;font-weight:700;display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}
.ds-rappel__pourquoi summary{cursor:pointer;font-size:var(--text-small);color:var(--color-muted)}
.ds-rappel__pourquoi .ds-texte{margin:var(--space-2) 0 0}
.ds-rappel__pied{display:flex;justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap}
@media (max-width:760px){
  .ds-rappel__lien{min-height:var(--touch)}
  .ds-liste li.ds-rappel__ligne{flex-wrap:wrap}
  .ds-liste li.ds-rappel__ligne>div{flex:1 1 0;min-width:0}
  .ds-liste li.ds-rappel__ligne>.ds-btn{flex:1 1 100%;min-height:var(--touch)}
  .ds-rappel__pied{flex-direction:column-reverse}
  .ds-rappel__pied .ds-btn{width:100%;min-height:var(--touch)}
}
/* ==========================================================================
   LOT « LIRE ET RANGER D’UN SEUL GESTE » (6 octobre 2026) — la carte du geste
   unique (src/lectureneuf.js) et les questions une par une (src/doutesneuf.js).
   ========================================================================== */
.ds-lecture[data-lecture=a-ranger]{background:var(--color-accent-soft)}
.ds-lecture[data-lecture=a-ranger] .ds-lecture__geste .ds-btn--primaire,.ds-lecture[data-lecture=questions] .ds-lecture__geste .ds-btn,.ds-lecture[data-lecture=rangement] .ds-lecture__geste .ds-btn,.ds-lecture[data-lecture=bilan] .ds-btn--primaire{min-height:52px;padding:0 var(--space-5);font-size:var(--text-body)}
.ds-lecture[data-lecture=rangement]{border-left-color:var(--color-info-solid)}
.ds-lecture[data-lecture=bilan]{border-left-color:var(--color-success-solid);background:var(--color-success-bg)}
.ds-lecture[data-lecture=bilan] .ds-lecture__ic{color:var(--color-success)}
.ds-lecture[data-lecture=questions]{background:var(--color-accent-soft)}
.ds-lecture__geste[hidden],.ds-lecture .ds-btn[hidden],.ds-passage__fin[hidden]{display:none}
.ds-passage__fera{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-passage__fera li{position:relative;padding-left:26px;font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-passage__fera li::before{content:"";position:absolute;left:4px;top:.45em;width:10px;height:6px;border-left:2px solid var(--color-accent-strong);border-bottom:2px solid var(--color-accent-strong);transform:rotate(-45deg)}
.ds-passage__fera b{color:var(--color-text)}
.ds-passage__gestes{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-passage__fin{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-lecture a[data-passage-detail]{color:var(--color-text-2);min-height:var(--touch);display:inline-flex;align-items:center}
.ds-doutes{display:flex;flex-direction:column;gap:var(--gap-cards);max-width:760px}
.ds-doute{display:flex;flex-direction:column;gap:var(--space-4);border-left:4px solid var(--color-accent)}
.ds-doute__compteur{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-doute__rang{font-size:var(--text-small);font-weight:600;color:var(--color-accent-strong);background:var(--color-accent-soft);border-radius:var(--radius-pill);padding:4px 12px}
.ds-doute__points{display:flex;gap:6px;margin-left:auto}
.ds-doute__points i{width:10px;height:10px;border-radius:50%;background:var(--color-surface-3)}
.ds-doute__points i.fait{background:var(--color-success-solid)}
.ds-doute__points i.ici{background:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}
.ds-doute__piece{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-doute__piece .ds-apercu{flex:none}
.ds-doute__fiche{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;overflow-wrap:anywhere}
.ds-doute__fiche .ds-btn{margin-top:var(--space-2);min-height:var(--touch)}
.ds-doute__question{margin:0}
.ds-doute .ds-meta{margin:0}
.ds-doute__reponses{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-doute__reponse{margin:0;display:flex}
.ds-doute__reponses .ds-btn{min-height:52px;padding:0 var(--space-5);font-size:var(--text-body)}
.ds-doute__reponses .ds-btn--secondaire{border-color:var(--color-accent);background:var(--color-surface)}
.ds-doute__reponse--liste{flex-direction:column;align-items:stretch;gap:var(--space-2);flex:1 1 100%;max-width:420px}
.ds-doute__autre{flex:1 1 100%}
.ds-doute__autre summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-size:var(--text-small);font-weight:500;color:var(--color-text-2)}
.ds-doute__apres{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);border-top:1px solid var(--color-divider);padding-top:var(--space-3)}
.ds-doute__apres .ds-btn{min-height:var(--touch)}
.ds-doute__ecarter{margin:0 0 0 auto}
.ds-doutes__retour,.ds-doutes__reprendre{margin:0}
.ds-doutes__retour a{color:var(--color-text-2);font-size:var(--text-small);min-height:var(--touch);display:inline-flex;align-items:center}
@media (max-width:760px){
  .ds-passage__gestes .ds-btn,.ds-lecture[data-lecture=questions] .ds-lecture__geste .ds-btn{width:100%}
  .ds-doute__piece{align-items:flex-start}
  .ds-doute__piece .ds-apercu--moyen{width:96px;height:72px}
  .ds-doute__reponses{flex-direction:column}
  .ds-doute__reponse,.ds-doute__reponses>.ds-btn,.ds-doute__reponse .ds-btn{width:100%}
  .ds-doute__reponse--liste{max-width:none}
  .ds-doute__points{margin-left:0;flex:1 1 100%}
  .ds-doute__ecarter{margin-left:0;flex:1 1 100%}
}
.ds-lecture .ds-progression[hidden],.ds-lecture__phrase[hidden]{display:none}
/* LA CARTE DE LECTURE EN LIGNE-BANDEAU (Jean-David, 6 octobre 2026, 12 h 33 :
   « les blocs sont énormes pour rien, on s'y perd »). Une icône, une phrase
   courte, le geste ; le détail replié derrière « Voir ». Jamais plus d'un
   tiers de la hauteur de l'écran, au téléphone comme à l'ordinateur. */
.ds-lecture{padding:var(--space-3) var(--space-4);gap:var(--space-2)}
.ds-lecture__tete{flex-wrap:nowrap;align-items:center}
.ds-lecture__ic{width:36px;height:36px}
.ds-lecture__dit{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-lecture__tete .ds-lecture__dit .ds-h3{flex:none;font-size:var(--text-body);line-height:1.3;overflow-wrap:anywhere}
.ds-lecture__sous{margin:0;font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-lecture__tete>.ds-badge{flex:none}
.ds-lecture__gestes{flex:none;display:flex;align-items:center;gap:var(--space-2)}
.ds-lecture__gestes .ds-btn{white-space:nowrap}
.ds-lecture__mention{margin:0;font-size:12px;line-height:1.35;color:var(--color-text-2)}
.ds-lecture__suivi{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}
.ds-lecture__suivi .ds-progression{flex:1 1 220px}
.ds-lecture__suivi .ds-lecture__phrase{font-size:var(--text-small)}
.ds-lecture .ds-progression__piste{height:8px}
.ds-lecture__detail>summary{cursor:pointer;min-height:var(--touch);display:inline-flex;align-items:center;font-size:var(--text-small);font-weight:500;color:var(--color-text-2)}
.ds-lecture__detail-corps{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-2) 0 var(--space-2)}
.ds-lecture__detail-corps .ds-lecture__geste .ds-btn{min-height:var(--touch)}
.ds-lecture ul.ds-lecture__non-lues{margin:0}
.ds-lecture__non-lues li{flex-wrap:wrap}
.ds-passage__fin .ds-lecture__phrase{font-size:var(--text-small)}
@media (max-width:760px){
  .ds-lecture__tete{flex-wrap:wrap}
  .ds-lecture__dit{flex:1 1 0}
  .ds-lecture__sous--large{display:none}
  .ds-lecture__gestes{flex:1 1 100%;flex-wrap:wrap}
  .ds-lecture__gestes>*{flex:1 1 100%}
  .ds-lecture__gestes .ds-btn{width:100%;white-space:normal}
  .ds-lecture__gestes .ds-btn--secondaire,.ds-lecture__gestes .ds-btn--discret{min-height:var(--touch)}
  .ds-lecture__tete>.ds-badge{order:3}
}
/* « Ranger » sur la ligne d'une pièce non lue (6 octobre 2026, 12 h 33). */
.ds-lecture__ligne-gestes{display:flex;align-items:center;gap:var(--space-2);flex:none}
.ds-lecture__ranger{display:inline-flex}
.ds-lecture__ligne-gestes .ds-btn,.ds-lecture__gestes .ds-lecture__ranger .ds-btn--petit{min-height:var(--touch)}
.ds-lecture[data-lecture=echecs] .ds-lecture__gestes .ds-btn--primaire{min-height:48px;padding:0 var(--space-5)}
@media (max-width:760px){.ds-lecture__ranger,.ds-lecture__ranger .ds-btn{width:100%}.ds-lecture__non-lues .ds-lecture__ranger,.ds-lecture__non-lues .ds-lecture__ranger .ds-btn{width:auto}}
@media (max-width:760px){
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes{flex-wrap:nowrap}
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>*{flex:1 1 auto}
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>form{flex:0 0 auto}
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>form .ds-btn{width:auto;white-space:nowrap}
}
/* --- K prépare le message au lieu d’expliquer (étape 0 du plan L-68, 6 octobre 2026) ---
   La carte « Message à … » du tiroir : le texte se corrige dans la carte, la
   zone prend la hauteur de son texte (rien ne défile dedans), le geste
   d’envoi tient toute la largeur, en bas. Et les personnes à toucher. */
.ds-k__proposition-message{display:flex;flex-direction:column;gap:var(--space-2);margin:0}
.ds-k__proposition-texte{display:block;width:100%;box-sizing:border-box;min-height:calc(var(--touch) * 2);padding:var(--space-3);border:1px solid var(--color-border);
  border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font:inherit;font-size:var(--text-body);line-height:1.45;resize:none;overflow:hidden;overflow-wrap:anywhere}
.ds-k__proposition-texte::placeholder{color:var(--color-muted)}
.ds-k__proposition-texte:focus{outline:none;border-color:var(--color-focus);box-shadow:0 0 0 3px var(--color-info-bg)}
.ds-k__proposition--message .ds-k__proposition-gestes{flex-wrap:wrap;justify-content:flex-start}
.ds-k__proposition--message .ds-k__proposition-gestes .ds-btn{flex:1 1 0;min-width:0}
.ds-k__proposition--message .ds-k__proposition-gestes .ds-btn--primaire{flex:1 1 100%;order:3;height:auto;min-height:var(--touch);padding-top:var(--space-2);padding-bottom:var(--space-2);white-space:normal;text-align:center;overflow-wrap:anywhere}
@media (max-width:760px){.ds-k__proposition-texte{font-size:16px}}
.ds-k__choix{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-k__choix-bouton{justify-content:flex-start;height:auto;min-height:var(--touch);padding-top:var(--space-2);padding-bottom:var(--space-2);white-space:normal;text-align:left;overflow-wrap:anywhere}

/* ------------------------------------------------------------------------
   L’AGENT K — étape 1 (6 octobre 2026) : les lignes d’étape, sous la question.
   « K regarde le lot 3 — Électricité… » : discrètes, une par lecture.
   ------------------------------------------------------------------------ */
.ds-k__etapes{list-style:none;margin:0;padding:0 var(--space-2);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-k__etape{display:flex;align-items:baseline;gap:var(--space-2);font-size:var(--text-small);line-height:1.35;color:var(--color-muted)}
.ds-k__etape::before{content:'';flex:none;width:6px;height:6px;border-radius:50%;background:var(--color-accent);transform:translateY(-1px)}
/* L’agent K — étape 2 : « Fait · Annuler ». Une ligne par chose faite tout de
   suite ; la note au journal y attend dix secondes. */
.ds-k__fait{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);background:var(--color-success-bg);color:var(--color-text);font-size:var(--text-small)}
.ds-k__fait-texte{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.ds-k__fait[data-k-fait="attend"],.ds-k__fait[data-k-fait="en-cours"]{background:var(--color-info-bg)}
.ds-k__fait[data-k-fait="annule"]{background:var(--color-surface-2);color:var(--color-muted)}
.ds-k__fait[data-k-fait="refuse"]{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-k__fait .ds-btn{flex:none;min-height:44px}
/* Le banc des quarante phrases de K (exploitation, atelier seulement). */
.ds-banc-k__reglages{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:flex-end;margin-bottom:var(--space-3)}
.ds-banc-k__reglages .ds-champ{flex:1 1 220px;min-width:0}
.ds-banc-k__liste{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-banc-k__geste,.ds-banc-k__phrase{border:1px solid var(--color-divider);border-radius:var(--radius-lg);padding:var(--space-3) var(--space-4);font-size:var(--text-small)}
.ds-banc-k__geste{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-4);align-items:baseline}
.ds-banc-k__geste>b{flex:1 0 100%}
.ds-banc-k__phrase summary{display:flex;justify-content:space-between;gap:var(--space-3);cursor:pointer;min-height:44px;align-items:center}
.ds-banc-k__mesure{margin:var(--space-1) 0;overflow-wrap:anywhere}
.ds-banc-k__reponse{white-space:pre-wrap;color:var(--color-text-2)}
.ds-banc-k--bon{color:var(--color-success);font-weight:600}
.ds-banc-k--relire{color:var(--color-warning);font-weight:600}
.ds-banc-k--muet{color:var(--color-muted)}

/* === Lot « l’étude dit vrai » (6 octobre 2026) =============================
   Au téléphone, le résumé d’un bloc du bas du lot s’écrasait en colonne d’un
   mot par ligne à côté de son bouton (« Interroger le bureau d’études ») : le
   texte pouvait rétrécir sans fin, donc le bouton ne passait jamais à la
   ligne. Le texte garde au moins 60 % de la largeur ; un bouton qui ne tient
   plus à côté passe dessous, aligné sur le texte (règle déjà prévue plus haut). */
@media (max-width:640px){
  .ds-lotbas-bloc__textes{min-width:60%}
}

/* ===== LOT « LE DÉROULÉ EN SIX PHASES » (6 octobre 2026) =====
   La carte « Phases du projet » de la vue d'un projet (src/derouleneuf.js) :
   une phrase de tête et six pastilles, six phases dépliables, des étapes à
   cocher ; la question de l'urbanisme ; ce que K propose. Téléphone d'abord :
   cibles de 44 px, rien ne défile de côté. Et l'anneau de l'en-tête, qui dit
   la phase du déroulé sous son chiffre. */
.ds-deroule{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-deroule__tete{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-deroule__phrase{margin:0;font-weight:var(--weight-bold);font-size:var(--text-body);overflow-wrap:anywhere}
.ds-deroule__fil{list-style:none;margin:0;padding:0;display:flex;gap:var(--space-1);align-items:center}
.ds-deroule__pastille{flex:1 1 0;min-width:0;position:relative}
.ds-deroule__pastille a{display:flex;align-items:center;justify-content:center;height:28px;border-radius:var(--radius-pill);background:var(--color-surface-2,var(--color-divider));color:var(--color-muted);font-size:var(--text-meta);font-weight:var(--weight-bold);text-decoration:none}
.ds-deroule__pastille a::after{content:"";position:absolute;inset:-8px 0}
.ds-deroule__pastille .ds-ic{width:14px;height:14px;stroke-width:2.6}
.ds-deroule__pastille--finie a{background:var(--color-success-solid);color:var(--color-on-dark)}
.ds-deroule__pastille--encours a{background:var(--color-info-bg);color:var(--color-info);box-shadow:inset 0 0 0 2px var(--color-info-solid,var(--color-info))}
.ds-deroule__pastille--parallele a{background:var(--color-info-bg);color:var(--color-info)}
.ds-deroule__pastille--a_dire a{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-deroule__pastille a:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-deroule__annonce{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-3);padding:var(--space-3);border:1px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-surface)}
.ds-deroule__annonce[hidden]{display:none}
.ds-deroule__annonce p{margin:0;flex:1 1 240px;min-width:0;overflow-wrap:anywhere}
.ds-deroule__annonce .ds-btn{min-height:var(--touch,44px)}
.ds-deroule__fermee{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-warning-bg);font-size:var(--text-small)}
.ds-deroule__fin{margin:0;padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-success-bg);color:var(--color-success)}
.ds-deroule__phase{border:1px solid var(--color-divider);border-radius:var(--radius-md);background:var(--color-surface);min-width:0}
.ds-deroule__phase[open]{border-color:var(--color-border)}
.ds-deroule__phase--encours{border-color:var(--color-info-solid,var(--color-info))}
.ds-deroule__phase>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch,44px);padding:var(--space-2) var(--space-3)}
.ds-deroule__phase>summary::-webkit-details-marker{display:none}
.ds-deroule__phase>summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px;border-radius:var(--radius-md)}
.ds-deroule__numero{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--color-divider);color:var(--color-muted);font-size:var(--text-meta);font-weight:var(--weight-bold)}
.ds-deroule__numero .ds-ic{width:14px;height:14px;stroke-width:2.6}
.ds-deroule__phase--finie .ds-deroule__numero{background:var(--color-success-solid);color:var(--color-on-dark)}
.ds-deroule__phase--encours .ds-deroule__numero,.ds-deroule__phase--parallele .ds-deroule__numero{background:var(--color-info-bg);color:var(--color-info)}
.ds-deroule__phase--a_dire .ds-deroule__numero{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-deroule__titre{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:0 var(--space-2);overflow-wrap:anywhere}
.ds-deroule__compte{white-space:nowrap}
.ds-deroule__phase>summary .ds-badge{flex:none}
.ds-deroule__corps{padding:0 var(--space-3) var(--space-3);display:flex;flex-direction:column;gap:var(--space-2);min-width:0}
.ds-deroule__dit{margin:0}
.ds-deroule__etapes{list-style:none;margin:0;padding:0}
.ds-deroule__etape{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-1) 0;border-top:1px solid var(--color-divider);min-width:0}
.ds-deroule__etape:first-child{border-top:0}
.ds-deroule__cocher,.ds-deroule__annuler{margin:0;flex:none}
.ds-deroule__case{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:0;background:transparent;border-radius:50%;cursor:pointer;color:var(--color-muted);padding:0}
.ds-deroule__case::before{content:"";position:absolute;width:22px;height:22px;border:2px solid var(--color-border);border-radius:7px;background:var(--color-surface)}
.ds-deroule__case .ds-ic{position:relative;width:14px;height:14px;opacity:0;stroke-width:2.6}
button.ds-deroule__case:hover::before,button.ds-deroule__case:focus-visible::before{border-color:var(--color-success-solid);background:var(--color-success-bg)}
button.ds-deroule__case:hover .ds-ic,button.ds-deroule__case:focus-visible .ds-ic{opacity:1;color:var(--color-success)}
button.ds-deroule__case:focus-visible{outline:2px solid var(--color-focus);outline-offset:-4px}
.ds-deroule__case--faite{cursor:default}
.ds-deroule__case--faite::before{border-color:var(--color-success-solid);background:var(--color-success-solid)}
.ds-deroule__case--faite .ds-ic{opacity:1;color:var(--color-on-dark)}
.ds-deroule__case--lue{cursor:default}
.ds-deroule__case--lue::before{border-style:dashed}
.ds-deroule__texte{flex:1 1 auto;min-width:0;padding:10px 0;display:flex;flex-direction:column;gap:2px;overflow-wrap:anywhere}
.ds-deroule__etape--faite .ds-deroule__nom{color:var(--color-muted)}
.ds-deroule__ligne{font-size:var(--text-small)}
.ds-deroule__ligne .ds-meta{margin:0}
.ds-deroule__ou{font-size:var(--text-small);font-weight:var(--weight-bold);display:inline-block;padding:4px 0}
.ds-deroule__annuler{align-self:center}
.ds-deroule__annuler .ds-btn{min-height:var(--touch,44px)}
.ds-deroule__depot{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-2);margin:var(--space-1) 0 0}
.ds-deroule__depot .ds-champ{margin:0;flex:0 1 180px;min-width:0}
.ds-deroule__depot .ds-btn{min-height:var(--touch,44px)}
.ds-deroule__pli>summary{cursor:pointer;min-height:var(--touch,44px);display:inline-flex;align-items:center;font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-muted)}
.ds-deroule__pli[open]{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-deroule__pli form{margin:0}
.ds-deroule__urbanisme{margin:0;display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start}
.ds-deroule__urbanisme fieldset{border:0;margin:0;padding:0;min-width:0;width:100%}
.ds-deroule__question{padding:0;margin:0 0 var(--space-2);font-weight:var(--weight-bold);font-size:var(--text-body)}
.ds-deroule__choix-liste{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-1) var(--space-3)}
.ds-deroule__choix{display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch,44px);cursor:pointer;min-width:0}
.ds-deroule__choix input{width:20px;height:20px;flex:none;accent-color:var(--color-primary)}
.ds-deroule__choix span{min-width:0;overflow-wrap:anywhere}
.ds-deroule__choix small{display:block}
.ds-deroule__question-bloc{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start}
.ds-deroule__urbanisme-aucune{margin:0}
.ds-deroule__k{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-accent-soft,var(--color-info-bg));border-left:3px solid var(--color-accent)}
/* (12 octobre 2026) La ligne d’une ancienne phase a dépassé sa date : dit sur la phase, avec « Replanifier ». */
.ds-deroule__retard{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-danger-bg);border-left:3px solid var(--color-danger)}
.ds-deroule__retard-texte{flex:1 1 200px;min-width:0}
.ds-deroule__retard-texte p{margin:0;overflow-wrap:anywhere}
.ds-deroule__retard .ds-btn{min-height:var(--touch,44px)}
.ds-deroule__k-marque{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;background:var(--color-primary);color:var(--color-accent);font-weight:var(--weight-bold);font-size:var(--text-small)}
.ds-deroule__k-texte{flex:1 1 220px;min-width:0}
.ds-deroule__k-texte p{margin:0;overflow-wrap:anywhere}
.ds-deroule__k-gestes{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3)}
.ds-deroule__k-gestes form{margin:0}
.ds-deroule__k-gestes .ds-btn{min-height:var(--touch,44px)}
.ds-deroule__pied{border-top:1px solid var(--color-divider);padding-top:var(--space-2)}
.ds-deroule__pied p{margin:0}
.ds-projet-entete__avancement--deroule{max-width:170px}
/* Au téléphone, l'anneau tient sur la ligne du badge : l'en-tête n'est pas plus haut avec que sans. */
.ds-projet-entete__mini{display:none;align-items:center;gap:6px;white-space:nowrap}
.ds-projet-entete__mini .ds-anneau b.ds-anneau__pct{display:none}
.ds-projet-entete__mini .ds-meta{margin:0;font-weight:var(--weight-bold)}
.ds-projet-entete__avancement--deroule>small{display:flex;flex-direction:column;line-height:1.3}
.ds-projet-entete__avancement--deroule>small b{color:var(--color-text)}
@media (max-width:760px){
  .ds-deroule__choix-liste{grid-template-columns:minmax(0,1fr)}
  /* Au téléphone, « Annuler » passe sous le texte de l'étape : à côté, il recouvrait « Reprise du planning — à vérifier ». */
  .ds-deroule__etape{flex-wrap:wrap}
  .ds-deroule__texte{flex:1 1 calc(100% - 56px)}
  .ds-deroule__annuler{flex:1 1 100%;align-self:flex-start;margin:-4px 0 var(--space-1) 44px}
  .ds-deroule__reprise .ds-badge{white-space:normal}
  .ds-deroule__depot{flex-direction:column;align-items:stretch}
  .ds-deroule__depot .ds-champ{flex:1 1 auto}
  .ds-deroule__retard .ds-btn{width:100%;justify-content:center}
  .ds-deroule__k-gestes,.ds-deroule__k-gestes form,.ds-deroule__k-gestes .ds-btn,.ds-deroule__question-bloc .ds-btn,.ds-deroule__urbanisme .ds-btn,.ds-deroule__urbanisme-aucune,.ds-deroule__urbanisme-aucune .ds-btn{width:100%}
  .ds-deroule__k-gestes .ds-btn,.ds-deroule__question-bloc .ds-btn{white-space:normal;text-align:center;justify-content:center}
  .ds-projet-entete__avancement--deroule{display:none}
  .ds-projet-entete__mini{display:inline-flex}
}
@media print{.ds-deroule__cocher,.ds-deroule__annuler,.ds-deroule__depot,.ds-deroule__pli,.ds-deroule__k-gestes,.ds-deroule__question-bloc{display:none!important}}

/* ------------------------------------------------------------------------
   Lot « le point a une vie » (8 octobre 2026, étape 1 de la refonte des
   comptes rendus) : l’état d’un point dans le registre, et la fiche d’un
   point — son état, son suivi, son histoire.
   ------------------------------------------------------------------------ */
.ds-crpoint__etats{flex:none;display:inline-flex;flex-wrap:wrap;gap:var(--space-1);justify-content:flex-end;max-width:100%}
.ds-crpoint__numero{white-space:nowrap}
.ds-crpoint__lien{display:flex;flex-direction:column;gap:2px;min-height:var(--touch);justify-content:center;color:inherit;text-decoration:none;border-radius:var(--radius-sm)}
.ds-crpoint__lien:hover b{text-decoration:underline}
.ds-crpoint__lien:focus-visible{outline:2px solid var(--color-info);outline-offset:2px}
.ds-cr-ouvrir{margin:var(--space-3) 0 0}
.ds-point-tete{align-items:flex-start}
.ds-point-tete__ref{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin:0 0 var(--space-2)}
.ds-point-tete .ds-h2{margin:0 0 var(--space-1);overflow-wrap:anywhere}
.ds-point-tete .ds-meta{margin:0}
.ds-point-grille{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--gap-cards);align-items:start}
.ds-point-colonne{display:flex;flex-direction:column;gap:var(--gap-cards);min-width:0}
.ds-point-grille .ds-h3{margin:0 0 var(--space-2)}
.ds-point-etats{display:flex;flex-direction:column;gap:var(--space-3);margin:0}
.ds-point-etats textarea{width:100%}
.ds-point-etats__choix{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-point-etats .ds-meta{margin:0}
.ds-point-plus>summary{cursor:pointer;min-height:var(--touch);display:flex;align-items:center;font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-text-2)}
.ds-point-plus[open]{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-point-lots{border:0;margin:0;padding:0;min-width:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-point-lots legend{padding:0;margin:0 0 var(--space-2)}
.ds-point-lots__choix{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-point-lot{position:relative;display:inline-flex;max-width:100%;cursor:pointer}
.ds-point-lot input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.ds-point-lot>span{display:inline-flex;flex-wrap:wrap;align-items:center;gap:0 var(--space-2);min-height:var(--touch);padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-pill);background:var(--color-surface);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-point-lot>span i{font-style:normal;color:var(--color-muted);font-size:var(--text-meta)}
.ds-point-lot input:checked+span{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-dark)}
.ds-point-lot input:checked+span i{color:inherit;opacity:.85}
.ds-point-lot input:focus-visible+span{outline:2px solid var(--color-info);outline-offset:2px}
.ds-point-lu{display:flex;flex-direction:column;gap:2px;margin:0 0 var(--space-2)}
.ds-point-lu b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-point-attentes{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-divider)}
.ds-point-attentes .ds-meta{margin:0 0 var(--space-2)}
.ds-point-fil{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ds-point-etape{position:relative;display:flex;flex-direction:column;gap:2px;padding:0 0 var(--space-4) var(--space-5);border-left:2px solid var(--color-divider);margin-left:6px}
.ds-point-etape:last-child{padding-bottom:0;border-left-color:transparent}
.ds-point-etape::before{content:'';position:absolute;left:-7px;top:4px;width:12px;height:12px;border-radius:50%;background:var(--color-surface);border:2px solid var(--color-info)}
.ds-point-etape[data-point-etape="ouverture"]::before{border-color:var(--color-warning)}
.ds-point-etape[data-point-etape="etat"]::before{background:var(--color-info)}
.ds-point-etape__date{font-size:var(--text-meta);color:var(--color-muted)}
.ds-point-etape>div{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}
.ds-point-etape b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-point-citation{margin:0;padding:var(--space-2) var(--space-3);border-left:3px solid var(--color-divider);background:var(--color-surface-2);border-radius:var(--radius-sm);font-size:var(--text-small);overflow-wrap:anywhere}
@media (max-width:1100px){.ds-point-grille{grid-template-columns:minmax(0,1fr)}}
@media (max-width:760px){
  .ds-cr-bloc .ds-crpoint > .ds-crpoint__etats{margin-left:44px;justify-content:flex-start}
  .ds-point-etats__choix .ds-btn{flex:1 1 100%;min-height:52px}
  .ds-point-lot,.ds-point-lot>span{width:100%}
  .ds-point-lot>span{border-radius:var(--radius-md)}
}

/* ------------------------------------------------------------------------
   L-69 — Une pièce s’archive et se désarchive (6 octobre 2026). Compact :
   un bouton sur la ligne, une ligne sur la fiche, une puce en bout de
   rangée.
   ------------------------------------------------------------------------ */
.ds-doc__archivee{color:var(--color-muted);font-size:var(--text-small)}
.ds-puce--archivees{margin-left:auto}
.ds-docs-archivees-aide{margin:0 0 var(--space-3)}
.ds-lecture__archiver{display:inline-flex;margin:0}
.ds-vis-archive{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-3);margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--color-divider)}
.ds-vis-archive p{margin:0;flex:1 1 200px;min-width:0}
.ds-toast form{margin:0;flex:none}
@media (max-width:760px){
  .ds-puce--archivees{margin-left:0}
  /* Au téléphone, les trois gestes de la pièce non lue tiennent sur une
     ligne : « Ranger » prend la place, « Archiver » la sienne, et « Réessayer
     la lecture », discret, s’écrit sur deux lignes. Rien ne déborde, la
     carte ne grandit pas. */
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>form.ds-lecture__geste{flex:0 1 auto;min-width:0}
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>form.ds-lecture__geste .ds-btn{white-space:normal;line-height:1.15;padding:0 var(--space-2);text-align:center}
  .ds-lecture[data-lecture=echecs] .ds-lecture__gestes>form.ds-lecture__archiver .ds-btn{min-height:48px;padding:0 var(--space-3)}
  .ds-lecture__non-lues .ds-lecture__ligne-gestes{flex-wrap:wrap}
}

/* ==========================================================================
   LOT « UN INVITÉ RETROUVE TOUS SES PROJETS » (6 octobre 2026) — « Mes
   projets » (src/mesprojetsneuf.js) et le haut « où suis-je » de la coque des
   invités à plusieurs accès (src/coque.js, ouSuisJe).
   ========================================================================== */
.ds-mp-cartes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--gap-cards)}
.ds-mp-cartes li,.ds-mp-cartes form{margin:0;display:flex;min-width:0}
.ds-mp-cartes form{flex:1}
.ds-mp-carte{flex:1;display:flex;flex-direction:column;align-items:stretch;width:100%;min-width:0;padding:0;overflow:hidden;text-align:left;font:inherit;color:inherit;text-decoration:none;cursor:pointer;border:1px solid var(--color-border);background:var(--color-surface);transition:box-shadow .15s ease,transform .15s ease}
.ds-mp-carte:hover{box-shadow:var(--shadow-raised)}
.ds-mp-carte:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-mp-carte--attend{border-color:var(--color-warning-solid)}
.ds-mp-carte__visuel{position:relative;display:flex;align-items:center;justify-content:center;aspect-ratio:16/7;background:var(--color-surface-3)}
.ds-mp-carte__visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ds-mp-carte__corps{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4);min-width:0}
.ds-mp-carte__nom{font-size:var(--text-h3,1.125rem);font-weight:var(--weight-bold);line-height:1.25;overflow-wrap:anywhere}
.ds-mp-carte__meta{color:var(--color-muted);font-size:var(--text-small);overflow-wrap:anywhere}
.ds-mp-carte__etat,.ds-mp-carte__attend{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-mp-carte__geste{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);min-height:var(--touch,44px);margin-top:var(--space-1);padding-top:var(--space-2);border-top:1px solid var(--color-divider);font-weight:var(--weight-bold)}
.ds-mp-carte__geste .ds-ic{flex:none;width:18px;height:18px}
.ds-mp-pages{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);margin-top:var(--space-5)}
.ds-mp-avis,.ds-mp-note{display:flex;gap:var(--space-2);align-items:flex-start;margin:0 0 var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2);font-size:var(--text-small)}
.ds-mp-note{margin:var(--space-5) 0 0;color:var(--color-muted)}
.ds-mp-avis--attention{background:var(--color-warning-bg);color:var(--color-warning)}
.ds-mp-avis .ds-ic,.ds-mp-note .ds-ic{flex:none;width:18px;height:18px;margin-top:1px}
.ds-ou{display:flex;align-items:center;gap:var(--space-3);min-width:0;margin-right:auto}
.ds-ou__texte{display:flex;flex-direction:column;min-width:0;line-height:1.2}
.ds-ou__texte b,.ds-ou__texte span{overflow-wrap:anywhere}
.ds-ou__texte span{color:var(--color-muted);font-size:var(--text-small)}
.ds-ou__tous{flex:none;min-height:var(--touch,44px)}
.ds-haut--ou{justify-content:space-between;gap:var(--space-3)}
@media (max-width:767px){
  .ds-mp-cartes{grid-template-columns:1fr}
  .ds-mp-pages .ds-btn{flex:1 1 100%}
  .ds-haut--ou .ds-haut__marque{display:none}
  .ds-ou{flex:1}
  .ds-ou__tous span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .ds-ou__tous{padding-inline:var(--space-3)}
}
@media (prefers-reduced-motion:reduce){.ds-mp-carte{transition:none}}
/* Membre d'un cabinet ET invitée ailleurs (6 octobre 2026, 12 h 18) : le geste
   « Revenir à mon cabinet » du haut de page et de « Mes projets d'invité ». */
.ds-ou__retour{margin:0;flex:none;display:flex}
.ds-ou .ds-ou__tous + .ds-ou__retour{margin-left:calc(-1 * var(--space-1))}
.ds-mp-cabinet{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);margin:var(--space-5) 0 0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-mp-cabinet p,.ds-mp-cabinet form{margin:0}
.ds-mp-note a{color:inherit;text-decoration:underline}
@media (max-width:767px){
  .ds-mp-cabinet .ds-btn{width:100%}
  .ds-mp-cabinet form{flex:1 1 100%}
}

/* --- Une ligne « À traiter » ne s’étrangle plus au téléphone (10 octobre 2026)
   Jean-David, 7 h 38, capture de son iPhone, sur la Consultation : « Petit bug
   d’affichage. » La ligne « Un devis ou une facture déposé n’est pas encore
   lu… » s’écrivait en colonne de dix pixels, un mot par ligne, à côté de son
   bouton « Lire les 2 pièces non lues du projet ».
   La cause : sous 760 px la ligne avait bien le droit de s’enrouler
   (flex-wrap), mais son texte partait d’une largeur NULLE (flex:1) — il ne
   demandait donc jamais de place, et le bouton, qui ne se coupe pas, prenait
   tout. Le texte demande désormais onze cadratins : un geste court (« Appeler »,
   « Rattacher ») reste à sa droite, un geste long passe SOUS lui, sur toute la
   largeur, et se coupe en deux lignes plutôt que de déborder. À l’ordinateur,
   rien ne change. */
@media (max-width:760px){
  .ds-lots-afaire__texte{flex:999 1 11rem}
  .ds-lots-afaire li>.ds-btn,.ds-lots-afaire__geste{flex:1 0 auto;max-width:100%}
  .ds-lots-afaire__geste{display:flex;margin:0}
  .ds-lots-afaire__geste .ds-btn{flex:1 1 auto;max-width:100%}
  .ds-lots-afaire .ds-btn{white-space:normal;text-align:center}
  /* Le même montage au budget, « Factures et situations » : le nom de la
     facture tenait dans 99 px, sept lignes, entre son montant et « Déjà
     réglée » — le bloc du montant, pris pour une colonne de texte par
     « .ds-liste li > div », lui prenait la moitié de la ligne. Le nom garde
     ses onze cadratins, le montant reprend sa taille et reste à sa droite,
     le geste passe dessous, à droite. */
  .ds-factures li>div:first-child{flex:999 1 11rem}
  .ds-factures li>.ds-factures__fin{flex:none}
  .ds-factures li>.ds-factures__geste{margin-left:auto}
}
/* (10 octobre 2026, 8 h 01 — Jean-David : « Oui, dans la foulée ») Les autres
   colonnes étranglées vues en passant, au téléphone seulement.
   · « Ce qui bloque », sur la page du projet : le titre d’une carte tenait
     dans 185 à 198 px, six lignes, à côté de « Relancer », « Replanifier »,
     « Contrôler ». Le geste passe sous son texte, en pleine largeur — ce que
     font déjà, dans la même liste, les rappels de pièce (.ds-rappel__ligne).
     Borné au bloc (#ce-qui-bloque) : les autres listes ne changent pas.
   · Pièces écrites, « À traiter » : le texte, long, tenait dans 194 px sur
     sept lignes à côté de son geste ; il prend la ligne, le geste dessous. */
@media (max-width:760px){
  #ce-qui-bloque .ds-liste li{flex-wrap:wrap}
  #ce-qui-bloque .ds-liste li>.ds-btn{flex:1 1 100%;min-height:var(--touch)}
  .ds-ecr-afaire .ds-lots-afaire__texte{flex-basis:14rem}
}
/* · Les chiffres du budget : cinq tuiles, deux par rangée, et « à payer HT ·
     aucune facture autorisée » s’écrivait dans 105 px sur quatre lignes. Sur
     un téléphone, une tuile par ligne ; dès 561 px, deux, comme partout.
   · La page d’un lot, « où en est ce lot » : même mal (« Consultez ou invitez
     une entreprise » dans 115 px) ; une étape par ligne, dans l’ordre. */
@media (max-width:560px){
  .ds-chiffres--budget,.ds-cmp-rail{grid-template-columns:minmax(0,1fr)}
}
/* AUJOURD’HUI COMME LA PLANCHE DU 9 OCTOBRE 2026 (src/aujourdhui.js ; fiche
   2026-10-09-1530, puis retour de Jean-David, 16 h 40 : « reprends EXACTEMENT
   la planche ») — le modèle « Ma journée » en deux colonnes (les actions à
   gauche, les repères à droite, qui finissent à la même hauteur), puis la
   rangée du bas ; chaque bloc a une icône, une poignée ⋮⋮ toujours visible,
   un menu « … » ; sa hauteur (ajustée, petite, moyenne, grande) et, en bas,
   sa largeur (demi, pleine) se règlent. Au-dessous de 1024 px, une seule
   colonne, dans l’ordre gauche, droite, bas. */

/* La barre de gauche descend jusqu’en bas de la page, même longue : sa
   couleur est peinte sur toute la hauteur de l’application (la barre elle-même
   reste collante, à la hauteur de l’écran). */
@media (min-width:761px){
  .ds-app{background:linear-gradient(to right,var(--color-nav) calc(var(--sidebar) - 1px),var(--color-nav-border) calc(var(--sidebar) - 1px),var(--color-nav-border) var(--sidebar),transparent var(--sidebar))}
}
@media (min-width:761px) and (max-width:1100px){
  .ds-app{background:linear-gradient(to right,var(--color-nav) calc(var(--sidebar-compact) - 1px),var(--color-nav-border) calc(var(--sidebar-compact) - 1px),var(--color-nav-border) var(--sidebar-compact),transparent var(--sidebar-compact))}
}

/* L’en-tête : le titre et le bouton, puis la date et « Glissez les blocs… »
   sur la même ligne, alignée sur la colonne de gauche. */
.ds-accueil__tete--planche{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);column-gap:var(--gap-cards);row-gap:var(--space-1);align-items:center;margin:var(--space-2) 0 var(--space-5)}
.ds-accueil__tete--planche .ds-h1{grid-column:1;margin:0}
.ds-accueil__tete--planche > .ds-personnaliser__ouvrir{grid-column:2;justify-self:end;margin:0;min-height:48px;padding:0 var(--space-5);font-weight:var(--weight-bold);border-radius:var(--radius-md)}
.ds-accueil__ligne{grid-column:1;display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}
.ds-accueil__jour{margin:0;font-size:16px;color:var(--color-text-2)}
.ds-accueil__aide{margin:0;font-size:var(--text-small);color:var(--color-text-2);display:inline-flex;align-items:baseline;gap:var(--space-2)}
.ds-accueil__aide span{font-weight:var(--weight-bold);color:var(--color-muted);letter-spacing:-1px}

/* La grille en colonnes */
.ds-blocs--colonnes{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:var(--gap-cards);align-items:stretch}
.ds-blocs--une{grid-template-columns:minmax(0,1fr)}
.ds-colonne{display:flex;flex-direction:column;gap:var(--gap-cards);min-width:0}
/* Aucun bloc ne s’étire : chaque colonne finit où finit son dernier bloc
   (10 octobre 2026 — sur la planche, « Prochaines actions » descendait
   jusqu’au bas de la colonne de droite, avec un grand vide). */
.ds-colonne--bas{grid-column:1 / -1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
.ds-colonne--bas > .ds-bloc[data-largeur="pleine"]{grid-column:1 / -1}
.ds-colonne--vide{min-height:96px;border:2px dashed var(--color-border);border-radius:var(--radius-lg)}
.ds-colonne > .ds-bloc{min-width:0;grid-column:auto}
.ds-colonne .ds-bloc__corps{overflow:visible;margin-right:0;padding-right:0}
.ds-colonne > .ds-bloc.ds-bloc--replie{height:auto}
/* Replié : une seule ligne — poignée, icône, titre, chevron (la planche). */
.ds-bloc--replie{padding-top:var(--space-3);padding-bottom:var(--space-3)}
.ds-bloc--replie .ds-carte__tete{margin:0}

/* La tête d’un bloc : poignée, icône, titre, gestes */
.ds-bloc .ds-carte__tete{align-items:center;gap:var(--space-2);flex-wrap:nowrap;justify-content:flex-start}
.ds-bloc .ds-carte__tete .ds-bloc__titre{flex:1 1 auto}
/* (10 octobre 2026, série complète : « aucun nom ne se coupe ») Ni le titre
   d’un bloc, ni le nom d’une tâche, d’un événement ou d’un projet ne finit par
   « … » : s’il est long, il passe à la ligne et le bloc grandit. */
.ds-bloc__titre > span:not(.ds-bloc__ic):not(.ds-bloc__nombre){min-width:0;overflow-wrap:anywhere}
.ds-bloc .ds-carte__tete .ds-bloc__titre{display:flex;align-items:center;gap:var(--space-3);min-width:0;font-size:20px;font-weight:600}
.ds-bloc__ic{display:inline-flex;color:var(--color-text);flex:none}
.ds-bloc__ic .ds-ic{width:24px;height:24px}
.ds-bloc__ic--danger{color:var(--color-danger-solid)}
.ds-poignee--tete{min-width:24px;min-height:36px;width:24px;margin:0 0 0 calc(-1 * var(--space-2));padding:0;border:0;background:none;font-size:16px;letter-spacing:-3px;color:var(--color-muted)}
.ds-poignee--tete:hover{color:var(--color-text)}
.ds-bloc.ds-glisse{opacity:.5}
.ds-bloc__nombre{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border-radius:var(--radius-pill);
  background:var(--color-surface-3);color:var(--color-text-2);font-size:var(--text-meta);font-weight:var(--weight-bold)}
.ds-bloc__gestes{display:inline-flex;align-items:center;gap:var(--space-2);flex:none;margin-left:auto}
.ds-bloc__gestes form{margin:0}
.ds-bloc__gestes > a{font-size:var(--text-small);font-weight:var(--weight-medium);color:var(--color-info);text-decoration:none}
.ds-bloc__chevron,.ds-bloc__menu > summary,.ds-ligne__menu > summary{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--radius-sm);
  background:none;color:var(--color-text-2);cursor:pointer}
.ds-bloc__chevron:hover,.ds-bloc__menu > summary:hover,.ds-ligne__menu > summary:hover{background:var(--color-surface-2);color:var(--color-text)}
.ds-bloc__chevron:focus-visible,.ds-bloc__menu > summary:focus-visible,.ds-ligne__menu > summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-bloc__chevron .ds-ic{width:22px;height:22px}
.ds-bloc__chevron[aria-expanded="true"] .ds-ic{transform:rotate(180deg)}
.ds-bloc__menu > summary,.ds-ligne__menu > summary{font-size:20px;font-weight:var(--weight-bold);line-height:1;letter-spacing:1px}
.ds-bloc__menu .ds-menu{min-width:260px}
.ds-bloc__menu-groupe{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-1);padding:var(--space-1) var(--space-3)}
.ds-bloc__menu-groupe > span{width:100%;font-size:var(--text-meta);color:var(--color-muted)}
.ds-menu .ds-bloc__menu-groupe button{width:auto;min-width:36px;justify-content:center;border:1px solid var(--color-border);padding:0 var(--space-2)}
.ds-menu .ds-bloc__menu-groupe button[aria-pressed="true"]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-dark)}

/* « À faire maintenant » */
.ds-bloc--alerte{background:var(--color-danger-bg);border-color:color-mix(in srgb,var(--color-danger-solid) 35%,var(--color-danger-bg))}
.ds-bloc--alerte .ds-carte__tete .ds-bloc__titre{color:var(--color-danger-solid)}
.ds-maintenant__carte{display:flex;align-items:center;gap:var(--space-5);flex-wrap:wrap}
.ds-vignette--maintenant{width:92px;height:92px;border-radius:var(--radius-md)}
.ds-maintenant__corps{flex:1 1 280px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-maintenant__titre{font-size:20px;line-height:1.3;overflow-wrap:anywhere}
.ds-maintenant__projet{font-size:var(--text-small);color:var(--color-text-2)}
.ds-maintenant__quand{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3);font-size:var(--text-small);color:var(--color-text-2);margin-top:var(--space-2)}
.ds-badge--ic::before{display:none}
.ds-badge--ic .ds-ic{width:14px;height:14px}
.ds-bloc--alerte .ds-badge--danger{background:color-mix(in srgb,var(--color-danger-solid) 14%,var(--color-surface));padding:4px 12px;font-size:var(--text-small)}
.ds-maintenant__retard{color:var(--color-danger-solid)}
.ds-maintenant__retard::before{content:"•";margin-right:var(--space-3);color:var(--color-text-2)}
.ds-btn--fleche{gap:var(--space-3)}
.ds-btn--fleche .ds-ic{width:18px;height:18px}
.ds-maintenant__carte .ds-btn--fleche{min-height:48px;padding:0 var(--space-6);font-size:16px;border-radius:var(--radius-md)}

/* « Prochaines actions » */
.ds-prochaines .ds-prochaine{align-items:center;gap:var(--space-4);padding:var(--space-4) 0}
.ds-prochaine__rang{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;flex:none;
  border:1px solid var(--color-border);font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text)}
.ds-prochaine__ic{display:inline-flex;align-items:center;justify-content:center;width:64px;height:64px;border-radius:var(--radius-md);flex:none;background:var(--color-surface-3);color:var(--color-text-2)}
.ds-prochaine__ic .ds-ic{width:30px;height:30px}
.ds-prochaine__ic--info{background:var(--color-info-bg);color:var(--color-info-solid)}
.ds-prochaine__ic--attention{background:var(--color-warning-bg);color:var(--color-warning-solid)}
.ds-prochaine__ic--succes{background:var(--color-success-bg);color:var(--color-success-solid)}
.ds-prochaines .ds-action__titre b{font-size:16px}
.ds-prochaine__projet{font-size:var(--text-small);color:var(--color-text-2);margin-top:2px}
.ds-prochaine__phrase{margin:2px 0 0;font-size:var(--text-small);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-prochaine .ds-texte--danger{color:var(--color-danger);font-weight:var(--weight-bold)}
.ds-prochaine .ds-btn--fleche{min-height:44px;padding:0 var(--space-4);min-width:190px;justify-content:space-between;border-radius:var(--radius-md)}
.ds-prochaine .ds-action__gestes{gap:0}
.ds-prochaine .ds-ligne__menu{width:28px;margin-right:-28px}
.ds-prochaine .ds-ligne__menu > summary{width:28px}
.ds-ligne__menu{opacity:0;transition:opacity var(--motion-fast) var(--ease)}
.ds-prochaine:hover .ds-ligne__menu,.ds-ligne__menu:focus-within,.ds-ligne__menu[open]{opacity:1}
@media (hover:none){.ds-ligne__menu{opacity:1}}

/* Le bloc « Aujourd’hui » : trois comptes */
.ds-jour-comptes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.ds-jour-compte{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-2) var(--space-1);text-decoration:none;color:var(--color-text);
  border-left:1px solid var(--color-divider);text-align:center}
.ds-jour-compte:first-child{border-left:0}
.ds-jour-compte:hover{background:var(--color-surface-2)}
.ds-jour-compte b{font-size:28px;line-height:1.1;color:var(--color-text)}
.ds-jour-compte > span:last-child{font-size:var(--text-small);color:var(--color-text-2)}
.ds-jour-compte__ic{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px}
.ds-jour-compte__ic .ds-ic{width:26px;height:26px}
.ds-jour-compte--retard .ds-jour-compte__ic{color:var(--color-danger-solid)}
.ds-jour-compte--afaire .ds-jour-compte__ic .ds-ic{box-sizing:border-box;background:var(--color-info-solid);color:var(--color-on-dark);border-radius:50%;padding:5px;stroke-width:2.6}
.ds-jour-compte--rdv .ds-jour-compte__ic{color:var(--color-info-solid)}

/* « Ma semaine » : une ligne par jour et par événement */
.ds-bloc[data-type="semaine"] .ds-jours li{align-items:flex-start;padding:var(--space-1) var(--space-3);margin:0 calc(-1 * var(--space-3));border-bottom:1px solid var(--color-divider)}
.ds-bloc[data-type="semaine"] .ds-jours li:last-child{border-bottom:0}
.ds-bloc[data-type="semaine"] .ds-jours li.aujourdhui{background:var(--color-info-bg);border-radius:var(--radius-sm);border-bottom-color:transparent}
.ds-bloc[data-type="semaine"] .ds-jour{width:32px;align-items:flex-start;padding-top:2px}
.ds-bloc[data-type="semaine"] .ds-jour b{font-size:16px}
.ds-jours li.aujourdhui .ds-jour b,.ds-bloc[data-type="semaine"] .ds-jours li.aujourdhui .ds-jour b{background:none;color:var(--color-info-solid);padding:0}
.ds-bloc[data-type="semaine"] .ds-jours li.aujourdhui .ds-jour small{color:var(--color-info-solid)}
.ds-bloc[data-type="semaine"] .ds-jour__evts{gap:0}
.ds-evt--ligne{display:flex;align-items:center;gap:var(--space-3);background:none;padding:6px 0;min-width:0}
.ds-evt--ligne b{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;font-weight:var(--weight-medium)}
.ds-evt__projet{flex:0 1 auto;max-width:42%;font-size:var(--text-meta);color:var(--color-text-2);text-align:right;overflow-wrap:anywhere}
.ds-bloc[data-type="semaine"] .ds-rien{padding:6px 0;color:var(--color-muted)}

/* « Mes projets » */
.ds-projets__barre{display:block}
.ds-projets__barre .ds-progression__valeur{font-weight:var(--weight-medium)}

@media (max-width:1023px){
  .ds-blocs--colonnes,.ds-colonne--bas{grid-template-columns:minmax(0,1fr)}
  .ds-accueil__tete--planche{grid-template-columns:minmax(0,1fr) auto}
}
@media (max-width:760px){
  .ds-accueil__tete--planche{grid-template-columns:minmax(0,1fr)}
  .ds-accueil__tete--planche > .ds-personnaliser__ouvrir{grid-column:1;grid-row:3;justify-self:start}
  .ds-colonne > .ds-bloc .ds-bloc__corps{overflow:visible!important}
  .ds-vignette--maintenant{width:64px;height:64px}
  .ds-maintenant__titre{white-space:normal}
  .ds-maintenant__carte .ds-action__gestes{width:100%;margin-left:0}
  .ds-maintenant__carte .ds-btn--fleche{flex:1}
  .ds-prochaine__ic{width:44px;height:44px}
  .ds-prochaine__ic .ds-ic{width:22px;height:22px}
  .ds-prochaine .ds-btn--fleche{min-width:0;flex:1}
  .ds-prochaine .ds-ligne__menu{width:auto;margin-right:0}
  /* Au téléphone, la sixième ligne et les suivantes se masquent (« Tout voir »). */
  .ds-evt--ligne.ds-hors-cinq{display:none}
  .ds-bloc__chevron,.ds-bloc__menu > summary,.ds-ligne__menu > summary,.ds-poignee--tete{width:var(--touch);height:var(--touch);min-height:var(--touch)}
}

/* AUJOURD’HUI, MESURÉ CONTRE LA PLANCHE (comparaison côte à côte du 10 octobre
   2026, capture et planche à la même taille, 1672 px). Ce que la capture
   avait de plus haut, de plus gros ou d’une autre couleur que la planche :
   · les blocs tenaient 923 px de haut dans la colonne de droite, 677 sur la
     planche (tout l’accueil s’y lit sans défiler) : têtes, rangées et marges
     reprennent ses mesures ;
   · la photo de « À faire maintenant » s’aligne sous l’icône, pas sous la
     poignée ; le fond du bloc est le rose pâle de la planche ;
   · « Prochaines actions » : un filet sous le titre, la pastille du numéro
     pleine et sans bord, le titre de ligne en 17 px, le bouton plus large ;
   · « Mes projets » : vignette basse et large, phase en gris-bleu, trois
     projets en 210 px ;
   · poignée et menu « … » : des points pleins, sombres (src/aujourdhui.js). */
.ds-points{fill:currentColor;stroke:none;display:block}
.ds-poignee--tete{display:inline-flex;align-items:center;justify-content:center;letter-spacing:0;color:var(--color-text-2)}
.ds-accueil__aide span{font-size:18px;line-height:1;color:var(--color-text);letter-spacing:0}
.ds-bloc__menu > summary{letter-spacing:0}
.ds-prochaine__rang{border:0;background:var(--color-divider)}
.ds-prochaines .ds-action__titre b{font-size:17px}
.ds-prochaine .ds-btn--fleche{min-height:46px;min-width:220px;font-size:15px}
.ds-prochaine__phrase--quand::first-letter,.ds-prochaine__phrase--quand > span::first-letter{text-transform:uppercase}
.ds-prochaine__phrase--quand > span{display:inline-block}
.ds-bloc--alerte{background:color-mix(in srgb,var(--color-danger-bg) 55%,var(--color-surface));border-color:color-mix(in srgb,var(--color-danger-solid) 28%,var(--color-surface))}
.ds-colonne .ds-projets__phase{color:var(--color-text-2);font-weight:var(--weight-regular,400);font-size:var(--text-small);line-height:17px}
.ds-colonne .ds-bloc__gestes > a{font-size:15px}
@media (min-width:761px){
  .ds-accueil__tete--planche{margin:calc(-1 * var(--space-3)) 0 14px}
  .ds-colonne > .ds-bloc{padding:14px 22px 18px}
  .ds-colonne > .ds-bloc .ds-carte__tete{margin-bottom:var(--space-3);min-height:28px}
  .ds-colonne .ds-poignee--tete,.ds-colonne .ds-bloc__chevron,.ds-colonne .ds-bloc__menu > summary{min-height:28px;height:28px}
  .ds-colonne > .ds-bloc.ds-bloc--replie{padding-top:14px;padding-bottom:14px}
  /* « À faire maintenant » : 180 px sur la planche. */
  .ds-colonne > .ds-bloc[data-type="maintenant"]{padding-top:16px;padding-bottom:20px}
  .ds-colonne > .ds-bloc[data-type="maintenant"] .ds-carte__tete{margin-bottom:22px}
  .ds-colonne .ds-maintenant__carte{padding-left:28px}
  .ds-colonne .ds-vignette--maintenant{height:94px}
  /* « Prochaines actions » : le filet sous le titre, des rangées de 111 px. */
  .ds-colonne > .ds-bloc[data-type="priorites"]{padding-top:20px}
  .ds-colonne > .ds-bloc[data-type="priorites"] .ds-carte__tete{margin-bottom:22px}
  .ds-colonne .ds-prochaines .ds-prochaine{padding:20px 0}
  .ds-colonne .ds-prochaines .ds-prochaine:first-child{border-top:1px solid var(--color-divider)}
  /* « Aujourd’hui » : 181 px. */
  .ds-colonne > .ds-bloc[data-type="aujourdhui"]{padding-bottom:12px}
  .ds-colonne .ds-jour-comptes{padding:var(--space-2) 0 var(--space-1)}
  /* « Ma semaine » : 258 px, cinq rangées serrées. */
  .ds-colonne > .ds-bloc[data-type="semaine"]{padding-top:10px;padding-bottom:10px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-carte__tete{margin-bottom:6px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jours li{padding-top:2px;padding-bottom:2px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jour{padding-top:0}
  /* « Mes projets » : 210 px pour trois projets. */
  .ds-colonne > .ds-bloc[data-type="projets"]{padding-top:10px;padding-bottom:13px}
  .ds-colonne > .ds-bloc[data-type="projets"] .ds-carte__tete{margin-bottom:10px}
  .ds-colonne .ds-projets{gap:5px}
  .ds-colonne .ds-projets a{padding:4px 6px;margin:0 -6px;gap:18px;align-items:flex-start}
  .ds-colonne .ds-vignette--projet{width:67px;height:40px;border-radius:6px;margin-top:2px}
  .ds-colonne .ds-projets__txt{gap:0}
  .ds-colonne .ds-projets__txt b{font-size:15px;line-height:18px;font-weight:600;overflow-wrap:anywhere}
  .ds-colonne .ds-projets .ds-progression{margin-top:1px;line-height:10px;height:8px}
  .ds-colonne .ds-projets .ds-progression__piste{height:4px}
  .ds-colonne .ds-projets .ds-progression__valeur{font-size:var(--text-small);line-height:10px;min-width:44px}
}
/* Entre 761 et 1499 px (un portable de 1366 px), la colonne de gauche est
   plus étroite que sur la planche : la photo revient au bord, les boutons
   prennent moins de place, pour que la date et le retard restent sur leur
   ligne ; dans « Ma semaine », le nom du projet se lit en entier, c’est le
   titre qui cède (il se lit au survol). */
@media (min-width:761px) and (max-width:1499px){
  .ds-colonne .ds-maintenant__carte{padding-left:0;gap:var(--space-4)}
  .ds-maintenant__carte .ds-btn--fleche{padding:0 20px}
  .ds-maintenant__quand{gap:var(--space-2)}
  .ds-maintenant__retard::before{margin-right:var(--space-2)}
  .ds-prochaine .ds-btn--fleche{min-width:170px}
  .ds-colonne > .ds-bloc{padding-left:18px;padding-right:18px}
}
.ds-colonne .ds-evt__projet{flex:0 1 auto;max-width:62%}
/* Au téléphone, le titre d’un bloc ne se coupe plus (« Mes proje… », « Points
   d’a… ») : la poignée garde sa hauteur de doigt mais s’affine, et le titre
   passe à la ligne s’il le faut. */
@media (max-width:760px){
  .ds-bloc__titre > span:not(.ds-bloc__ic):not(.ds-bloc__nombre){white-space:normal;overflow:visible}
  .ds-bloc .ds-carte__tete .ds-bloc__titre{gap:var(--space-2);font-size:18px}
  .ds-poignee--tete{width:28px;min-width:28px}
  .ds-bloc__gestes{gap:0}
}

@media (max-width:760px){
  /* « Ma semaine » au téléphone : le projet passe sous le titre de
     l’événement, chacun sur toute la largeur — rien ne se coupe. */
  .ds-colonne .ds-evt--ligne{flex-wrap:wrap;row-gap:0}
  .ds-colonne .ds-evt--ligne b{flex:1 1 0;white-space:normal}
  .ds-colonne .ds-evt__projet{flex:0 0 100%;max-width:100%;text-align:left;padding-left:20px;white-space:normal}
  .ds-colonne > .ds-bloc{padding-left:var(--space-4);padding-right:var(--space-4)}
}
@media (max-width:760px){
  /* Le chevron et « … » gardent 44 px de haut pour le doigt, 36 de large :
     « Fil d’actualité » tient sur sa ligne. */
  .ds-colonne .ds-bloc__chevron,.ds-colonne .ds-bloc__menu > summary{width:36px}
}

/* « MES PROJETS », MESURÉ CONTRE LA PLANCHE 7 (comparaison côte à côte du
   10 octobre 2026). Sur un grand écran, la planche range trois cartes par
   rangée, sur toute la largeur : la grille en mettait quatre, plus étroites.
   « Voir la priorité » a la taille du bouton de la planche. */
@media (min-width:1101px){
  .ds-projets-grille{grid-template-columns:repeat(3,minmax(0,1fr))}
}
.ds-attention-bandeau .ds-btn{min-height:48px;padding:0 var(--space-5);font-size:16px;border-radius:var(--radius-md)}

/* RETOUCHES DU 10 OCTOBRE 2026, 14 H (relecture, et choix de Jean-David).
   · Hors du mode Personnaliser, une colonne vide attend sans se voir ; elle
     paraît dès qu’on saisit une poignée, pour qu’on y dépose le bloc.
   · « Disposition par défaut » se confirme quand le tableau de bord est réglé. */
.ds-colonne--attente{display:none}
.ds-blocs--tient .ds-colonne--attente{display:block}
.ds-blocs--tient.ds-blocs--une{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
.ds-bloc__confirmer > summary{cursor:pointer;list-style:none}
.ds-bloc__confirmer > summary::-webkit-details-marker{display:none}
.ds-menu .ds-bloc__confirmer > summary{display:flex;align-items:center;min-height:36px;padding:0 var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-small)}
.ds-menu .ds-bloc__confirmer > summary:hover{background:var(--color-surface-2)}
.ds-bloc__confirmer > summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-bloc__confirmer p{margin:var(--space-1) var(--space-3) var(--space-2);font-size:var(--text-meta);color:var(--color-text-2);max-width:260px}
.ds-menu .ds-bloc__confirmer[open] button{font-weight:var(--weight-bold);color:var(--color-danger)}
.ds-bloc__confirmer--pied{display:inline-block}
@media (max-width:760px){.ds-menu .ds-bloc__confirmer > summary{min-height:var(--touch)}}
.ds-bloc__confirmer--pied p{margin-left:0}

/* TOUT TIENT SANS DÉFILER SUR UN PORTABLE (Jean-David, 10 octobre 2026, 14 h :
   « tout doit tenir sans défiler » à 1366 × 768 — environ 700 px utiles sous
   la barre du navigateur). Entre 1024 et 1499 px de large, la disposition
   par défaut — sept blocs, les deux du bas repliés — tient en 700 px :
   marges, têtes et rangées se resserrent. Le texte courant garde sa taille
   (14 px, 12,5 px pour les métadonnées) ; seuls changent le grand titre
   (32 → 26 px), les titres de bloc (20 → 18 px), les titres de ligne
   (17 → 15 px), les trois chiffres (28 → 24 px), la photo (94 → 64 px), les
   tuiles d’icône (64 → 44 px) et les boutons (46-48 → 40 px). */
@media (min-width:1024px) and (max-width:1499px){
  .ds-contenu:has(> .ds-blocs--colonnes){padding-top:var(--space-2);padding-bottom:var(--space-2)}
  .ds-accueil__tete--planche{margin:0 0 8px;row-gap:0}
  .ds-accueil__tete--planche .ds-h1{font-size:26px;line-height:1.15}
  .ds-accueil__tete--planche > .ds-personnaliser__ouvrir{min-height:40px}
  .ds-accueil__jour{font-size:var(--text-small)}
  .ds-blocs--colonnes,.ds-blocs--colonnes .ds-colonne{gap:8px}
  .ds-colonne > .ds-bloc{padding:6px 16px 8px}
  .ds-colonne > .ds-bloc .ds-carte__tete{margin-bottom:4px;min-height:26px}
  .ds-colonne .ds-poignee--tete,.ds-colonne .ds-bloc__chevron,.ds-colonne .ds-bloc__menu > summary{min-height:26px;height:26px}
  .ds-colonne > .ds-bloc .ds-carte__tete .ds-bloc__titre{font-size:18px;line-height:26px}
  .ds-colonne > .ds-bloc.ds-bloc--replie{padding-top:6px;padding-bottom:6px}
  .ds-colonne > .ds-bloc[data-type="maintenant"]{padding-top:10px;padding-bottom:12px}
  .ds-colonne > .ds-bloc[data-type="maintenant"] .ds-carte__tete{margin-bottom:8px}
  .ds-colonne .ds-vignette--maintenant{width:64px;height:64px}
  .ds-colonne .ds-maintenant__titre{font-size:17px}
  .ds-colonne .ds-maintenant__quand{margin-top:4px}
  .ds-colonne .ds-maintenant__carte .ds-btn--fleche{min-height:40px;font-size:15px}
  .ds-bloc--alerte .ds-badge--danger{padding:2px 10px}
  .ds-colonne > .ds-bloc[data-type="priorites"]{padding-top:10px}
  .ds-colonne > .ds-bloc[data-type="priorites"] .ds-carte__tete{margin-bottom:8px}
  .ds-colonne .ds-prochaines .ds-prochaine{padding:10px 0;gap:var(--space-3)}
  .ds-colonne .ds-prochaine__rang{width:26px;height:26px}
  .ds-colonne .ds-prochaine__ic{width:44px;height:44px}
  .ds-colonne .ds-prochaine__ic .ds-ic{width:22px;height:22px}
  .ds-colonne .ds-prochaines .ds-action__titre b{font-size:15px;line-height:1.25}
  .ds-colonne .ds-prochaine__projet,.ds-colonne .ds-prochaine__phrase{margin-top:0;line-height:1.35}
  /* La phrase d’une action tient en deux lignes ; elle se lit en entier au survol. */
  .ds-colonne .ds-prochaine__phrase{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
  .ds-colonne .ds-prochaine .ds-btn--fleche{min-height:40px;min-width:160px}
  .ds-colonne > .ds-bloc[data-type="aujourdhui"]{padding-bottom:6px}
  .ds-colonne .ds-jour-comptes{padding:2px 0 0}
  .ds-colonne .ds-jour-compte{gap:0;padding:0 var(--space-1);line-height:1.2}
  .ds-colonne .ds-jour-compte > span:last-child{line-height:1.25}
  .ds-colonne .ds-jour-compte b{font-size:24px}
  .ds-colonne .ds-jour-compte__ic{width:24px;height:24px}
  .ds-colonne .ds-jour-compte__ic .ds-ic{width:22px;height:22px}
  .ds-colonne > .ds-bloc[data-type="semaine"]{padding-top:6px;padding-bottom:4px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-carte__tete{margin-bottom:2px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jours li{padding-top:0;padding-bottom:0;align-items:center}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jour{line-height:1;padding:0}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jour small{font-size:11.5px}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jour b{font-size:15px}
  .ds-colonne .ds-evt--ligne{padding:3px 0}
  .ds-colonne > .ds-bloc[data-type="semaine"] .ds-jours li{padding-top:1px;padding-bottom:1px}
  .ds-colonne .ds-bloc[data-type="semaine"] .ds-rien{padding:3px 0}
  .ds-colonne > .ds-bloc[data-type="projets"]{padding-top:6px;padding-bottom:6px}
  .ds-colonne > .ds-bloc[data-type="projets"] .ds-carte__tete{margin-bottom:4px}
  .ds-colonne .ds-projets{gap:1px}
  .ds-colonne .ds-projets a{padding:1px 6px;gap:14px}
  .ds-colonne .ds-vignette--projet{width:60px;height:36px}
  .ds-colonne .ds-projets__txt b{font-size:var(--text-small);line-height:17px}
  .ds-colonne .ds-projets__phase{font-size:13px;line-height:15px}
  .ds-colonne .ds-projets .ds-progression{height:5px;line-height:5px;margin-top:0}
}
/* Un bloc à hauteur ajustée ne défile pas : il ne dit donc jamais « La suite
   en faisant défiler le bloc » (la barre d’avancement, plus basse que son
   chiffre, le faisait croire dans « Mes projets »). */
.ds-colonne > .ds-bloc[data-hauteur="auto"] .ds-bloc__encore{display:none!important}
.ds-colonne > .ds-bloc[data-hauteur="auto"] .ds-bloc__corps{-webkit-mask-image:none;mask-image:none}

/* UNE PIÈCE A SA PILE DE VERSIONS, ET UN CIRCUIT AVEC LE CLIENT (10 octobre
   2026, lot A des allers-retours sur les plans — src/piles.js). La pile se
   lit d’un coup d’œil : le numéro, la date, qui, l’état ; la version à
   l’écran est marquée ; le geste qui fait avancer est au-dessus, dominant.
   Fiche d’une pièce (cabinet) et écran « Plans » du client : mêmes classes.
   La couleur ne dit jamais seule : chaque état a son mot. */
.ds-pile{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-pile__v{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);min-width:0}
.ds-pile__v--ici{background:var(--color-surface-2);border-color:var(--color-disabled)}
.ds-pile__v[data-remplacee] .ds-pile__num{background:var(--color-surface-2);color:var(--color-muted)}
.ds-pile__num{flex:none;display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:28px;padding:0 var(--space-2);border-radius:var(--radius-pill);background:var(--color-info-bg);color:var(--color-info);font-size:var(--text-meta);font-weight:var(--weight-bold);font-variant-numeric:tabular-nums}
.ds-pile__txt{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.ds-pile__tete{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);font-size:var(--text-small)}
.ds-pile__txt .ds-meta{margin:0;overflow-wrap:anywhere}
.ds-pile__mot{margin:var(--space-1) 0 0;font-size:var(--text-small);color:var(--color-text-2);white-space:pre-wrap;overflow-wrap:anywhere}
.ds-pile__mot--client{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-warning-bg);color:var(--color-text)}
.ds-pile__phrase{margin:0 0 var(--space-3);font-weight:var(--weight-bold)}
.ds-pile__gestes{display:flex;flex-direction:column;gap:var(--space-3);margin-bottom:var(--space-4)}
.ds-pile__soumettre .ds-btn,.ds-pile__nouvelle form .ds-btn{align-self:flex-start}
.ds-pile__nouvelle>summary{list-style:none;display:inline-flex}
.ds-pile__nouvelle--dominante{padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-pile__nouvelle>summary::-webkit-details-marker{display:none}
.ds-pile__nouvelle[open]>summary{margin-bottom:var(--space-3)}
.ds-pile__fichier{padding:var(--space-2) var(--space-3);height:auto;max-width:100%}
.ds-pile__horsoutil>summary{cursor:pointer;font-size:var(--text-small);color:var(--color-info);font-weight:var(--weight-bold);min-height:var(--touch);display:flex;align-items:center}
.ds-pile__horsoutil[open]>summary{margin-bottom:var(--space-2)}
.ds-deroule__circuit{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);font-size:var(--text-small)}
.ds-deroule__circuit a{color:var(--color-text);overflow-wrap:anywhere}
/* L’écran « Plans » du client : la carte d’un plan reprend celle d’une facture. */
.ds-client-plan__reponse{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-client-plan__reponse>p{margin:0}
.ds-client-plan__valider .ds-btn{min-width:220px}
.ds-client-plan__modifier .ds-btn{align-self:flex-start}
.ds-client-plan__pile{display:flex;flex-direction:column;gap:var(--space-2)}
.ds-client-plan__pile .ds-h3{margin:0;font-size:var(--text-small)}
.ds-client-plan__ouvrir{display:flex;flex-wrap:wrap;gap:var(--space-3)}
@media (max-width:560px){
  .ds-pile__v{padding:var(--space-2) var(--space-3);gap:var(--space-2)}
  .ds-pile__soumettre .ds-btn,.ds-pile__nouvelle form .ds-btn,.ds-pile__nouvelle>summary,.ds-client-plan__valider .ds-btn,.ds-client-plan__modifier .ds-btn,.ds-client-plan__ouvrir .ds-btn{width:100%;align-self:stretch}
  .ds-pile__nouvelle>summary{display:flex}
  .ds-client-plan__reponse{padding:var(--space-3)}
}

/* (10 octobre 2026 — Jean-David : « Est-ce qu’on a bien prévu d’intégrer les
   tutos vidéos sur chaque page à laquelle ils correspondent ? Il faut trouver
   un endroit intelligent et visible où mettre le bouton. ») LE TUTORIEL VIDÉO
   DE L’ÉCRAN (src/tutorielsurplace.js), posé par la coque.
   · La PASTILLE « Tutoriel vidéo · 30 s » suit le titre de la page, sur sa ligne
     quand la place le permet : petite, au trait, jamais en couleur pleine —
     l’action principale de la page reste la seule qui appelle l’œil. Le
     titre passe « en ligne » pour l’accueillir à sa droite ; il ne change ni
     de taille ni de place, et rien d’autre ne bouge dans l’en-tête. Au
     téléphone, la pastille garde la taille d’un pouce (44 px de haut à
     toucher) sans grossir à l’œil : le trait est celui de son corps.
   · La CARTE de première visite : une ligne en tête de page, au trait doré
     léger. « Regarder » est un bouton secondaire, « Plus tard » un bouton
     discret. Sur « Aujourd’hui », tant que la carte de bienvenue est
     affichée, celle-ci reste repliée : on ne les empile pas.
   · La FENÊTRE : la vidéo tient dans la largeur (16/9), la liste des
     tutoriels de l’écran dessous. */
.ds-h1:has(+ .ds-tuto-pastille){display:inline;vertical-align:middle;margin-right:var(--space-3)}
/* Dans l’en-tête d’un projet, le titre et la pastille sont déjà côte à côte (ligne souple, avec son écart). */
.ds-projet-entete__ligne .ds-h1:has(+ .ds-tuto-pastille){margin-right:0}
.ds-tuto-pastille{display:inline-flex;align-items:center;vertical-align:middle;min-height:32px;max-width:100%;text-decoration:none;color:var(--color-text-2);font-size:var(--text-meta);font-weight:var(--weight-medium,500);line-height:1.2;letter-spacing:0;white-space:nowrap}
.ds-tuto-pastille__corps{display:inline-flex;align-items:center;gap:6px;padding:4px 11px 4px 8px;border:1px solid var(--color-border);border-radius:var(--radius-pill);background:var(--color-surface);transition:border-color var(--motion,.15s),color var(--motion,.15s)}
.ds-tuto-pastille__ic{display:inline-flex;color:var(--color-accent-strong)}
.ds-tuto-pastille__ic .ds-ic{width:14px;height:14px;fill:currentColor;stroke-width:1.4}
.ds-tuto-pastille__duree{color:var(--color-muted)}
.ds-tuto-pastille__duree::before{content:"·";margin-right:6px}
.ds-tuto-pastille:hover .ds-tuto-pastille__corps{border-color:var(--color-accent);color:var(--color-text)}
.ds-tuto-pastille:focus-visible{outline:none}
.ds-tuto-pastille:focus-visible .ds-tuto-pastille__corps{outline:2px solid var(--color-accent-strong);outline-offset:2px}
.ds-tuto-pastille--eclat .ds-tuto-pastille__corps{animation:ds-tuto-eclat 1.2s var(--ease,ease) 1}
@keyframes ds-tuto-eclat{0%{box-shadow:0 0 0 0 var(--color-accent)}100%{box-shadow:0 0 0 10px transparent}}
.ds-tuto-ligne{margin:0 0 var(--space-3);display:flex;justify-content:flex-start}
.ds-espace-cadre .ds-tuto-ligne{margin:var(--space-3) var(--space-4) 0}
.ds-tuto-carte{display:flex;align-items:center;gap:var(--space-3);margin:0 0 var(--space-4);padding:var(--space-2) var(--space-3) var(--space-2) var(--space-4);border:1px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-accent-soft)}
.ds-espace-cadre .ds-tuto-carte{margin:var(--space-3) var(--space-4) 0}
.ds-tuto-carte[hidden]{display:none}
.ds-tuto-carte__ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--color-surface);color:var(--color-accent-strong)}
.ds-tuto-carte__ic .ds-ic{width:16px;height:16px;fill:currentColor;stroke-width:1.4}
.ds-tuto-carte__texte{flex:1 1 12rem;min-width:0;margin:0;display:flex;flex-direction:column;gap:2px;font-size:var(--text-body);color:var(--color-text)}
.ds-tuto-carte__texte span{font-size:var(--text-meta);color:var(--color-text-2)}
.ds-tuto-carte__gestes{flex:none;display:flex;align-items:center;gap:var(--space-2)}
.ds-tuto-carte__gestes form{margin:0;display:flex}
.ds-contenu:has([data-ds-bienvenue]:not([hidden])) .ds-tuto-carte{display:none}
#ds-tuto{width:min(760px,calc(100vw - 32px))}
.ds-tuto{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.ds-tuto__titre{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;font-size:var(--text-body)}
.ds-tuto__duree{font-size:var(--text-meta);color:var(--color-muted);font-weight:400}
.ds-tuto__video{display:block;width:100%;height:auto;aspect-ratio:16/9;background:var(--color-text);border-radius:var(--radius-sm)}
.ds-tuto__soustitre{margin:var(--space-2) 0 0;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);text-transform:none}
.ds-tuto__liste{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.ds-tuto__liste li{min-width:0}
.ds-tuto__liste a{display:flex;align-items:center;gap:var(--space-2);min-height:var(--touch);padding:6px var(--space-3);border-radius:var(--radius-sm);color:var(--color-text);text-decoration:none}
.ds-tuto__liste a:hover{background:var(--color-surface-2)}
.ds-tuto__liste a[aria-current]{background:var(--color-accent-soft);font-weight:var(--weight-bold)}
.ds-tuto__puce{flex:none;display:inline-flex;color:var(--color-accent-strong)}
.ds-tuto__puce .ds-ic{width:14px;height:14px;fill:currentColor;stroke-width:1.4}
.ds-tuto__nom{flex:1 1 auto;min-width:0}
.ds-tuto__tous .ds-ic{width:14px;height:14px;fill:currentColor;stroke-width:1.4;color:var(--color-accent-strong)}
.ds-tuto__tous{display:inline-flex;align-items:center;gap:var(--space-2);min-height:var(--touch);color:var(--color-text-2)}
@media (max-width:760px){
  .ds-tuto-pastille{min-height:var(--touch)}
  .ds-tuto-carte{flex-wrap:wrap;padding:var(--space-3)}
  .ds-tuto-carte__texte{flex-basis:calc(100% - 32px - var(--space-3))}
  .ds-tuto-carte__gestes{flex:1 1 100%;justify-content:flex-end}
  .ds-tuto-carte__gestes .ds-btn{min-height:var(--touch)}
  #ds-tuto .ds-modale__corps{padding:var(--space-4)}
}

/* « Et N autres projets » (10 octobre 2026) : le bloc « Mes projets » montre
   tous les projets de la personne — les autres se déplient sur place. Au
   téléphone, la règle des cinq lignes tient : « Tout voir (N) » y mène. */
.ds-encore--projets > summary{min-height:36px}
.ds-encore--projets > ul{margin-top:var(--space-1)}
@media (max-width:760px){.ds-encore--projets{display:none}}

/* PLUS AUCUN DÉFILEMENT DANS UN BLOC (Jean-David, 10 octobre 2026, 18 h : «
   Bouton Tout voir »). La hauteur choisie d’un bloc est un nombre de lignes
   (deux, quatre, six) : le bloc montre ces lignes entières, « Tout voir (N) »
   déplie le reste sur place et le bloc grandit, « Réduire » le referme. Sans
   script, sans hauteur en pixels, sans rien qui défile. */
.ds-pli{margin-top:var(--space-1)}
/* (10 octobre 2026, relecture) LE PLI NE DÉPEND PAS DE `:has()`. Par défaut,
   toutes les lignes se lisent et le bouton n’existe pas : un navigateur qui
   ne connaît pas `:has()` (ni `@supports selector()`) montre tout. Le pli —
   lignes cachées, bouton « Afficher les N autres » — n’existe que là où le
   navigateur sait le rouvrir. Aucun script. */
.ds-pli__reste{display:block}
.ds-pli__bouton{display:none}
@supports selector(:has(*)){
  .ds-pli__reste{display:none}
  .ds-pli:has(> .ds-pli__bouton[open]) > .ds-pli__reste{display:block}
  .ds-pli__bouton{display:block}
}
.ds-pli__bouton > summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;min-height:36px;padding:0 var(--space-3);margin-top:var(--space-1);
  border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text)}
.ds-pli__bouton > summary::-webkit-details-marker{display:none}
.ds-pli__bouton > summary:hover{background:var(--color-surface-2)}
.ds-pli__bouton > summary:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}
.ds-pli__fermer,.ds-pli__bouton[open] .ds-pli__ouvrir{display:none}
.ds-pli__bouton[open] .ds-pli__fermer{display:inline}
.ds-pli__reste > .ds-actions > .ds-action:first-child{border-top:1px solid var(--color-divider)}
/* « MA SEMAINE » GARDE SA HAUTEUR TOUS LES JOURS (12 octobre 2026). En
   colonnes, chaque jour montre une ligne ; les autres événements du jour
   (`ds-evt--pliee`) se déplient par « Afficher les N autres », posé dans la
   tête du bloc : il n’ajoute rien à sa hauteur, et la disposition par défaut
   tient à 1366 × 700 le lundi comme le dimanche. Même règle que le pli : sans
   `:has()`, tout se lit et le bouton n’existe pas ; au téléphone, la règle des
   cinq lignes et « Tout voir » tiennent, sans ce geste. */
.ds-pli__bouton--tete > summary{min-height:26px;margin:0;padding:0 var(--space-1);border:0;font-weight:var(--weight-medium);color:var(--color-info);white-space:nowrap}
.ds-pli__bouton--tete > summary:hover{background:none;text-decoration:underline}
.ds-bloc:has(.ds-pli__bouton--tete) .ds-bloc__titre > span{white-space:nowrap}
/* Les mots tiennent dans la tête : entiers sur un grand écran, « + N autres »
   sur un portable, « + N » quand la colonne est plus étroite encore. */
.ds-pli__moyen,.ds-pli__court{display:none}
@media (max-width:1599px){
  .ds-pli__long{display:none}
  .ds-pli__moyen{display:inline}
}
@media (max-width:1299px){
  .ds-pli__moyen{display:none}
  .ds-pli__court{display:inline}
  .ds-pli__bouton--tete > summary{padding:0;font-size:var(--text-meta)}
}
@supports selector(:has(*)){
  @media (min-width:761px){
    .ds-bloc[data-type="semaine"]:not(:has(.ds-pli__bouton--tete[open])) .ds-evt--pliee{display:none}
  }
}
@media (max-width:760px){
  .ds-pli__bouton--tete{display:none}
}
@media (max-width:760px){
  .ds-pli__bouton > summary{min-height:var(--touch)}
  /* Au téléphone, la règle des cinq lignes tient : « Tout voir (N) » mène à l’écran complet. */
  .ds-bloc--suite .ds-pli{display:none}
}

/* « MA SEMAINE » : UN ÉVÉNEMENT EN RETARD PORTE UNE PETITE PASTILLE (Jean-David,
   10 octobre 2026, 18 h). Le titre reste noir, le point rouge ; à droite, la
   pastille « Retard » et, à sa gauche, le nom du projet quand la place
   suffit. Quand elle manque, le nom passe sur une seconde ligne que la zone
   ne montre pas : la pastille reste seule — aucun nom n’est coupé. */
.ds-evt--ligne.ds-evt--danger b{color:inherit}
.ds-evt--ligne.ds-evt--danger b{flex:0 1 auto}
.ds-evt__droite{flex:1 1 0;min-width:58px;display:flex;flex-direction:row-reverse;flex-wrap:wrap;align-items:center;justify-content:flex-start;column-gap:6px;height:20px;overflow:hidden}
.ds-evt__droite > *{height:20px;display:inline-flex;align-items:center;flex:none}
.ds-evt__droite .ds-evt__projet,.ds-colonne .ds-evt__droite .ds-evt__projet{max-width:none;white-space:nowrap}
.ds-evt__pastille{padding:0 7px;border-radius:var(--radius-pill);background:var(--color-danger-bg);color:var(--color-danger);font-size:11.5px;font-weight:var(--weight-bold);line-height:20px}
@media (max-width:760px){
  /* Même chose au téléphone : la pastille à droite du titre, le projet avec elle s’il tient. */
  .ds-colonne .ds-evt--ligne.ds-evt--danger{flex-wrap:nowrap}
  .ds-colonne .ds-evt__droite .ds-evt__projet{flex:none;max-width:none;padding-left:0;text-align:right}
}
.ds-colonne .ds-evt--ligne.ds-evt--danger{gap:6px}

/* Relecture à l’œil des captures (10 octobre 2026, 18 h 30) : sur un portable,
   le chiffre d’avancement d’un projet tombait sous sa barre ; au téléphone,
   le point qui précède « N jours de retard » restait seul en début de ligne. */
@media (max-width:760px){
  .ds-maintenant__retard::before{content:none}
}

/* RELECTURE DES CAPTURES, 10 OCTOBRE 2026, 19 H (téléphone et grand écran).
   · Un bloc ne s’étire plus au-delà de son contenu (« Prochaines actions »
     laissait un grand vide) : chaque colonne finit où finit son dernier bloc.
   · Grand écran : la disposition par défaut tient en un écran à 1672 × 941,
     comme la planche (elle faisait 999 px).
   · Téléphone, « À faire maintenant » : une petite vignette à gauche du titre
     et du nom du projet — la photo ne reste plus seule sur sa ligne.
   · Téléphone, « Prochaines actions » : le numéro et l’icône en haut, à côté
     du titre ; le bouton sur toute la largeur de la carte ; « … » en coin.
   · Téléphone : « Points d’attention » tient sur une ligne. */
.ds-blocs--colonnes{align-items:start}
@media (min-width:1500px){
  .ds-contenu:has(> .ds-blocs--colonnes){padding-bottom:var(--space-3)}
  .ds-accueil__tete--planche{margin-bottom:10px}
  .ds-colonne > .ds-bloc[data-type="aujourdhui"]{padding-bottom:8px}
  .ds-colonne .ds-projets{gap:2px}
  .ds-colonne .ds-projets a{padding-top:3px;padding-bottom:3px}
  .ds-colonne > .ds-bloc[data-type="projets"]{padding-bottom:10px}
}
@media (max-width:760px){
  .ds-colonne .ds-maintenant__carte{align-items:flex-start;gap:var(--space-3)}
  .ds-colonne .ds-vignette--maintenant{width:48px;height:48px;border-radius:var(--radius-sm)}
  .ds-colonne .ds-maintenant__corps{flex:1 1 0;min-width:0}
  .ds-colonne .ds-maintenant__titre{font-size:18px}
  .ds-colonne .ds-prochaines .ds-prochaine{position:relative;align-items:flex-start;gap:var(--space-2)}
  .ds-colonne .ds-prochaine__rang{width:24px;height:24px;margin-top:6px}
  .ds-colonne .ds-prochaine__ic{width:36px;height:36px}
  .ds-colonne .ds-prochaine__ic .ds-ic{width:20px;height:20px}
  /* Le texte garde plus de la moitié de l’écran (« aucune colonne de texte ne
     s’étrangle ») : seul le titre laisse la place du « … » en coin. */
  .ds-colonne .ds-prochaine .ds-action__corps{flex:1 1 0;min-width:0}
  .ds-colonne .ds-prochaine .ds-action__titre{padding-right:32px}
  .ds-colonne .ds-prochaine .ds-action__gestes{width:100%;margin-left:0}
  .ds-colonne .ds-prochaine .ds-btn--fleche{flex:1 1 auto;width:100%;min-width:0}
  .ds-colonne .ds-prochaine .ds-ligne__menu{position:absolute;top:var(--space-2);right:0;width:auto;margin-right:0}
  .ds-bloc .ds-carte__tete{gap:6px}
  .ds-bloc .ds-carte__tete .ds-bloc__titre{gap:6px;font-size:17px}
}

/* RÉSERVES DE LA RELECTURE (10 octobre 2026, soir).
   · Le menu « … » d’un bloc reste dans l’écran : il s’ouvre vers le haut pour
     les blocs du bas, et partout où la place manque dessous (public/ds/ds.js
     pose `ds-bloc__menu--haut`) — sans jamais défiler en lui-même.
   · Le pourcentage d’un projet reste sur la ligne de sa barre, à toutes les
     largeurs : le milieu de ses chiffres à 3 px au plus du milieu de la barre
     (mesuré par la suite), deux pixels remontés pour l’œil. */
.ds-colonne--bas .ds-bloc__menu:not(.ds-bloc__menu--bas) .ds-menu,.ds-bloc__menu--haut .ds-menu{top:auto;bottom:calc(100% + 6px)}
@media (min-width:761px){
  .ds-colonne .ds-projets .ds-progression__valeur{position:relative;top:-2px}
}

/* LA BARRE DE GAUCHE DANS UNE FENÊTRE BASSE (lot L-72, 11 octobre 2026). Qui a
   « Voir les finances du cabinet » a une neuvième entrée, « Finances » : dans
   une fenêtre de moins de 700 px de haut, « Aide », en bas, sortait de
   l’écran. La barre se resserre alors (marges seulement : chaque entrée garde
   ses 44 px), et tout reste visible sans défiler. */
@media (min-width:761px) and (max-height:700px){
  .ds-lat{padding-top:var(--space-3);padding-bottom:var(--space-2)}
  .ds-lat__marque{margin-bottom:var(--space-3)}
  .ds-nav{gap:0}
  .ds-nav--bas{margin-top:var(--space-2);gap:2px}
}
/* L’écran Documents du cabinet (11 octobre 2026 — « on coche plusieurs pièces
   et on agit sur toutes »). Les cases et la barre sont celles de l’écran d’un
   projet ; ici, les gestes n’apparaissent qu’une fois une pièce cochée
   (« Tout choisir » reste), la liste « Lot » est celle du projet des pièces
   cochées — grisée, avec sa phrase, quand elles viennent de plusieurs —, et
   au téléphone la barre se colle en bas, au-dessus de la barre de navigation. */
.ds-docs-groupe--cabinet .ds-docs-groupe__outils{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3);flex:1 1 100%;min-width:0}
.ds-docs-groupe--cabinet:not(:has([data-ds-choix]:checked)) .ds-docs-groupe__outils{display:none}
.ds-docs-groupe__lot{flex:1 1 160px;min-width:160px;max-width:260px}
.ds-docs-groupe__lot[hidden],.ds-docs-groupe__pourquoi[hidden],.ds-docs-groupe__parprojet[hidden]{display:none}
.ds-docs-groupe__barre .ds-docs-groupe__lot .ds-champ{max-width:none;min-width:0}
.ds-docs-groupe__lot--grise .ds-select{opacity:.55;cursor:not-allowed}
.ds-docs-groupe__lot .ds-docs-groupe__sanslot{margin:0}
.ds-docs-groupe__pourquoi{flex:1 1 100%;margin:0;overflow-wrap:anywhere}
.ds-docs-groupe__projets a{display:inline-block;margin-left:var(--space-2);min-height:24px}
.ds-docs-groupe__compte{display:none}
.ds-docs-groupe__parprojet{align-items:center;margin:0}
.ds-docs-groupe__parprojet .ds-puce[aria-pressed="true"]{background:var(--color-text);color:var(--color-on-dark);border-color:var(--color-text)}
.ds-docs-groupe__tete{display:none}
.ds-docs-groupe__pourquoi-bouton[hidden]{display:none}
@media (max-width:767px){
  /* La barre prend la hauteur de son contenu, sans défilement interne (règle
     du 10 octobre 2026) ; elle reste basse : le compte et « pourquoi ? » sur
     une ligne, Type et Lot côte à côte, les gestes sur une ligne. */
  .ds-docs-groupe--cabinet .ds-docs-groupe__outils{position:fixed;left:0;right:0;bottom:calc(var(--bottom-nav) + env(safe-area-inset-bottom));z-index:var(--z-nav);
    background:var(--color-surface);border-top:1px solid var(--color-border);box-shadow:var(--shadow-raised);
    padding:var(--space-2) var(--space-4) var(--space-3);gap:var(--space-2)}
  .ds-docs-groupe--cabinet .ds-docs-groupe__tete{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex:1 1 100%;min-width:0}
  .ds-docs-groupe--cabinet .ds-docs-groupe__compte{display:block;margin:0;font-weight:var(--weight-bold)}
  .ds-docs-groupe__pourquoi-bouton{border:0;background:none;padding:0;min-height:24px;font:inherit;font-size:var(--text-small);color:var(--color-text-2);text-decoration:underline;cursor:pointer}
  .ds-docs-groupe--replie:not(.ds-docs-groupe--pourquoi-ouvert) .ds-docs-groupe__pourquoi{display:none}
  .ds-docs-groupe--cabinet .ds-docs-groupe__outils > .ds-champ,.ds-docs-groupe--cabinet .ds-docs-groupe__lot{flex:1 1 calc(50% - var(--space-2));min-width:0;max-width:none}
  .ds-docs-groupe--cabinet .ds-docs-groupe__outils .ds-champ{gap:2px}
  .ds-docs-groupe--cabinet .ds-docs-groupe__outils .ds-champ__label{font-size:var(--text-meta);margin:0}
  .ds-docs-groupe--cabinet .ds-docs-groupe__gestes{flex:1 1 100%;gap:var(--space-1)}
  .ds-docs-groupe--cabinet .ds-docs-groupe__gestes .ds-btn{flex:1 1 auto;min-height:var(--touch);padding:0 var(--space-1);font-size:var(--text-meta);white-space:nowrap}
  /* La fin de la liste ne reste pas sous la barre. */
  .ds-docs-groupe--cabinet:has([data-ds-choix]:checked){padding-bottom:300px}
}

/* (11 octobre 2026 — lot B des « allers-retours sur les plans » : ON ANNOTE À
   DEUX SUR LE PLAN, src/remarques.js. Décision de Jean-David du 10 octobre,
   11 h 36 : « le client annote sur le plan (pastille, réponse, “traité”,
   l’autre est prévenu) ».) Mêmes classes sur la fiche du cabinet et sur
   l’écran « plan » du client. Une pastille a la teinte de qui l’a posée —
   cabinet ou client — et son numéro ; traitée, elle est grisée ET cochée : la
   couleur ne dit jamais seule. Aucun bloc ne défile à l’intérieur : la page
   défile, le plan garde toute sa largeur. */
.kb-point--client{background:var(--color-info-solid)}
.kb-point--traitee{background:var(--color-muted);opacity:.85}
.kb-point--traitee::after{content:"✓";position:absolute;right:-6px;top:-8px;width:16px;height:16px;border-radius:50%;background:var(--color-success-solid);color:var(--color-on-dark);font-size:10px;line-height:16px;text-align:center}
.kb-num--client{background:var(--color-info-solid)}
.kb-num--traitee{background:var(--color-muted)}
.kb-point.kb-ici{background:var(--color-accent-strong);opacity:1;transform:translate(-50%,-50%) scale(1.35);box-shadow:0 0 0 6px var(--color-accent-soft),var(--shadow-raised)}
.ds-remarque.kb-ici{background:var(--color-accent-soft)}
.ds-vis-scene--lecture{cursor:default}
.ds-plan-scene{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}
.ds-plan-scene img,.ds-plan-scene canvas{pointer-events:none;-webkit-user-drag:none}
.ds-vis-scene.kb-arme{outline:3px solid var(--color-warning-solid);outline-offset:2px;cursor:crosshair}
.ds-remarque .kb-num{color:var(--color-on-dark);font-size:12px}
.ds-remarque .kb-num--sans{color:var(--color-muted)}
.ds-remarques__resume{margin:0 0 var(--space-3)}
.ds-remarque[data-vers-point]{cursor:pointer}
.ds-remarque[data-vers-point]:focus-visible{outline:2px solid var(--color-info-solid);outline-offset:2px}
.ds-remarque--ouverte{border:1px solid var(--color-border);background:var(--color-surface)}
.ds-remarque--traitee{border:1px solid var(--color-border);background:var(--color-surface-2)}
.ds-remarque--traitee>.ds-remarque__corps>p{color:var(--color-text-2)}
.ds-remarque__corps{display:flex;flex-direction:column;gap:var(--space-1);min-width:0;flex:1}
.ds-remarque__etat{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}
.ds-remarque__etat:empty{display:none}
.ds-rfil{list-style:none;margin:var(--space-1) 0 0;padding:0 0 0 var(--space-3);border-left:2px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-2)}
.ds-rfil__msg{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-2);min-width:0}
.ds-rfil__msg--client{background:var(--color-info-bg)}
.ds-rfil__msg p{margin:0;font-size:var(--text-small);overflow-wrap:anywhere;white-space:pre-wrap}
.ds-rfil__gestes{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-1);margin-top:var(--space-1)}
.ds-rfil__clore .ds-btn{padding-left:0}
.ds-rfil__repondre{display:flex;gap:var(--space-2);align-items:flex-end;margin:0}
.ds-rfil__repondre textarea.ds-rfil__champ{flex:1;min-width:0;min-height:var(--touch);height:var(--touch);padding:10px var(--space-3);resize:vertical;font:inherit;font-size:var(--text-small);line-height:1.4}
@supports (field-sizing:content){.ds-rfil__repondre textarea.ds-rfil__champ{field-sizing:content;height:auto}}
.ds-rfil__clore{margin:0}
.ds-pile__remarques{color:var(--color-warning);font-weight:var(--weight-bold)}
.ds-pile__du-client{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);margin:0 0 var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-info-bg);font-size:var(--text-small)}
.ds-pile__restees{margin:0 0 var(--space-3)}
/* L’écran « plan » du client : plus large que ses autres écrans — le plan a besoin de place. */
.ds-client.ds-client-plan-ecran{max-width:1240px}
.ds-plan-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}
.ds-plan-piece{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-plan-geste{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-4)}
.ds-plan-geste__sans{min-height:var(--touch)}
.ds-plan-piece #kb-ou{margin:0;text-align:center}
.ds-plan-form{padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2)}
.ds-plan-form[hidden]{display:none}
.ds-plan-form__gestes{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-plan-remarques,.ds-plan-suite,.ds-plan-versions{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4)}
.ds-plan-remarques .ds-h3,.ds-plan-versions .ds-h3{margin:0}
.ds-plan-remarques .ds-remarques{margin:0}
.ds-plan-suite p{margin:0}
.ds-plan-suite .ds-btn{align-self:flex-start}
.ds-client-plan__remarques{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin:0;font-size:var(--text-small);color:var(--color-text-2)}
.ds-client-plan__compte{display:inline-flex;align-items:center;gap:4px;padding:2px var(--space-2);border-radius:var(--radius-pill);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-meta)}
.ds-client-plan__compte .ds-ic{width:14px;height:14px}
.ds-client-plan__compte b{font-size:var(--text-meta)}
.ds-client-plan__brut{align-self:center}
.ds-client-plan__deposer{margin-top:var(--space-2)}
@media (pointer:coarse){
  .kb-point{width:32px;height:32px;line-height:28px}
}
/* Au bureau, le plan reste collé en haut de l’écran pendant qu’on lit les
   remarques à côté. Il garde toute sa hauteur : aucun bloc ne défile à
   l’intérieur, aucune hauteur n’est plafonnée (règle de Jean-David). */
@media (min-width:1101px){
  .ds-planvue>.ds-plan-piece{position:sticky;top:calc(var(--topbar) + var(--space-3));align-self:start}
}
@media (max-width:560px){
  .ds-rfil__repondre{flex-direction:column;align-items:stretch}
  .ds-plan-geste .ds-btn,.ds-plan-form__gestes .ds-btn,.ds-plan-suite .ds-btn,.ds-client-plan__deposer>summary,.ds-client-plan__deposer form .ds-btn{width:100%;align-self:stretch}
  .ds-plan-form,.ds-plan-remarques,.ds-plan-suite,.ds-plan-versions{padding:var(--space-3)}
  .ds-pile__du-client .ds-btn{width:100%}
}
/* « AVANCEMENT ET RÉSERVES » ET « PLANNING » DU CLIENT, NEUFS (11 octobre 2026,
   src/espaceclientchantier.js — premier groupe de l’espace complet du client,
   « le chantier d’abord »). Pensés au téléphone d’abord : une colonne de
   cartes, une frise VERTICALE (rien ne se fait défiler de côté), chaque bloc
   prend la hauteur de son contenu, aucun nom ne se coupe. */
.ds-ecc{display:flex;flex-direction:column;gap:var(--gap-cards)}
.ds-ecc > .ds-page-tete{margin-bottom:0}
.ds-ecc-carte{scroll-margin-top:80px}
.ds-ecc-carte .ds-carte__tete{flex-wrap:wrap}
.ds-ecc-compte{display:inline-block;font-size:var(--text-meta);font-weight:var(--weight-regular);color:var(--color-muted);margin-left:var(--space-2)}
.ds-ecc-intro{margin:0 0 var(--space-4)}
.ds-ecc-suite{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);margin:var(--space-4) 0 0}
.ds-ecc-phase .ds-ecc-suite,.ds-ecc-suite--page{margin:0;justify-content:flex-start}
.ds-ecc-attend{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-left:4px solid var(--color-warning-solid);
  border-radius:var(--radius-md);background:var(--color-surface);color:inherit;text-decoration:none}
.ds-ecc-attend > .ds-ic{flex:none;color:var(--color-warning)}
.ds-ecc-attend > span:not(.ds-ecc-attend__voir){flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-ecc-attend b{font-size:var(--text-small)}
.ds-ecc-attend span span{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:anywhere}
.ds-ecc-attend__voir{flex:none;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-info)}
.ds-ecc-attend:hover .ds-ecc-attend__voir{text-decoration:underline}
/* La phase du projet, en tête. */
.ds-ecc-phase{display:flex;flex-direction:column;gap:var(--space-4)}
.ds-ecc-phase p{margin:0}
.ds-ecc-phase__tete{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4)}
.ds-ecc-phase__tete .ds-h2{overflow-wrap:anywhere}
.ds-ecc-reperes{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecc-reperes li{display:flex;align-items:flex-start;gap:var(--space-2);font-size:var(--text-small)}
.ds-ecc-reperes .ds-ic{flex:none;color:var(--color-muted);margin-top:1px}
/* Les travaux, lot par lot. */
.ds-ecc-lots{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:var(--space-3);align-items:start}
.ds-ecc-lot{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);
  background:var(--color-surface);scroll-margin-top:80px;min-width:0}
.ds-ecc-lot p{margin:0}
.ds-ecc-lot__tete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2)}
.ds-ecc-lot__tete b{overflow-wrap:anywhere}
.ds-ecc-etapes{list-style:none;margin:var(--space-1) 0 0;padding:var(--space-3) 0 0;border-top:1px solid var(--color-divider);display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecc-etapes li{display:flex;gap:var(--space-2);align-items:flex-start}
.ds-ecc-etapes li div{display:flex;flex-direction:column;min-width:0}
.ds-ecc-etapes b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-ecc-etapes span{font-size:var(--text-meta);color:var(--color-muted)}
.ds-ecc-coche{width:22px;height:22px;border-radius:50%;background:var(--color-success-bg);color:var(--color-success);display:flex;align-items:center;justify-content:center;flex:none}
.ds-ecc-coche .ds-ic{width:14px;height:14px}
/* (11 octobre 2026) Une étape déclarée par l’entreprise puis contrôlée et publiée : la coche en bleu, sa source écrite dessous. */
.ds-ecc-etape--entreprise .ds-ecc-coche{background:var(--color-info-bg);color:var(--color-info)}
.ds-ecc-lot__reserves a{display:inline-flex;align-items:center;gap:var(--space-2);min-height:24px;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-warning);text-decoration:none}
.ds-ecc-lot__reserves a:hover{text-decoration:underline}
.ds-ecc-lot__reserves .ds-ic{width:16px;height:16px;flex:none}
/* Les réserves. */
.ds-ecc-chiffres{margin:0 0 var(--space-3)}
.ds-ecc-groupe{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text-2);margin:var(--space-4) 0 var(--space-2)}
.ds-ecc-groupe span{display:inline-block;min-width:22px;padding:0 6px;border-radius:var(--radius-pill);background:var(--color-surface-3);text-align:center;font-size:var(--text-meta)}
.ds-ecc-reserves{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecc-reserve{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);scroll-margin-top:80px}
.ds-ecc-reserve--averifier{border-left:4px solid var(--color-warning-solid)}
.ds-ecc-reserve--ouverte{border-left:4px solid var(--color-info-solid)}
.ds-ecc-reserve--levee{background:var(--color-surface-2)}
.ds-ecc-reserve--levee .ds-inv-puce{background:var(--color-success-bg);color:var(--color-success)}
.ds-ecc-reserve__texte{flex:1 1 180px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-ecc-reserve__texte b{font-size:var(--text-small);overflow-wrap:anywhere}
.ds-ecc-reserve__texte i{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:anywhere}
.ds-ecc-reserve__texte .ds-meta{overflow-wrap:anywhere}
.ds-ecc-reserve__etat{flex:0 1 auto;min-width:0}
.ds-ecc .ds-badge{white-space:normal;text-align:left}
.ds-ecc-pv li{flex-wrap:wrap}
/* Le planning : ce qui attend une réponse, puis la frise verticale. */
.ds-ecc-carte--urgent{border-left:4px solid var(--color-danger-solid)}
.ds-ecc-decalages,.ds-ecc-echeances{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecc-decalages + .ds-ecc-echeances{margin-top:var(--space-3)}
.ds-ecc-decalage{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);scroll-margin-top:80px}
.ds-ecc-decalage p{margin:0;overflow-wrap:anywhere}
.ds-ecc-decalage--amoi{background:var(--color-surface-2)}
.ds-ecc-decalage[data-ecc-vue]{border-color:var(--color-success-solid)}
.ds-ecc-decalage__tete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2)}
.ds-ecc-decalage__tete b{overflow-wrap:anywhere}
.ds-ecc-decalage__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}
.ds-ecc-decalage__gestes form{flex:1 1 140px;margin:0}
.ds-ecc-decalage__gestes .ds-btn{width:100%;min-height:var(--touch)}
.ds-ecc-echeance{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md)}
.ds-ecc-echeance > div{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-ecc-echeance b{font-size:var(--text-small)}
.ds-ecc-echeance > div > span{font-size:var(--text-meta);color:var(--color-text-2);overflow-wrap:anywhere}
.ds-ecc-alerte{display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg);margin:0 0 var(--space-4)}
.ds-ecc-alerte > .ds-ic{flex:none;color:var(--color-warning)}
.ds-ecc-alerte p{margin:0 0 var(--space-1);font-size:var(--text-small)}
.ds-ecc-alerte p:last-child{margin:0}
.ds-ecc-frise{list-style:none;margin:0;padding:0}
.ds-ecc-pas{position:relative;display:flex;gap:var(--space-3);padding:0 0 var(--space-5)}
.ds-ecc-pas:last-child{padding-bottom:0}
.ds-ecc-pas::before{content:"";position:absolute;left:13px;top:28px;bottom:0;width:2px;background:var(--color-surface-3)}
.ds-ecc-pas:last-child::before{display:none}
.ds-ecc-pas--terminee::before{background:var(--color-success-solid)}
.ds-ecc-pas__point{width:28px;height:28px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;position:relative;z-index:1;
  background:var(--color-surface);border:2px solid var(--color-border);color:var(--color-muted)}
.ds-ecc-pas__point .ds-ic{width:16px;height:16px}
.ds-ecc-pas--terminee .ds-ecc-pas__point{background:var(--color-success-solid);border-color:var(--color-success-solid);color:var(--color-on-dark)}
.ds-ecc-pas--encours .ds-ecc-pas__point{border-color:var(--color-info-solid);box-shadow:0 0 0 4px var(--color-info-bg)}
.ds-ecc-pas--retard .ds-ecc-pas__point{border-color:var(--color-danger-solid);box-shadow:0 0 0 4px var(--color-danger-bg)}
.ds-ecc-pas--encours .ds-ecc-pas__point::after,.ds-ecc-pas--retard .ds-ecc-pas__point::after{content:"";width:10px;height:10px;border-radius:50%;background:var(--color-info-solid)}
.ds-ecc-pas--retard .ds-ecc-pas__point::after{background:var(--color-danger-solid)}
.ds-ecc-pas--livraison .ds-ecc-pas__point{background:var(--color-text);border-color:var(--color-text);color:var(--color-on-dark)}
.ds-ecc-pas__corps{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;padding-top:2px}
.ds-ecc-pas__tete{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}
.ds-ecc-pas__tete b{overflow-wrap:anywhere}
.ds-ecc-pas__dates{font-size:var(--text-small);font-weight:var(--weight-bold)}
.ds-ecc-pas--terminee .ds-ecc-pas__tete b,.ds-ecc-pas--terminee .ds-ecc-pas__dates{color:var(--color-text-2)}
.ds-ecc-pas--terminee .ds-ecc-pas__dates{font-weight:var(--weight-regular)}
.ds-ecc-regle{margin:var(--space-4) 0 0}
@media (max-width:767px){
  .ds-ecc-suite .ds-btn,.ds-ecc-echeance .ds-btn{width:100%}
  .ds-ecc-reserve__etat{flex:1 1 100%;padding-left:calc(36px + var(--space-3))}
}
/* « DEVIS » ET « COMPARATIF » DU CLIENT, NEUFS (12 octobre 2026,
   src/espaceclientbudget.js — deuxième groupe de l’espace complet du client,
   « Mon budget »). Pensés au téléphone d’abord : chaque devis, chaque offre
   est une carte (plus de tableau à faire défiler), le montant se lit en
   grand, ce qui attend une signature est en tête. Chaque bloc prend la
   hauteur de son contenu ; aucun nom, aucun montant ne se coupe. */
.ds-ecb{display:flex;flex-direction:column;gap:var(--gap-cards)}
.ds-ecb > .ds-page-tete{margin-bottom:0}
.ds-ecb p{margin:0}
.ds-ecb .ds-badge{white-space:normal;text-align:left}
.ds-ecb-carte,.ds-ecb-lot{scroll-margin-top:80px}
.ds-ecb-carte .ds-carte__tete{flex-wrap:wrap}
.ds-ecb-carte--urgent{border-left:4px solid var(--color-danger-solid)}
.ds-ecb-compte{display:inline-block;font-size:var(--text-meta);font-weight:var(--weight-regular);color:var(--color-muted);margin-left:var(--space-2)}
.ds-ecb p.ds-ecb-intro{margin:0 0 var(--space-4)}
.ds-ecb-entete{padding:0 var(--space-1)}
.ds-ecb-entete .ds-h3{margin:0 0 var(--space-2)}
.ds-ecb-entete p.ds-ecb-intro{margin:0 0 var(--space-2)}
.ds-ecb-suite{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.ds-ecb-montant{font-size:22px;font-weight:var(--weight-bold);line-height:1.2;color:var(--color-text);overflow-wrap:anywhere}
.ds-ecb-attend{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-left:4px solid var(--color-danger-solid);
  border-radius:var(--radius-md);background:var(--color-surface);color:inherit;text-decoration:none}
.ds-ecb-attend > .ds-ic{flex:none;color:var(--color-danger)}
.ds-ecb-attend > span:not(.ds-ecb-attend__voir){flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-ecb-attend b{font-size:var(--text-small)}
.ds-ecb-attend span span{font-size:var(--text-meta);color:var(--color-muted);overflow-wrap:anywhere}
.ds-ecb-attend__voir{flex:none;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-info)}
/* L’avis, la recommandation de l’architecte : un filet doré, comme sur une pièce annotée. */
.ds-ecb-avis{border-left:3px solid var(--color-accent);padding:var(--space-1) 0 var(--space-1) var(--space-3);display:flex;flex-direction:column;gap:2px}
.ds-ecb-avis__titre{font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-accent-strong)}
.ds-ecb-avis__texte{font-size:var(--text-small);color:var(--color-text-2);line-height:1.5;overflow-wrap:anywhere}
.ds-ecb-avis__texte--lignes{white-space:pre-line}
/* Les devis. */
.ds-ecb-liste,.ds-ecb-apportes,.ds-ecb-offres{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecb-devis{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);
  background:var(--color-surface);scroll-margin-top:80px;min-width:0}
.ds-ecb-devis--asigner{border-color:var(--color-danger-solid);background:var(--color-surface-2)}
.ds-ecb-devis__tete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:var(--space-2)}
.ds-ecb-devis__tete > div{min-width:0;flex:1 1 180px}
.ds-ecb-devis__qui{display:block;font-size:var(--text-body);overflow-wrap:anywhere}
.ds-ecb-signer{display:flex;flex-direction:column;gap:var(--space-2);margin-top:var(--space-1)}
.ds-ecb-signer .ds-btn{align-self:flex-start;min-height:var(--touch)}
.ds-ecb-apportes{margin:0 0 var(--space-4)}
.ds-ecb-apportes li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md)}
.ds-ecb-apportes li > div{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ds-ecb-apportes b{overflow-wrap:anywhere}
.ds-ecb-artisan{display:flex;flex-direction:column;gap:var(--space-3);align-items:flex-start}
.ds-ecb-artisan__champs{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:0 var(--space-3);width:100%}
.ds-ecb-artisan__champs .ds-champ{margin:0 0 var(--space-2);min-width:0}
.ds-ecb-artisan__champs input[type="file"]{padding:var(--space-2);height:auto;max-width:100%}
/* Le comparatif : un lot, ses offres en cartes côte à côte quand la place le permet. */
.ds-ecb-lot{display:flex;flex-direction:column;gap:var(--space-3)}
.ds-ecb-lot__tete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-2)}
.ds-ecb-lot__tete .ds-h3{overflow-wrap:anywhere}
.ds-ecb-lot__badges{display:flex;flex-wrap:wrap;gap:var(--space-2)}
.ds-ecb-offres{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));align-items:start}
.ds-ecb-offre{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);background:var(--color-surface);min-width:0}
.ds-ecb-offre--retenue{border-color:var(--color-success-solid)}
.ds-ecb-offre__tete{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:var(--space-2)}
.ds-ecb-offre__tete b{overflow-wrap:anywhere}
.ds-ecb-offre__chiffres{margin:var(--space-1) 0 0;padding:var(--space-3) 0 0;border-top:1px solid var(--color-divider);display:flex;flex-direction:column;gap:var(--space-2)}
.ds-ecb-offre__chiffres > div{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-3)}
.ds-ecb-offre__chiffres dt{font-size:var(--text-meta);color:var(--color-muted);flex:none}
.ds-ecb-offre__chiffres dd{margin:0;text-align:right;font-size:var(--text-small);min-width:0;overflow-wrap:anywhere}
.ds-ecb-offre__chiffres dd.ds-ecb-montant{font-size:20px}
.ds-ecb-offre__chiffres i{color:var(--color-muted)}
.ds-ecb-ecart--haut{color:var(--color-danger)}
.ds-ecb-attente{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warning-bg);display:flex;flex-direction:column;gap:var(--space-1)}
.ds-ecb-arbitrage{display:flex;flex-direction:column;gap:var(--space-2)}
@media (max-width:767px){
  .ds-ecb-suite .ds-btn,.ds-ecb-signer .ds-btn,.ds-ecb-artisan > .ds-btn,.ds-ecb-lire .ds-btn{width:100%;align-self:stretch}
}
/* « MES FACTURES » DU CLIENT, AU MÊME DESSIN QUE « DEVIS » ET « COMPARATIF »
   (décision de Jean-David du 12 octobre 2026, src/clientneuf.js). Les cartes
   du 5 octobre, rangées par état dans les cartes du groupe « Mon budget » ;
   ce qui est à régler vient en tête, son montant en grand, son geste d’abord. */
.ds-client-factures.ds-ecb .ds-client-totaux{margin:0}
.ds-client-factures.ds-ecb .ds-client-depot{margin:0}
.ds-client-factures.ds-ecb .ds-ecb-liste{margin:0}
.ds-client-factures.ds-ecb .ds-ecb-carte .ds-client-facture{box-shadow:none}
.ds-client-factures.ds-ecb .ds-client-facture--aregler{border-color:var(--color-danger-solid);background:var(--color-surface-2)}
.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__combien b{font-size:22px;line-height:1.2}
.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__gestes{flex-direction:column;align-items:flex-start;justify-content:flex-start}
.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__geste{align-items:flex-start;margin-left:0;max-width:none}
.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__geste p{text-align:left}
.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__geste .ds-btn{min-height:var(--touch)}
@media (max-width:767px){
  .ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__gestes,.ds-client-factures.ds-ecb .ds-client-facture--aregler .ds-client-facture__geste{align-items:stretch}
}

/* « SUR CET APPAREIL » (12 octobre 2026) — le bloc des notifications sur
   l'appareil, sous la carte de notifications (src/notifs.js, blocAppareil). */
.kb-appareil [hidden]{display:none!important}
.kb-appareil--neuf{margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--color-divider);display:flex;flex-direction:column;gap:var(--space-2)}
.kb-appareil--neuf .ds-meta{margin:0;line-height:1.5}
.kb-appareil__titre{margin:0;font-size:var(--text-body);font-weight:var(--weight-bold);color:var(--color-text)}
.kb-appareil__sous-titre{margin:var(--space-2) 0 0;font-size:var(--text-meta);font-weight:var(--weight-bold);color:var(--color-muted);text-transform:uppercase;letter-spacing:.06em}
.kb-appareil--neuf .kb-appareil__etat{display:flex;flex-direction:column;gap:var(--space-2);align-items:flex-start;padding:var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md);background:var(--color-surface-2)}
.kb-appareil--neuf .kb-appareil__etat .ds-meta{color:var(--color-text-2);font-size:var(--text-small)}
.kb-appareil--neuf .kb-appareil__gestes{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}
.kb-appareil--neuf .kb-appareil__gestes form{margin:0}
.kb-appareil--neuf .kb-appareil__alerte,.kb-appareil--neuf .kb-appareil__avis{margin:0;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-warning);font-size:var(--text-small);line-height:1.45}
.kb-appareil--neuf .kb-appareil__avis--bien{background:var(--color-success-bg);color:var(--color-success)}
.kb-appareil--neuf .kb-appareil__avis--souci,.kb-appareil--neuf .kb-appareil__souci{background:var(--color-danger-bg);color:var(--color-danger)}
.kb-appareil--neuf .kb-appareil__souci{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm)}
.kb-appareil--neuf .kb-appareil__pas{margin:0;padding-left:20px;font-size:var(--text-small);line-height:1.55;color:var(--color-text)}
.kb-appareil--neuf .kb-appareil__liste{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.kb-appareil--neuf .kb-appareil__liste li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px var(--space-3);align-items:center;padding:var(--space-2) var(--space-3);border:1px solid var(--color-divider);border-radius:var(--radius-md)}
.kb-appareil--neuf .kb-appareil__liste form{margin:0;grid-row:1 / span 2;grid-column:2}
.kb-appareil--neuf .kb-appareil__nom{font-size:var(--text-small);font-weight:var(--weight-bold);color:var(--color-text)}
.kb-appareil--neuf .kb-appareil__ici{font-weight:var(--weight-medium);color:var(--color-muted)}
.kb-appareil--neuf .kb-appareil__quand{font-size:var(--text-meta);color:var(--color-text-2);grid-column:1}
.kb-appareil__installer{margin-top:12px;padding-top:12px;border-top:1px solid var(--color-divider);display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.kb-appareil__installer p{margin:0}
#installer-kablann .kb-appareil__installer{border-top:0;padding-top:0;margin-top:0}
