:root, :root[data-theme="dark"]{
  --bg:#0a0c0e; --surface:#14171d; --surface-2:#1b1f27; --line:#323a47;
  --txt:#f0f3f8; --muted:#a3adbd; --faint:#7b8697;
  --accent:#5b8cff; --cyan:#22d3ee; --grad:#5b8cff; --btn-ink:#04121f;
  --ok:#34d399; --warn:#fbbf24; --bad:#f87171;
  --topbar-bg:rgba(10,12,14,.85); --grid-dot:rgba(255,255,255,.05);
  --agent-grad:linear-gradient(160deg,#161b26,#12151c); --edge-off:#2b3240;
  /* Cordée (app Chantiers) : fond du fil, bulle reçue, survol orange */
  --kx-canvas:#14171d; --kx-bubble:#1b1f27;
  --kx-hover:color-mix(in srgb, #e8781c 14%, var(--surface));
  --r:14px; --r-sm:10px;
}
:root[data-theme="light"]{
  --bg:#f4f6fa; --surface:#ffffff; --surface-2:#eef2f7; --line:#c5cede;
  --txt:#0f1420; --muted:#3a4658; --faint:#616d80;
  --accent:#3355e0; --cyan:#0e7d95; --grad:#3355e0; --btn-ink:#ffffff;
  --ok:#0f9d6b; --warn:#c67c05; --bad:#dc2626;
  --topbar-bg:rgba(255,255,255,.85); --grid-dot:rgba(0,0,0,.06);
  --agent-grad:linear-gradient(160deg,#ffffff,#eef2f7); --edge-off:#c4ccd8;
  /* Cordée : fil sur fond blanc façon Kraaft, bulle reçue en gris froid,
     survol des discussions en orange très clair (accent Cordée #e8781c). */
  --kx-canvas:#ffffff; --kx-bubble:#f1f3f8; --kx-hover:#fdf0e4;
}
*{box-sizing:border-box}
html,body{margin:0}
body{
  background:var(--bg); color:var(--txt);
  font-family:'Inter',system-ui,-apple-system,sans-serif;
  font-size:15px; line-height:1.5; -webkit-font-smoothing:antialiased;
}
h1,h2,h3,.brand-name,.brand-product{font-family:'Inter',sans-serif;letter-spacing:-.01em}
a{color:inherit;text-decoration:none}
.mono{font-family:"JetBrains Mono",monospace;font-size:.85em}

/* Topbar : grille 3 colonnes 1fr/auto/1fr — le milieu (logo d'espace) reste
   mathématiquement centré quel que soit le contenu, différent, de gauche et
   droite ; colonnes assignées explicitement (grid-column) donc valable même
   quand un seul des deux gabarits (cockpit / hors-cockpit) rend ses 3 zones. */
.topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;
  padding:14px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--topbar-bg);backdrop-filter:blur(8px);z-index:10}
.brand{display:flex;align-items:center;gap:9px;font-weight:600}
.brand-mark{width:26px;height:26px;display:block;flex:0 0 auto}
.brand-name{font-weight:700}
.brand-sep,.brand-product{color:var(--muted);font-weight:600}
.brand-product{color:var(--accent)}
.topbar-left{grid-column:1;display:flex;align-items:center;gap:8px;min-width:0}
.topbar-mid{grid-column:2;display:flex;align-items:center;justify-content:center;min-width:0}
.topbar-right{grid-column:3;display:flex;align-items:center;justify-content:flex-end;gap:10px;min-width:0}
.topbar-user{color:var(--muted);font-size:.9em}

/* ---- Logo d'espace (milieu du header cockpit) -----------------------------
   Identité du CLIENT ouvert : logo importé (réglages de l'espace) sinon
   repli 2 initiales sur squircle navy (mêmes codes que le rail/accueil).
   Cliquable + chevron UNIQUEMENT si le compte a plusieurs espaces (groupe). */
.tenant-mark,.tenant-mark-switch{display:inline-flex;align-items:center;gap:9px;
  padding:4px 8px 4px 4px;border-radius:999px;color:var(--txt);max-width:100%;font:inherit}
.tenant-mark-switch{border:1px solid transparent;background:none;cursor:pointer;transition:.12s}
.tenant-mark-switch:hover{background:var(--surface);border-color:var(--line)}
/* Logo importé : la plupart sont des lockups larges (wordmark), pas des
   icônes carrées — hauteur fixe + largeur libre (plafonnée) + `contain`,
   JAMAIS `cover` en carré (ça ne montrait qu'un fragment recadré, retour
   Tim 2026-09-03 sur le logo Padelcourt). Plaque blanche : les logos client
   sont conçus pour fond clair (cf. réglages de l'espace), reste lisible en
   thème sombre le temps qu'un client fournisse une variante dédiée. */
.tenant-mark-img{height:34px;width:auto;max-width:170px;object-fit:contain;
  display:block;flex:0 0 auto;border:1px solid var(--line);background:#fff;
  border-radius:var(--r-sm);padding:3px 9px;box-sizing:content-box}
.tenant-mark-fallback{width:34px;height:34px;border-radius:var(--r-sm);background:#171f31;color:#e7edff;
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.78em;
  flex:0 0 auto;letter-spacing:.02em}
.tenant-mark-name{font-weight:700;font-size:.98em;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:220px}
.tenant-mark-chev{color:var(--faint);display:flex;flex:0 0 auto}
.tenant-mark-img.sm{height:22px;max-width:90px;padding:2px 6px}
.tenant-mark-fallback.sm{width:24px;height:24px;border-radius:7px;font-size:.65em}

/* ---- Popovers du header (Popover API native, top layer) -------------------
   Positionnés en fixed sous la topbar sticky (~53px) : pas d'anchor
   positioning nécessaire, les boutons qui les ouvrent sont à position fixe. */
[popover]{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);
  color:var(--txt);box-shadow:0 14px 34px rgba(16,24,40,.20);padding:6px;margin:0;
  position:fixed;inset:auto;max-width:min(320px,92vw)}
[popover]:popover-open{display:flex;flex-direction:column}
#settings-pop{top:60px;right:20px;width:230px}
#tenant-switch-pop{top:60px;left:50%;transform:translateX(-50%);width:240px}
.settings-pop a{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:var(--r-sm);
  color:var(--muted);font-weight:500;font-size:.92em;transition:.12s}
.settings-pop a:hover{background:var(--surface-2);color:var(--txt)}
.settings-pop .navbadge{margin-left:auto}
.settings-sep{border:none;border-top:1px solid var(--line);margin:5px 4px;width:auto}
.settings-logout{color:var(--bad)}
.settings-logout:hover{background:color-mix(in srgb,var(--bad) 10%,transparent);color:var(--bad)}
.settings-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:none;color:var(--muted);cursor:pointer;transition:.12s;padding:0}
.settings-btn:hover{color:var(--txt);background:var(--surface)}
.settings-badge{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;font-size:.62em;padding:0 4px}
.tenant-switch-title{font-size:.72em;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  color:var(--faint);padding:7px 10px 5px}
.tenant-switch-item{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:var(--r-sm);
  color:var(--txt);font-weight:600;font-size:.92em}
.tenant-switch-item:hover{background:var(--surface-2)}
.tenant-switch-item.active{background:var(--surface-2);box-shadow:inset 2px 0 0 var(--accent)}

/* Shell + sidebar */
.shell{display:flex;min-height:calc(100vh - 53px)}
.sidebar{width:230px;flex:0 0 230px;border-right:1px solid var(--line);padding:22px 14px;display:flex;flex-direction:column;gap:6px}
/* Bascule de la sidebar (rétractable pour laisser pleine place à l'outil observé).
   Visible seulement quand il y a une sidebar (page tenant). */
.sidebar-toggle{display:none;background:none;border:1px solid var(--line);border-radius:var(--r-sm);
  width:34px;height:34px;cursor:pointer;color:var(--muted);font-size:1.05em;line-height:1;
  align-items:center;justify-content:center;margin-right:4px;flex:0 0 auto;transition:.12s}
.sidebar-toggle:hover{color:var(--txt);background:var(--surface)}
body.has-sidebar .sidebar-toggle,body.has-rail .sidebar-toggle{display:inline-flex}
html.sidebar-collapsed .sidebar{display:none}
html.sidebar-collapsed .content{max-width:none}
/* Rail replié : le contenu portail reste centré (il ne s'étale pas). */
html.sidebar-collapsed .content-portal{max-width:1180px}

/* ☰ replié = MODE FOCUS (demande Tim 2026-09-07) : le rail vertical ET la
   barre du haut s'effacent, l'outil prend tout l'écran. La topbar sort du flux
   (position:fixed) au lieu d'être masquée, pour que le ☰ reste cliquable et
   permette de revenir — en pastille flottante posée sur le contenu.
   Desktop seulement : sous 760px le ☰ ouvre un tiroir (cf. theme.js), la
   classe `sidebar-collapsed` héritée du desktop ne doit rien décider là. */
@media(min-width:761px){
  html.sidebar-collapsed .topbar{display:block;position:fixed;top:0;left:0;width:auto;
    padding:9px;border-bottom:none;background:none;backdrop-filter:none;z-index:40}
  html.sidebar-collapsed .topbar-mid,
  html.sidebar-collapsed .topbar-right{display:none}
  html.sidebar-collapsed .sidebar-toggle{background:var(--surface);
    box-shadow:0 2px 10px rgba(16,24,40,.14);opacity:.5;transition:.14s}
  html.sidebar-collapsed .sidebar-toggle:hover{opacity:1}
  html.sidebar-collapsed .shell{min-height:100vh}
  /* Le ☰ flottant se pose sur le coin haut-gauche de l'outil : depuis que la
     barre verticale de l'app y est, c'est elle qui descend d'un cran (la
     colonne liste, elle, ne touche plus le bord). */
  html.sidebar-collapsed .kx-rail-in{padding-top:54px}
}

/* ---- Rail d'apps (mode portail) -------------------------------------------
   Barre verticale fine, toute la hauteur : une icône squircle navy par app
   active (mêmes codes que les tuiles de l'accueil), l'app courante marquée
   d'un liseré accent. Sticky sous la topbar, scrolle si la liste déborde,
   réductible via ☰ (classe sidebar-collapsed, persistance commune). */
.app-rail{width:92px;flex:0 0 92px;border-right:1px solid var(--line);
  display:flex;flex-direction:column;gap:2px;padding:10px 8px;
  position:sticky;top:53px;height:calc(100vh - 53px);
  overflow-y:auto;overflow-x:hidden;scrollbar-width:none}
.app-rail::-webkit-scrollbar{display:none}
html.sidebar-collapsed .app-rail{display:none}
.rail-item{display:flex;flex-direction:column;align-items:center;gap:5px;
  padding:8px 2px 7px;border-radius:var(--r-sm);position:relative;
  color:var(--muted);transition:.12s}
.rail-item:hover{background:var(--surface);color:var(--txt)}
.rail-item.active{background:var(--surface-2);color:var(--txt)}
.rail-item.active::before{content:"";position:absolute;left:-8px;top:12px;bottom:12px;
  width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
.rail-ic{width:38px;height:38px;border-radius:12px;background:#171f31;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;
  border:1px solid rgba(255,255,255,.07);box-shadow:0 4px 10px rgba(23,31,49,.22)}
.rail-ic::after{content:"";position:absolute;inset:0;
  background:linear-gradient(155deg,rgba(91,140,255,.22),transparent 58%);pointer-events:none}
.rail-ic .ic{color:#e7edff;stroke-width:1.7}
.rail-ic-img img{width:100%;height:100%;object-fit:cover;display:block}
.rail-ic-img::after{display:none}
.rail-more .rail-ic{background:var(--surface-2);border:1px dashed var(--line);
  color:var(--faint);box-shadow:none}
.rail-more .rail-ic::after{display:none}
.rail-more .rail-ic .ic{color:var(--faint)}
.rail-more:hover .rail-ic{border-color:var(--accent)}
.rail-more:hover .rail-ic .ic{color:var(--accent)}
.rail-lbl{font-size:9.5px;line-height:1.2;font-weight:600;text-align:center;
  max-width:100%;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;overflow-wrap:break-word;hyphens:auto}
.rail-badge{position:absolute;top:4px;right:7px}
.side-navwrap{display:contents}   /* neutre en desktop, contenu du tiroir en mobile */
.m-nav-backdrop{display:none}
.side-tenant{padding:6px 10px 16px}
.side-tenant-name{font-family:'Inter';font-weight:700;font-size:1.05em}
.side-tenant-meta{color:var(--muted);font-size:.82em;margin-top:5px;display:flex;align-items:center;gap:7px}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block}
.dot.on{background:var(--ok);box-shadow:0 0 8px var(--ok)}
.dot.off{background:var(--faint)}
.side-nav{display:flex;flex-direction:column;gap:2px}
.side-nav a{padding:9px 12px;border-radius:var(--r-sm);color:var(--muted);font-weight:500;transition:.12s}
.side-nav a:hover{background:var(--surface);color:var(--txt)}
.side-nav a.active{background:var(--surface-2);color:var(--txt);box-shadow:inset 2px 0 0 var(--accent)}
.side-back{margin-top:auto;color:var(--faint);font-size:.85em;padding:8px 12px}
.side-back:hover{color:var(--muted)}
.content{flex:1;padding:30px 36px;max-width:1100px}
/* Mode portail (sans sidebar) : le contenu se centre au lieu de coller à gauche. */
.content-portal{max-width:1180px;margin-left:auto;margin-right:auto}

/* ---- Lanceur d'apps (accueil portail), façon Odoo -------------------------
   Tuiles centrées, chaque logo = squircle navy Cordée (#171f31, le fond de
   l'icône de l'app native app-cordee). */
.launcher{max-width:840px;margin:8px auto 0}
.launcher-head{text-align:center;margin-bottom:30px}
.launcher-head h1{margin:0 0 4px;font-size:1.6em}
.launcher-head p{margin:0;color:var(--muted)}
.launcher-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:14px;justify-content:center}
.app-tile{display:flex;flex-direction:column;align-items:center;text-align:center;gap:9px;
  padding:16px 8px 14px;border-radius:var(--r);border:1px solid transparent;transition:.14s}
.app-tile:hover{background:var(--surface);border-color:var(--line)}
.app-logo{width:78px;height:78px;border-radius:23px;background:#171f31;
  display:flex;align-items:center;justify-content:center;font-size:34px;line-height:1;
  box-shadow:0 8px 20px rgba(23,31,49,.30);border:1px solid rgba(255,255,255,.07);
  position:relative;overflow:hidden;transition:.14s}
.app-logo::after{content:"";position:absolute;inset:0;
  background:linear-gradient(155deg,rgba(91,140,255,.22),transparent 58%);pointer-events:none}
.app-tile:hover .app-logo{transform:translateY(-3px);box-shadow:0 12px 26px rgba(23,31,49,.38)}
/* Logo image (ex. Cordée) : la vignette navy est déjà dans le PNG, on l'affiche pleine. */
.app-logo-img{object-fit:cover;padding:0;font-size:0}
.app-logo-img::after{display:none}
/* Icône SVG maison sur le squircle navy : trait clair cyan/blanc, un seul système. */
.app-logo-svg .ic{color:#e7edff;stroke-width:1.7}
.app-logo-svg{position:relative}

/* Bandeau « en un coup d'œil » : 3 chiffres réels, au-dessus de la grille. */
.recap{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:0 auto 30px;max-width:760px}
.recap-item{flex:1 1 190px;max-width:240px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r);padding:13px 16px}
.recap-val{font-family:'Inter';font-weight:700;font-size:1.5em;line-height:1.1;
  display:flex;align-items:baseline;gap:8px;white-space:nowrap}
.recap-delta{font-size:.6em;font-weight:600;font-family:'Inter'}
.recap-delta.up{color:var(--ok)}
.recap-delta.down{color:var(--muted)}
.recap-lbl{color:var(--muted);font-size:.82em;margin-top:3px}
.app-logo-more{background:var(--surface-2);border:1px dashed var(--line);color:var(--faint);
  font-size:30px;font-weight:600;box-shadow:none}
.app-logo-more::after{display:none}
.app-tile-more:hover .app-logo-more{border-color:var(--accent);color:var(--accent);box-shadow:none}
.app-tile-name{font-family:'Inter';font-weight:600;font-size:.98em;color:var(--txt)}
.app-tile-meta{font-size:.8em;color:var(--muted);line-height:1.35}
/* Puce de tendance mois-sur-mois (donnée réelle uniquement). */
.tile-trend{display:inline-block;margin-top:3px;font-size:.74em;font-weight:600;
  padding:1px 7px;border-radius:999px}
.tile-trend.up{color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent)}
.tile-trend.down{color:var(--muted);background:color-mix(in srgb,var(--muted) 12%,transparent)}
.launcher-journal{max-width:640px;margin-left:auto;margin-right:auto}

/* Headings */
.page-head{margin-bottom:24px}
.page-head>a{display:inline-block;margin-bottom:12px}
.page-head h1{margin:0 0 4px;font-size:1.5em}
.page-head p{margin:0;color:var(--muted)}

/* Cards / grid */
.grid{display:grid;gap:16px}
.grid-3{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.grid-4{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px 20px}
.card h3{margin:0 0 12px;font-size:1.02em}
.stat{display:flex;flex-direction:column;gap:6px}
.stat .num{font-family:'Inter';font-weight:700;font-size:2em;line-height:1;white-space:nowrap}
.stat .lbl{color:var(--muted);font-size:.85em}
.stat .num.accent{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
a.card.stat{transition:border-color .15s,box-shadow .15s}
a.card.stat:hover{border-color:var(--accent);box-shadow:0 3px 14px color-mix(in srgb, var(--accent) 15%, transparent)}
/* Carte d'alerte : la seule qui appelle une action, elle tranche sur les cartes € */
.card.stat.alert{border-color:color-mix(in srgb, var(--warn) 50%, transparent);
  background:color-mix(in srgb, var(--warn) 7%, var(--surface))}
.card.stat.alert .num{color:var(--warn)}
a.card.stat.alert:hover{border-color:var(--warn);box-shadow:0 3px 14px color-mix(in srgb, var(--warn) 20%, transparent)}
.warn-num{color:var(--warn);font-weight:700}
/* Filtres du tunnel chantiers : chips territoire + menu commercial, une ligne */
.fbar{display:flex;align-items:center;justify-content:space-between;gap:10px 16px;
  flex-wrap:wrap;margin:2px 0 8px}
.fbar .fchips{margin:0}
.fchips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:2px 0 8px}
.fselect{display:inline-flex;align-items:center;gap:8px;margin:0;
  font-size:.78em;font-weight:700;color:var(--muted);
  text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.fselect select{width:auto;padding:5px 30px 5px 12px;font-size:1.12em;font-weight:600;
  text-transform:none;letter-spacing:0;border-radius:999px;
  background:var(--surface);border:1px solid var(--line);color:var(--txt)}
.fselect.active select{border-color:var(--accent);
  box-shadow:inset 0 0 0 1px var(--accent);color:var(--accent)}
.funnel-trend{flex:0 0 auto;font-family:"JetBrains Mono";font-size:.8em;font-weight:700;white-space:nowrap}
.ok-txt{color:var(--ok)}
.fchip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border:1px solid var(--line);
  border-radius:999px;font-size:.85em;font-weight:600;color:var(--muted);transition:.12s}
.fchip:hover{color:var(--txt);border-color:var(--muted)}
.fchip.active{background:var(--surface-2);color:var(--txt);border-color:var(--accent);
  box-shadow:inset 0 0 0 1px var(--accent)}
.fchip-n{font-family:"JetBrains Mono";font-size:.82em;color:var(--faint)}
.fchip.active .fchip-n{color:var(--accent)}
/* Lignes du tunnel cliquables (drill-down barre -> liste des dossiers).
   Padding compensé par une marge négative : l'alignement des barres ne bouge pas. */
a.bar-link{padding:3px 8px;margin:-3px -8px;border-radius:8px;transition:background .12s}
a.bar-link:hover{background:var(--surface-2)}
a.bar-link:hover .bar-lab{color:var(--txt)}
a.bar-link.bar-current{background:var(--surface-2);box-shadow:inset 2px 0 0 var(--accent)}

/* --- Tunnel chantiers : polish visuel (barres capsule + cascade + hover) --- */
.funnel-chart{gap:9px;margin-top:8px}
.funnel-chart .bar{height:13px;border-radius:999px;
  background:color-mix(in srgb, var(--surface-2) 70%, transparent)}
.funnel-chart .bar-fill{border-radius:999px;position:relative;
  animation:funnel-fill .5s cubic-bezier(.25,.9,.3,1) backwards}
/* léger éclat haut de capsule, valable clair comme sombre */
.funnel-chart .bar-fill::after{content:"";position:absolute;inset:0;border-radius:inherit;
  background:linear-gradient(180deg, rgba(255,255,255,.30), rgba(255,255,255,0) 60%)}
@keyframes funnel-fill{from{width:0}}
.funnel-chart .bar-row:nth-child(1) .bar-fill{animation-delay:.04s}
.funnel-chart .bar-row:nth-child(2) .bar-fill{animation-delay:.08s}
.funnel-chart .bar-row:nth-child(3) .bar-fill{animation-delay:.12s}
.funnel-chart .bar-row:nth-child(4) .bar-fill{animation-delay:.16s}
.funnel-chart .bar-row:nth-child(5) .bar-fill{animation-delay:.20s}
.funnel-chart .bar-row:nth-child(6) .bar-fill{animation-delay:.24s}
.funnel-chart .bar-row:nth-child(7) .bar-fill{animation-delay:.28s}
.funnel-chart .bar-row:nth-child(8) .bar-fill{animation-delay:.32s}
.funnel-chart .bar-row:nth-child(9) .bar-fill{animation-delay:.36s}
@media (prefers-reduced-motion: reduce){.funnel-chart .bar-fill{animation:none}}
/* invite au clic : flèche qui apparaît, barre qui s'éclaire, chiffre en couleur du statut */
.funnel-chart .bar-go{flex:0 0 15px;text-align:right;color:var(--accent);font-weight:700;
  opacity:0;transform:translateX(-5px);transition:.16s}
.funnel-chart a.bar-row:hover .bar-go{opacity:1;transform:none}
.funnel-chart a.bar-row:hover .bar-fill{filter:brightness(1.07) saturate(1.06)}
.funnel-chart a.bar-row:hover .bar-val{font-weight:700}
.funnel-chart a.vrow0:hover .bar-val{color:var(--viz-0)}
.funnel-chart a.vrow1:hover .bar-val{color:var(--viz-1)}
.funnel-chart a.vrow2:hover .bar-val{color:var(--viz-2)}
.funnel-chart a.vrow3:hover .bar-val{color:var(--viz-3)}
.funnel-chart a.vrow4:hover .bar-val{color:var(--viz-4)}
.funnel-chart a.vrow5:hover .bar-val{color:var(--viz-5)}
.funnel-chart a.vrow6:hover .bar-val{color:var(--viz-6)}
.funnel-chart a.vrow7:hover .bar-val{color:var(--viz-7)}
.funnel-chart a.vrow8:hover .bar-val{color:var(--viz-8)}
/* Abandonné = hors tunnel : il ne pèse pas autant que les vraies étapes */
.funnel-chart a.bar-dim{opacity:.55;transition:opacity .15s}
.funnel-chart a.bar-dim:hover{opacity:1}
/* Chiffres en police display (cohérents avec les cartes KPI), zéros estompés */
.funnel-chart .funnel-n{font-family:'Inter';font-weight:600;font-size:1.05em;color:var(--txt)}
.funnel-chart .funnel-n.zero{color:var(--faint);font-weight:500}
.roi-banner{display:flex;align-items:center;gap:20px;margin-bottom:18px;
  border-color:rgba(34,211,238,.35);background:linear-gradient(100deg,rgba(47,83,230,.10),rgba(34,211,238,.06))}
.roi-banner .num{font-family:'Inter';font-weight:700;font-size:2.8em;line-height:1;flex:0 0 auto;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.roi-banner strong{font-size:1.05em}
.roi-banner .hint{margin:5px 0 0;max-width:60ch}

/* Tenant cards (admin home) */
.tcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:20px;transition:.14s;display:block}
.tcard:hover{border-color:var(--accent);transform:translateY(-2px)}
.tcard .t-name{font-family:'Inter';font-weight:700;font-size:1.15em;margin-bottom:6px}
.tcard .t-meta{color:var(--muted);font-size:.85em;display:flex;align-items:center;gap:7px;margin-bottom:14px}
.tcard .t-stats{display:flex;gap:18px;border-top:1px solid var(--line);padding-top:12px}
.tcard .t-stats div span{display:block;font-family:'Inter';font-weight:700;font-size:1.3em}
.tcard .t-stats div small{color:var(--muted);font-size:.78em}

/* Chips / badges */
.chip{font-size:.74em;padding:3px 9px;border-radius:999px;border:1px solid var(--line);color:var(--muted);font-weight:600}
.chip-admin{border-color:var(--accent);color:var(--accent)}
.chip-on{border-color:var(--ok);color:var(--ok)}
.chip-pub{border-color:var(--accent);color:var(--accent);font-size:.68em;padding:2px 7px;vertical-align:middle}
.lvl{font-size:.74em;padding:3px 9px;border-radius:999px;font-weight:600;background:rgba(91,140,255,.12);color:var(--accent);border:1px solid rgba(91,140,255,.3)}

/* Forms */
label{display:block;color:var(--muted);font-size:.85em;font-weight:600;margin:0 0 6px}
.field{margin-bottom:18px}
input[type=text],input[type=password],input[type=email],textarea,select{
  width:100%;background:var(--bg);border:1px solid var(--line);border-radius:var(--r-sm);
  color:var(--txt);padding:10px 12px;font:inherit;font-size:.95em}
textarea{min-height:90px;resize:vertical;line-height:1.55}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(91,140,255,.15)}
.hint{color:var(--faint);font-size:.8em;margin-top:5px}
.btn{display:inline-flex;align-items:center;gap:8px;background:var(--grad);color:var(--btn-ink);border:0;
  border-radius:var(--r-sm);padding:10px 18px;font:inherit;font-weight:700;cursor:pointer}
.btn:hover{filter:brightness(1.08)}
.btn-ghost{color:var(--muted);border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 14px;font-weight:600;font-size:.88em}
.btn-ghost:hover{color:var(--txt);border-color:var(--muted)}
.btn-danger{background:none;border:1px solid var(--line);color:var(--faint);border-radius:8px;padding:5px 10px;font-size:.8em;cursor:pointer}
.btn-danger:hover{color:var(--bad);border-color:var(--bad)}

/* Tables */
table{width:100%;border-collapse:collapse;font-size:.92em}
th{text-align:left;color:var(--muted);font-weight:600;font-size:.8em;text-transform:uppercase;letter-spacing:.04em;padding:10px 12px;border-bottom:1px solid var(--line)}
td{padding:12px;border-bottom:1px solid var(--line);vertical-align:top}
tr:hover td{background:var(--surface)}
.kind{font-size:.75em;padding:2px 8px;border-radius:6px;background:var(--surface-2);color:var(--muted);font-weight:600}
.kind.lead,.kind.devis{color:var(--cyan)}
.kind.sav{color:var(--warn)}

/* Misc */
.toast{background:rgba(52,211,153,.12);border:1px solid rgba(52,211,153,.35);color:var(--ok);padding:10px 14px;border-radius:var(--r-sm);margin-bottom:18px;font-size:.9em}
.empty{color:var(--faint);text-align:center;padding:48px 0}
.row{display:flex;gap:16px;flex-wrap:wrap}
.row>*{flex:1;min-width:220px}
.section-gap{margin-top:28px}

/* Login */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:34px 30px}
.login-card .brand{justify-content:center;margin-bottom:8px;font-size:1.2em}
.login-card .sub{text-align:center;color:var(--muted);margin:0 0 24px;font-size:.9em}
.login-card .btn{width:100%;justify-content:center;margin-top:6px}
.login-err{background:rgba(248,113,113,.1);border:1px solid rgba(248,113,113,.35);color:var(--bad);padding:9px 12px;border-radius:var(--r-sm);font-size:.85em;margin-bottom:16px;text-align:center}
.login-ok{background:rgba(52,211,153,.12);border:1px solid rgba(52,211,153,.4);color:#0e7d5a;padding:9px 12px;border-radius:var(--r-sm);font-size:.85em;margin-bottom:16px;text-align:center}
.pw-wrap{position:relative}
.pw-wrap input{padding-right:46px}
.pw-eye{position:absolute;top:0;right:0;height:100%;width:44px;display:flex;align-items:center;justify-content:center;background:none;border:0;padding:0;cursor:pointer;color:var(--muted)}
.pw-eye:hover{color:var(--text)}
.pw-eye .eye-off{display:none}
.pw-eye.is-shown .eye-on{display:none}
.pw-eye.is-shown .eye-off{display:block}

@media(max-width:760px){
  .shell{flex-direction:column}
  /* Topbar : UNE seule ligne compacte (l'email et le chip admin dégagent). */
  .topbar{padding:10px 12px;flex-wrap:nowrap;gap:8px}
  .topbar-right{min-width:0;gap:8px;flex-wrap:nowrap;margin-left:auto}
  .topbar-user,.chip-admin{display:none}
  .brand-sep,.brand-product{display:none}
  .tenant-mark-name{max-width:74px}
  .tenant-mark-img{height:26px;max-width:88px;padding:2px 7px}
  #settings-pop{right:10px}
  #tenant-switch-pop{width:min(240px,88vw)}
  /* Mobile : on est DANS l'app (la sidebar disparaît), le menu vit dans un
     tiroir derrière le burger — sortie discrète, façon Kraaft. */
  .sidebar{display:none}
  html.m-nav-open .sidebar{display:flex;flex-direction:column;position:fixed;
    top:0;left:0;bottom:0;width:min(300px,84vw);z-index:120;background:var(--surface);
    border-right:1px solid var(--line);box-shadow:0 10px 40px rgba(16,24,40,.28);
    padding:18px 14px;overflow-y:auto;gap:6px}
  html.m-nav-open .m-nav-backdrop{display:block;position:fixed;inset:0;z-index:110;
    background:rgba(15,20,32,.45)}
  html.sidebar-collapsed .sidebar{display:none}
  html.sidebar-collapsed.m-nav-open .sidebar{display:flex}
  /* Rail d'apps : même mécanique de tiroir que la sidebar, en version icônes. */
  .app-rail{display:none}
  html.m-nav-open .app-rail{display:flex;position:fixed;top:0;left:0;bottom:0;
    width:96px;height:auto;z-index:120;background:var(--surface);
    border-right:1px solid var(--line);box-shadow:0 10px 40px rgba(16,24,40,.28)}
  html.sidebar-collapsed.m-nav-open .app-rail{display:flex}
  .content{padding:22px}
  .grid-4{grid-template-columns:repeat(2,1fr)}
  .stat .num{font-size:1.55em}
  .roi-banner{gap:14px}
  .acall{flex-wrap:wrap}
  .acall-actions{width:100%;justify-content:flex-end}
}

/* --- File « À rappeler » + actions de rappel --- */
.navbadge{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;
  padding:0 5px;border-radius:999px;background:var(--accent);color:#fff;font-size:.72em;font-weight:700;
  vertical-align:1px}
.rappeler{margin-bottom:18px;border-color:rgba(91,140,255,.4)}
.rappeler h3{display:flex;align-items:center;gap:9px}
.acall{display:flex;align-items:center;gap:13px;padding:11px 0;border-top:1px solid var(--line)}
.acall-who{flex:1;min-width:180px}
.acall-who .hint{margin-top:2px}
.acall-actions{display:flex;align-items:center;gap:8px}
.btn-ghost.tel{color:var(--txt);border-color:var(--accent);white-space:nowrap}
.btn-ghost.tel:hover{background:rgba(91,140,255,.12)}
.btn-ghost.ok:hover{color:var(--ok);border-color:var(--ok)}
.btn-ghost.done-mark{color:var(--ok);border-color:rgba(52,211,153,.4)}
tr.done td{opacity:.5}
tr.done td:last-child{opacity:1}
td a[href^="tel:"]{color:var(--accent);font-weight:600}

/* --- Connexions : canvas de câblage façon n8n --- */
.flow{position:relative;margin-top:8px;padding:18px 6px 24px;border:1px solid var(--line);border-radius:var(--r);
  background-color:var(--surface);
  background-image:radial-gradient(circle, var(--grid-dot) 1px, transparent 1.4px);
  background-size:22px 22px;overflow:hidden}
.flow-edges{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:visible}
.flow-cols{position:relative;z-index:1;display:flex;justify-content:space-between;align-items:center;
  gap:30px;min-height:452px;padding:0 10px}
.flow-col{display:flex;flex-direction:column;gap:16px;flex:1 1 0;max-width:250px}
.flow-col-agent{flex:0 0 auto;align-items:center;justify-content:center}
.flow-col-title{font-family:"JetBrains Mono";font-size:.7em;letter-spacing:.08em;text-transform:uppercase;
  color:var(--faint)}
.flow-col-out{align-items:flex-end;text-align:right}
.flow-node{position:relative;display:flex;align-items:center;gap:11px;width:100%;
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:11px 13px;transition:.14s}
.flow-col-out .flow-node{flex-direction:row-reverse;text-align:right}
.flow-node:hover{border-color:var(--accent);transform:translateY(-1px)}
.flow-node.off{border-style:dashed;opacity:.62}
.flow-node.on{box-shadow:inset 0 0 0 1px rgba(34,211,238,.18)}
.fn-ico{font-size:1.35em;line-height:1;flex:0 0 auto}
.fn-body{display:flex;flex-direction:column;gap:2px;min-width:0}
.fn-label{font-weight:600;font-size:.95em}
.fn-sum{color:var(--muted);font-size:.78em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fn-dot{position:absolute;top:9px;right:9px;width:7px;height:7px;border-radius:50%}
.flow-col-out .fn-dot{right:auto;left:9px}
.flow-node.on .fn-dot{background:var(--ok);box-shadow:0 0 7px var(--ok)}
.flow-node.off .fn-dot{background:var(--faint)}
.fn-io{position:absolute;top:50%;transform:translateY(-50%);width:9px;height:9px;border-radius:50%;
  background:var(--bg);border:2px solid var(--faint);z-index:2}
.flow-node.on .fn-io{border-color:var(--cyan)}
.fn-io-l{left:-5px}.fn-io-r{right:-5px}
.flow-agent{position:relative;display:flex;flex-direction:column;align-items:center;gap:5px;
  width:152px;padding:22px 16px;border-radius:16px;background:var(--agent-grad);
  border:1px solid rgba(91,140,255,.4);box-shadow:0 0 28px rgba(47,83,230,.22);transition:.14s}
.flow-agent:hover{transform:translateY(-1px);box-shadow:0 0 34px rgba(34,211,238,.3)}
.flow-agent .fn-io{border-color:var(--cyan)}
.fa-ico{font-size:2em;line-height:1}
.fa-name{font-family:'Inter';font-weight:700;font-size:1.15em}
.fa-lvl{color:var(--muted);font-size:.72em;text-align:center}
.flow-legend{display:flex;gap:20px;margin-top:14px;color:var(--muted);font-size:.82em}
.flow-legend .lg-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.lg-dot.on{background:var(--ok)}.lg-dot.off{background:var(--faint)}
@media(max-width:820px){
  .flow-cols{flex-direction:column;align-items:stretch;gap:14px}
  .flow-col{max-width:none}.flow-col-out{align-items:stretch;text-align:left}
  .flow-col-out .flow-node{flex-direction:row;text-align:left}
  .flow-col-out .fn-dot{left:auto;right:9px}
  .flow-edges{display:none}}
.fn-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:3px}
.flow-col-out .fn-meta{justify-content:flex-end}
.fn-conn{font-family:"JetBrains Mono";font-size:.66em;color:var(--muted);border:1px solid var(--line);
  border-radius:5px;padding:1px 6px;white-space:nowrap;background:var(--bg)}

/* --- Avatars (pastilles rondes, identité visuelle du portail) --- */
.avatar{display:inline-block;border-radius:50%;vertical-align:middle;flex:0 0 auto}
.av-18{width:18px;height:18px}
.av-26{width:26px;height:26px}
.av-34{width:34px;height:34px}
.av-46{width:46px;height:46px}
.login-avatar{display:block;width:58px;height:58px;margin:0 auto 14px;
  box-shadow:0 0 26px rgba(47,83,230,.45)}
.flow-agent .avatar{width:46px;height:46px;margin-bottom:3px;
  box-shadow:0 0 18px rgba(34,211,238,.35)}

/* --- États vides qui onboardent --- */
.empty-cta{display:flex;flex-direction:column;align-items:center;gap:10px;padding:44px 20px;
  text-align:center;color:var(--muted)}
.empty-cta strong{color:var(--txt);font-family:'Inter';font-size:1.08em}
.empty-cta p{margin:0;max-width:52ch;font-size:.93em}
.empty-cta .btn{margin-top:8px}
.empty-cta .btn-ghost{margin-top:2px}
.mod-wait-ic{width:44px;height:44px;border-radius:var(--r);background:var(--surface-2);
  display:flex;align-items:center;justify-content:center;color:var(--accent);margin-bottom:2px}

/* --- Badge « bientôt » (connecteur pas encore disponible) --- */
.fn-soon{display:inline-block;font-size:.68em;font-weight:700;letter-spacing:.03em;
  padding:1px 7px;border-radius:999px;vertical-align:1px;
  color:var(--warn);background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.3)}

/* --- Agenda RDV : bande des 7 prochains jours --- */
.week{display:grid;grid-template-columns:repeat(7,1fr);gap:10px}
.wday{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 11px;min-height:86px}
.wday.closed{opacity:.55;border-style:dashed}
.wday-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:7px}
.wday-head strong{font-size:.88em}
.wslot{background:rgba(91,140,255,.12);border:1px solid rgba(91,140,255,.3);border-radius:7px;
  padding:5px 8px;margin-bottom:6px;font-size:.8em;display:flex;flex-direction:column;gap:1px}
.wslot .mono{color:var(--accent);font-weight:600}
.wslot strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:900px){.week{grid-template-columns:repeat(2,1fr)}.wday.closed{display:none}}

/* --- Dataviz : palette catégorielle validée (dataviz skill, CVD-safe) ---
   Couleur = le STATUT / la CATÉGORIE, déclinée par thème. Les WARN de
   contraste (aqua/jaune/magenta en clair) sont couverts par les légendes
   toujours affichées (libellé + valeur). --- */
:root, :root[data-theme="dark"]{
  --viz-0:#5b6573; --viz-1:#5b8cff; --viz-2:#1495ad; --viz-3:#c98500; --viz-4:#008300;
  --viz-5:#9085e9; --viz-6:#e66767; --viz-7:#d55181; --viz-8:#d95926;
}
:root[data-theme="light"]{
  --viz-0:#7d8798; --viz-1:#3355e0; --viz-2:#1baf7a; --viz-3:#eda100; --viz-4:#008300;
  --viz-5:#4a3aa7; --viz-6:#e34948; --viz-7:#e87ba4; --viz-8:#eb6834;
}
.viz-s0{stroke:var(--viz-0)}.viz-s1{stroke:var(--viz-1)}.viz-s2{stroke:var(--viz-2)}
.viz-s3{stroke:var(--viz-3)}.viz-s4{stroke:var(--viz-4)}.viz-s5{stroke:var(--viz-5)}
.viz-s6{stroke:var(--viz-6)}.viz-s7{stroke:var(--viz-7)}.viz-s8{stroke:var(--viz-8)}
.viz-f0{fill:var(--viz-0)}.viz-f1{fill:var(--viz-1)}.viz-f2{fill:var(--viz-2)}
.viz-f3{fill:var(--viz-3)}.viz-f4{fill:var(--viz-4)}.viz-f5{fill:var(--viz-5)}
.viz-f6{fill:var(--viz-6)}.viz-f7{fill:var(--viz-7)}.viz-f8{fill:var(--viz-8)}
.bar-fill.vbg0{background:var(--viz-0)}.bar-fill.vbg1{background:var(--viz-1)}
.bar-fill.vbg2{background:var(--viz-2)}.bar-fill.vbg3{background:var(--viz-3)}
.bar-fill.vbg4{background:var(--viz-4)}.bar-fill.vbg5{background:var(--viz-5)}
.bar-fill.vbg6{background:var(--viz-6)}.bar-fill.vbg7{background:var(--viz-7)}
.bar-fill.vbg8{background:var(--viz-8)}
.vdot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;flex:0 0 auto}
.vdot.v0{background:var(--viz-0)}.vdot.v1{background:var(--viz-1)}.vdot.v2{background:var(--viz-2)}
.vdot.v3{background:var(--viz-3)}.vdot.v4{background:var(--viz-4)}.vdot.v5{background:var(--viz-5)}
.vdot.v6{background:var(--viz-6)}.vdot.v7{background:var(--viz-7)}.vdot.v8{background:var(--viz-8)}

/* --- Courbe CA par mois (Pilotage, pleine largeur) : rendu JS responsive
   dans #ca-svg. Habillage « tech » : stat-chips interactives en tête (légende
   + valeurs vivantes, clic = masquer la courbe), spline monotone, grille
   hairline, pastilles-badges objectif/point mort, tooltip verre dépoli.
   Palette dédiée --caN validée (validateur dataviz, clair/sombre) : la
   couleur suit le territoire (Total=1, société Odoo N = slot N+1). --- */
:root, :root[data-theme="dark"]{
  --ca1:#5b8cff; --ca2:#e2601e; --ca3:#1495ad; --ca4:#9085e9;
  --ca5:#008300; --ca6:#e66767; --ca7:#d55181; --ca8:#5b6573;
  --ca-mono:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,monospace;
  --cabar-ok1:#34d399; --cabar-ok2:#22d3ee;
  --cabar-mid1:#5b8cff; --cabar-mid2:#22d3ee;
}
:root[data-theme="light"]{
  --ca1:#3355e0; --ca2:#e8590c; --ca3:#0e9db5; --ca4:#7048e8;
  --ca5:#008300; --ca6:#e34948; --ca7:#e87ba4; --ca8:#7d8798;
  --cabar-ok1:#10b981; --cabar-ok2:#06b6d4;
  --cabar-mid1:#5b8cff; --cabar-mid2:#22d3ee;
}
/* Carte hero (DA Cockpit transposée en clair) : fond dégradé + kicker mono */
.card.ca-hero{background:linear-gradient(180deg,
  color-mix(in srgb, var(--surface-2) 55%, var(--surface)), var(--surface));
  border-color:color-mix(in srgb, var(--faint) 30%, var(--line))}
.ca-kicker{display:flex;align-items:center;gap:8px;font-family:var(--ca-mono);
  font-size:.6rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent);margin-bottom:5px}
.ca-kicker::before{content:"";width:18px;height:2px;background:var(--accent);
  border-radius:2px}
.ca-comboleg{display:flex;flex-wrap:wrap;gap:13px;justify-content:flex-end;
  margin:4px 0 0}
.ca-comboleg[hidden]{display:none}
.ca-comboleg .cl{font-family:var(--ca-mono);font-size:.62rem;color:var(--muted);
  display:flex;align-items:center;gap:5px}
.ca-comboleg .cl::before{content:"";width:10px;height:10px;border-radius:3px}
.ca-comboleg .cl-obj::before{background:linear-gradient(180deg,var(--cabar-ok1),var(--cabar-ok2))}
.ca-comboleg .cl-mid::before{background:linear-gradient(180deg,var(--cabar-mid1),var(--cabar-mid2))}
.ca-comboleg .cl-cur::before{background:linear-gradient(180deg,var(--cabar-mid1),var(--cabar-mid2));opacity:.45}
.ca-comboleg .cl-cum::before{background:var(--ca1);height:3px;border-radius:2px}
.ca-comboleg .cl-proj::before{background:transparent;border-top:2px dashed var(--ca1);
  height:0;border-radius:0;width:14px}
.ca-bar{animation:ca-bar-in .45s cubic-bezier(.25,.9,.3,1) backwards;
  transform-box:fill-box;transform-origin:bottom}
@keyframes ca-bar-in{from{transform:scaleY(0)}}
.ca-bar-cur{opacity:.45}
.ca-cumline{fill:none;stroke:var(--ca1);stroke-width:2.2;
  stroke-linejoin:round;stroke-linecap:round}
.ca-cumdot{fill:var(--ca1)}
.ca-hdot.ca-cumdot{fill:var(--ca1);stroke:var(--surface);stroke-width:2}
.ca-projlab{font-family:var(--ca-mono);font-size:9px;font-weight:700;fill:var(--ca1)}
.tt-dot-cum{background:var(--ca1)}
@media (prefers-reduced-motion: reduce){.ca-bar{animation:none}}
.ca-wrap{position:relative;margin-top:2px}
#ca-svg{display:block;width:100%;cursor:pointer}
/* En-tête : stat-chips (gauche) + contrôles (droite) */
.ca-head{display:flex;justify-content:space-between;align-items:flex-start;
  flex-wrap:wrap;gap:10px;margin:10px 0 6px}
.ca-chips{display:flex;flex-wrap:wrap;gap:8px}
.ca-chip{display:flex;flex-direction:column;align-items:flex-start;gap:1px;
  background:none;border:1px solid var(--line);border-radius:10px;
  padding:7px 13px 6px;min-width:106px;cursor:pointer;font:inherit;
  color:var(--txt);text-align:left;transition:border-color .15s,opacity .15s}
.ca-chip:hover{border-color:var(--accent)}
.ca-chip.off{opacity:.4}
.ca-chip.off .ca-tick{background:var(--faint)}
.ca-chip.off .ca-chip-val{text-decoration:line-through;text-decoration-thickness:1px}
.ca-chip-top{display:flex;align-items:center;justify-content:space-between;
  gap:10px;width:100%}
.ca-chip-lab{display:flex;align-items:center;gap:6px;font-family:var(--ca-mono);
  font-size:.6em;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted)}
.ca-chip-delta{font-family:var(--ca-mono);font-size:.62em;font-weight:700;
  letter-spacing:.02em}
.ca-chip-delta.up{color:var(--ok)}.ca-chip-delta.down{color:var(--bad)}
.ca-spark{display:block;margin-top:4px;opacity:.85}
.ca-chip.off .ca-spark,.ca-chip.off .ca-chip-delta{opacity:.35}
.ca-tick{display:inline-block;width:12px;height:3px;border-radius:2px}
.ca-tick.c1{background:var(--ca1)}.ca-tick.c2{background:var(--ca2)}
.ca-tick.c3{background:var(--ca3)}.ca-tick.c4{background:var(--ca4)}
.ca-tick.c5{background:var(--ca5)}.ca-tick.c6{background:var(--ca6)}
.ca-tick.c7{background:var(--ca7)}.ca-tick.c8{background:var(--ca8)}
.ca-chip-val{font-family:'Inter';font-weight:700;font-size:1.12em;
  line-height:1.15;font-variant-numeric:tabular-nums}
.ca-chip-sub{font-family:var(--ca-mono);font-size:.6em;color:var(--faint);
  letter-spacing:.04em}
.ca-ctrl{display:flex;gap:8px}
.ca-seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;
  overflow:hidden;background:var(--surface)}
.ca-seg[hidden]{display:none}
.ca-seg button{background:none;border:0;color:var(--muted);cursor:pointer;
  font-family:var(--ca-mono);font-size:.66em;font-weight:700;
  letter-spacing:.07em;text-transform:uppercase;padding:7px 12px;transition:.12s}
.ca-seg button:hover{color:var(--txt)}
.ca-seg button.on{background:var(--surface-2);color:var(--txt);
  box-shadow:inset 0 -2px 0 var(--accent)}
.ca-seg button+button{border-left:1px solid var(--line)}
/* Plot : grille hairline, axes mono, courbes */
.ca-grid{stroke:var(--line);stroke-width:1;opacity:.55}
.ca-axis{stroke:var(--line);stroke-width:1}
.ca-tick,.ca-xlab{font-family:var(--ca-mono);font-size:9.5px;fill:var(--faint);
  letter-spacing:.4px}
.ca-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.ca-line.ca-total{stroke-width:2.5}
.ca-dash{stroke-dasharray:4 5}
.ca-hollow{fill:var(--surface);stroke-width:2}
.ca-pulse{transform-box:fill-box;transform-origin:center;
  animation:ca-pulse 2.4s ease-out infinite}
@keyframes ca-pulse{0%{transform:scale(1);opacity:.4}
  70%{transform:scale(2.6);opacity:0}100%{transform:scale(2.6);opacity:0}}
:root[data-theme="dark"] .ca-line.ca-total{
  filter:drop-shadow(0 0 5px color-mix(in srgb, var(--ca1) 55%, transparent))}
@media (prefers-reduced-motion: reduce){.ca-pulse{animation:none;opacity:0}}
.ca-proj{stroke:var(--ca1);stroke-dasharray:2 4;stroke-width:1.2;opacity:.7}
.ca-cross{stroke:var(--faint);stroke-width:1;stroke-dasharray:2 3}
.ca-hdot{stroke:var(--surface);stroke-width:2}
/* Références objectif / point mort : ligne tiretée + pastille-badge */
.ca-ref{fill:none;stroke-width:1.2;stroke-dasharray:6 5;opacity:.7}
.ca-ref.ok{stroke:var(--ok)}.ca-ref.bad{stroke:var(--bad)}
.ca-refpill rect{fill:var(--surface);stroke-width:1;opacity:.95}
.ca-refpill.ok rect{stroke:var(--ok)}.ca-refpill.bad rect{stroke:var(--bad)}
.ca-refpill text{font-family:var(--ca-mono);font-size:8.5px;font-weight:700;
  letter-spacing:.04em}
.ca-refpill.ok text{fill:var(--ok)}.ca-refpill.bad text{fill:var(--bad)}
/* Jalons */
.ca-jal circle{fill:var(--accent)}
.ca-jal text{fill:#fff;font-size:9px;font-weight:700}
.ca-jalnum{display:inline-flex;align-items:center;justify-content:center;
  width:15px;height:15px;border-radius:50%;background:var(--accent);color:#fff;
  font-size:.68em;font-weight:700;vertical-align:middle}
/* Pastilles d'insight sous le graphe (tendance / affaire dominante / projection) */
.ca-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.ca-pill{display:inline-flex;align-items:center;gap:7px;padding:6px 13px;
  border-radius:999px;border:1px solid var(--line);background:var(--surface-2);
  color:var(--txt);font-size:.8em;font-weight:600}
.ca-pill i{font-style:normal;font-size:.8em;line-height:1}
.ca-pill.up i::before{content:"▲";color:var(--ok)}
.ca-pill.down i::before{content:"▼";color:var(--bad)}
.ca-pill.warn{border-color:color-mix(in srgb, var(--warn) 45%, transparent);
  background:color-mix(in srgb, var(--warn) 8%, var(--surface-2))}
.ca-pill.warn i::before{content:"⚠";color:var(--warn)}
.ca-pill.proj i::before{content:"→";color:var(--accent)}
a.ca-pill{transition:border-color .15s}
a.ca-pill:hover{border-color:var(--accent)}
/* Tooltip verre dépoli */
.ca-tt{position:absolute;top:0;left:0;z-index:5;pointer-events:none;min-width:200px;
  background:color-mix(in srgb, var(--surface) 78%, transparent);
  backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
  border:1px solid var(--line);border-radius:10px;
  padding:9px 12px;box-shadow:0 10px 28px rgba(0,0,0,.2)}
.tt-mois{font-family:var(--ca-mono);font-size:.68em;font-weight:700;
  text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin-bottom:6px}
.tt-row{display:flex;align-items:center;gap:7px;font-size:.8em;padding:1.5px 0}
.tt-lab{color:var(--txt)}
.tt-val{margin-left:auto;font-variant-numeric:tabular-nums;font-weight:600;color:var(--txt)}
.tt-n{font-weight:400;color:var(--muted)}
.tt-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.tt-proj .tt-lab,.tt-proj .tt-val{color:var(--muted);font-style:italic}
.tt-foot{margin-top:6px;padding-top:5px;border-top:1px solid var(--line);
  font-size:.7em;color:var(--faint)}
.ca-tt.pin{pointer-events:auto}
.tt-x{float:right;background:none;border:0;color:var(--faint);cursor:pointer;
  font:inherit;font-size:1em;line-height:1;padding:0 0 0 8px}
.tt-x:hover{color:var(--txt)}
.tt-btn{display:block;margin-top:8px;padding:6px 10px;border-radius:8px;
  background:var(--accent);color:#fff;font-size:.78em;font-weight:600;
  text-align:center;transition:filter .15s}
.tt-btn:hover{filter:brightness(1.1)}
.ca-vide{display:none}

/* Pastille de statut : la couleur suit le statut, doublée du libellé (jamais
   la couleur seule). Texte en encre du thème, le point porte l'identité. */
.stpill{display:inline-flex;align-items:center;gap:6px;font-size:.74em;font-weight:600;
  padding:2px 9px;border-radius:999px;background:var(--surface-2);color:var(--txt);white-space:nowrap}
.stpill::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--viz-0)}
.stpill.v1::before{background:var(--viz-1)}.stpill.v2::before{background:var(--viz-2)}
.stpill.v3::before{background:var(--viz-3)}.stpill.v4::before{background:var(--viz-4)}
.stpill.v5::before{background:var(--viz-5)}.stpill.v6::before{background:var(--viz-6)}
.stpill.v7::before{background:var(--viz-7)}.stpill.v8::before{background:var(--viz-8)}

/* --- Commercial : sous-onglets + filtre --- */
.subhead{display:flex;align-items:center;justify-content:space-between;gap:14px;
  flex-wrap:wrap;margin-bottom:20px}
.subtabs{display:inline-flex;gap:4px;background:var(--surface);border:1px solid var(--line);
  border-radius:999px;padding:4px}
.subtabs a{padding:7px 16px;border-radius:999px;font-weight:600;font-size:.92em;color:var(--muted)}
.subtabs a:hover{color:var(--txt)}
.subtabs a.active{background:var(--surface-2);color:var(--txt);box-shadow:inset 0 0 0 1px var(--line)}
.subhead-right{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
/* Onglets agent téléphonique (mode portail) : 9 sections, défilement
   horizontal discret plutôt que retour à la ligne sur écran étroit */
.subtabs-scroll{max-width:100%;min-width:0;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
.subtabs-scroll::-webkit-scrollbar{display:none}
.subtabs-scroll a{white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
.cfilter select{width:auto;padding:7px 10px;font-size:.9em}
/* Onglets du configurateur (boutons, bascule client-side) */
.cfgtabs{margin:6px 0 18px;cursor:default}
.cfgtabs button{padding:7px 15px;border-radius:999px;border:none;background:none;cursor:pointer;
  font:inherit;font-weight:600;font-size:.92em;color:var(--muted);white-space:nowrap;
  display:inline-flex;align-items:center;gap:7px}
.cfgtabs button:hover{color:var(--txt)}
.cfgtabs button.active{background:var(--surface-2);color:var(--txt);box-shadow:inset 0 0 0 1px var(--line)}
.subtab-n{font-size:.82em;font-weight:600;color:var(--faint);background:var(--bg);
  border-radius:999px;padding:0 7px;min-width:20px;text-align:center}
.cfgtabs button.active .subtab-n{color:var(--accent)}
.cfgpanel{animation:cfgfade .16s ease}
@keyframes cfgfade{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}

/* Entonnoir pipeline (barres horizontales, libellés larges) */
/* Labels du tunnel : colonne fixe alignée à gauche pour que toutes les barres
   partent du même x. Sélecteur à 2 classes obligatoire : .bar-lab{flex:0 0 46px}
   est déclaré plus bas et gagnerait sinon (même spécificité, dernier déclaré),
   laissant chaque label à la largeur de son texte -> départs en escalier. */
.bar-lab.funnel-lab{flex:0 0 150px;text-align:left;overflow:hidden;text-overflow:ellipsis}
@media(max-width:760px){.bar-lab.funnel-lab{flex-basis:118px;font-size:.8em}}

/* Donuts (SVG serveur) + légendes */
.donut-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:900px){.donut-grid{grid-template-columns:1fr}}
/* Cartes alignées en haut (les cartes vides ne s'étirent pas sur la colonne) */
.grid-loose{align-items:start}
.donut-wrap{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.donut{flex:0 0 auto}
.donut-total{fill:var(--txt);font-family:'Inter';font-weight:700;font-size:26px}
.vlegend{list-style:none;margin:0;padding:0;flex:1;min-width:120px}
.vlegend li{display:flex;align-items:center;font-size:.85em;padding:3px 0}
.vlegend .vnum{margin-left:auto;color:var(--muted);font-family:"JetBrains Mono";font-size:.85em;padding-left:10px}
.vlegend-inline{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;color:var(--muted);font-size:.8em}
.vlegend-inline span{display:inline-flex;align-items:center}

/* Listes de chantiers */
.clist{list-style:none;margin:6px 0 0;padding:0}
.crow{display:flex;gap:12px;padding:9px 0;border-top:1px solid var(--line)}
.crow:first-child{border-top:0}
.crow-main{min-width:0;flex:1}
.crow-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600;font-size:.95em}
.crow-sub{color:var(--muted);font-size:.84em;margin-top:2px}
.crow-sub a{color:var(--accent)}

/* Tableaux larges + lignes hors équipe */
.table-scroll{overflow-x:auto}
tr.dim td{opacity:.55}

/* Cartes des chantiers (une par île : Guadeloupe / Martinique) */
.maps-duo{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.map-cap{margin:0 0 8px;font-family:'Inter';font-weight:700;font-size:.92em}
.map-box{height:380px;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--line)}
@media(max-width:900px){.maps-duo{grid-template-columns:1fr}}
.leaflet-container{background:var(--surface-2)}

/* Files d'action sous le tunnel : 4 cartes « quoi faire maintenant » */
.files-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
@media(max-width:900px){.files-grid{grid-template-columns:1fr}}
.fcard h3{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fcard h3 .vdot{margin-right:0}
.fcard-total{margin-left:auto;color:var(--muted);font-size:.88em;font-weight:600}
.fcard .rrow{padding:8px 0}
.fcard .btn-ghost{margin-top:10px;margin-right:6px;display:inline-block}

/* Bascule de période (récap semaine) */
.seg{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.seg-btn{padding:7px 16px;border-radius:999px;border:1px solid var(--line);color:var(--muted);
  font-weight:600;font-size:.9em;background:var(--surface)}
.seg-btn:hover{color:var(--txt)}
.seg-btn.active{background:var(--surface-2);color:var(--txt);border-color:var(--accent)}
.card.highlight{border-color:var(--accent);box-shadow:inset 0 0 0 1px rgba(91,140,255,.18)}

/* Sous-traitance : paie hebdo du partenaire montage (L2L) */
details.st-week{margin-top:12px;padding:0;overflow:hidden}
details.st-week summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  gap:10px;flex-wrap:wrap;padding:14px 20px}
details.st-week summary::-webkit-details-marker{display:none}
details.st-week summary:hover{background:var(--surface-2)}
.st-week-label{font-family:'Inter';font-weight:700;font-size:1.02em}
.st-week-meta{color:var(--muted);font-size:.86em;flex:1;min-width:0}
details.st-week[open] .seo-caret{transform:rotate(90deg)}
details.st-week .clist{padding:2px 20px 14px;border-top:1px solid var(--line);margin:0}
.st-legende{margin:-6px 0 4px}
.st-legende a{color:var(--accent)}
details.st-ctrl{width:100%;text-align:right}
details.st-ctrl summary{list-style:none;cursor:pointer;color:var(--faint);
  font-size:.78em;font-weight:600;display:inline-block}
details.st-ctrl summary::-webkit-details-marker{display:none}
details.st-ctrl summary:hover{color:var(--muted)}
details.st-ctrl[open] summary{color:var(--muted)}
details.st-ctrl .st-calc{margin-top:6px;justify-content:flex-end}
details.st-fold summary{list-style:none;cursor:pointer}
details.st-fold summary::-webkit-details-marker{display:none}
details.st-fold summary h3{display:flex;align-items:center;gap:8px;margin:0;flex-wrap:wrap}
details.st-fold summary .st-week-meta{flex:1;text-align:right}
details.st-fold[open] .seo-caret{transform:rotate(90deg)}
.st-actions{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;flex:0 0 auto;
  justify-content:flex-end}
.st-calc{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.st-montant{width:110px;text-align:right;padding:6px 9px;font-size:.88em;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--txt)}
.st-base{width:120px}
.st-type{width:auto;padding:6px 8px;font-size:.82em;color:var(--muted)}
.st-sugg{color:var(--accent)}
.st-ecart{color:var(--warn)}
.st-contrat{margin:4px 0 10px}
.st-contrat summary{cursor:pointer;color:var(--accent);font-size:.86em;font-weight:600}
.st-grille-table{border-collapse:collapse;margin:10px 0 4px;font-size:.86em}
.st-grille-table th,.st-grille-table td{border:1px solid var(--line);padding:6px 12px;text-align:left}
.st-grille-table th{color:var(--muted);font-weight:600}
.st-montant:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(91,140,255,.15)}
.btn-mini{padding:5px 10px;font-size:.8em;background:none;cursor:pointer}
.st-mute{opacity:.65}
.st-mute:hover{opacity:1}
@media(max-width:700px){
  .crow:has(.st-actions){flex-direction:column;gap:8px}
  .st-actions{width:100%}
  .st-montant{flex:1;min-width:90px}
}

/* --- Portail : groupes de nav, journal, cartes agents --- */
.side-group-title{font-family:"JetBrains Mono";font-size:.68em;letter-spacing:.08em;
  text-transform:uppercase;color:var(--faint);padding:16px 12px 6px}
.side-tenant-meta{color:var(--muted);font-size:.82em;margin-top:5px}

/* --- Module Chantiers : messagerie façon Kraaft (2 panneaux) --- */
/* La page chat est bord à bord (demande Tim 2026-07-30) : zéro marge autour
   de l'app. Hauteur = viewport moins la topbar, sans calc en dur : le body
   devient une colonne flex verrouillée à 100vh et chaque étage se borne. */
body:has(.kx){height:100vh;display:flex;flex-direction:column;overflow:hidden}
body:has(.kx) .shell{flex:1;min-height:0}
body:has(.kx) .sidebar{overflow-y:auto}
.content:has(.kx){max-width:none;padding:0;display:flex;flex-direction:column;min-width:0;min-height:0}
/* Rail replié : l'app reste bord à bord. Sans ça, la règle générique
   `html.sidebar-collapsed .content-portal` (max-width 1180, marges auto) est
   plus spécifique que `.content:has(.kx)` : replier le rail RÉTRÉCISSAIT le
   chat au lieu de l'élargir, et le recentrait avec du vide de chaque côté. */
html.sidebar-collapsed .content-portal:has(.kx){max-width:none}
.kx{display:flex;flex:1;min-height:0;
  overflow:hidden;background:var(--kx-canvas);
  font-size:1.07em}   /* ~16px : calé sur la typo Kraaft, tout le module suit (em) */

/* Barre verticale de l'app (façon Kraaft) : Discussions / Planning / Carte /
   Clients, Réglages poussé en bas. Icônes seules au repos ; le panneau s'ouvre
   au survol PAR-DESSUS la liste (le rail garde ses 56px dans le flux : rien ne
   se décale sous le curseur), libellés révélés, liseré orange sur l'actif. */
.kx-rail{flex:0 0 56px;width:56px;position:relative;z-index:31}
.kx-rail-in{position:absolute;top:0;bottom:0;left:0;width:56px;
  display:flex;flex-direction:column;gap:2px;padding:10px 8px;
  border-right:1px solid var(--line);background:var(--surface);
  overflow:hidden;transition:width .16s ease,box-shadow .16s ease}
.kx-rail:hover .kx-rail-in,
.kx-rail:focus-within .kx-rail-in{width:212px;box-shadow:10px 0 30px rgba(16,24,40,.14)}
.kx-rail-item{display:flex;align-items:center;gap:12px;padding:10px;
  border-radius:var(--r-sm);position:relative;color:var(--muted);
  font-size:.88em;font-weight:600;white-space:nowrap;transition:.12s}
.kx-rail-item svg{flex:0 0 20px}
.kx-rail-item span{opacity:0;transition:opacity .14s}
.kx-rail:hover .kx-rail-item span,
.kx-rail:focus-within .kx-rail-item span{opacity:1}
.kx-rail-item:hover{background:var(--kx-hover);color:var(--txt)}
.kx-rail-item.active{background:var(--surface-2);color:var(--txt)}
.kx-rail-item.active::before{content:"";position:absolute;left:-8px;top:9px;bottom:9px;
  width:3px;border-radius:0 3px 3px 0;background:#e8781c}
.kx-rail-end{margin-top:auto}
/* Pages sœurs de l'app (Planning, Carte, Clients, Réglages) : même cadre .kx,
   donc la barre verticale reste visible — on ne sort jamais de Cordée. Le
   contenu scrolle DANS la page (le body est verrouillé par body:has(.kx)). */
.kx-page{font-size:1em}
/* Contenu borné à 1180px et centré (comme .content-portal avant la bascule
   dans le cadre app) : sans ça une fiche client s'étirait sur 1400px. */
.kx-page-body{flex:1;min-width:0;overflow-y:auto;background:var(--bg);
  padding:20px max(24px,(100% - 1180px)/2)}
.kx-page-body>.page-head{margin-top:0}

/* ===== Planning : agenda semaine (grille horaire) + vue mois ===============
   Les cartes sont posées par `grid-row` sur des créneaux de 30 min : aucune
   position en pixels, donc rien ne dérive quand la plage horaire s'élargit. */
.pl-body{display:flex;flex-direction:column;padding-bottom:14px}
.pl-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;
  flex-wrap:wrap;margin-bottom:12px}
.pl-nav{display:flex;align-items:center;gap:8px;min-width:0}
.pl-nav h1{margin:0;font-size:1.18em;white-space:nowrap}
.pl-navbtn{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:var(--r-sm);color:var(--muted);
  background:var(--surface);transition:.12s}
.pl-navbtn:hover{color:var(--txt);border-color:var(--accent)}
.pl-navbtn .ic-chev{transform:rotate(90deg)}
.pl-navbtn.pl-next .ic-chev{transform:rotate(-90deg)}
.pl-count{color:var(--faint);font-size:.86em;font-variant-numeric:tabular-nums;white-space:nowrap}
.pl-right{display:flex;align-items:center;gap:10px}
.pl-switch{display:inline-flex;padding:3px;gap:2px;border:1px solid var(--line);
  border-radius:999px;background:var(--surface)}
.pl-switch a{padding:5px 14px;border-radius:999px;font-size:.85em;font-weight:600;
  color:var(--muted);transition:.12s}
.pl-switch a:hover{color:var(--txt)}
.pl-switch a.on{background:var(--surface-2);color:var(--txt)}

/* — Semaine — */
/* `grid-template-rows:auto 1fr` : l'en-tête garde sa hauteur de contenu (sans
   ça il était étiré à 110px) et la grille occupe tout le reste. Les créneaux
   s'étirent avec elle (1fr côté colonnes, flex côté heures, même proportion :
   1 heure = 2 créneaux), donc les deux restent alignés à toute hauteur. */
.pl-week{flex:1;min-height:0;overflow-y:auto;display:grid;
  grid-template-columns:52px repeat(7,minmax(0,1fr));grid-template-rows:auto 1fr;
  border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.pl-corner{position:sticky;top:0;z-index:3;background:var(--surface);
  border-bottom:1px solid var(--line);border-right:1px solid var(--line)}
.pl-head{position:sticky;top:0;z-index:3;display:flex;align-items:baseline;
  justify-content:center;gap:6px;padding:9px 4px;background:var(--surface);
  border-bottom:1px solid var(--line);border-left:1px solid var(--line)}
.pl-head-j{color:var(--faint);font-size:.7em;font-weight:700;letter-spacing:.06em}
.pl-head-n{font-size:1.05em;font-weight:700;font-variant-numeric:tabular-nums}
.pl-head-c{min-width:17px;padding:0 5px;border-radius:999px;background:var(--surface-2);
  color:var(--muted);font-size:.66em;font-weight:700;text-align:center}
.pl-head.wk{background:var(--bg)}
.pl-head.past .pl-head-n{color:var(--faint)}
.pl-head.now .pl-head-n{color:#e8781c}
.pl-head.now .pl-head-j{color:#e8781c}
/* 1 heure = 44px = 2 créneaux de 22px : la colonne des heures reste alignée
   sur les lignes des colonnes de jours. */
.pl-hours{display:flex;flex-direction:column;border-right:1px solid var(--line)}
.pl-hour{flex:1 1 44px;min-height:44px;position:relative}
.pl-hour span{position:absolute;top:-7px;right:7px;color:var(--faint);
  font-size:.68em;font-weight:600;font-variant-numeric:tabular-nums}
.pl-hour:first-child span{top:1px}   /* la 1re étiquette n'a rien au-dessus */
.pl-col{position:relative;display:grid;
  grid-template-rows:repeat(var(--slots),minmax(22px,1fr));
  border-left:1px solid var(--line);cursor:copy}
.pl-col.wk{background:color-mix(in srgb,var(--bg) 60%,transparent)}
.pl-cell{border-bottom:1px solid color-mix(in srgb,var(--line) 45%,transparent)}
.pl-col .pl-cell:nth-child(odd){border-bottom-style:dashed}
/* 3 lignes doivent tenir dans un créneau d'une heure (44px) : padding et
   interligne serrés, sinon le nom du chantier est coupé. */
.pl-rdv{grid-column:1;margin:1px;padding:3px 6px;border-radius:7px;overflow:hidden;
  display:flex;flex-direction:column;gap:0;line-height:1.15;z-index:2;
  width:calc((100% - 2px)/var(--cols,1));
  margin-left:calc(1px + (100% - 2px) * var(--col,0) / var(--cols,1));
  border-left:3px solid;transition:.12s}
.pl-rdv:hover{filter:brightness(.97);z-index:4}
.pl-rdv-h{display:flex;align-items:baseline;gap:5px;font-size:.68em;font-weight:700;
  font-variant-numeric:tabular-nums;opacity:.75}
.pl-rdv-h em{font-style:normal;font-weight:600;margin-left:auto;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-rdv-t{font-size:.76em;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-rdv-c{font-size:.68em;opacity:.72;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Couleur par type : fond teinté clair + barre saturée + texte foncé
   (jamais de blanc sur vif, et la couleur n'est jamais seule à porter le sens). */
.pl-rdv.k-chantier{background:color-mix(in srgb,#e8781c 15%,var(--surface));
  border-left-color:#e8781c;color:var(--txt)}
.pl-rdv.k-commercial{background:color-mix(in srgb,var(--accent) 15%,var(--surface));
  border-left-color:var(--accent);color:var(--txt)}
.pl-empty-hint{margin:12px 2px 0;color:var(--muted);font-size:.9em}

/* — Mois — */
/* `grid-template-rows:auto` réserve la 1re rangée aux en-têtes (sinon
   grid-auto-rows leur imposait 104px de haut) ; les semaines se partagent le
   reste de la hauteur. */
.pl-month{flex:1;min-height:0;overflow-y:auto;display:grid;
  grid-template-columns:repeat(7,minmax(0,1fr));
  grid-template-rows:auto;grid-auto-rows:minmax(96px,1fr);
  border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.pl-mhead{position:sticky;top:0;z-index:3;padding:8px 6px;text-align:center;
  background:var(--surface);border-bottom:1px solid var(--line);
  color:var(--faint);font-size:.7em;font-weight:700;letter-spacing:.06em}
.pl-case{display:flex;flex-direction:column;gap:3px;padding:6px;
  border-top:1px solid var(--line);border-left:1px solid var(--line);
  color:var(--txt);transition:.12s}
.pl-case:hover{background:var(--kx-hover)}
.pl-case.wk{background:color-mix(in srgb,var(--bg) 55%,transparent)}
.pl-case.out{opacity:.42}
.pl-case-n{font-size:.78em;font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted)}
.pl-case.now .pl-case-n{display:inline-flex;align-items:center;justify-content:center;
  width:21px;height:21px;border-radius:50%;background:#e8781c;color:#fff}
.pl-chip{display:block;padding:2px 6px;border-radius:5px;border-left:3px solid;
  font-size:.7em;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-chip b{font-variant-numeric:tabular-nums;opacity:.75}
.pl-chip.k-chantier{background:color-mix(in srgb,#e8781c 15%,var(--surface));border-left-color:#e8781c}
.pl-chip.k-commercial{background:color-mix(in srgb,var(--accent) 15%,var(--surface));border-left-color:var(--accent)}
.pl-more{color:var(--faint);font-size:.68em;font-weight:600;padding-left:4px}

/* — Modale de création — */
.pl-dlg{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);
  color:var(--txt);padding:0;width:min(460px,94vw);box-shadow:0 20px 50px rgba(16,24,40,.24)}
.pl-dlg::backdrop{background:rgba(8,12,20,.42)}
.pl-dlg form{display:flex;flex-direction:column;gap:11px;padding:16px}
.pl-dlg header{display:flex;align-items:center;justify-content:space-between}
.pl-dlg h3{margin:0;font-size:1.05em}
.pl-x{background:none;border:0;color:var(--muted);cursor:pointer;padding:2px;line-height:0}
.pl-x:hover{color:var(--txt)}
.pl-dlg label{display:flex;flex-direction:column;gap:4px;font-size:.78em;
  color:var(--muted);font-weight:600}
.pl-dlg input,.pl-dlg select{padding:8px 10px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:.92em}
.pl-row{display:flex;gap:9px}
.pl-row label{flex:1;min-width:0}
.pl-kinds{display:flex;gap:8px}
.pl-kind{flex-direction:row !important;align-items:center;gap:7px;padding:8px 12px;
  border:1px solid var(--line);border-radius:var(--r-sm);cursor:pointer;
  font-size:.9em !important;color:var(--txt) !important}
.pl-kind:has(input:checked){border-color:#e8781c;background:color-mix(in srgb,#e8781c 10%,var(--surface))}
.pl-kind input{accent-color:#e8781c;margin:0;padding:0}
/* Qui y va : pastilles à cocher, le créateur pré-coché. */
.pl-who{margin:0;padding:0;border:0;min-width:0}
.pl-who legend{padding:0 0 5px;color:var(--muted);font-size:.78em;font-weight:600}
/* 118px = 3 rangées entières + leurs gouttières : la liste se coupe ENTRE deux
   rangées quand elle scrolle, jamais au milieu d'une pastille. */
.pl-who-list{display:flex;flex-wrap:wrap;gap:6px;max-height:118px;overflow-y:auto}
.pl-who-item{flex-direction:row !important;align-items:center;gap:6px;
  padding:5px 10px;border:1px solid var(--line);border-radius:999px;cursor:pointer;
  font-size:.85em !important;font-weight:600;color:var(--txt) !important}
.pl-who-item:has(input:checked){border-color:#e8781c;
  background:color-mix(in srgb,#e8781c 12%,var(--surface))}
.pl-who-item input{accent-color:#e8781c;margin:0}
.pl-err{margin:0;color:var(--bad);font-size:.85em}
.pl-dlg footer{display:flex;justify-content:flex-end;gap:9px;margin-top:2px}

@media(max-width:820px){
  .pl-week{grid-template-columns:44px repeat(7,minmax(74px,1fr));overflow-x:auto}
  .pl-month{grid-auto-rows:minmax(78px,auto)}
  .pl-bar{gap:10px}
  .pl-nav h1{font-size:1.02em}
}

/* Colonne liste des chantiers (= conversations) */
.kx-list{flex:0 0 336px;display:flex;flex-direction:column;min-width:0;
  border-right:1px solid var(--line);background:var(--surface);position:relative}
.kx-list-top{position:relative;padding:12px;border-bottom:1px solid var(--line)}
.kx-tools{display:flex;gap:8px;align-items:center}
.kx-search{flex:1;min-width:0;padding:8px 12px;border:1px solid var(--line);border-radius:999px;
  background:var(--bg);color:var(--txt);font:inherit;font-size:.9em}
.kx-toolbtn{flex:0 0 auto;width:34px;height:34px;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid var(--line);border-radius:var(--r-sm);
  background:none;color:var(--muted);cursor:pointer;position:relative;transition:.12s}
.kx-toolbtn:hover,.kx-toolbtn.on{color:var(--accent);border-color:var(--accent)}
.kx-tooldot{position:absolute;top:4px;right:4px;width:7px;height:7px;border-radius:50%;
  background:var(--accent);border:1.5px solid var(--surface)}
.kx-filterpop{position:absolute;top:calc(100% - 4px);left:12px;right:12px;z-index:30;
  background:var(--bg);border:1px solid var(--line);border-radius:var(--r-sm);
  box-shadow:0 10px 30px rgba(0,0,0,.16);padding:13px}
.kx-filterform{display:flex;flex-direction:column;gap:11px}
.kx-filterform label{display:flex;flex-direction:column;gap:4px;font-size:.78em;
  color:var(--muted);font-weight:500}
/* Menus déroulants custom du filtre (même carte/ombre que le popover) */
.kx-dd{position:relative}
.kx-dd-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.92em;cursor:pointer;text-align:left}
.kx-dd-btn:hover{border-color:var(--accent)}
.kx-dd-btn .ic-chev{color:var(--muted)}
.kx-dd-cur{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-dd-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:60;
  background:var(--card,#fff);border:1px solid var(--line);border-radius:10px;
  box-shadow:0 10px 28px rgba(16,24,40,.16);padding:4px;max-height:230px;overflow-y:auto}
.kx-dd-list[hidden]{display:none}
.kx-dd-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:0;
  border-radius:7px;background:none;font:inherit;font-size:.9em;color:var(--txt);
  cursor:pointer;text-align:left}
.kx-dd-item:hover{background:var(--bg-2,rgba(0,0,0,.05))}
.kx-dd-item.on{color:var(--accent);font-weight:700}
.kx-dd-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
/* Vue archivées : toggle intégré au panneau de filtres (l'ancien lien en pied
   de liste a été retiré, l'accès mobile reste dans le menu ☰) */
.kx-filterform label.kx-filterarch{flex-direction:row;align-items:center;gap:8px;
  padding:9px 10px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font-size:.92em;font-weight:600;
  cursor:pointer;transition:.12s}
.kx-filterform label.kx-filterarch:hover{border-color:var(--accent)}
.kx-filterarch input{accent-color:var(--accent);margin:0}
.kx-filterarch .kx-archn{margin-left:auto}
.kx-filteractions{display:flex;justify-content:space-between;align-items:center;margin-top:3px}
/* padding de fin = dégagement du FAB : la dernière discussion reste atteignable */
.kx-rooms{flex:1;overflow-y:auto;padding-bottom:78px}
/* Liseré gauche à la couleur du statut (DA reprise de l'app mobile Cordée) */
.kx-room{display:flex;gap:11px;align-items:center;padding:12px 13px;
  border-bottom:1px solid var(--line);transition:.1s;cursor:pointer;
  box-shadow:inset 3px 0 0 var(--room-statut,transparent)}
.kx-room:hover{background:var(--kx-hover)}
.kx-room.active{background:var(--surface-2)}
.kx-ava{flex:0 0 40px;width:40px;height:40px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;font-weight:700;font-size:1.05em;
  background:var(--surface-2);color:var(--accent)}
.kx-ava-flag{font-size:1.5em;line-height:1}
/* Non-lus : badge de compteur (liste) + accent sur la ligne */
.kx-unread-badge{flex:0 0 auto;min-width:20px;height:20px;padding:0 6px;border-radius:999px;
  background:var(--accent);color:#fff;font-size:.72em;font-weight:700;display:inline-flex;
  align-items:center;justify-content:center;line-height:1}
.kx-room-unread .kx-room-title{font-weight:800}
.kx-room-unread .kx-room-prev{color:var(--txt);font-weight:600}
.kx-room-unread .kx-ava{box-shadow:0 0 0 2px var(--accent)}
/* Séparateur « Non lus » dans le fil */
.kx-unread-sep{display:flex;align-items:center;gap:10px;margin:4px 2px;color:var(--bad);
  font-size:.74em;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.kx-unread-sep::before,.kx-unread-sep::after{content:"";flex:1;height:1px;background:var(--bad);opacity:.45}
.kx-room-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.kx-room-l1{display:flex;align-items:baseline;gap:8px}
.kx-room-title{flex:1;min-width:0;font-weight:700;color:var(--txt);font-size:1.02em;
  text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-room-time{color:var(--faint);font-size:.8em;white-space:nowrap}
.kx-room-prev{color:var(--muted);font-size:.9em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-room-l3{display:flex;align-items:center;gap:8px;min-width:0}
.kx-room-client{color:var(--faint);font-size:.84em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-chip{font-size:.78em;font-weight:700;padding:2px 10px;border-radius:999px;
  border:1px solid color-mix(in srgb,currentColor 55%,transparent);
  background:color-mix(in srgb,currentColor 16%,transparent);white-space:nowrap}
.kx-chip-ouvert{color:var(--ok)}
.kx-chip-termine{color:var(--muted)}
.kx-chip-archive{color:var(--faint)}
.kx-noroom{padding:20px 14px}
/* Icônes SVG maison (macro _icons.html) : trait currentColor, calage inline */
.ic{display:inline-block;vertical-align:-2px;flex:0 0 auto}
.kx-chip .ic{vertical-align:-1.5px}
.kx-room-pin .ic{vertical-align:-1px;color:var(--accent)}

/* Bande « N chantiers en cours » (cliquable = filtre statuts non finaux) */
.kx-runbar{display:flex;align-items:center;gap:8px;padding:7px 14px;
  border-bottom:1px solid var(--line);color:var(--muted);font-size:.84em;
  font-weight:600}
.kx-run-dot{width:8px;height:8px;border-radius:50%;background:var(--ok,#3aa675);
  flex:0 0 auto}

/* Vue « Archivées » : bandeau au-dessus de la liste + lien d'accès en pied */
.kx-archbar{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 14px;border-bottom:1px solid var(--line);background:var(--surface-2);
  color:var(--muted);font-size:.85em;font-weight:700}
.kx-archbar span{display:inline-flex;align-items:center;gap:7px}
.kx-archbar a{color:var(--accent);font-weight:600;white-space:nowrap}
.kx-archn{margin-left:auto;min-width:20px;padding:1px 8px;border-radius:999px;
  border:1px solid var(--line);background:var(--bg);color:var(--faint);
  font-size:.82em;font-weight:700;text-align:center}
.kx-new{border-top:1px solid var(--line)}
.kx-new>summary{cursor:pointer;padding:12px 14px;font-weight:600;color:var(--accent);list-style:none}
.kx-new>summary::-webkit-details-marker{display:none}
.kx-form{display:flex;flex-direction:column;gap:9px;padding:0 14px 14px}
.kx-form input{width:100%;padding:8px 11px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:.9em}
.kx-form button{align-self:flex-start;margin-top:2px}

/* Wizard « Nouvelle conversation » (façon Kraaft) */
/* FAB « + » rond, orange Cordée (accent de l'app mobile : #e8781c / #c25e10) */
.kx-fab{position:absolute;right:16px;bottom:16px;z-index:25;
  width:54px;height:54px;display:flex;align-items:center;justify-content:center;
  border:none;border-radius:50%;background:#e8781c;color:#fff;cursor:pointer;
  box-shadow:0 6px 18px rgba(232,120,28,.38);transition:.12s}
.kx-fab:hover{background:#c25e10;box-shadow:0 8px 22px rgba(232,120,28,.45)}
.kx-wiz{position:absolute;inset:0;z-index:35;background:var(--surface);display:flex}
.kx-wiz[hidden]{display:none}   /* display:flex écraserait le hidden UA */
.kx-wstep[hidden]{display:none}
.kx-wiz form{flex:1;display:flex;flex-direction:column;min-height:0}
.kx-wstep{flex:1;display:flex;flex-direction:column;min-height:0}
.kx-whead{display:flex;align-items:center;gap:10px;padding:12px 14px;
  border-bottom:1px solid var(--line)}
.kx-whead h3{margin:0;font-size:1em;font-weight:700;color:var(--txt)}
.kx-wnav{width:30px;height:30px;flex:0 0 auto;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid var(--line);border-radius:50%;background:none;
  color:var(--muted);cursor:pointer;font-size:1em;transition:.12s}
.kx-wnav:hover{color:var(--accent);border-color:var(--accent)}
.kx-wbody{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:9px}
.kx-wbody .kx-sugwrap{flex:0 0 auto}   /* sinon flex:1 étire le wrap et la liste tombe en bas */
.kx-wbody input[type=text]{width:100%;padding:9px 12px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:.92em}
.kx-wlabel{font-size:.78em;font-weight:600;color:var(--muted)}
.kx-whint{margin:0;font-size:.8em}
.kx-wactions{display:flex;justify-content:flex-end;gap:9px;padding:12px 14px;
  border-top:1px solid var(--line)}
.kx-wactions .btn{width:100%}
.kx-wactions-col{flex-direction:column}
.kx-wactions-col .btn-ghost{width:100%;text-align:center}
.kx-wbody-map{gap:8px}
.kx-wmap{flex:1;min-height:220px;border:1px solid var(--line);border-radius:var(--r-sm);
  display:flex;align-items:center;justify-content:center;overflow:hidden;z-index:1}
.kx-wmembers{gap:0}
.kx-wmember{display:flex;align-items:center;gap:11px;padding:9px 4px;
  border-bottom:1px solid var(--line);cursor:pointer}
.kx-wmember .kx-ava{flex:0 0 34px;width:34px;height:34px;font-size:.95em}
.kx-wmember-name{flex:1;min-width:0;font-weight:600;color:var(--txt);font-size:.94em}
.kx-wmember input{width:17px;height:17px;accent-color:var(--accent)}
.kx-wdup{display:flex;flex-direction:column;gap:6px;padding:11px 12px;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg)}
.kx-wdup-warn{margin:0;font-size:.85em;font-weight:700;color:var(--bad)}
.kx-wdup-info{margin:0;font-size:.85em;font-weight:600;color:var(--muted)}
.kx-wdup-item{font-size:.86em;color:var(--accent);font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Colonne fil de discussion */
.kx-thread{flex:1;display:flex;flex-direction:column;min-width:0}
.kx-th-head{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--line)}
.kx-back{display:none;font-size:1.2em;color:var(--muted)}
.kx-th-title{flex:1;min-width:0}
.kx-th-title strong{display:block;color:var(--txt);text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-th-flag{text-transform:none}
.kx-ref{color:var(--muted);font-size:.85em;text-transform:none}
.kx-th-meta{display:block;color:var(--muted);font-size:.82em;margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-th-actions{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.kx-parts{color:var(--muted);font-size:.85em;white-space:nowrap;cursor:default}
/* Rangement de document : menu compact dans le panneau Documents */
.kx-doc-dd{font-size:.8em}
.kx-doc-dd .kx-dd-btn{padding:4px 8px;gap:5px}
.kx-doc-dd .kx-dd-list{min-width:160px;left:auto;right:0}

/* Menu de statut custom dans l'en-tête du fil */
.kx-th-dd .kx-dd-btn{width:auto;padding:6px 11px;border-radius:999px;font-weight:700;
  font-size:.85em;background:color-mix(in srgb, currentColor 10%, var(--surface))}
.kx-th-dd .kx-dd-list{left:auto;right:0;min-width:200px}
.kx-th-statut select{padding:6px 9px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.85em}
.kx-info-toggle{width:32px;height:32px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:none;color:var(--muted);cursor:pointer;font-size:1em;transition:.12s}
.kx-info-toggle:hover{color:var(--accent);border-color:var(--accent)}

/* Panneau droit : Infos / Galerie / Documents / Participants */
.kx-info{flex:0 0 290px;border-left:1px solid var(--line);background:var(--surface);overflow-y:auto}
.kx-info-hidden .kx-info{display:none}
/* Onglets de la barre latérale (Infos / Dossier) */
.kx-info-tabs{display:flex;gap:4px;padding:10px 12px;position:sticky;top:0;z-index:2;
  background:var(--surface);border-bottom:1px solid var(--line)}
.kx-info-tabs button .ic{vertical-align:-2px;margin-right:3px}
.kx-info-tabs button{flex:1;padding:8px 6px;border:none;background:none;cursor:pointer;font:inherit;
  font-weight:700;font-size:.86em;color:var(--muted);border-radius:8px;white-space:nowrap}
.kx-info-tabs button:hover{color:var(--txt);background:var(--surface-2)}
.kx-info-tabs button.active{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.kx-info-sec{padding:14px 16px;border-bottom:1px solid var(--line)}
.kx-info-sec h4{margin:0 0 10px;font-size:1em;font-weight:700;color:var(--txt);
  display:flex;align-items:center;justify-content:space-between}
.kx-count{color:var(--faint);font-weight:500;font-size:.85em}
.kx-info-dl{display:grid;grid-template-columns:auto 1fr;gap:8px 12px;margin:0;font-size:.92em}
.kx-info-dl dt{color:var(--muted)}
.kx-info-dl dd{margin:0;color:var(--txt);text-align:right;word-break:break-word}
.kx-info-mail{font-size:.92em;color:var(--muted)}
/* Client lié (référentiel) dans le panneau Infos */
.kx-client-link{color:var(--accent);font-weight:600;text-decoration:none}
.kx-client-link:hover{text-decoration:underline}
.kx-chip-odoo{color:#7a5af8;border-color:#7a5af8;font-size:.72em;margin-left:4px}
.kx-client-edit{display:inline-block;margin-left:6px}
.kx-client-edit summary{cursor:pointer;list-style:none;color:var(--faint);font-size:.9em}
.kx-client-edit summary::-webkit-details-marker{display:none}
.kx-client-edit summary:hover{color:var(--accent)}
.kx-client-form{display:flex;gap:6px;margin-top:6px}
.kx-client-form input{flex:1;min-width:0;width:auto;font-size:.9em}
/* Édition / suppression du chantier (panneau Infos) */
.kx-ch-edit{margin-top:10px}
.kx-ch-edit summary{cursor:pointer;list-style:none;color:var(--faint);font-size:.85em}
.kx-ch-edit summary::-webkit-details-marker{display:none}
.kx-ch-edit summary:hover{color:var(--accent)}
.kx-ch-edit-form{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.kx-ch-edit-form label{display:flex;flex-direction:column;gap:3px;font-size:.8em;color:var(--muted)}
.kx-ch-edit-form input{width:100%;font-size:.92em}
.kx-ch-edit-form .btn{align-self:flex-start}
.kx-ch-edit-hint{margin:0;font-size:.78em}
.kx-ch-del{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
/* Menu « ⋯ » des conversations (liste, façon Kraaft) */
.kx-room{position:relative}
.kx-room-dots{position:absolute;top:6px;right:6px;width:26px;height:22px;
  border:1px solid var(--line);border-radius:7px;background:var(--card,#fff);
  color:var(--muted);font-size:14px;line-height:1;cursor:pointer;
  opacity:0;transition:opacity .12s;display:flex;align-items:center;justify-content:center}
.kx-room:hover .kx-room-dots,.kx-room-dots:focus{opacity:1}
.kx-room-dots:hover{color:var(--accent);border-color:var(--accent)}
.kx-room-pin{font-size:.75em;margin-right:2px}
/* Responsable : pastille entourée comme le statut, en teinte neutre */
.kx-chip-resp{color:var(--muted);overflow:hidden;text-overflow:ellipsis}
/* Épingle un clic au survol */
.kx-room-pinbtn{position:absolute;top:6px;right:36px;width:26px;height:22px;
  border:1px solid var(--line);border-radius:7px;background:var(--card,#fff);
  font-size:11px;line-height:1;cursor:pointer;opacity:0;transition:opacity .12s;
  display:flex;align-items:center;justify-content:center;filter:grayscale(1)}
.kx-room:hover .kx-room-pinbtn,.kx-room-pinbtn:focus{opacity:1}
.kx-room-pinbtn.on{opacity:1;filter:none;border-color:var(--accent)}
/* « Lu par » sous le dernier message */
.kx-readby{font-size:.72em;color:var(--faint);text-align:right;margin-top:3px}
.kx-readby-check{color:var(--accent)}
.kx-roommenu[hidden]{display:none}
.kx-roommenu{position:fixed;z-index:80;min-width:210px;background:var(--card,#fff);
  border:1px solid var(--line);border-radius:10px;
  box-shadow:0 10px 28px rgba(16,24,40,.16);padding:4px;display:flex;flex-direction:column}
.kx-roommenu form{margin:0;display:flex}
.kx-roommenu form[hidden]{display:none}   /* le display:flex écraserait hidden (form Renommer) */
.kx-rm-item{flex:1;display:flex;align-items:center;gap:8px;text-align:left;
  border:0;background:none;padding:8px 10px;
  border-radius:7px;font:inherit;font-size:.9em;color:var(--txt);cursor:pointer}
.kx-rm-item:hover{background:var(--bg-2,rgba(0,0,0,.05))}
.kx-rm-danger{color:#c0392b}
.kx-rm-rename{padding:4px 8px 8px;gap:6px;align-items:center}
.kx-rm-rename input[type=text]{flex:1;min-width:0;width:auto;font-size:.88em}
/* Autocomplete client unifié (app + cache Odoo) */
.kx-sugwrap{position:relative;flex:1;min-width:0}
.kx-sugwrap>input[type=text]{width:100%}
.kx-suglist{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:40;
  background:var(--card,#fff);border:1px solid var(--line);border-radius:10px;
  box-shadow:0 8px 24px rgba(16,24,40,.12);overflow:hidden;max-height:260px;overflow-y:auto}
.kx-sugitem{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;
  border:0;border-top:1px solid var(--line);background:none;cursor:pointer;
  text-align:left;font:inherit;color:var(--txt)}
.kx-sugitem:first-child{border-top:0}
.kx-sugitem:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-sug-nom{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-sug-meta{flex:1;font-size:.8em;color:var(--muted);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.kx-sug-badge{font-size:.7em;padding:1px 7px;border-radius:99px;border:1px solid;white-space:nowrap}
.kx-sug-badge.kx-sug-app{color:var(--accent);border-color:var(--accent)}
.kx-sug-badge.kx-sug-odoo{color:#7a5af8;border-color:#7a5af8}
.kx-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.kx-gal-item img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;
  border:1px solid var(--line);display:block}
.kx-loadmore{text-align:center;padding:6px 0 10px}
/* Loupe + barre de recherche dans la conversation */
.kx-th-search-btn{background:none;border:0;cursor:pointer;color:var(--muted);padding:5px 6px;
  border-radius:8px;line-height:1;display:inline-flex;align-items:center}
.kx-th-search-btn:hover{background:var(--surface-2);color:var(--txt)}
.kx-thread{position:relative}
.kx-thsearch{position:absolute;top:62px;right:18px;z-index:60;width:min(360px,calc(100% - 36px));
  display:flex;align-items:center;gap:6px;padding:6px 8px 6px 12px;
  background:var(--card,#fff);border:1px solid var(--line);border-radius:999px;
  box-shadow:0 10px 28px rgba(16,24,40,.16)}
.kx-thsearch[hidden]{display:none}
.kx-thsearch-ic{color:var(--muted);display:inline-flex;flex:0 0 auto}
.kx-thsearch input{flex:1;min-width:0;border:0;background:none;padding:4px 2px;
  font:inherit;font-size:.9em;color:var(--txt);outline:none;width:auto}
.kx-thsearch input:focus{outline:none;border:0;box-shadow:none}
.kx-thsearch input::placeholder{color:var(--faint)}
.kx-thsearch-count{font-size:.76em;color:var(--muted);font-family:'JetBrains Mono',monospace;white-space:nowrap}
.kx-thsearch-sep{width:1px;height:18px;background:var(--line);flex:0 0 auto}
.kx-thsearch-nav{flex:0 0 auto;width:28px;height:28px;display:inline-flex;align-items:center;
  justify-content:center;background:none;border:0;border-radius:50%;cursor:pointer;
  color:var(--muted);padding:0}
.kx-thsearch-nav:hover{background:var(--surface-2);color:var(--txt)}
.kx-thsearch-up{display:inline-flex;transform:rotate(180deg)}
.kx-msg.kx-hit{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent)}
.kx-msg.kx-hit-cur{box-shadow:0 0 0 2px var(--accent)}
/* Bouton « Tous les médias › » + panneau grille (façon Kraaft) */
.kx-allmedia{display:flex;align-items:center;gap:8px;width:100%;margin-top:8px;padding:9px 12px;
  background:var(--surface);border:1px solid var(--line);border-radius:10px;cursor:pointer;
  font:inherit;font-size:.86em;font-weight:600;color:inherit}
.kx-allmedia:hover{background:var(--surface-2)}
.kx-allmedia .kx-mem-chev{margin-left:auto}
.kx-media-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;padding:10px 12px}
/* Documents : lignes-cartes (icône pastille + nom + actions), sans taille */
.kx-doclist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.kx-doc-link{flex:1;min-width:0;display:flex;align-items:center;gap:9px;
  font-size:.86em;color:var(--txt)}
.kx-doc-ic{flex:0 0 26px;width:26px;height:26px;display:inline-flex;align-items:center;
  justify-content:center;border-radius:8px;color:var(--accent);
  background:color-mix(in srgb, var(--accent) 12%, var(--surface))}
.kx-doc-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.kx-partlist{list-style:none;margin:0;padding:0;font-size:.85em;color:var(--txt);
  display:flex;flex-direction:column;gap:4px}
.kx-info-empty{margin:0}
/* Documents rangés par dossier (repliables + upload par dossier) */
.kx-docgroup{margin-bottom:6px;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.kx-docgroup:last-child{margin-bottom:0}
.kx-docfolder{display:flex;align-items:center;gap:7px;padding:8px 10px;cursor:pointer;
  font-size:.86em;font-weight:600;color:var(--txt);background:var(--surface-2);list-style:none;
  user-select:none}
.kx-docfolder::-webkit-details-marker{display:none}
.kx-docfolder:hover{background:color-mix(in srgb,var(--accent) 8%,var(--surface-2))}
.kx-chevron{flex:0 0 auto;color:var(--faint);font-size:.85em;transition:transform .12s}
.kx-docgroup[open] .kx-chevron{transform:rotate(90deg)}
.kx-docfolder-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-docfolder .kx-count{background:var(--bg);border-radius:999px;padding:0 7px;min-width:20px;
  text-align:center}
.kx-doc-add{margin:0;flex:0 0 auto;line-height:1}
.kx-doc-addbtn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;
  border-radius:50%;background:var(--accent);color:#fff;font-size:.9em;cursor:pointer;font-weight:700}
.kx-doc-addbtn:hover{filter:brightness(1.08)}
.kx-doclist{padding:5px 6px}
.kx-docrow{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:9px;transition:.1s}
.kx-docrow:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-docrow .kx-doc-dots{opacity:.55}
.kx-docrow:hover .kx-doc-dots{opacity:1}
.kx-docempty{margin:0;font-size:.8em;color:var(--faint)}
/* Dossier virtuel « Historique » (antériorité Odoo du client, lecture seule) */
.kx-histo-auto{flex:0 0 auto;font-size:.68em;font-weight:700;text-transform:uppercase;
  letter-spacing:.04em;color:#7a5af8;border:1px solid #7a5af8;border-radius:4px;padding:1px 6px;cursor:help}
.kx-histo-body{padding:6px 8px}
.kx-histo-sub{font-size:.78em;font-weight:700;color:var(--muted);text-transform:uppercase;
  letter-spacing:.04em;margin:8px 2px 4px;display:flex;align-items:center;gap:6px}
.kx-histo-sub:first-child{margin-top:2px}
.kx-histo-sub .kx-count{background:var(--bg);border-radius:999px;padding:0 7px;min-width:20px;text-align:center}
.kx-histo-sorow{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;width:100%;text-align:left;
  background:none;border:0;padding:5px 6px;border-radius:9px;cursor:pointer;font:inherit;color:inherit}
.kx-histo-sorow:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-histo-soname{font-weight:600;font-size:.84em;min-width:0;overflow-wrap:anywhere}
.kx-histo-someta{flex:1;min-width:0;font-size:.78em;color:var(--faint);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-histo-somt{font-size:.82em;font-weight:600;font-family:'JetBrains Mono',monospace;white-space:nowrap}
.kx-histo-solignes{padding:2px 6px 6px 12px;overflow-x:auto}
.kx-histo-tbl{width:100%;border-collapse:collapse;font-size:.78em}
.kx-histo-tbl td{padding:3px 6px;border-top:1px solid var(--line);overflow-wrap:anywhere}
.kx-histo-tbl td.num{text-align:right;font-family:'JetBrains Mono',monospace;white-space:nowrap}
.kx-histo-lsec td{font-weight:700;color:var(--muted);border-top:0;padding-top:7px}
.kx-histo-file{display:flex;align-items:baseline;gap:8px;padding:5px 6px;border-radius:9px;
  text-decoration:none;color:inherit;font-size:.84em}
.kx-histo-file:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-histo-file .kx-doc-name{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-histo-note{margin:8px 2px 2px;font-size:.74em;color:var(--faint)}
/* Boutons d'action d'un message de l'agent Odoo (DA de l'app : dégradé
   bleu→cyan pour l'action principale, fantôme pour le secondaire). */
.kx-prompt{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.kx-prompt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:8px 15px;border-radius:var(--r-sm,10px);border:1px solid var(--line);
  background:var(--surface);color:var(--txt);font:inherit;font-size:.86em;font-weight:600;
  cursor:pointer;transition:.14s;box-shadow:0 1px 2px rgba(15,20,32,.05)}
.kx-prompt-btn:hover{border-color:var(--muted)}
.kx-prompt-yes{background:var(--grad);color:var(--btn-ink);border:0;font-weight:700;
  box-shadow:0 2px 12px color-mix(in srgb, var(--accent) 26%, transparent)}
.kx-prompt-yes:hover{filter:brightness(1.07)}
.kx-prompt-no{color:var(--muted)}
.kx-prompt-no:hover{color:var(--txt);background:var(--bg-2,rgba(0,0,0,.04))}
.kx-prompt-done{margin-top:8px;font-size:.82em;font-weight:600;color:var(--muted)}
.kx-prompt-transfer{flex-direction:column;align-items:stretch;gap:6px}
.kx-prompt-transfer .kx-prompt-btn{width:100%;justify-content:flex-start;text-align:left}
.kx-prompt-transfer .kx-prompt-btn:not(.kx-prompt-yes):not(.kx-prompt-no):hover{
  border-color:var(--accent);color:var(--accent)}
/* Accordéons du panneau Infos : le titre h4 plie/déplie la section */
.kx-acc > .kx-acc-sum{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none}
.kx-acc > .kx-acc-sum::after{content:'';margin-left:auto;width:7px;height:7px;
  border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);
  transform:rotate(45deg);transition:transform .15s;flex:0 0 auto}
.kx-acc.collapsed > .kx-acc-sum::after{transform:rotate(-45deg)}
.kx-acc.collapsed > *:not(.kx-acc-sum){display:none}
.kx-acc > .kx-acc-sum:hover{color:var(--text,#1a1d24)}
/* Interlocuteurs (plusieurs par client) : sous-accordéons */
.kx-interlocs{display:flex;flex-direction:column;gap:7px}
.kx-interloc{border:1px solid var(--line);border-radius:12px;overflow:hidden}
.kx-interloc-sum{display:flex;align-items:center;gap:7px;padding:9px 11px;cursor:pointer;
  list-style:none;font-size:.9em;font-weight:600}
.kx-interloc-sum::-webkit-details-marker{display:none}
.kx-interloc-sum .kx-chevron{transition:transform .15s;color:var(--faint);flex:0 0 auto}
.kx-interloc[open] .kx-interloc-sum .kx-chevron{transform:rotate(90deg)}
.kx-interloc-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-interloc-sum .kx-so-meta{margin-left:auto;font-weight:400}
.kx-interloc-body{padding:4px 11px 11px;display:flex;flex-direction:column;gap:9px;border-top:1px solid var(--line)}
.kx-interloc-add{width:100%;text-align:center;border:1px dashed var(--line);color:var(--muted)}
.kx-interloc-add:hover{border-color:var(--accent,#e8862d);color:var(--accent,#e8862d)}
.kx-interloc-odoo{display:flex;flex-direction:column;gap:4px;padding:6px 0}
.kx-interloc-odoorow{display:flex;align-items:center;gap:8px}
.kx-interloc-ocmain{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;font-size:.84em;overflow:hidden}
.kx-interloc-ocmain .kx-so-meta{font-size:.92em}
.kx-interloc-detect{display:flex;flex-direction:column;gap:5px;padding:8px;margin:2px 0;
  border:1px dashed #c9bcff;border-radius:10px;background:rgba(122,90,248,.05)}
.kx-interloc-detect-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
/* Affaire Odoo (panneau Infos) : liaison chantier <-> devis */
.kx-so-list{margin-top:6px;display:flex;flex-direction:column;gap:2px}
.kx-so-row{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:9px}
.kx-so-row:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-so-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.kx-so-main .mono{font-size:.84em;font-weight:600}
.kx-so-meta{font-size:.76em;color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-so-hint{margin:6px 0;font-size:.78em;color:var(--faint)}
/* Fiche entreprise (panneau Infos) : rendu uniforme, Odoo verrouillé vs saisie */
.kx-ent-src{font-size:.62em;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  color:#7a5af8;border:1px solid #7a5af8;border-radius:4px;padding:0 4px;margin-left:4px;cursor:help;vertical-align:1px}
.kx-ent-act{font-size:.72em;margin-left:auto;color:var(--accent,#e8862d);text-decoration:none}
.kx-ent-act:hover{text-decoration:underline}
.kx-field .kx-field-lab{display:flex;align-items:baseline;gap:4px}
.kx-ent-ro{background:var(--bg-2,rgba(0,0,0,.035));color:var(--muted);cursor:default}
.kx-ent-ro:focus{outline:none}
.kx-ent-contacts{margin-top:10px}
.kx-ent-contact{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:9px}
.kx-ent-contact:hover{background:var(--bg-2,rgba(0,0,0,.04))}
.kx-ent-cmain{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;font-size:.84em}
.kx-ent-devis{margin-top:10px}
.kx-ent-devis-sum{display:flex;align-items:center;gap:6px;cursor:pointer;list-style:none;
  font-size:.82em;font-weight:700;color:var(--muted)}
.kx-ent-devis-sum::-webkit-details-marker{display:none}
.kx-ent-devis[open] .kx-ent-devis-sum .kx-mem-chev{transform:rotate(90deg)}
.kx-ent-devis-tot{margin:6px 0 2px;font-size:.84em;font-weight:600}
.kx-so-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.kx-so-view{text-decoration:none;display:inline-block}
.kx-so-pdf{flex:0 0 auto;font-size:.72em;font-weight:700;color:#7a5af8;border:1px solid #7a5af8;
  border-radius:4px;padding:1px 6px;text-decoration:none;white-space:nowrap}
.kx-so-pdf:hover{background:#7a5af8;color:#fff}
.kx-histo-soline{display:flex;align-items:center;gap:6px}
.kx-histo-soline .kx-histo-sorow{flex:1;min-width:0}
/* Pop-up de suggestion de liaison devis (responsables).
   ⚠️ Préfixe DÉDIÉ kx-smod (PAS kx-modal : cette classe est déjà prise par la
   pop-up de suppression, affichée en display:flex + masquée via [hidden] ;
   réutiliser kx-modal cassait le masquage par .open de cette modale-ci). */
.kx-smod{position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;
  background:rgba(15,20,32,.55);backdrop-filter:blur(3px);padding:16px}
.kx-smod.open{display:flex;animation:kx-fade .16s ease}
@keyframes kx-fade{from{opacity:0}to{opacity:1}}
.kx-smod-card{position:relative;background:var(--surface);border-radius:18px;
  box-shadow:0 20px 60px rgba(15,20,32,.32);width:min(440px,100%);max-height:88vh;
  overflow-y:auto;padding:22px 20px 16px}
.kx-smod.open .kx-smod-card{animation:kx-pop .2s cubic-bezier(.2,.9,.3,1.2)}
@keyframes kx-pop{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.kx-smod-x{position:absolute;top:12px;right:12px;width:28px;height:28px;border:0;border-radius:8px;
  background:none;color:var(--faint);font-size:1.05em;cursor:pointer;line-height:1}
.kx-smod-x:hover{background:var(--bg-2,rgba(0,0,0,.05));color:var(--muted)}
.kx-sug-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:rgba(122,90,248,.12);color:#7a5af8;margin-bottom:12px}
.kx-sug-card h3{margin:0 0 5px;font-size:1.08em;letter-spacing:-.01em}
.kx-sug-lead{margin:0 0 16px;font-size:.88em;line-height:1.45;color:var(--muted)}
.kx-sug-list{display:flex;flex-direction:column;gap:10px}
.kx-sug-item{border:1px solid var(--line);border-radius:14px;padding:12px 13px;transition:border-color .12s,box-shadow .12s}
.kx-sug-item:hover{border-color:#c9bcff;box-shadow:0 2px 10px rgba(122,90,248,.08)}
.kx-sug-head{display:flex;align-items:center;gap:8px}
.kx-sug-name{font-size:.98em;font-weight:700}
.kx-sug-tag{font-size:.64em;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#9a6a00;
  background:rgba(230,150,20,.14);border-radius:5px;padding:1px 6px}
.kx-sug-amt{margin-left:auto;font-size:1.02em;font-weight:700;font-family:'JetBrains Mono',monospace;white-space:nowrap}
.kx-sug-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:6px;font-size:.8em;color:var(--faint)}
.kx-sug-state{font-size:.94em;font-weight:600;border-radius:999px;padding:1px 9px;
  background:var(--bg-2,rgba(0,0,0,.05));color:var(--muted)}
.kx-st-sent{background:rgba(59,130,246,.14);color:#2563c9}
.kx-st-sale,.kx-st-done{background:rgba(58,166,117,.16);color:#2e8c60}
.kx-st-cancel{background:rgba(220,80,80,.14);color:#c0453e}
.kx-sug-ref{opacity:.85}
.kx-sug-actions{display:flex;align-items:center;gap:10px;margin-top:12px}
.kx-sug-pdf{display:inline-flex;align-items:center;gap:5px;font-size:.82em;font-weight:600;
  color:#7a5af8;text-decoration:none}
.kx-sug-pdf:hover{text-decoration:underline}
.kx-sug-ok{margin-left:auto;padding:8px 16px;font-size:.88em;font-weight:600}
.kx-smod-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:16px;
  padding-top:12px;border-top:1px solid var(--line)}
.kx-linklike{background:none;border:0;padding:4px 2px;font:inherit;font-size:.84em;color:var(--muted);
  cursor:pointer;text-decoration:none}
.kx-linklike:hover{color:var(--text,#1a1d24);text-decoration:underline}
.kx-linklike-danger{color:#c0453e}
.kx-linklike-danger:hover{color:#a5352f}
.kx-msgs{flex:1;overflow-y:auto;padding:16px 18px;display:flex;flex-direction:column;gap:3px}
.kx-msg:not(.kx-cont){margin-top:10px}   /* espace entre GROUPES d'auteurs */
.kx-msg:first-child{margin-top:0}
.kx-day{text-align:center;margin:6px 0}
.kx-day span{background:var(--surface-2);color:var(--muted);font-size:.8em;font-weight:600;
  padding:3px 12px;border-radius:999px;border:1px solid var(--line)}
/* Pastille ouvrant un bloc de messages repris de Kraaft (inject_messages.py). */
.kx-day-kraaft span{background:transparent;border-style:dashed;text-transform:uppercase;
  letter-spacing:.04em;font-size:.72em}
/* Badge de provenance sur chaque message repris de Kraaft. */
.kx-src-badge{font-size:.66em;font-weight:700;text-transform:uppercase;letter-spacing:.03em;
  color:var(--muted);background:var(--surface-2);border:1px solid var(--line);
  padding:1px 6px;border-radius:999px;line-height:1.4}
/* Bulles modernisées (2026-07-30) : plus de bordure dure, grand rayon,
   ombre à peine perceptible ; la bulle « à moi » est teintée accent. */
/* Bulle reçue : gris froid, car le fil est passé sur fond blanc (var(--surface)
   l'aurait rendue invisible, blanc sur blanc). */
.kx-msg{align-self:flex-start;max-width:74%;background:var(--kx-bubble);
  border:0;border-radius:14px;border-bottom-left-radius:5px;
  padding:8px 12px 7px;box-shadow:0 1px 2px rgba(15,20,32,.06);position:relative}
.kx-msg.kx-cont{border-radius:14px;border-top-left-radius:6px;border-bottom-left-radius:5px}
.kx-msg.kx-mine.kx-cont{border-radius:14px;border-top-right-radius:6px;border-bottom-right-radius:5px}
/* Heure discrète en coin de bulle (façon WhatsApp/Kraaft) */
.kx-msg-body .kx-msg-time{float:right;margin:9px 0 0 10px}
.kx-msg-time{font-size:.7em;color:var(--faint);line-height:1}
.kx-time-block{display:block;text-align:right;margin-top:3px}
/* Barre d'actions au survol (façon Kraaft) : réagir / répondre / ⋯ */
.kx-msg-tools{position:absolute;top:-14px;right:10px;z-index:5;display:none;
  align-items:center;gap:2px;padding:2px;background:var(--card,#fff);
  border:1px solid var(--line);border-radius:999px;
  box-shadow:0 4px 14px rgba(16,24,40,.14)}
.kx-msg:hover .kx-msg-tools{display:inline-flex}
.kx-mt-btn{width:26px;height:26px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:50%;background:none;
  color:var(--muted);cursor:pointer;font:inherit;font-size:.95em;line-height:1}
.kx-mt-btn:hover{background:var(--bg-2,rgba(0,0,0,.05));color:var(--accent)}
/* Réactions SUPERPOSÉES au bord bas de la bulle (façon Kraaft).
   Toujours à gauche : la droite est réservée aux coches ✓✓ sous la bulle. */
.kx-reacts{position:absolute;bottom:-12px;left:12px;display:flex;
  flex-wrap:wrap;gap:4px;z-index:4}
.kx-reacts[hidden]{display:none}
.kx-msg:has(.kx-ticks){margin-bottom:13px}
.kx-msg:has(.kx-reacts:not([hidden])){margin-bottom:14px}
.kx-react{display:inline-flex;align-items:center;gap:3px;padding:1px 8px;
  border:1px solid var(--line);border-radius:999px;background:var(--card,#fff);
  font:inherit;font-size:.82em;color:var(--txt);cursor:pointer;
  box-shadow:0 1px 4px rgba(16,24,40,.14)}
.kx-react:hover{border-color:var(--accent)}
.kx-react.mine{border-color:var(--accent);
  background:color-mix(in srgb, var(--accent) 12%, var(--card,#fff));font-weight:600}
/* Coches sous la bulle, à l'extérieur : double coche SVG entrelacée
   (façon Kraaft/WhatsApp), grise = envoyé, accent = lu */
.kx-ticks{position:absolute;right:3px;bottom:-15px;line-height:0;
  color:var(--faint)}
.kx-ticks .ic{stroke-width:2.4}
.kx-ticks.seen{color:var(--accent)}
.kx-readby-check{line-height:0;color:var(--accent)}
/* Popovers d'actions message : picker de réactions + menu ⋯ */
.kx-emojipop{position:fixed;z-index:85;display:flex;gap:2px;padding:4px;
  background:var(--card,#fff);border:1px solid var(--line);border-radius:999px;
  box-shadow:0 10px 28px rgba(16,24,40,.16)}
.kx-emojipop[hidden]{display:none}
.kx-emoji{width:32px;height:32px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:50%;background:none;
  font-size:1.15em;cursor:pointer;line-height:1}
.kx-emoji:hover{background:var(--bg-2,rgba(0,0,0,.06))}
.kx-msgmenu{position:fixed;z-index:85;min-width:210px;background:var(--card,#fff);
  border:1px solid var(--line);border-radius:10px;padding:4px;
  box-shadow:0 10px 28px rgba(16,24,40,.16);display:flex;flex-direction:column}
.kx-msgmenu[hidden]{display:none}
.kx-msgmenu .kx-rm-item[hidden]{display:none}
/* Popovers Transférer / infos message */
.kx-fwdpop,.kx-infopop{position:fixed;z-index:86;width:270px;max-height:320px;
  overflow-y:auto;background:var(--card,#fff);border:1px solid var(--line);
  border-radius:10px;padding:9px;box-shadow:0 10px 28px rgba(16,24,40,.16);
  display:flex;flex-direction:column;gap:6px}
.kx-fwdpop[hidden],.kx-infopop[hidden]{display:none}
.kx-pop-title{margin:0;font-size:.8em;font-weight:700;color:var(--muted);
  text-transform:uppercase;letter-spacing:.03em}
.kx-fwd-search{padding:7px 10px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.88em}
.kx-fwd-item{display:block;width:100%;padding:7px 9px;border:0;border-radius:7px;
  background:none;font:inherit;font-size:.88em;color:var(--txt);cursor:pointer;
  text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-fwd-item:hover{background:var(--bg-2,rgba(0,0,0,.05))}
.kx-info-row{font-size:.88em;color:var(--txt);padding:3px 2px}
/* Message supprimé / modifié / épinglé */
.kx-msg-deleted{color:var(--faint);font-style:italic}
.kx-msg-pinned{position:absolute;top:-7px;left:-6px;width:19px;height:19px;
  display:flex;align-items:center;justify-content:center;border-radius:50%;
  background:var(--card,#fff);border:1px solid var(--line);color:var(--accent);
  box-shadow:0 1px 4px rgba(16,24,40,.14)}
.kx-flash{outline:2px solid var(--accent);outline-offset:2px;transition:outline .3s}
/* Bandeau des messages épinglés en tête de fil */
.kx-pinbar{display:flex;gap:9px;align-items:flex-start;padding:8px 14px;
  border-bottom:1px solid var(--line);background:var(--surface)}
.kx-pinbar-ic{color:var(--accent);margin-top:4px}
.kx-pinbar-list{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.kx-pinbar-item{display:block;width:100%;padding:3px 6px;border:0;border-radius:6px;
  background:none;font:inherit;font-size:.84em;color:var(--muted);cursor:pointer;
  text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kx-pinbar-item b{color:var(--txt)}
.kx-pinbar-item:hover{background:var(--bg-2,rgba(0,0,0,.05))}
/* Bulle d'envoi en cours (upload AJAX) + sous-menu Déplacer du doc-menu */
.kx-upmsg{min-width:240px}
.kx-upmsg-name{font-size:.88em;font-weight:600;color:var(--txt);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}
.kx-upbar{height:6px;border-radius:999px;background:var(--bg);margin:7px 0 5px;overflow:hidden}
.kx-upbar-fill{height:100%;width:0;border-radius:999px;background:var(--accent);transition:width .25s}
.kx-upmsg-hint{font-size:.76em;color:var(--muted)}
.kx-upmsg-err .kx-upmsg-hint{color:#c0392b;font-weight:600}
.kx-upmsg-err .kx-upbar-fill{background:#c0392b}
.kx-doc-dots{flex:0 0 auto;width:24px;height:22px;border:0;border-radius:6px;
  background:none;color:var(--muted);cursor:pointer;font:inherit;line-height:1}
.kx-doc-dots:hover{color:var(--accent);background:var(--bg-2,rgba(0,0,0,.05))}
.kx-dm-folders{display:flex;flex-direction:column;border-top:1px solid var(--line);
  margin-top:3px;padding-top:3px}
.kx-dm-folders[hidden]{display:none}
.kx-dm-folder{padding-left:26px;font-size:.88em}

/* Pop-up custom (suppression de message) */
.kx-modal{position:fixed;inset:0;z-index:120;background:rgba(10,14,24,.45);
  display:flex;align-items:center;justify-content:center;padding:18px}
.kx-modal[hidden]{display:none}
.kx-modal-card{width:360px;max-width:100%;background:var(--card,#fff);border-radius:14px;
  padding:20px 18px 16px;box-shadow:0 18px 50px rgba(0,0,0,.3);
  display:flex;flex-direction:column;gap:9px}
.kx-modal-title{margin:0;font-weight:700;color:var(--txt)}
.kx-modal-sub{margin:0;font-size:.87em;color:var(--muted);line-height:1.45}
.kx-modal-actions{display:flex;flex-direction:column;gap:7px;margin-top:6px}
.kx-modal-actions .btn,.kx-modal-actions .btn-ghost{width:100%;text-align:center}
.kx-btn-danger{background:#c0392b;box-shadow:0 3px 10px rgba(192,57,43,.3)}
.kx-btn-danger:hover{filter:brightness(1.06)}

/* Visionneuse plein écran (façon Kraaft) */
.kx-lightbox{position:fixed;inset:0;z-index:130;background:rgba(8,10,16,.94);
  display:flex;align-items:center;justify-content:center}
.kx-lightbox[hidden]{display:none}
#kx-lb-img{max-width:88vw;max-height:82vh;border-radius:6px;
  box-shadow:0 10px 40px rgba(0,0,0,.5)}
#kx-lb-img[hidden]{display:none}
#kx-lb-video{max-width:88vw;max-height:82vh;border-radius:6px;
  box-shadow:0 10px 40px rgba(0,0,0,.5);background:#000}
#kx-lb-video[hidden]{display:none}
.kx-lb-head{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;
  gap:10px;padding:13px 16px}
.kx-lb-spacer{width:82px;flex:0 0 auto}   /* équilibre les 2 boutons de droite */
.kx-lb-cap{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px}
.kx-lb-cap b{color:#fff;font-size:.95em;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:100%}
.kx-lb-cap span{color:rgba(255,255,255,.65);font-size:.78em}
.kx-lb-btn{flex:0 0 auto;width:37px;height:37px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:50%;background:rgba(255,255,255,.09);
  color:#fff;cursor:pointer;font:inherit;font-size:1em;line-height:1;transition:.12s}
.kx-lb-btn:hover{background:rgba(255,255,255,.18)}
.kx-lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:46px;
  border:0;border-radius:50%;background:rgba(255,255,255,.1);color:#fff;
  font-size:1.7em;line-height:1;cursor:pointer;transition:.12s}
.kx-lb-nav:hover{background:rgba(255,255,255,.2)}
.kx-lb-nav[hidden]{display:none}
.kx-lb-trash:hover{background:rgba(192,57,43,.55)}
.kx-lb-confirm{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);
  background:var(--card,#fff);border-radius:12px;padding:14px 16px;width:300px;
  box-shadow:0 14px 40px rgba(0,0,0,.45);display:flex;flex-direction:column;gap:10px;
  text-align:center}
.kx-lb-confirm[hidden]{display:none}
.kx-lb-confirm p{margin:0;font-size:.92em;font-weight:600;color:var(--txt)}
.kx-lb-confirm small{font-weight:400;color:var(--muted)}
.kx-lb-confirm-row{display:flex;gap:8px;justify-content:center}
.kx-lb-prev{left:18px}
.kx-lb-next{right:18px}

/* Édition inline d'un message */
.kx-editform{display:flex;flex-direction:column;gap:6px;margin:3px 0}
.kx-editform textarea{width:100%;min-width:220px;resize:vertical;padding:7px 10px;
  border:1px solid var(--line);border-radius:8px;background:var(--bg);
  color:var(--txt);font:inherit;font-size:.95em}
.kx-editform-row{display:flex;gap:7px;justify-content:flex-end}
.kx-msg.kx-mine{align-self:flex-end;
  /* 16 % (et non 10) : sur le fil passé en blanc, 10 % se fondait au fond. */
  background:color-mix(in srgb, var(--accent) 16%, var(--surface));
  border-bottom-left-radius:14px;border-bottom-right-radius:5px}
.kx-msg.kx-mine .kx-msg-author{color:var(--muted)}
.kx-msg-head{display:flex;gap:10px;align-items:baseline;margin-bottom:2px}
.kx-msg-author{font-weight:700;color:var(--accent);font-size:.94em}
.kx-msg-at{color:var(--faint);font-size:.8em}
.kx-msg-body{color:var(--txt);white-space:pre-wrap;word-wrap:break-word;line-height:1.45;font-size:.98em}
.kx-rdvmsg{background:var(--bg);border:1px solid var(--line);border-radius:12px;
  padding:10px 12px 8px;min-width:210px;max-width:100%}
.kx-rdvmsg-head{display:flex;align-items:center;gap:6px;font-size:.78em;
  font-weight:700;letter-spacing:.02em;text-transform:uppercase}
.kx-rdvmsg-chantier .kx-rdvmsg-head{color:var(--accent)}
.kx-rdvmsg-commercial .kx-rdvmsg-head{color:#3355e0}
.kx-rdvmsg-title{font-weight:700;margin-top:5px;line-height:1.3}
.kx-rdvmsg-when{display:flex;align-items:center;gap:6px;color:var(--muted);
  font-size:.9em;margin-top:4px}
.kx-rdvmsg-notes{color:var(--muted);font-size:.9em;margin-top:5px;white-space:pre-wrap}
.kx-rdvmsg .kx-msg-time{display:block;text-align:right;margin-top:6px}
.kx-atts{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.kx-att-img img{display:block;max-width:min(360px,100%);max-height:360px;
  width:auto;height:auto;border-radius:12px;transition:filter .12s}
.kx-att-img:hover img{filter:brightness(.94)}
/* Vidéo dans le fil : même gabarit que la photo, pastille play par-dessus.
   (Avant : une vidéo tombait dans la carte fichier générique, et la galerie
   l'affichait en <img> cassée.) */
.kx-att-video{position:relative;display:inline-block;border-radius:12px;overflow:hidden}
.kx-att-video video{display:block;max-width:min(360px,100%);max-height:360px;
  width:auto;height:auto;border-radius:12px;background:#000;pointer-events:none}
.kx-att-vplay{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:40px;height:40px;border-radius:50%;background:rgba(16,24,40,.62);
  color:#fff;display:flex;align-items:center;justify-content:center;
  pointer-events:none;transition:.12s}
.kx-att-vplay .ic{margin-left:2px}
.kx-att-video:hover .kx-att-vplay{background:rgba(16,24,40,.8)}
.kx-gal-video{position:relative}
.kx-gal-video video{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;
  border:1px solid var(--line);display:block;background:#000;pointer-events:none}
.kx-gal-video .kx-att-vplay{width:30px;height:30px}
/* Carte fichier moderne : icône dans une pastille teintée + nom / taille */
.kx-att-file{display:inline-flex;align-items:center;gap:10px;padding:8px 14px 8px 8px;
  border-radius:12px;background:var(--bg);color:var(--txt);max-width:250px;transition:.12s}
.kx-att-file:hover{background:color-mix(in srgb, var(--accent) 8%, var(--bg))}
.kx-att-fic{flex:0 0 34px;width:34px;height:34px;display:inline-flex;align-items:center;
  justify-content:center;border-radius:10px;color:var(--accent);
  background:color-mix(in srgb, var(--accent) 14%, var(--surface))}
.kx-att-fmeta{min-width:0;display:flex;flex-direction:column;gap:1px}
.kx-att-fname{font-size:.86em;font-weight:600;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-att-file small{color:var(--faint);font-size:.76em;white-space:nowrap}
.kx-empty-msgs{margin:auto}
/* Accueil d'une discussion vierge (façon Kraaft) */
.kx-hello{display:flex;flex-direction:column;align-items:center;gap:7px;
  text-align:center;padding:26px 18px}
.kx-hello-ic{width:46px;height:46px;display:flex;align-items:center;
  justify-content:center;border-radius:50%;color:var(--accent);
  background:color-mix(in srgb, var(--accent) 12%, var(--surface));margin-bottom:3px}
.kx-hello-title{margin:0;font-weight:700;color:var(--txt)}
.kx-hello-sub{margin:0;color:var(--muted);font-size:.9em;line-height:1.5}
.kx-quote{display:flex;flex-direction:column;gap:1px;margin:1px 0 5px;padding:5px 10px;
  background:var(--surface-2);border-left:3px solid #e8a33d;border-radius:8px;font-size:.82em}
.kx-quote-author{color:#e8a33d;font-weight:600}
.kx-quote-body{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Composeur */
.kx-composer{display:flex;align-items:flex-end;gap:10px;padding:12px 16px;border-top:1px solid var(--line)}
.kx-attach,.kx-emojibtn{cursor:pointer;flex:0 0 auto;width:40px;height:40px;
  display:inline-flex;align-items:center;justify-content:center;border-radius:50%;
  border:0;background:none;font:inherit;
  color:var(--accent);transition:.12s;margin-bottom:1px}
.kx-attach:hover,.kx-emojibtn:hover{background:color-mix(in srgb, var(--accent) 12%, transparent)}
/* Palette d'emojis du composeur */
.kx-emojigrid{position:fixed;z-index:85;display:grid;grid-template-columns:repeat(6,36px);
  gap:2px;padding:8px;background:var(--card,#fff);border:1px solid var(--line);
  border-radius:12px;box-shadow:0 10px 28px rgba(16,24,40,.16)}
.kx-emojigrid[hidden]{display:none}
.kx-emojigrid .kx-emoji{width:36px;height:36px;font-size:1.25em}
.kx-input-wrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.kx-reply-bar{display:flex;align-items:center;gap:8px;padding:5px 10px;margin-bottom:2px;
  background:var(--surface-2);border-left:3px solid #e8a33d;border-radius:4px;font-size:.82em}
.kx-reply-bar[hidden]{display:none}
.kx-reply-lead{flex:1;min-width:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-reply-lead b{color:var(--txt)}
.kx-reply-cancel{background:none;border:none;color:var(--muted);cursor:pointer;font-size:.95em;line-height:1}
.kx-reply-cancel:hover{color:var(--txt)}
.kx-input-wrap textarea{width:100%;resize:none;padding:10px 13px;border:1px solid var(--line);
  border-radius:20px;background:var(--bg);color:var(--txt);font:inherit;min-height:42px;max-height:140px;line-height:1.4}
.kx-files-hint{color:var(--accent);font-size:.78em;padding-left:12px}
/* Bandeau des pièces jointes : destination par fichier avant envoi */
.kx-tray{display:flex;flex-direction:column;gap:6px;margin-bottom:4px;padding:8px;
  border:1px solid var(--line);border-radius:12px;background:var(--surface-2)}
.kx-tray[hidden]{display:none}
.kx-tray-item{display:flex;align-items:center;gap:10px}
.kx-tray-name{flex:1;min-width:0;font-size:.85em;color:var(--txt);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-tray-dd{flex:0 0 auto;width:190px;font-size:.86em}
.kx-tray-dd .kx-dd-list{top:auto;bottom:calc(100% + 4px)}   /* ouvre vers le haut (bas d'écran) */
.kx-dd-empty .kx-dd-cur{color:var(--muted)}
.kx-tray-rm{flex:0 0 auto;width:24px;height:24px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:50%;background:none;color:var(--muted);
  font:inherit;font-size:.85em;cursor:pointer;line-height:1}
.kx-tray-rm:hover{color:#c0392b;background:rgba(192,57,43,.1)}
.kx-tray-alert{outline:2px solid var(--bad,#c0392b);outline-offset:1px}
.kx-tray-err{color:#c0392b;font-size:.85em;font-weight:600}
.kx-uperr{margin:8px 16px 0;padding:8px 12px;border-radius:8px;font-size:.86em;
  font-weight:600;color:#c0392b;background:rgba(192,57,43,.08);
  border:1px solid rgba(192,57,43,.35)}
.kx-send{flex:0 0 auto;width:42px;height:42px;border-radius:50%;border:none;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent);color:#fff;cursor:pointer;transition:.12s;
  box-shadow:0 3px 10px color-mix(in srgb, var(--accent) 38%, transparent)}
.kx-send:hover{filter:brightness(1.08)}
.kx-send .ic{margin:1px 2px 0 0}   /* recentre visuellement la flèche penchée */

/* État vide (aucun chantier sélectionné) */
.kx-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;color:var(--muted);text-align:center;padding:24px}
.kx-empty-ic{color:var(--faint)}
.kx-empty-ic .ic{stroke-width:1.4}

/* Une seule colonne sur mobile : liste OU fil */
@media(max-width:1180px){.kx-info{flex-basis:250px}}
@media(max-width:1000px){.kx-info{display:none}}
@media(max-width:820px){
  /* Petit écran : la sidebar passe au-dessus, on rend le scroll de page
     (le verrou 100vh du body ne vaut qu'en desktop). */
  body:has(.kx){height:auto;display:block;overflow:auto}
  body:has(.kx) .shell{min-height:calc(100vh - 53px)}
  .kx{height:calc(100vh - 58px);height:calc(100dvh - 58px);flex:none;min-height:440px}
  .kx-list{flex-basis:100%}
  .kx-has-open .kx-list{display:none}
  .kx-thread{display:none}
  .kx-has-open .kx-thread{display:flex}
  .kx-back{display:inline-flex}
  .kx-msg{max-width:88%}
  .kx-info{display:none}
}

/* --- Lanceur d'apps (portail) --- */
.app-h{margin:26px 0 12px;font-size:1.02em}
.app-note{padding:12px 16px;margin-bottom:6px;border-left:3px solid var(--ok);color:var(--txt)}
.appcard{display:flex;flex-direction:column;gap:8px;padding:16px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface)}
.appcard-off{background:var(--bg)}
.appcard-soon{opacity:.65}
.appcard-top{display:flex;align-items:center;gap:9px}
.appcard-ic{font-size:1.5em;line-height:1}
.appcard-name{font-weight:600;color:var(--txt)}
.appcard-pitch{color:var(--muted);font-size:.88em;flex:1;margin:0}
.appcard-actions{display:flex;align-items:center;gap:8px;margin-top:2px}
.appcard-actions form{margin:0}
.app-badge{font-size:.68em;font-weight:600;padding:1px 7px;border-radius:999px;
  border:1px solid var(--line);color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.app-badge-admin{color:var(--accent);border-color:var(--accent)}
.app-badge-live{color:var(--ok);border-color:var(--ok)}
.app-badge-soon{color:var(--faint)}

/* --- Page produit publique (/apps) --- */
.pub{max-width:1040px;margin:0 auto}
.pub-hero{text-align:center;padding:38px 16px 30px}
.pub-hero h1{font-size:2.1em;margin:0 0 12px}
.pub-lead{color:var(--muted);font-size:1.06em;max-width:640px;margin:0 auto 20px;line-height:1.5}
.pub-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn-lg{padding:12px 22px;font-size:1.02em}
.pub-cat{margin-top:30px}
.pub-cat-title{font-size:1.15em;margin:0 0 14px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.pubcard{display:flex;flex-direction:column;gap:6px;padding:18px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface);transition:.12s}
.pubcard:hover{border-color:var(--accent)}
.pubcard-top{display:flex;align-items:center;justify-content:space-between}
.pubcard-ic{font-size:1.9em;line-height:1}
.pubcard-name{margin:4px 0 0;font-size:1.08em}
.pubcard-tag{color:var(--accent);font-weight:600;font-size:.9em;margin:0}
.pubcard-desc{color:var(--muted);font-size:.88em;line-height:1.5;margin:2px 0 0}
.pub-foot{text-align:center;margin:46px 0 30px;padding:32px 16px;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface)}
.pub-foot h2{margin:0 0 12px}

/* --- Statuts personnalisés : pastille de filtre + configurateur --- */
.kx-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}
.kx-filter-cfg{padding:5px 9px;color:var(--faint)}
.kx-filter-cfg:hover{color:var(--accent);background:var(--bg)}
.stcfg{padding:6px 8px}
/* Une ligne de réglage = un item de liste propre (pas un formulaire brut) :
   texte éditable en ghost input, actions révélées au survol, forte densité. */
.stcfg-row{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:10px;
  transition:background .12s}
.stcfg-row+.stcfg-row{border-top:1px solid var(--line)}
.stcfg-row:hover{background:var(--surface-2)}
.stcfg-row:hover+.stcfg-row,.stcfg-row:has(+ .stcfg-row:hover){border-top-color:transparent}
/* Poignée de glisser-déposer : discrète au repos, nette au survol de la ligne */
.stcfg-grip{flex:0 0 auto;cursor:grab;color:var(--faint);font-size:1.15em;line-height:1;
  padding:0 3px;letter-spacing:-2px;user-select:none;opacity:0;transition:opacity .12s,color .12s}
.stcfg-row:hover .stcfg-grip,.stcfg-row:focus-within .stcfg-grip{opacity:.5}
.stcfg-grip:hover{opacity:1;color:var(--accent)}
.stcfg-grip:active{cursor:grabbing}
.stcfg-row.dragging{opacity:.5;background:var(--surface-2);box-shadow:0 4px 16px rgba(0,0,0,.18)}
.stcfg-row.dragging .stcfg-grip{opacity:1;color:var(--accent);cursor:grabbing}
.stcfg-row.dragging *{pointer-events:none}
/* Badge d'icône du type de champ (avant le libellé) */
.cfg-typeic{flex:0 0 auto;order:0;width:22px;text-align:center;font-size:1.02em;line-height:1}
.stcfg-edit{display:flex;align-items:center;gap:10px;flex:1;min-width:0;margin:0}
/* Pastille de couleur ronde (au lieu du gros carré) */
.stcfg-edit input[type=color],.stcfg-add input[type=color]{width:22px;height:22px;padding:0;
  border:none;border-radius:50%;background:none;cursor:pointer;flex:0 0 auto;-webkit-appearance:none;
  appearance:none;box-shadow:inset 0 0 0 1px rgba(0,0,0,.14)}
.stcfg-edit input[type=color]::-webkit-color-swatch-wrapper{padding:0}
.stcfg-edit input[type=color]::-webkit-color-swatch,
.stcfg-add input[type=color]::-webkit-color-swatch{border:none;border-radius:50%}
/* Ghost input : le libellé se lit comme du texte, s'édite au clic */
.stcfg-edit input[type=text]{flex:1;min-width:0;padding:6px 9px;border:1px solid transparent;
  border-radius:8px;background:transparent;color:var(--txt);font:inherit;font-weight:500;
  transition:border-color .12s,background .12s,box-shadow .12s}
.stcfg-edit input[type=text]:hover{border-color:var(--line)}
.stcfg-edit input[type=text]:focus{border-color:var(--accent);background:var(--bg);outline:none;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}
.stcfg-edit select{width:auto;padding:6px 9px;border:1px solid var(--line);border-radius:8px;
  background:var(--bg);color:var(--txt);font:inherit;font-size:.88em;flex:0 0 auto;cursor:pointer}
.stcfg-edit select:focus{border-color:var(--accent);outline:none}
/* « terminal » : chip toggle plutôt qu'une case flottante */
.stcfg-done{display:inline-flex;align-items:center;gap:6px;font-size:.78em;color:var(--muted);
  white-space:nowrap;cursor:pointer;padding:4px 10px;border:1px solid var(--line);border-radius:999px;
  flex:0 0 auto;transition:.12s}
.stcfg-done:hover{border-color:var(--accent);color:var(--txt)}
.stcfg-done input{accent-color:var(--accent);margin:0;width:13px;height:13px}
.stcfg-done:has(input:checked){background:color-mix(in srgb,var(--accent) 14%,transparent);
  border-color:var(--accent);color:var(--accent);font-weight:600}
.stcfg-phone{font-size:.78em;color:var(--muted);white-space:nowrap;flex:0 0 auto}
/* Actions (enregistrer ✓ / supprimer ✕) : discrètes au repos, nettes au survol */
.cfg-save{opacity:0;color:var(--ok);font-size:1.05em;padding:4px 9px;flex:0 0 auto;transition:opacity .12s}
.stcfg-row>form:last-child .btn-danger{opacity:0;transition:opacity .12s}
.stcfg-row:hover .cfg-save,.stcfg-row:focus-within .cfg-save,
.stcfg-row:hover .btn-danger,.stcfg-row:focus-within .btn-danger{opacity:1}
.stcfg-row>form:last-child{margin:0;flex:0 0 auto}
/* Ligne d'ajout : distincte (séparateur pointillé + champ plein) */
.stcfg-add{display:flex;align-items:center;gap:10px;margin:2px 0 0;padding:11px 8px 6px;
  border-top:1px dashed var(--line)}
.stcfg-add input[type=text]{flex:1;min-width:0;padding:8px 11px;border:1px solid var(--line);
  border-radius:8px;background:var(--bg);color:var(--txt);font:inherit;transition:.12s}
.stcfg-add input[type=text]:focus{border-color:var(--accent);outline:none;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}
.stcfg-add select{width:auto;padding:8px 9px;border:1px solid var(--line);border-radius:8px;
  background:var(--bg);color:var(--txt);font:inherit;font-size:.88em;flex:0 0 auto}
.stcfg-newcard summary{cursor:pointer;font-weight:600}
.cfg-hint{margin:-4px 0 10px}
/* Ligne « Section » : lue comme un titre de groupe, pas une donnée */
.cfg-row-section{background:color-mix(in srgb,var(--accent) 7%,transparent)}
.cfg-row-section .stcfg-edit input[name=label]{font-weight:700;color:var(--accent);
  text-transform:uppercase;letter-spacing:.03em;font-size:.88em}
/* État vide d'un onglet */
.stcfg-empty{margin:8px 6px;padding:16px;text-align:center;color:var(--muted);font-size:.9em;
  border:1px dashed var(--line);border-radius:10px;background:var(--bg)}
/* Ligne en cours de suppression (undo différé) */
.stcfg-row.removing{opacity:.4;pointer-events:none}
/* Toasts (feedback + annuler) */
.cfg-toasts{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:200;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.cfg-toast{display:flex;align-items:center;gap:14px;background:var(--surface);color:var(--txt);
  border:1px solid var(--line);border-radius:10px;padding:10px 16px;font-size:.9em;
  box-shadow:0 8px 28px rgba(0,0,0,.22);pointer-events:auto;animation:cfgtoastin .18s ease}
.cfg-toast-undo{background:none;border:none;color:var(--accent);font-weight:700;cursor:pointer;
  font:inherit;font-size:.92em;padding:0}
.cfg-toast-undo:hover{text-decoration:underline}
@keyframes cfgtoastin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
/* Ligne d'édition d'un champ perso : label + type + options -> wrap si étroit */
/* Ligne d'un champ perso : [libellé] [type] (+✓) sur une ligne ; le champ
   « options » (masqué par JS hors choix) passe en pleine largeur en dessous. */
.cfg-fieldedit,.cfg-fieldadd{flex-wrap:wrap;align-items:center;row-gap:8px}
.cfg-fieldedit input[name=label],.cfg-fieldadd input[name=label]{flex:1 1 0;min-width:120px;order:1}
.cfg-ftype{width:auto;min-width:150px;order:2}
.cfg-fieldedit .cfg-save,.cfg-fieldadd .btn{order:3}
.cfg-fieldedit input[name=options],.cfg-fieldadd input[name=options]{flex:1 1 100%;order:4;
  border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--txt);
  font:inherit;font-weight:400;padding:8px 11px}
.cfg-fieldedit input[name=options]:hover{border-color:var(--line)}
.cfg-fieldedit input[name=options]:focus,.cfg-fieldadd input[name=options]:focus{
  border-color:var(--accent);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}
.cfg-folder-ico{flex:0 0 auto;font-size:1.05em;opacity:.85}
/* Espace + Mon profil */
.esp-form .field,.esp-card .field{margin-bottom:12px}
.esp-row{display:flex;gap:14px;flex-wrap:wrap}
.esp-row .field{flex:1;min-width:150px}
.esp-logo{display:flex;align-items:center;gap:20px;flex-wrap:wrap}
/* Plaque blanche comme dans le header : les logos client sont dessinés pour
   fond clair, un aperçu sur fond sombre les rendait illisibles. */
.esp-logo-preview{width:180px;height:96px;border:1px dashed var(--line);border-radius:var(--r-sm);
  display:flex;align-items:center;justify-content:center;background:#fff;overflow:hidden;padding:10px 14px;box-sizing:border-box}
.esp-logo-preview img{max-width:100%;max-height:100%;object-fit:contain}
.esp-logo-none{color:var(--faint);font-size:.85em}
.esp-logo-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.esp-logo-form{margin:0}
.prof-dl{display:grid;grid-template-columns:auto 1fr;gap:6px 18px;margin:16px 0 0;
  padding-top:14px;border-top:1px solid var(--line)}
.prof-dl dt{color:var(--muted);font-size:.85em}
.prof-dl dd{margin:0;color:var(--txt);font-size:.9em}

/* Champs / étiquettes / membres dans le panneau Infos */
.kx-th-labels{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.kx-labelchip{font-size:.72em;font-weight:600;padding:2px 9px;border-radius:999px;
  border:1px solid var(--line);background:none;cursor:pointer;line-height:1.5}
.kx-labelchip.on{color:#fff;border-color:transparent}
.kx-toggles{display:flex;flex-wrap:wrap;gap:6px}
.kx-toggles form{margin:0}
.kx-memberchip{font-size:.78em;padding:3px 11px;border-radius:999px;border:1px solid var(--line);
  background:none;color:var(--muted);cursor:pointer}
.kx-memberchip.on{background:var(--accent);border-color:var(--accent);color:#fff}
/* Panneau Membres façon Kraaft (ligne d'ouverture, vue liste, édition cases) */
.kx-parts-btn{background:none;border:0;cursor:pointer;font:inherit;padding:0}
.kx-parts-btn:hover{color:var(--accent)}
/* display:flex écraserait l'attribut hidden : on le rétablit explicitement */
.kx-mem-panel[hidden],.kx-mem-row[hidden],.kx-info-tabs[hidden]{display:none}
.kx-mem-open{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;
  padding:0;cursor:pointer;font:inherit;color:inherit;text-align:left}
.kx-mem-open:hover .kx-mem-chev{color:var(--accent)}
.kx-mem-open-main{flex:1;min-width:0}
.kx-mem-open-main h4{margin:0 0 4px}
.kx-mem-preview{display:block;font-size:.8em;color:var(--muted);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-mem-chev{flex:0 0 auto;font-size:1.3em;color:var(--faint);line-height:1}
.kx-mem-panel{display:flex;flex-direction:column;min-height:100%}
.kx-mem-head{display:flex;align-items:center;gap:8px;padding:10px 12px;position:sticky;top:0;
  z-index:2;background:var(--surface);border-bottom:1px solid var(--line)}
.kx-mem-head h4{flex:1;margin:0;font-size:.95em}
.kx-mem-back,.kx-mem-editbtn{background:none;border:0;cursor:pointer;font-size:1.1em;
  color:var(--muted);padding:2px 8px;border-radius:8px;line-height:1.3}
.kx-mem-back{font-size:1.4em}
.kx-mem-back:hover,.kx-mem-editbtn:hover{background:var(--surface-2);color:var(--txt)}
.kx-mem-toolbar{padding:10px 12px 6px}
.kx-mem-search{width:100%}
.kx-mem-strip{display:flex;flex-wrap:wrap;gap:8px;padding:8px 12px}
.kx-mem-stripitem{display:flex;flex-direction:column;align-items:center;gap:3px;background:none;
  border:0;cursor:pointer;font:inherit;font-size:.7em;color:var(--muted);max-width:56px}
.kx-mem-stripitem span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:56px}
.kx-mem-stripitem:hover .kx-mem-av{outline:2px solid var(--accent)}
.kx-mem-all{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 14px;font-size:.85em;font-weight:600;color:var(--muted);cursor:pointer;
  border-bottom:1px solid var(--line)}
.kx-mem-all input{accent-color:var(--accent);width:16px;height:16px}
.kx-mem-list{flex:1;padding:4px 6px}
.kx-mem-row{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:9px;cursor:pointer}
.kx-mem-row:hover{background:var(--surface-2)}
.kx-mem-name{flex:1;min-width:0;font-size:.88em;font-weight:500;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-mem-check{accent-color:var(--accent);width:16px;height:16px;flex:0 0 auto}
.kx-mem-av{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  flex:0 0 auto;border-radius:50%;background:var(--surface-2);border:1px solid var(--line);
  font-size:.66em;font-weight:700;letter-spacing:.02em}
.kx-mem-confirm{position:sticky;bottom:0;padding:10px 12px;background:var(--surface);
  border-top:1px solid var(--line)}
.kx-mem-confirm .btn{width:100%}
.kx-fields{display:flex;flex-direction:column;gap:9px}
.kx-field{display:flex;flex-direction:column;gap:3px;margin:0}
.kx-field-lab{font-size:.78em;color:var(--muted)}
.kx-field input,.kx-field select,.kx-field textarea{width:100%;padding:6px 9px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:.88em}
.kx-field textarea{resize:vertical;min-height:38px;line-height:1.35}
/* Section : titre de groupe dans les détails */
.kx-field-section{margin:8px 0 1px;font-size:.72em;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;color:var(--accent)}
.kx-field-section:first-child{margin-top:0}
.kx-field-map{text-decoration:none;font-size:1em}
/* Case à cocher */
.kx-field-check{flex-direction:row}
.kx-check-lab{display:flex;align-items:center;gap:8px;font-size:.88em;color:var(--txt);cursor:pointer}
.kx-check-lab input{width:auto;margin:0}
/* Choix multiple : puces cliquables */
.kx-ms-opts{display:flex;flex-wrap:wrap;gap:6px}
.kx-ms-chip{font-size:.74em;font-weight:600;padding:3px 10px;border-radius:999px;
  border:1px solid var(--line);background:var(--bg);color:var(--muted);cursor:pointer}
.kx-ms-chip.on{background:var(--accent);color:#fff;border-color:transparent}

/* Invitation d'équipe : bloc dans la config + page publique */
.cfg-invite{margin-bottom:14px}
.cfg-invite strong{display:block;margin-bottom:2px}
.cfg-invite-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.cfg-invite-row input{flex:1;min-width:220px;padding:9px 11px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:.88em}
.cfg-invite-actions{display:flex;gap:8px;margin-top:10px}
.cfg-invite-actions form{margin:0}
.invite{max-width:440px;margin:24px auto;padding:0 16px}
.invite-hero{text-align:center;margin-bottom:22px}
.invite-hero h1{font-size:1.7em;margin:0 0 10px}
.invite-hero p{color:var(--muted);line-height:1.5}
.invite-ic{font-size:2.4em;margin-bottom:8px}
.invite-err{background:var(--surface);border-left:3px solid #e5484d;color:var(--txt);
  padding:11px 14px;border-radius:var(--r-sm);margin-bottom:14px;font-size:.9em}
.invite-form{display:flex;flex-direction:column;gap:14px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface);padding:20px}
.invite-row{display:flex;gap:12px}
.invite-row label{flex:1;min-width:0}
.invite-form label{display:flex;flex-direction:column;gap:5px;font-size:.85em;color:var(--muted)}
.stcfg-phone{font-size:.8em;color:var(--muted);white-space:nowrap;display:flex;align-items:center}
.invite-form input{padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.95em}
.invite-form button{margin-top:4px}
.invite-foot{text-align:center;color:var(--muted);font-size:.9em;margin-top:16px}

.journal .jr-recap{border-left:3px solid var(--accent);padding:4px 0 4px 14px;margin:12px 0}
.journal .jr-period{color:var(--accent);font-size:.8em;font-weight:600;margin-bottom:4px}
.journal .jr-body{font-size:.95em;line-height:1.6}
.jr-feed{list-style:none;margin:10px 0 0;padding:0}
.jr-feed li{display:flex;align-items:baseline;gap:12px;padding:8px 0;border-top:1px solid var(--line)}
.jr-feed li:first-child{border-top:0}
.jr-date{flex:0 0 46px;color:var(--muted);font-size:.85em}
.jr-title{flex:1}
.jr-detail{color:var(--muted);font-size:.9em}
.jr-del{flex:0 0 auto;margin:0}
.jr-add{display:flex;gap:8px;margin-top:14px;padding-top:14px;border-top:1px dashed var(--line);flex-wrap:wrap}
.jr-add input[type=text]{flex:1;min-width:160px}
.jr-add input[name=title]{flex:2}
.jr-add button{flex:0 0 auto}

.acard-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.astate{font-size:.78em;padding:3px 10px;border-radius:999px;font-weight:600;white-space:nowrap}
.astate.ok{color:var(--ok);background:color-mix(in srgb, var(--ok) 13%, transparent)}
.astate.warn{color:var(--warn);background:color-mix(in srgb, var(--warn) 13%, transparent)}
.astate.off{color:var(--muted);background:var(--surface-2)}
.acard-action{color:var(--muted);font-size:.92em;margin:8px 0 0}
.acard-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 12px}
.acard .t-stats{display:flex;gap:18px;border-top:1px solid var(--line);padding-top:12px}
.acard .t-stats div span{display:block;font-family:'Inter';font-weight:700;font-size:1.3em}
.acard .t-stats div small{color:var(--muted);font-size:.78em}
.acard-link{display:inline-block;margin-top:12px}

.sparkwrap{color:var(--accent);margin-top:6px}
.sparkwrap .spark{max-width:100%}

/* --- Bascule de thème clair/sombre --- */
.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;
  background:var(--surface);border:1px solid var(--line);border-radius:9px;cursor:pointer;
  font-size:1em;line-height:1;padding:0;transition:.14s}
.theme-toggle:hover{border-color:var(--accent)}
.login-toggle{position:fixed;top:18px;right:18px}
.senti{font-size:.75em;padding:2px 8px;border-radius:6px;font-weight:600;white-space:nowrap}
.senti.positif{color:var(--ok);background:rgba(52,211,153,.13)}
.senti.neutre{color:var(--muted);background:var(--surface-2)}
.senti.negatif{color:var(--bad);background:rgba(248,113,113,.13)}

/* --- Tendances (mini-graphes CSS purs) + badge RGPD --- */
.chart{display:flex;flex-direction:column;gap:5px;margin-top:4px}
.bar-row{display:flex;align-items:center;gap:9px;font-size:.82em}
.bar-lab{flex:0 0 46px;color:var(--muted);font-family:"JetBrains Mono";font-size:.9em;white-space:nowrap}
.bar{flex:1;height:9px;background:var(--surface-2);border-radius:5px;overflow:hidden}
.bar-fill{display:block;height:100%;background:var(--cyan);border-radius:5px;min-width:0;transition:width .3s}
.bar-fill.accent{background:var(--grad)}
.bar-val{flex:0 0 22px;text-align:right;color:var(--muted);font-family:"JetBrains Mono";font-size:.85em}
.chart-hours{flex-direction:row;align-items:flex-end;gap:3px;height:96px}
.hcol{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px}
.hcol-bar{width:100%;min-height:2px;background:var(--grad);border-radius:3px 3px 0 0;transition:height .3s}
.hcol-lab{font-size:.62em;color:var(--faint);font-family:"JetBrains Mono"}
.rgpd-badge{margin:0;font-size:.82em;color:var(--muted);border:1px solid var(--line);border-radius:8px;
  padding:6px 10px;display:inline-block;background:var(--surface-2)}

/* --- Commercial v2 (vues portées du dashboard Mr Rayonnage) --------------- */
/* Listes ligne principale / côté droit (ventes, stock, chantiers, santé) */
.rlist{list-style:none;margin:6px 0 0;padding:0}
.rrow{display:flex;align-items:center;gap:14px;padding:10px 0;border-top:1px solid var(--line)}
.rlist>li:first-child .rrow,.rlist>li:first-child.rrow{border-top:0}
a.rrow{transition:.12s;border-radius:8px}
a.rrow:hover{background:var(--surface-2)}
.rrow-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.rrow-main small{color:var(--muted);font-size:.85em;overflow:hidden;text-overflow:ellipsis}
.rrow-side{display:flex;flex-direction:column;align-items:flex-end;gap:2px;text-align:right;flex:0 0 auto}
.rrow-side small{color:var(--muted);font-size:.82em}
.warn-txt{color:var(--warn)}
.bar-val-wide{flex:0 0 110px;white-space:nowrap}
/* Tunnel chantiers pleine largeur : nombre de dossiers par étape uniquement
   (lecture goulot d'étranglement — pas de montants, décision Tim 2026-07-22) */
.funnel-n{flex:0 0 30px}
.bar-cell{min-width:90px}
.minibar{display:block;height:9px;min-width:2px;background:var(--accent);border-radius:5px}
.agechip{color:var(--warn);border-color:color-mix(in srgb, var(--warn) 40%, transparent)}
.kv{display:flex;justify-content:space-between;gap:16px;padding:8px 0;border-top:1px solid var(--line);font-size:.95em}
.kv:first-of-type{border-top:0}
.kv>span{color:var(--muted)}

/* Ma journée : liste de tâches */
.tasklist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.task{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.task-hot{border-color:color-mix(in srgb, var(--warn) 45%, transparent)}
.task-body{flex:1;min-width:220px;display:flex;flex-direction:column;gap:2px}
.task-who{font-weight:600}
.task-who a{color:var(--accent)}
.task-line{color:var(--muted);font-size:.9em}
.task-actions{display:flex;align-items:center;gap:8px}
.task-actions form{display:inline-flex;gap:8px;margin:0}

/* Scorecard hebdo */
.scoretable th,.scoretable td{white-space:nowrap;text-align:right}
.scoretable th:first-child,.scoretable td:first-child{text-align:left}
.score-metric{font-weight:600}

/* --- Référencement : timeline par mois ------------------------------------ */
.seo-tl{list-style:none;margin:0;padding:0}
.seo-item{display:flex;gap:14px;padding:12px 0;border-top:1px solid var(--line)}
.seo-item:first-child{border-top:0}
.seo-thumb{flex:0 0 74px;width:74px;height:56px;border-radius:8px;object-fit:cover;
  border:1px solid var(--line);background:var(--surface-2)}
.seo-thumb-ph,.seo-thumb-act{display:flex;align-items:center;justify-content:center;
  color:var(--faint);font-size:1.2em}
.seo-thumb-act{height:34px;flex-basis:34px;width:34px;border-radius:50%;align-self:flex-start;margin:2px 20px}
.seo-main{flex:1;min-width:0}
.seo-head{display:flex;align-items:center;gap:10px;margin-bottom:2px}
.seo-date{color:var(--muted);font-size:.8em}
.seo-badge{font-size:.72em;font-weight:700;padding:2px 9px;border-radius:999px;white-space:nowrap}
.seo-title{font-weight:600}
a.seo-title:hover{color:var(--accent)}
.seo-excerpt{color:var(--muted);font-size:.88em;margin-top:3px}
.b-art{color:var(--accent);background:color-mix(in srgb, var(--accent) 13%, transparent)}
.b-page{color:var(--cyan);background:color-mix(in srgb, var(--cyan) 13%, transparent)}
.b-real{color:var(--ok);background:color-mix(in srgb, var(--ok) 13%, transparent)}
.b-tech{color:var(--warn);background:color-mix(in srgb, var(--warn) 14%, transparent)}
.b-cont{color:var(--accent);background:color-mix(in srgb, var(--accent) 13%, transparent)}
.b-conv{color:var(--bad);background:color-mix(in srgb, var(--bad) 12%, transparent)}
.seo-thumb-act.b-tech{background:color-mix(in srgb, var(--warn) 14%, transparent);color:var(--warn);border-color:transparent}
.seo-thumb-act.b-cont{background:color-mix(in srgb, var(--accent) 13%, transparent);color:var(--accent);border-color:transparent}
.seo-thumb-act.b-conv{background:color-mix(in srgb, var(--bad) 12%, transparent);color:var(--bad);border-color:transparent}
.b-maj{color:var(--muted);background:var(--surface-2);border:1px dashed var(--line)}
.seo-stats{color:var(--faint);font-size:.8em;margin-top:4px;font-family:"JetBrains Mono",monospace}

/* Référencement : accordéon par mois */
.seo-tl-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.seo-tl-head h2{margin:0;font-size:1.15em}
details.seo-month{margin-top:12px;padding:0;overflow:hidden}
details.seo-month summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;
  padding:15px 20px;user-select:none}
details.seo-month summary::-webkit-details-marker{display:none}
details.seo-month summary:hover{background:var(--surface-2)}
.seo-month-label{font-family:'Inter';font-weight:700;font-size:1.02em}
.seo-month-meta{color:var(--muted);font-size:.86em;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seo-caret{color:var(--faint);transition:transform .15s;flex:0 0 auto}
details.seo-month[open] .seo-caret{transform:rotate(90deg)}
details.seo-month .seo-tl{padding:2px 20px 14px;border-top:1px solid var(--line)}

/* Stock : tableaux denses, chips de couverture, catégories, alerte ruptures */
.stk-tbl th,.stk-tbl td{padding:8px 10px;white-space:nowrap}
.stk-tbl td.stk-prod{white-space:normal;min-width:220px}
.stk-tbl .tr{text-align:right}
.stk-tbl .tnum{font-family:"JetBrains Mono",monospace;font-size:.88em}
.stk-prod strong{font-weight:600}
.stk-prod small{display:block;color:var(--muted);font-size:.8em;margin-top:1px}
.stk-cat-cell{color:var(--muted);font-size:.85em}
.stk-res{color:var(--cyan)}
.chip-sem{display:inline-block;font-size:.76em;padding:2px 9px;border-radius:999px;
  font-weight:700;font-family:"JetBrains Mono",monospace;white-space:nowrap}
.chip-crit{color:var(--bad);background:color-mix(in srgb, var(--bad) 12%, transparent);
  border:1px solid color-mix(in srgb, var(--bad) 35%, transparent)}
.chip-warn{color:var(--warn);background:color-mix(in srgb, var(--warn) 12%, transparent);
  border:1px solid color-mix(in srgb, var(--warn) 35%, transparent)}
.chip-ok{color:var(--muted);background:var(--surface-2);border:1px solid var(--line)}
.chip-none{color:var(--faint);background:none;border:0}
.stk-count{display:inline-block;min-width:20px;text-align:center;padding:1px 7px;
  border-radius:999px;background:var(--surface-2);border:1px solid var(--line);
  color:var(--muted);font-size:.68em;font-weight:700;vertical-align:middle}
.stk-alertcard{border-color:color-mix(in srgb, var(--warn) 45%, transparent);
  background:color-mix(in srgb, var(--warn) 5%, var(--surface))}
.stk-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;vertical-align:baseline}
.stk-dot-warn{background:var(--warn);box-shadow:0 0 8px var(--warn)}
.stk-dormant-eur{color:var(--txt)}
.stk-sugg{color:var(--accent)}
.stk-date{display:block;color:var(--muted);font-size:.78em}
.stk-csv{margin-left:10px;font-size:.85em;padding:4px 12px;vertical-align:middle}
.stk-cats{margin-top:4px}
details.stk-cat2{border-top:1px solid var(--line)}
details.stk-cat2 summary{list-style:none;cursor:pointer;user-select:none;
  display:grid;grid-template-columns:16px minmax(140px,190px) 1fr 64px 92px 92px;
  align-items:center;gap:12px;padding:10px 4px}
details.stk-cat2 summary::-webkit-details-marker{display:none}
details.stk-cat2 summary:hover{background:var(--surface-2)}
.stk-sum-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stk-sum-bar{height:6px;border-radius:999px;background:var(--surface-2);overflow:hidden}
.stk-sum-bar i{display:block;height:100%;border-radius:999px;background:var(--grad);min-width:2px}
.stk-sum-n,.stk-sum-u{color:var(--muted);font-size:.85em;text-align:right;font-family:"JetBrains Mono",monospace}
.stk-sum-v{font-size:.88em;font-weight:600;text-align:right;font-family:"JetBrains Mono",monospace}
.stk-caret{color:var(--faint);transition:transform .15s;flex:0 0 auto}
details.stk-cat2[open] .stk-caret{transform:rotate(90deg)}
details.stk-cat2 .stk-body{padding:0 4px 12px}
@media (max-width:760px){
  details.stk-cat2 summary{grid-template-columns:14px 1fr auto;gap:8px}
  .stk-sum-bar,.stk-sum-n,.stk-sum-u{display:none}
}

/* Référencement : tendance longue + requêtes */
.seo-compare{color:var(--muted);font-size:.92em;margin:0 0 14px}
.seo-pct{font-weight:700;font-family:"JetBrains Mono",monospace;font-size:.95em}
.pct-up{color:var(--ok)}
.pct-down{color:var(--bad)}
.seo-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px}
.seo-fig{margin:0}
.seo-fig figcaption{color:var(--muted);font-size:.82em;font-weight:600;margin-bottom:6px}
.seo-chart-scroll{overflow-x:auto}
/* Barres : la valeur apparaît au survol de la barre (max + mois en cours
   restent affichés en permanence via cval-on) */
.cbar .cval{opacity:0;pointer-events:none;transition:opacity .12s}
.cbar:hover .cval,.cbar .cval.cval-on{opacity:1}
.cbar:hover path{filter:brightness(1.12)}
/* Répartition des visites par canal : anneau + légende appariée */
.donut-wrap{display:flex;gap:32px;align-items:center;flex-wrap:wrap}
.donut-fig svg{display:block}
.dslice{transition:stroke-width .15s ease}
.dslice:hover{stroke-width:25}
.donut-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;flex:1;min-width:260px}
.donut-legend li{display:flex;align-items:center;gap:10px}
.donut-legend .dot{width:10px;height:10px;border-radius:3px;flex:none}
.donut-legend .dlab{flex:1}
.donut-legend .dval{font-weight:600;font-variant-numeric:tabular-nums}
.donut-legend .dpct{color:var(--muted);min-width:44px;text-align:right;font-variant-numeric:tabular-nums}
.seo-queries .seo-q{font-weight:600;max-width:340px;overflow-wrap:break-word}
.seo-evo{font-size:.82em;font-weight:700;white-space:nowrap}
.evo-up{color:var(--ok)}
.evo-down{color:var(--bad)}
.evo-flat{color:var(--faint)}
.evo-new{color:var(--accent)}

/* --- WhatsApp : messagerie (liste + fil) ---------------------------------- */
.wa-layout{display:grid;grid-template-columns:minmax(280px,2fr) 3fr;gap:16px;align-items:start}
.wa-list .rrow-side{align-items:flex-end}
.wa-sel{background:var(--surface-2)}
.wa-back{display:none}
.wa-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
  padding-bottom:12px;border-bottom:1px solid var(--line);margin-bottom:12px}
.wa-lead{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:6px 14px;margin-bottom:14px}
.wa-lead .kv{padding:6px 0}
.wa-msgs{display:flex;flex-direction:column;gap:8px;max-height:520px;overflow-y:auto;padding-right:4px}
.wa-msg{max-width:82%;padding:8px 12px;border-radius:12px;font-size:.93em;white-space:pre-wrap;
  overflow-wrap:break-word}
.wa-msg.client{align-self:flex-start;background:var(--surface-2);border:1px solid var(--line);
  border-bottom-left-radius:4px}
.wa-msg.bot{align-self:flex-end;background:color-mix(in srgb, var(--accent) 14%, transparent);
  border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);border-bottom-right-radius:4px}
.stpill.wa-ok::before{background:var(--ok)}
.stpill.wa-blue::before{background:var(--accent)}
.stpill.wa-warn::before{background:var(--warn)}
.stpill.wa-off::before{background:var(--faint)}
@media(max-width:900px){
  .wa-layout{grid-template-columns:1fr}
  .wa-layout.wa-open .wa-list{display:none}
  .wa-back{display:inline-block;margin-bottom:10px}
}

/* --- Tooltips pédagogiques « i » (macro _tip.html) ------------------------ */
.tip{position:relative;display:inline-block;vertical-align:baseline;margin-left:4px}
.tip-btn{display:inline-flex;align-items:center;justify-content:center;
  width:15px;height:15px;border-radius:50%;border:1px solid var(--faint);
  background:none;color:var(--faint);font:600 10px/1 'Inter',sans-serif;
  font-style:italic;cursor:pointer;padding:0;vertical-align:text-top;transition:.12s}
.tip-btn:hover,.tip-btn:focus-visible,.tip.open .tip-btn{
  border-color:var(--accent);color:var(--accent)}
.tip-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tip-pop{position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);
  width:max-content;max-width:min(250px,72vw);background:var(--surface-2);
  border:1px solid var(--line);border-radius:10px;padding:9px 12px;
  color:var(--txt);font-size:.8rem;font-weight:400;font-style:normal;
  line-height:1.45;text-align:left;box-shadow:0 8px 22px rgba(0,0,0,.18);
  opacity:0;pointer-events:none;transition:opacity .14s;z-index:40;white-space:normal}
.tip:hover .tip-pop,.tip-btn:focus-visible + .tip-pop,.tip.open .tip-pop{
  opacity:1;pointer-events:auto}
.tip-pop.tip-edge-l{left:0;transform:none}
.tip-pop.tip-edge-r{left:auto;right:0;transform:none}
/* Mobile : un popover fermé ne doit pas étendre la zone de scroll (débord
   horizontal quand le « i » est près du bord droit). display:none le sort du
   layout ; l'ouverture (tap JS ou survol) le réaffiche avant la mesure. */
@media (max-width:760px){
  .tip-pop{display:none}
  .tip:hover .tip-pop,.tip-btn:focus-visible + .tip-pop,.tip.open .tip-pop{display:block}
}

/* --- Tendances : légendes de séries + repères d'événements ---------------- */
.tl-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:10px}
.tl-key{display:inline-flex;align-items:center;font-size:.84em;color:var(--txt)}
.tl-key-n{color:var(--muted);font-family:"JetBrains Mono",monospace;font-size:.9em;margin-left:6px}
.tl-mark{cursor:pointer}
.tl-mark:focus-visible circle{stroke:var(--txt);stroke-width:1.5}
.tl-reperes{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.tl-reperes-t{display:block;color:var(--muted);font-size:.78em;font-weight:700;
  text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px}
.tl-reperes ol{list-style:none;margin:0;padding:0}
.tl-reperes li{display:flex;align-items:baseline;gap:9px;padding:3px 6px;
  font-size:.86em;border-radius:8px}
.tl-num{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:17px;height:17px;border-radius:50%;background:var(--accent);color:#fff;
  font:700 10px/1 'Inter',sans-serif;transform:translateY(2px)}
.tl-rep-txt{color:var(--muted)}
.tl-rep-txt strong{color:var(--txt);font-weight:600}
.tl-src{color:var(--muted);font-size:.9em;max-width:420px;overflow-wrap:break-word}
@keyframes tl-flash{0%{background:color-mix(in srgb, var(--accent) 22%, transparent)}
  100%{background:transparent}}
.tl-reperes li.tl-flash{animation:tl-flash 1.6s ease-out}

/* --- « Lecture du mois » (gabarits déterministes, zéro invention) --------- */
.lecture{border-left:3px solid var(--accent)}
.lecture h3{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.lecture ul{margin:0;padding-left:18px;color:var(--txt)}
.lecture li{margin:4px 0}
.lecture-link{color:var(--accent);font-weight:600;font-size:.88em;white-space:nowrap}
.lecture-link:hover{text-decoration:underline}
.lecture-sub{margin:12px 0 4px;font-size:.78em;font-weight:700;color:var(--muted);
  text-transform:uppercase;letter-spacing:.05em}

/* --- Réseaux sociaux : badges par réseau, saisie des posts et relevés --- */
.b-li{color:#4a9be8;background:color-mix(in srgb, #4a9be8 13%, transparent)}
.b-ig{color:#d6669c;background:color-mix(in srgb, #d6669c 13%, transparent)}
.b-fb{color:var(--accent);background:color-mix(in srgb, var(--accent) 13%, transparent)}
.seo-thumb-act.b-li{background:color-mix(in srgb, #4a9be8 13%, transparent);border-color:transparent}
.seo-thumb-act.b-ig{background:color-mix(in srgb, #d6669c 13%, transparent);border-color:transparent}
.seo-thumb-act.b-fb{background:color-mix(in srgb, var(--accent) 13%, transparent);border-color:transparent}
details.soc-add summary{list-style:none;cursor:pointer;user-select:none}
details.soc-add summary::-webkit-details-marker{display:none}
.soc-form{display:grid;grid-template-columns:repeat(4, minmax(120px, 1fr));gap:10px;
  margin-top:14px;align-items:end}
.soc-form label{display:flex;flex-direction:column;gap:5px;font-size:.82em;color:var(--muted)}
.soc-form .soc-wide{grid-column:span 2}
.soc-form input[type=date],.soc-form input[type=url]{width:100%;background:var(--bg);
  border:1px solid var(--line);border-radius:var(--r-sm);color:var(--txt);
  padding:10px 12px;font:inherit;font-size:.95em}
.soc-form button{justify-self:start}
.soc-releve{color:var(--faint);font-style:italic}
details.soc-edit{margin-top:6px}
details.soc-edit summary{list-style:none;cursor:pointer;color:var(--accent);
  font-size:.82em;font-weight:600;user-select:none}
details.soc-edit summary::-webkit-details-marker{display:none}
details.soc-edit .soc-form{padding:12px;border:1px dashed var(--line);
  border-radius:var(--r-sm);margin-top:8px}
.soc-del{margin-top:8px;text-align:right}
@media(max-width:700px){
  .soc-form{grid-template-columns:1fr 1fr}
  .soc-form .soc-wide{grid-column:span 2}
}

/* ---- Sous-onglet Devis (plan AutoCAD -> devis Odoo) ---------------------- */
.dv-err{border-color:color-mix(in srgb, var(--warn) 55%, transparent);
  background:color-mix(in srgb, var(--warn) 9%, var(--surface))}
.dv-ok{border-color:color-mix(in srgb, var(--ok) 55%, transparent)}
.dv-upload{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.dv-upload input[type=file]{flex:1;min-width:220px;padding:8px;border:1px dashed var(--line);
  border-radius:var(--r-sm);background:var(--surface-2);color:var(--muted);font-size:.9em}
.dv-chip-warn{border-color:var(--warn);color:var(--warn)}
.dv-conv{margin:6px 0 0;padding-left:18px;color:var(--muted);font-size:.92em}
.dv-conv li{margin-bottom:7px}
.dv-conv code, .crow-title code{font-family:"JetBrains Mono",monospace;font-size:.9em;
  background:var(--surface-2);padding:1px 6px;border-radius:4px}
.dv-inconnu td{background:color-mix(in srgb, var(--warn) 7%, transparent)}
.dv-kind{display:block;color:var(--faint);font-size:.78em}
.dv-qty{width:86px;padding:7px 9px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);color:var(--txt);font-family:"JetBrains Mono",monospace;
  font-size:.92em;text-align:right}
.dv-code{width:170px;text-align:left;font-size:.86em}
.dv-eur{width:110px}
.dv-extras{display:flex;gap:22px;flex-wrap:wrap;margin-top:16px;padding-top:14px;
  border-top:1px solid var(--line)}
.dv-extras label{display:flex;align-items:center;gap:8px;color:var(--muted);
  font-size:.9em;font-weight:600;flex-wrap:wrap}
.dv-extras select, .dv-assoc select{padding:7px 9px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface);color:var(--txt);
  font-size:.88em;max-width:280px}
.dv-actions{display:flex;align-items:center;gap:14px;margin-top:14px;flex-wrap:wrap}
.dv-assoc{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dv-clients{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.dv-client{display:block;padding:8px 12px;border:1px solid var(--line);
  border-radius:var(--r-sm);cursor:pointer;font-size:.92em;color:var(--muted)}
.dv-client:hover{border-color:var(--accent);color:var(--txt)}
.dv-clients .btn-ghost{align-self:flex-start}
.dv-creer{color:var(--txt);border-color:var(--accent)}
.dv-creer:hover{background:rgba(91,140,255,.12)}
@media(max-width:760px){
  .dv-extras{flex-direction:column;align-items:flex-start}
  .dv-assoc select{max-width:100%}
}


.kx-filterhead{display:none}
.kx-minimap-wrap{display:none}
.kx-media-month{margin:12px 12px 6px;font-size:.95em}
.kx-media-body .kx-media-grid{padding-top:0}
/* ===== Mobile façon Kraaft (app Chantiers) ===== */
.kx-mtabs,.kx-tabbar,.kx-m-infobtn,.kx-cam{display:none}
.kx-mmenu{display:none}
@media(max-width:820px){
  /* — Vue liste : outils épurés (Clients/Config vivent dans Menu) — */
  /* La barre verticale de l'app est desktop : sur mobile ces destinations
     vivent dans le menu ☰ (Planning, Carte, Clients, Configuration). */
  .kx-rail{display:none}
  /* Les pages sœurs redeviennent des pages qui scrollent normalement. */
  .kx-page{height:auto;min-height:0;display:block}
  .kx-page-body{overflow:visible;padding:14px}
  .kx-list{padding-bottom:64px}
  /* — FAB collé à droite + archives rangées dans Menu — */
  .kx-fab{left:auto;right:14px;transform:none;bottom:70px}
  .kx-mmenu-n{display:inline-flex;align-items:center;justify-content:center;
    min-width:22px;height:22px;padding:0 7px;border-radius:999px;
    background:var(--surface-2);color:var(--muted);font-size:.78em;margin-right:6px}
  /* — Tab bar Conversations | Menu — */
  .kx-tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:90;
    background:var(--surface);border-top:1px solid var(--line);
    padding:6px 10px calc(6px + env(safe-area-inset-bottom))}
  .kx-has-open .kx-tabbar{display:none}
  .kx-tb{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
    background:none;border:0;font:inherit;font-size:.7em;font-weight:600;
    color:var(--muted);cursor:pointer;padding:2px 0}
  .kx-tb.on{color:var(--accent)}
  /* — Page Menu — */
  .kx-mmenu{display:block;position:fixed;left:0;right:0;top:0;bottom:52px;
    z-index:85;background:var(--bg);padding:16px;overflow-y:auto}
  .kx-mmenu[hidden]{display:none}
  .kx-mmenu-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
  .kx-mmenu-head h2{margin:0;font-size:1.5em}
  .kx-mmenu-logout{color:var(--muted);display:inline-flex;padding:6px}
  .kx-mmenu-tenant{display:flex;align-items:center;gap:10px;font-weight:700;
    background:var(--surface);border:1px solid var(--line);border-radius:12px;
    padding:12px 14px;margin-bottom:14px}
  .kx-mmenu-av{display:inline-flex;align-items:center;justify-content:center;
    width:38px;height:38px;border-radius:10px;background:var(--grad);color:#fff;
    font-size:.8em;font-weight:700}
  .kx-mmenu-item{display:flex;align-items:center;justify-content:space-between;
    gap:10px;background:var(--surface);border:1px solid var(--line);
    border-radius:12px;padding:13px 14px;margin-bottom:8px;color:inherit;
    text-decoration:none;font-weight:600}
  .kx-mmenu-item>span:first-child{display:inline-flex;align-items:center;gap:10px}
  .kx-mmenu-item .ic{color:var(--muted)}
  .kx-mmenu-chev{display:inline-flex;transform:rotate(-90deg);color:var(--faint)}
  .kx-cam{display:inline-flex;align-items:center;cursor:pointer;color:var(--muted)}
  .kx-cam:hover{color:var(--txt)}
  /* — Room : header épuré + sous-titre « Voir les informations » — */
  .kx-th-meta,.kx-th-labels,.kx-th-statut,.kx-info-toggle{display:none}
  .kx-m-infobtn{display:block;background:none;border:0;padding:1px 0 0;
    font:inherit;font-size:.78em;color:var(--muted);cursor:pointer;text-align:left}
  /* — Onglets segmentés Galerie | Chat | Dossier — */
  .kx-mtabs{display:flex;gap:6px;padding:7px 10px;background:var(--surface);
    border-bottom:1px solid var(--line)}
  /* Le 4e onglet (Heures) et le bouton Rendez-vous ont poussé la largeur
     minimale de la colonne au-delà de l'écran : on autorise la colonne et ses
     barres à se comprimer, sinon toute l'app déborde de quelques dizaines de px. */
  /* Bug préexistant révélé par la barre à 4 onglets : l'en-tête du fil refusait
     de se comprimer (largeur minimale ~406px), donc toute l'app débordait de
     46px sur un écran de 360. Les actions se replient, le titre s'ellipse. */
  /* Le bord à bord du module passe .content en max-width:none : sans plafond,
     la largeur minimale du contenu débordait l'écran (386px sur un 360). */
  .content:has(.kx){max-width:100%}
  .kx-thread,.kx-mtabs,.kx-composer,.kx-input-wrap,.kx-th-head,.kx-th-actions{min-width:0}
  .kx-th-head{gap:8px;padding:12px 12px}
  /* Le sous-titre (client · ville) imposait sa largeur : on l'ellipse comme le titre. */
  .kx-th-title>*{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .kx-th-head .kx-th-statut{min-width:0;flex:0 1 auto}
  /* 4 onglets depuis l'ajout des Heures : on resserre pour tenir sur 360px. */
  .kx-mtab{flex:1;min-width:0;display:inline-flex;align-items:center;justify-content:center;
    gap:5px;padding:8px 2px;border:0;background:none;border-radius:999px;white-space:nowrap;
    font:inherit;font-size:.82em;font-weight:600;color:var(--muted);cursor:pointer}
  .kx-mtab .ic-clock{color:#7a5af8}
  .kx-mtab.on{background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--accent)}
  .kx-mtab .ic-image{color:#2a9d8f}
  .kx-mtab .ic-chat{color:var(--accent)}
  .kx-mtab .ic-folder{color:#e0a800}
  /* — Modes Galerie / Dossier / Infos : le panneau remplace le chat.
     (kx-mnochat est posé sur #kx-root lui-même : pas de sélecteur descendant) — */
  #kx-root.kx-mnochat{flex-direction:column}
  .kx-mnochat .kx-msgs,.kx-mnochat .kx-composer,.kx-mnochat .kx-pinbar,
  .kx-mnochat .kx-thsearch,.kx-mnochat .kx-uperr,.kx-mnochat .kx-emojigrid{display:none}
  .kx-mnochat .kx-thread{flex:none;min-height:0}
  .kx-mnochat .kx-info{display:flex;flex-direction:column;width:100%;flex:1;
    min-height:0;border-left:0;overflow-y:auto}
  .kx-mnochat #kx-info-tabs{display:none}
  #kx-media-panel .kx-mem-back{display:none}   /* on navigue par les onglets */
  .kx-media-grid{grid-template-columns:repeat(3,1fr)}
  /* — Plus de bandeau portail : l'app Chantiers EST l'app (façon Kraaft).
     La déconnexion et le profil vivent dans l'onglet Menu. — */
  body:has(.kx) .topbar{display:none}
  .kx{height:100vh;height:100dvh}
  /* — Bandeau carte décoratif au-dessus de la liste (rendu instantané) — */
  .kx-minimap-wrap{display:block;position:relative;height:86px;margin:10px 10px 2px;
    border-radius:12px;overflow:hidden;border:1px solid var(--line)}
  .kx-minimap-svg{position:absolute;inset:0;width:100%;height:100%}
  .kx-minimap-btn{position:absolute;top:50%;right:12px;transform:translateY(-50%);
    background:var(--surface);border:2px solid var(--accent);color:var(--accent);
    font-weight:700;border-radius:12px;padding:7px 16px}
  /* — En-tête liste façon Kraaft : Conversations + Filtrer, recherche seule — */
  .kx-m-listhead{display:flex;align-items:center;justify-content:space-between;
    padding:4px 4px 10px}
  .kx-m-listhead h1{margin:0;font-size:1.45em}
  .kx-m-listhead button{display:inline-flex;align-items:center;gap:6px;background:none;
    border:0;font:inherit;font-size:.95em;font-weight:600;color:var(--txt);cursor:pointer}
  .kx-tools #kx-filter-btn,.kx-tools a[href*="/carte"]{display:none}
  /* — Filtre en bottom sheet — */
  .kx-filterpop{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:130;
    border-radius:18px 18px 0 0;border:0;border-top:1px solid var(--line);
    box-shadow:0 -14px 44px rgba(16,24,40,.28);padding:0 16px calc(14px + env(safe-area-inset-bottom));
    max-height:82vh;overflow-y:auto}
  .kx-filterhead{display:grid !important;grid-template-columns:36px 1fr 36px;align-items:center;
    padding:12px 0 6px;text-align:center}
  .kx-filterhead h4{margin:0;font-size:1.05em}
  .kx-filterclose{background:none;border:0;cursor:pointer;color:var(--accent);
    display:inline-flex;padding:4px;justify-self:start}
}


/* Squelette de room : peint au tap sur une conversation (mobile), le temps
   que la vraie page arrive — la réponse au doigt est immédiate. */
.kx-skel{position:fixed;inset:0;z-index:200;background:var(--bg);display:flex;flex-direction:column}
.kx-skel-head{display:flex;align-items:center;gap:10px;padding:14px 14px 10px;
  border-bottom:1px solid var(--line);background:var(--surface);font-size:1.02em}
.kx-skel-head b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-skel-back{color:var(--muted);font-size:1.2em}
.kx-skel-tabs{display:flex;gap:6px;padding:9px 10px;background:var(--surface);
  border-bottom:1px solid var(--line)}
.kx-skel-tabs span{flex:1;height:30px;border-radius:999px;background:var(--surface-2);
  animation:kxskel 1.1s ease-in-out infinite}
.kx-skel-tabs span.on{background:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.kx-skel-body{flex:1;display:flex;flex-direction:column;gap:12px;padding:18px 14px}
.kx-skel-b{height:38px;border-radius:14px;background:var(--surface);
  border:1px solid var(--line);animation:kxskel 1.1s ease-in-out infinite}
.kx-skel-b.me{align-self:flex-end;background:color-mix(in srgb,var(--accent) 8%,var(--surface))}
.kx-skel-b.w45{width:45%}.kx-skel-b.w55{width:55%}.kx-skel-b.w60{width:60%}
.kx-skel-b.w70{width:70%}.kx-skel-b.w80{width:80%}
@keyframes kxskel{0%,100%{opacity:1}50%{opacity:.55}}
@media(min-width:821px){.kx-m-listhead{display:none}}

/* ================= App Production (plan de travail agence) =================
   Vue opérateur /admin/production + projection client (_production_client).
   Doctrine : files d'action d'abord, densité, chips remplies, couleur par
   module doublée d'une barre latérale (jamais la couleur seule). */
.content:has(.prodwrap){max-width:none}
.prodwrap{--m-seo:var(--accent); --m-ads:#c026d3; --m-social:var(--cyan); --m-siteweb:var(--ok)}
.prod-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}
.prod-headact{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.prod-filters{display:flex;gap:8px}
.prod-filters select{background:var(--surface);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:7px 10px;font:inherit;font-size:.9em}

/* Files d'action */
.prod-queues{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;margin-bottom:18px}
.prod-queue{padding:14px 16px}
.prod-queue.q-warn{border-color:color-mix(in srgb,var(--warn) 45%,transparent);
  background:color-mix(in srgb,var(--warn) 6%,var(--surface))}
.prod-qhead{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.prod-qhead h3{margin:0;font-size:.98em}
.prod-qlist{list-style:none;margin:0;padding:0;max-height:250px;overflow:auto}
.prod-qrow{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:6px 4px;border-top:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.prod-qrow:first-child{border-top:0}
.prod-qmain{display:flex;align-items:center;gap:7px;min-width:0;flex-wrap:wrap}
.prod-qtitle{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:230px}
.prod-qact{display:flex;gap:5px;flex:0 0 auto;opacity:0;transition:.12s}
.prod-qrow:hover .prod-qact,.prod-qrow:focus-within .prod-qact{opacity:1}
.prod-empty-ok{color:var(--ok)}
.prod-age{font-family:"JetBrains Mono",monospace;font-size:.78em;color:var(--muted)}
.prod-age.warn{color:var(--warn);font-weight:700}
.prod-deadline{font-size:.8em;color:var(--faint)}

.btn-mini{background:var(--surface-2);border:1px solid var(--line);color:var(--txt);
  border-radius:8px;padding:3px 9px;font:inherit;font-size:.8em;cursor:pointer;
  display:inline-flex;align-items:center;gap:4px;transition:.12s}
.btn-mini:hover{border-color:var(--accent);color:var(--accent)}
.btn-mini.act{border-color:color-mix(in srgb,var(--accent) 55%,transparent);
  background:color-mix(in srgb,var(--accent) 12%,var(--surface));font-weight:600}
.btn-mini.act:hover{background:color-mix(in srgb,var(--accent) 20%,var(--surface));color:var(--txt)}

/* Chips de statut : REMPLIES (règle Tim), texte foncé sur teinte */
.prod-chip{display:inline-flex;align-items:center;border-radius:999px;padding:1px 8px;
  font-size:.74em;font-weight:700;border:1px solid currentColor;
  background:color-mix(in srgb,currentColor 16%,transparent);white-space:nowrap}
.prod-chip.st-prevu{color:var(--faint)}
.prod-chip.st-en_cours{color:var(--accent)}
.prod-chip.st-fait{color:var(--warn)}
.prod-chip.st-validation{color:#c026d3}
.prod-chip.st-valide{color:var(--cyan)}
.prod-chip.st-publie{color:var(--ok)}
.prod-chip.st-report{color:var(--bad)}
.prod-tenant{font-size:.72em;font-weight:600;color:var(--muted);
  background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:1px 6px;
  max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prod-type{font-size:.8em;color:var(--faint)}
.prod-v{font-size:.72em;color:var(--faint)}

/* Tableau cadence (th/td, chiffres mono à droite — règle Tim) */
.prod-tbl{width:100%;border-collapse:collapse;font-size:.92em}
.prod-tbl th{text-align:left;font-family:"JetBrains Mono",monospace;font-size:.72em;
  text-transform:uppercase;letter-spacing:.06em;color:var(--faint);
  padding:6px 8px;border-bottom:1px solid var(--line)}
.prod-tbl td{padding:7px 8px;border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.prod-tbl th.num,.prod-tbl td.num{text-align:right;font-family:"JetBrains Mono",monospace}

/* Agenda semaine */
.prod-weeknav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.prod-weeknav-l{display:flex;align-items:center;gap:8px}
.prod-weektitle{font-family:'Inter',sans-serif;font-weight:700;display:flex;align-items:center;gap:8px}
.prod-weekdates{color:var(--muted);font-weight:500}
.prod-wk-toggle{display:flex;align-items:center;gap:6px;font-size:.85em;color:var(--muted);cursor:pointer}
/* La vue active occupe TOUTE la hauteur restante (hauteur posée par JS,
   fitHeights) : le scroll vit DANS les colonnes, jamais sur la page. */
html.prod-noscroll{overflow:hidden}
.prod-agenda{display:flex;flex-direction:column;min-height:0}
.prod-boardwrap{display:flex;gap:12px;align-items:stretch;flex:1;min-height:0}
.prod-tray{flex:0 0 260px;display:flex;flex-direction:column;min-height:0;
  background:color-mix(in srgb,var(--surface-2) 55%,var(--surface));
  border:1px solid var(--line);border-radius:12px;overflow:hidden}
.prod-tray-head{display:flex;align-items:center;gap:8px;padding:9px 11px;
  border-bottom:2px solid color-mix(in srgb,var(--accent) 45%,transparent)}
.prod-tray-head h4{margin:0;font-size:.8em;font-family:"JetBrains Mono",monospace;
  text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.prod-traylist{flex:1;min-height:120px;overflow-y:auto;padding:8px;
  display:flex;flex-direction:column;gap:6px}
.prod-tray-empty{margin:auto;display:flex;align-items:center;gap:6px;
  color:var(--ok);font-size:.84em;font-weight:600;opacity:.85}
.prod-tray-empty[hidden]{display:none}
.prod-board{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}
.prod-weekrow{display:flex;align-items:center;gap:10px;margin-bottom:10px;
  border:1px dashed color-mix(in srgb,var(--line) 85%,transparent);border-radius:10px;
  background:color-mix(in srgb,var(--surface-2) 40%,var(--surface));padding:6px 10px}
.prod-weekrow-label{flex:0 0 auto;font-size:.66em;color:var(--muted);text-transform:uppercase;
  letter-spacing:.05em;line-height:1.5}
.prod-weekzone{flex:1;display:flex;flex-wrap:wrap;gap:6px;min-height:44px;align-items:flex-start}
.prod-weekzone .prod-card{width:210px}
.prod-days{flex:1;min-height:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.prod-day{display:flex;flex-direction:column;min-height:200px;overflow:hidden;
  background:color-mix(in srgb,var(--surface-2) 55%,var(--surface));
  border:1px solid var(--line);border-radius:12px}
.prod-day.hidden{display:none}
.prod-day.is-weekend{background:color-mix(in srgb,var(--surface-2) 25%,var(--surface))}
.prod-day.is-today{border-color:color-mix(in srgb,var(--accent) 50%,transparent);
  background:color-mix(in srgb,var(--accent) 4%,var(--surface))}
.prod-day-head{display:flex;align-items:baseline;gap:6px;padding:7px 10px;
  background:color-mix(in srgb,var(--surface-2) 85%,var(--surface));
  border-bottom:1px solid var(--line)}
.prod-day.is-today .prod-day-head{border-bottom:2px solid var(--accent);
  background:color-mix(in srgb,var(--accent) 9%,var(--surface))}
.prod-day-name{font-weight:700;font-size:.86em}
.prod-day.is-today .prod-day-name{color:var(--accent)}
.prod-day-num{font-size:.72em;color:var(--faint);font-family:"JetBrains Mono",monospace}
.prod-day-charge{margin-left:auto;font-size:.72em;color:var(--muted);font-weight:600}
.prod-daylist{flex:1;min-height:0;overflow-y:auto;padding:7px;
  display:flex;flex-direction:column;gap:6px}

/* Zones de drop */
.prod-dropzone{border:1.5px dashed transparent;border-radius:var(--r-sm);padding:4px;transition:border-color .12s, background .12s}
body.prod-dragmode .prod-dropzone{border-color:color-mix(in srgb,var(--line) 80%,transparent)}
.prod-dropzone.is-over{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.prod-zone-hint{display:none;margin:4px;font-size:.78em}
body.prod-dragmode .prod-zone-hint{display:block}

/* Cartes livrable : fond teinté clair + barre latérale saturée + texte foncé */
.prod-card{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--faint);
  border-radius:10px;padding:7px 9px;cursor:grab;user-select:none;touch-action:pan-y;
  box-shadow:0 1px 3px rgba(0,0,0,.07)}
.prod-card:hover{border-color:var(--accent);border-left-width:4px}
.prod-card.mod-seo{border-left-color:var(--m-seo);background:color-mix(in srgb,var(--m-seo) 5%,var(--surface))}
.prod-card.mod-ads{border-left-color:var(--m-ads);background:color-mix(in srgb,var(--m-ads) 5%,var(--surface))}
.prod-card.mod-social{border-left-color:var(--m-social);background:color-mix(in srgb,var(--m-social) 5%,var(--surface))}
.prod-card.mod-siteweb{border-left-color:var(--m-siteweb);background:color-mix(in srgb,var(--m-siteweb) 5%,var(--surface))}
.prod-card-top{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:3px}
.prod-duree{font-size:.7em;color:var(--faint)}
.prod-card-title{font-weight:600;font-size:.88em;line-height:1.3;margin-bottom:4px}
.prod-card-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.prod-card.prod-dragging{opacity:.35}
.prod-ghost{position:fixed;z-index:80;pointer-events:none;opacity:.92;
  box-shadow:0 8px 26px rgba(0,0,0,.25);cursor:grabbing}

/* Dialog fiche (dialog natif) */
.prod-dlg{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);
  color:var(--txt);padding:0;width:min(680px,94vw)}
.prod-dlg::backdrop{background:rgba(8,10,14,.55);backdrop-filter:blur(2px)}
.prod-dlg form{padding:18px 20px}
.prod-dlg-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.prod-dlg-head h3{margin:0}
.prod-dlg-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.prod-dlg-grid label{display:flex;flex-direction:column;gap:4px;font-size:.85em;color:var(--muted);font-weight:600}
.prod-dlg-grid label.span2{grid-column:span 2}
.prod-dlg-grid input,.prod-dlg-grid select,.prod-dlg-grid textarea{
  background:var(--bg);color:var(--txt);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:8px 10px;font:inherit;font-size:.95em}
.prod-dlg-grid textarea{resize:vertical}
.prod-f-partage{flex-direction:row !important;align-items:center}
.prod-dlg-actions{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 4px}
.prod-modifnote{width:100%;margin:6px 0 0;padding:8px 10px;border-radius:var(--r-sm);font-size:.85em;
  color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 45%,transparent);
  background:color-mix(in srgb,var(--warn) 8%,var(--surface))}
.prod-dlg-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-top:12px}
.prod-dlg-btns{display:flex;gap:8px;flex:0 0 auto}
.prod-log{font-size:.75em;color:var(--faint);font-family:"JetBrains Mono",monospace;line-height:1.6}

/* Toast (non critique : rollback + erreurs seulement) */
.prod-toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:90;
  background:var(--surface);border:1px solid color-mix(in srgb,var(--bad) 50%,transparent);
  color:var(--txt);border-radius:var(--r-sm);padding:10px 16px;box-shadow:0 8px 26px rgba(0,0,0,.3)}

@media (max-width:900px){
  .prod-boardwrap{flex-direction:column}
  .prod-tray{position:static;flex:none;width:100%}
  .prod-days{grid-template-columns:1fr}
  .prod-day{min-height:auto}
  .prod-daylist{min-height:40px}
}

/* ---- Projection client (rubriques Production dans un onglet) ---- */
.pc-valider{border-color:color-mix(in srgb,var(--accent) 50%,transparent);
  background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.pc-item{border-top:1px solid color-mix(in srgb,var(--line) 55%,transparent);padding:10px 2px}
.pc-item:first-of-type{border-top:0}
.pc-item-title{font-weight:700}
.pc-apercu{margin:8px 0;padding:10px 12px;border-left:3px solid var(--accent);
  background:var(--surface-2);border-radius:0 var(--r-sm) var(--r-sm) 0;
  white-space:pre-wrap;font-size:.93em;max-height:300px;overflow:auto}
.pc-actions{display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap;margin-top:8px}
.pc-modif{display:flex;gap:6px;flex:1;min-width:260px}
.pc-modif textarea{flex:1;background:var(--bg);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:8px 10px;font:inherit;font-size:.9em;min-height:38px;resize:vertical}
.pc-deadline{font-size:.8em;color:var(--faint);margin-top:6px}
.pc-list{list-style:none;margin:0;padding:0}
.pc-list li{display:flex;align-items:center;gap:8px;padding:6px 2px;flex-wrap:wrap;
  border-top:1px solid color-mix(in srgb,var(--line) 45%,transparent)}
.pc-list li:first-child{border-top:0}
.pc-week{font-family:"JetBrains Mono",monospace;font-size:.76em;color:var(--faint)}
.pc-url{font-size:.82em;color:var(--accent);overflow:hidden;text-overflow:ellipsis;max-width:340px;white-space:nowrap}
.pc-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:760px){.pc-grid{grid-template-columns:1fr}}
.pc-banner{display:flex;align-items:center;gap:14px;justify-content:space-between;flex-wrap:wrap;
  border:1px solid color-mix(in srgb,var(--accent) 55%,transparent);
  background:color-mix(in srgb,var(--accent) 10%,var(--surface));
  border-radius:var(--rad-sm,10px);padding:12px 16px;margin-bottom:var(--gap,16px)}
.pc-wrap{display:flex;flex-direction:column;width:100%}
.pc-modif button{background:var(--surface-2);border:1px solid var(--line);color:var(--txt);
  border-radius:var(--r-sm);padding:8px 14px;font:inherit;font-size:.9em;cursor:pointer;flex:0 0 auto}
.pc-modif button:hover{border-color:var(--accent);color:var(--accent)}
@media (max-width:900px){
  .prod-weekrow{flex-direction:column;gap:4px}
  .prod-weekrow-label{flex:none;padding-top:0}
}
.prod-push{margin-left:auto;background:none;border:1px solid transparent;border-radius:6px;
  color:var(--faint);font-size:.95em;line-height:1;padding:1px 6px;cursor:pointer;opacity:0;transition:.12s}
.prod-card:hover .prod-push,.prod-card:focus-within .prod-push{opacity:1}
.prod-push:hover{color:var(--accent);border-color:var(--line);background:var(--surface-2)}
.prod-card-top .prod-duree{margin-left:auto}
.prod-card-top:has(.prod-push) .prod-duree{margin-left:0}
.prod-quickadd{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.prod-quickadd input[type=text]{flex:1;min-width:260px;background:var(--bg);color:var(--txt);
  border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 12px;font:inherit;font-size:.92em}
.prod-quickadd select{background:var(--surface);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:7px 10px;font:inherit;font-size:.88em}
.prod-prep{display:flex;align-items:center;gap:10px;margin-left:auto}
.prod-toast-act{margin-left:12px;background:var(--surface-2);border:1px solid var(--accent);
  color:var(--accent);border-radius:8px;padding:4px 12px;font:inherit;font-size:.88em;font-weight:700;cursor:pointer}
.pc-merci{border-color:color-mix(in srgb,var(--ok) 50%,transparent);
  background:color-mix(in srgb,var(--ok) 8%,var(--surface))}
.pc-merci h3{color:var(--ok)}
.prod-quickadd select,.prod-quickadd button{flex:0 0 auto;width:auto}
.prod-mlaunch{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.prod-mlaunch select{background:var(--surface);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:7px 10px;font:inherit;font-size:.9em;width:auto;flex:0 1 auto;max-width:100%}
.prod-chip.mst-queued{color:var(--faint)}
.prod-chip.mst-running{color:var(--accent)}
.prod-chip.mst-done{color:var(--ok)}
.prod-chip.mst-failed{color:var(--bad)}
.prod-mdout{white-space:pre-wrap;overflow-wrap:anywhere;font-family:'Inter',sans-serif;
  font-size:.95em;line-height:1.6;margin:0;max-height:75vh;overflow:auto;
  background:var(--bg);border:1px solid var(--line);border-radius:var(--r-sm);padding:16px 18px}

/* ---- Barre unique : onglets + filtres + création (pas de titre de page) ---- */
.prod-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin:2px 0 14px}
.prod-tabs{margin:0}
.prod-tabs button{font:inherit}
.prod-tabs .navbadge{margin-left:5px;vertical-align:1px}

/* ---- Pipeline : 5 vraies colonnes kanban, toujours visibles (règle Tim).
   Couleur d'étape sur la tête de colonne + compteur rempli ; l'état vide
   (célébré, vert) vit DANS la colonne. ---- */
.prod-pipeboard{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));
  gap:10px;margin-bottom:14px}
.prod-pipecol{--col:var(--faint);display:flex;flex-direction:column;min-height:280px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  box-shadow:0 1px 3px rgba(0,0,0,.05)}
.col-planifier{--col:var(--accent)}
.col-retard{--col:var(--bad)}
.col-relire{--col:var(--warn)}
.col-validation{--col:#c026d3}
.col-publier{--col:var(--cyan)}
.prod-pipecol-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:10px 12px 8px;border-bottom:2px solid color-mix(in srgb,var(--col) 55%,transparent)}
.prod-pipecol-head h3{margin:0;font-size:.88em;letter-spacing:.01em}
.prod-pipecount{font-family:"JetBrains Mono",monospace;font-size:.76em;font-weight:700;
  min-width:24px;text-align:center;border-radius:999px;padding:1px 7px;color:var(--col);
  border:1px solid currentColor;background:color-mix(in srgb,var(--col) 14%,transparent)}
.prod-pipecount.zero{color:var(--faint);background:none;border-color:var(--line)}
.prod-pipecol-list{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px;
  padding:10px;overflow-y:auto}
.prod-pipecol-empty{margin:auto;display:flex;align-items:center;gap:6px;
  color:var(--ok);font-size:.84em;font-weight:600;opacity:.85}
.prod-pipecol-empty[hidden]{display:none}
.prod-pipecard{background:color-mix(in srgb,var(--surface-2) 45%,var(--surface));
  border:1px solid var(--line);border-left:3px solid var(--faint);
  border-radius:10px;padding:8px 10px}
.prod-pipecard.mod-seo{border-left-color:var(--m-seo)}
.prod-pipecard.mod-ads{border-left-color:var(--m-ads)}
.prod-pipecard.mod-social{border-left-color:var(--m-social)}
.prod-pipecard.mod-siteweb{border-left-color:var(--m-siteweb)}
.prod-pipecard-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:4px}
.prod-pipecard-title{font-weight:600;font-size:.88em;line-height:1.35;margin-bottom:3px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.prod-pipecard-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:7px}
.prod-pipecard-act{display:flex;gap:5px;flex-wrap:wrap}
@media (max-width:1250px){.prod-pipeboard{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:820px){.prod-pipeboard{grid-template-columns:1fr;}
  .prod-pipecol{min-height:auto}}

/* ---- Lanceur Missions IA : catalogue en tuiles, pas un select interminable ---- */
.prod-mlaunch{display:block;margin-bottom:12px}
.prod-mtiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:8px;margin-bottom:10px}
.prod-mtile{position:relative;display:flex;flex-direction:column;gap:3px;
  border:1px solid var(--line);border-radius:10px;padding:9px 11px;cursor:pointer;
  background:var(--surface);transition:border-color .12s, background .12s}
.prod-mtile:hover{border-color:var(--accent)}
.prod-mtile input{position:absolute;opacity:0;pointer-events:none}
.prod-mtile:has(input:checked){border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 8%,var(--surface));
  box-shadow:inset 0 0 0 1px var(--accent)}
.prod-mtile:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
.prod-mtile-label{font-weight:700;font-size:.88em}
.prod-mtile:has(input:checked) .prod-mtile-label{color:var(--accent)}
.prod-mtile-desc{font-size:.77em;color:var(--muted);line-height:1.35}
.prod-mlaunch-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

/* ---- Onglet Mandat : le contrat mensuel par client, éditable ---- */
.prod-mandatbar{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin-bottom:12px}
.prod-mandatbar>.hint{margin:0}
.prod-mandat{margin-bottom:14px;padding:16px 20px}
.prod-mandat-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.prod-mandat-head h3{margin:0;font-size:1.02em}
.prod-mandat-spacer{flex:1}
.prod-mandat-head select,.prod-mandat-head input,.prod-mandat-add select,
.prod-mandat-add input,.prod-qtyform input{
  background:var(--bg);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:5px 8px;font:inherit;font-size:.85em}
.prod-mandat-head select,.prod-mandat-add select{width:auto;flex:0 0 auto}
.prod-mandat-head input{width:auto}
/* Lecture d'abord : le mandat se LIT, l'édition s'efface (saisies fantômes,
   visibles au survol / focus seulement). */
.prod-mandat-head select,.prod-mandat-head input,.prod-qtyform input,
.prod-guichet-plafond input{background:transparent;border-color:transparent;
  transition:border-color .12s, background .12s}
.prod-mandat-head:hover select,.prod-mandat-head:hover input,
.prod-mandat-head select:focus,.prod-mandat-head input:focus,
.prod-qtyform:hover input,.prod-qtyform input:focus,
.prod-guichet-plafond:hover input,.prod-guichet-plafond input:focus{
  background:var(--bg);border-color:var(--line)}
.prod-mandat-head .btn-mini{opacity:0;transition:.12s}
.prod-mandat-head:hover .btn-mini,.prod-mandat-head:focus-within .btn-mini{opacity:1}
/* Mode lecture / édition par carte : par défaut on LIT (zéro bouton),
   le crayon bascule toute la carte en édition (demande Tim). */
.prod-mandat:not(.is-editing) .m-edit{display:none !important}
.prod-mandat.is-editing .m-read{display:none !important}
.prod-mandat-head .prod-mandat-pen{opacity:1}
.prod-mandat.is-editing .prod-mandat-pen{color:var(--accent);border-color:var(--accent)}
.prod-mandat-prixtxt{font-weight:700}
.prod-mandat-engtxt{color:var(--muted);font-size:.88em}
.prod-mandat-scopetxt{flex-basis:100%;display:flex;align-items:center;gap:6px;margin:0}
.prod-mandat-prixwrap{display:inline-flex;align-items:center;gap:5px;font-size:.85em;color:var(--muted)}
.prod-mandat.is-editing .prod-mandat-head select,
.prod-mandat.is-editing .prod-mandat-head input,
.prod-mandat.is-editing .prod-qtyform input,
.prod-mandat.is-editing .prod-guichet-plafond input{background:var(--bg);border-color:var(--line)}
.prod-mandat.is-editing .prod-mandat-head .btn-mini,
.prod-mandat.is-editing .prod-tbl td .btn-mini,
.prod-mandat.is-editing .prod-qtyform .btn-mini,
.prod-mandat.is-editing .prod-guichet-plafond .btn-mini,
.prod-mandat.is-editing .prod-route-act{opacity:1}

/* Formulaires d'ajout repliés : un bouton discret, le formulaire au clic */
.prod-add{margin-top:8px}
.prod-add summary{list-style:none;display:inline-flex;align-items:center;gap:5px;
  cursor:pointer;font-size:.8em;color:var(--muted);border:1px dashed var(--line);
  border-radius:8px;padding:3px 10px;user-select:none}
.prod-add summary::-webkit-details-marker{display:none}
.prod-add summary:hover{color:var(--accent);border-color:var(--accent)}
.prod-add[open] summary{margin-bottom:8px;color:var(--accent);border-color:var(--accent)}
/* Socle : vraie table alignée (règle maison), poste | détail | archive */
.prod-socle td{vertical-align:top}
.prod-socle-label{font-weight:600;white-space:nowrap;width:1%;padding-right:16px}
.prod-socle-note{color:var(--muted);font-size:.9em}
.prod-socle-act{width:1%;text-align:right}
.prod-socle-act form{margin:0}
.prod-socle-act .btn-mini{opacity:0;transition:.12s}
.prod-socle tr:hover .prod-socle-act .btn-mini,
.prod-socle tr:focus-within .prod-socle-act .btn-mini{opacity:1}
/* Note de cadence : une ligne, tooltip pour le détail */
.prod-cad-note{border-bottom:1px dotted var(--faint);cursor:help}
/* Jauge d'avancement : neutre en cours, verte tenue, cyan sur-livré, rouge
   dépassé — remplace les chips d'état (moins d'alarme, plus d'info) */
.prod-real{display:inline-flex;align-items:center;gap:8px}
.prod-jauge{display:inline-block;width:64px;height:5px;border-radius:999px;
  background:color-mix(in srgb,var(--line) 55%,transparent);overflow:hidden;flex:0 0 auto}
.prod-jauge i{display:block;height:100%;border-radius:999px;background:var(--accent);min-width:2px}
.prod-jauge.done i{background:var(--ok)}
.prod-jauge.over i{background:var(--cyan)}
.prod-jauge.bad i{background:var(--bad)}
.prod-mandat-col h4 .ic,.prod-frise-sec h4 .ic{vertical-align:-2px;margin-right:2px;opacity:.75}

/* Panneaux des 4 natures : le langage des colonnes kanban (têtes colorées,
   fonds teintés) appliqué au mandat — fini le blanc plat froid. */
/* Le Mandat occupe TOUTE la hauteur (règle Tim) : la vue est verrouillée à
   l'écran, les panneaux s'étirent (hauteur naturelle + part égale du surplus),
   et s'il y a plusieurs clients le scroll vit DANS la vue. */
.prod-mandat-fill{display:flex;flex-direction:column;min-height:0;overflow:hidden}
.prod-mandat-fill .prod-mandatbar{flex:0 0 auto}
/* Carrousel : un client plein écran, glissement horizontal (scroll-snap),
   flèches ← → ; la carte se CALE sur la hauteur (flex 1 1 + min-height:0
   propagé), donc un panneau trop plein scrolle DANS son corps, jamais la page. */
.prod-mandat-track{flex:1;min-height:0;display:flex;overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;scrollbar-width:none;gap:14px}
.prod-mandat-track::-webkit-scrollbar{display:none}
.prod-mandat-track .prod-mandat{flex:0 0 100%;min-width:100%;scroll-snap-align:start;
  scroll-snap-stop:always;min-height:0;display:flex;flex-direction:column;margin-bottom:2px}
.prod-mandat-fill .prod-mandat-panels{flex:1 1 auto;min-height:0;align-items:stretch}
.prod-mandat-fill .prod-mpanel-stack{min-height:0}
.prod-mandat-fill .prod-mpanel{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
.prod-mandat-fill .prod-mpanel-head{flex:0 0 auto}
.prod-mandat-fill .prod-mpanel-body{flex:1 1 auto;min-height:70px;overflow-y:auto}
/* Cadence : jamais écrasée (elle rétrécit en dernier) ; la route prend le reste.
   À droite, le Socle cède un peu de place au Guichet — les deux scrollent. */
.prod-mandat-fill .mp-cadence{flex:0 1 auto}
.prod-mandat-fill .mp-route{flex:1 1 auto}
.prod-mandat-fill .mp-socle{flex:1.15 1 0}
.prod-mandat-fill .mp-guichet{flex:1 1 0}
.prod-mandat-nav{display:flex;align-items:center;gap:8px}
.prod-mandat-navname{font-family:'Inter',sans-serif;font-weight:700;min-width:170px;text-align:center}
.prod-mandat-panels{display:grid;grid-template-columns:3fr 2fr;gap:14px;align-items:start}
.prod-mpanel-stack{display:flex;flex-direction:column;gap:14px;min-width:0}
.prod-mpanel{--mp:var(--accent);background:color-mix(in srgb,var(--surface-2) 40%,var(--surface));
  border:1px solid var(--line);border-radius:12px;overflow:hidden;min-width:0}
.mp-cadence{--mp:var(--accent)}
.mp-socle{--mp:var(--ok)}
.mp-guichet{--mp:#c026d3}
.mp-route{--mp:var(--cyan)}
.prod-mpanel-head{display:flex;align-items:baseline;gap:8px;padding:10px 14px;
  background:color-mix(in srgb,var(--mp) 6%,var(--surface));
  border-bottom:2px solid color-mix(in srgb,var(--mp) 45%,transparent)}
.prod-mpanel-head .ic{align-self:center;color:var(--mp);flex:0 0 auto}
.prod-mpanel-head h4{margin:0;font-family:'Inter',sans-serif;font-size:.98em;font-weight:700}
.prod-mpanel-head>.hint{font-size:.78em}
.mp-fig{margin-left:auto;font-size:.74em;font-weight:700;color:var(--mp);
  background:color-mix(in srgb,var(--mp) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--mp) 35%,transparent);
  border-radius:999px;padding:2px 10px;white-space:nowrap;flex:0 0 auto}
.prod-mpanel-body{padding:10px 14px 12px}
.prod-mpanel-body .prod-tbl th{background:none}
.prod-jauge-l{width:110px;height:6px}
@media (max-width:1000px){.prod-mandat-panels{grid-template-columns:1fr}}

/* Feuille de route en frise chronologique pleine largeur :
   passé -> présent -> futur, scroll horizontal DANS la frise si besoin. */
.prod-frise-wrap{overflow-x:auto;padding-bottom:4px}
/* La frise se centre verticalement dans son panneau (margin auto : centre
   quand il y a de la place, reprend le flux normal si ça déborde) */
.mp-route .prod-mpanel-body{display:flex;flex-direction:column}
.mp-route .prod-frise-wrap{margin-top:auto;margin-bottom:auto}
.prod-frise{display:flex;align-items:flex-start;min-width:min-content;width:100%}
.prod-frise-item{position:relative;flex:1 1 170px;min-width:170px;padding:0 12px;text-align:center}
.prod-frise-item::before{content:"";position:absolute;top:11px;left:0;right:0;height:2px;background:var(--line)}
.prod-frise-item:first-child::before{left:50%}
.prod-frise-item:last-child::before{right:50%}
.prod-frise-item.st-livre::before{background:color-mix(in srgb,var(--ok) 45%,var(--line))}
.prod-frise-node{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;
  width:24px;height:24px;border-radius:50%;font-size:.74em;font-weight:700;
  background:var(--surface);border:2px solid var(--line);color:var(--muted);margin-bottom:6px}
.prod-frise-item.st-livre .prod-frise-node{background:var(--ok);border-color:var(--ok);color:#fff}
.prod-frise-item.st-en_cours .prod-frise-node{background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 16%,transparent)}
.prod-frise-label{font-weight:600;font-size:.9em;line-height:1.3}
.prod-frise-item.st-livre .prod-frise-label{opacity:.6}
.prod-frise-note{margin-top:2px}
.prod-frise-act{display:flex;gap:5px;justify-content:center;margin-top:7px;opacity:0;transition:.12s}
.prod-frise-item:hover .prod-frise-act,.prod-frise-item:focus-within .prod-frise-act{opacity:1}
.prod-mandat.is-editing .prod-frise-act{opacity:1}
.prod-frise-act form{margin:0}
.prod-frise-addnode{flex:0 0 auto;min-width:56px}
.prod-frise-addnode[open]{flex:0 0 220px}
.prod-frise-addnode::before{display:none}
.prod-frise-addnode summary{list-style:none;cursor:pointer;user-select:none}
.prod-frise-addnode summary::-webkit-details-marker{display:none}
.prod-frise-addnode .prod-frise-node{border-style:dashed;color:var(--mp, var(--accent))}
.prod-frise-addnode summary:hover .prod-frise-node,.prod-frise-addnode[open] .prod-frise-node{
  border-color:var(--accent);color:var(--accent);border-style:solid;
  background:color-mix(in srgb,var(--accent) 8%,var(--surface))}
.prod-frise-addform{margin-top:4px}
.prod-frise-addform{display:flex;flex-direction:column;gap:5px;max-width:200px;margin:0 auto}
.prod-frise-addform input{background:var(--bg);color:var(--txt);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:5px 8px;font:inherit;font-size:.82em}
.prod-frise-vide{align-self:center;margin:0 14px}
/* Les gestes d'édition des tables du mandat n'apparaissent qu'au survol */
.prod-mandat-col .prod-tbl td .btn-mini{opacity:0;transition:.12s}
.prod-mandat-col .prod-tbl tr:hover td .btn-mini,
.prod-mandat-col .prod-tbl tr:focus-within td .btn-mini{opacity:1}
.prod-mandat-prix{width:92px;text-align:right}
.prod-mandat-eng{width:min(340px,100%)}
.prod-mandat-scope{flex-basis:100%;color:var(--muted)}
.prod-mandat-grid{display:grid;grid-template-columns:3fr 2fr;gap:22px;align-items:start}
@media (max-width:1000px){.prod-mandat-grid{grid-template-columns:1fr}}
.prod-mandat-col h4,.prod-frise-sec h4{margin:0 0 8px;font-size:.78em;font-family:"JetBrains Mono",monospace;
  text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.prod-qtyform{display:inline-flex;gap:4px;align-items:center;justify-content:flex-end}
.prod-qtyform input{width:56px;text-align:right}
.prod-qtyform .btn-mini{opacity:0;transition:.12s}
.prod-qtyform:hover .btn-mini,.prod-qtyform:focus-within .btn-mini{opacity:1}
.prod-tbl td>form{margin:0}
.prod-mandat-add{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:10px}
.prod-mandat-add input[name=qty]{width:56px;text-align:right}
.prod-mandat-add input[name=label]{width:180px}
.prod-mandat-add input[name=note]{flex:1;min-width:120px}
.prod-h4-gap{margin-top:20px !important}
/* Feuille de route : pile ordonnée de projets one-shot */
.prod-route{list-style:none;margin:0;padding:0;counter-reset:none}
.prod-route li{display:flex;align-items:center;gap:9px;padding:7px 2px;
  border-top:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.prod-route li:first-child{border-top:0}
.prod-route li.is-livre{opacity:.55}
.prod-route-pos{flex:0 0 22px;height:22px;display:inline-flex;align-items:center;
  justify-content:center;font-size:.74em;font-weight:700;border-radius:50%;
  border:1px solid var(--line);background:var(--surface-2);color:var(--muted)}
.prod-route li:not(.is-livre):first-child .prod-route-pos{
  border-color:var(--accent);color:var(--accent);
  background:color-mix(in srgb,var(--accent) 10%,transparent)}
.prod-route-label{font-weight:600;font-size:.92em}
.prod-route-act{margin-left:auto;display:flex;gap:5px;opacity:0;transition:.12s}
.prod-route li:hover .prod-route-act,.prod-route li:focus-within .prod-route-act{opacity:1}
.prod-route-act form{margin:0}
/* Guichet : compteur consommé / plafond + journal du mois */
.prod-guichet-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.prod-guichet-count{font-size:1.15em;font-weight:700}
.prod-guichet-plafond{display:inline-flex;gap:4px;align-items:center;margin-left:auto}
.prod-guichet-plafond input{width:84px;text-align:right;background:var(--bg);color:var(--txt);
  border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 8px;font:inherit;font-size:.85em}
.prod-guichet-plafond .btn-mini{opacity:0;transition:.12s}
.prod-guichet-plafond:hover .btn-mini,.prod-guichet-plafond:focus-within .btn-mini{opacity:1}
.prod-guichet-list{margin-top:8px}
.prod-guichet-ts{font-size:.74em;color:var(--faint)}
.prod-recur{list-style:none;margin:0;padding:0}
.prod-recur li{display:flex;align-items:center;gap:10px;padding:7px 2px;
  border-top:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.prod-recur li:first-child{border-top:0}
.prod-recur-label{font-weight:600;font-size:.92em}
.prod-recur-arch{margin-left:auto;opacity:0;transition:.12s}
.prod-recur li:hover .prod-recur-arch,.prod-recur li:focus-within .prod-recur-arch{opacity:1}

/* ---- Page mission : suivi live + proposition RENDUE (plus de markdown brut) ---- */
.prod-backlink{font-size:.85em;color:var(--muted)}
.prod-mis-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.prod-mis-live{display:flex;align-items:center;gap:12px;
  border-color:color-mix(in srgb,var(--accent) 45%,transparent);
  background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.prod-mis-live p{margin:0;color:var(--muted)}
.prod-livedot{flex:0 0 10px;width:10px;height:10px;border-radius:50%;
  background:var(--accent);animation:prodlive 1.6s ease-in-out infinite}
@keyframes prodlive{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.75)}}
.prod-mis-doc{padding:20px 26px}
.prod-mdview{max-width:900px;font-size:.96em;line-height:1.65}
.prod-mdview h1{font-family:'Inter',sans-serif;font-size:1.45em;line-height:1.25;
  margin:1.3em 0 .45em;padding-bottom:.3em;border-bottom:1px solid var(--line)}
.prod-mdview h1:first-child{margin-top:.2em}
.prod-mdview h2{font-family:'Inter',sans-serif;font-size:1.18em;margin:1.5em 0 .4em}
.prod-mdview h3{font-size:1.02em;margin:1.2em 0 .3em}
.prod-mdview h4,.prod-mdview h5,.prod-mdview h6{font-size:.92em;margin:1em 0 .25em;
  font-family:"JetBrains Mono",monospace;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.prod-mdview p{margin:.45em 0}
.prod-mdview ul,.prod-mdview ol{margin:.45em 0;padding-left:1.5em}
.prod-mdview li{margin:.22em 0}
.prod-mdview li>ul{margin:.15em 0}
.prod-mdview hr{border:0;border-top:1px solid var(--line);margin:1.6em 0}
.prod-mdview blockquote{margin:.8em 0;padding:6px 14px;color:var(--muted);
  border-left:3px solid var(--accent);background:var(--surface-2);
  border-radius:0 var(--r-sm) var(--r-sm) 0}
.prod-mdview code{font-family:"JetBrains Mono",monospace;font-size:.84em;
  background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:.07em .35em}
.prod-mdview pre{font-family:"JetBrains Mono",monospace;font-size:.82em;line-height:1.55;
  background:var(--bg);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:12px 14px;overflow-x:auto;margin:.7em 0}
.prod-mdview pre code{background:none;border:0;padding:0}
.prod-mdview .md-tblwrap{overflow-x:auto;margin:.7em 0;border:1px solid var(--line);
  border-radius:var(--r-sm)}
.prod-mdview table{width:100%;border-collapse:collapse;font-size:.9em}
.prod-mdview th{text-align:left;font-family:"JetBrains Mono",monospace;font-size:.74em;
  text-transform:uppercase;letter-spacing:.06em;color:var(--faint);
  background:var(--surface-2);padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.prod-mdview td{padding:7px 10px;vertical-align:top;
  border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.prod-mdview tbody tr:last-child td{border-bottom:0}
.prod-mdview th.num,.prod-mdview td.num{text-align:right;font-family:"JetBrains Mono",monospace;
  white-space:nowrap}
.prod-mdview th.a-r,.prod-mdview td.a-r{text-align:right}
.prod-mdview th.a-c,.prod-mdview td.a-c{text-align:center}
.prod-mdview a{color:var(--accent)}

/* --- Module Chantiers : panneau Heures (pointeuse + saisie + semaine) -------
   Parité avec l'onglet Heures de l'app native. Le panneau vit dans la colonne
   de droite (largeur ~330px) : tout est pensé pour cette laisse, pas pour une
   page pleine. */
.kx-hours .kx-h-top{display:grid;gap:12px}
.kx-h-daynav{display:flex;align-items:center;justify-content:space-between;gap:8px}
.kx-h-daynav b{font-size:.98em}
.kx-h-nav{width:30px;height:30px;flex:0 0 auto;border:1px solid var(--line);border-radius:50%;
  background:none;color:var(--muted);cursor:pointer;font-size:1.1em;line-height:1;transition:.12s}
.kx-h-nav:hover{color:var(--accent);border-color:var(--accent)}
/* La pointeuse : un seul geste, gros, lisible avec des gants. */
.kx-h-clock{width:100%;padding:13px 16px;border:0;border-radius:var(--r-sm);cursor:pointer;
  font:inherit;font-weight:700;font-size:1.02em;text-align:left;color:#fff;
  background:var(--accent);display:grid;gap:2px;transition:.14s}
.kx-h-clock span{font-weight:500;font-size:.8em;opacity:.85}
.kx-h-clock:hover{filter:brightness(1.06)}
.kx-h-clock.on{background:var(--danger,#d1543f)}
.kx-h-total{margin:0;font-size:.9em;color:var(--muted)}
.kx-h-total b{color:var(--txt)}

.kx-h-list{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:6px}
.kx-h-list li{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--r-sm);
  background:var(--surface-2);font-size:.9em}
.kx-h-list li.running{background:color-mix(in srgb,var(--accent) 10%,transparent)}
.kx-h-hm{font-weight:700;flex:0 0 auto}
.kx-h-meta{flex:1;min-width:0;color:var(--muted);font-size:.9em;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.kx-h-edit,.kx-h-del{flex:0 0 auto;width:24px;height:24px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:6px;background:none;color:var(--faint);cursor:pointer}
.kx-h-edit:hover{color:var(--accent);background:var(--surface)}
.kx-h-del:hover{color:var(--danger,#d1543f);background:var(--surface)}

.kx-h-add{display:grid;grid-template-columns:82px 1fr auto;gap:6px}
.kx-h-add input{min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.88em}
.kx-h-add button{padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);color:var(--txt);font:inherit;font-weight:600;font-size:.88em;cursor:pointer}
.kx-h-add button:hover{border-color:var(--accent);color:var(--accent)}

/* Bande semaine : 7 barres, celle du jour affiché est pleine. */
.kx-h-week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;align-items:end;height:74px}
.kx-h-bar{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;
  height:100%;border:0;background:none;padding:0;cursor:pointer;color:var(--faint);font-size:.72em}
.kx-h-bar i{display:block;width:100%;border-radius:4px;background:var(--line);transition:.14s}
.kx-h-bar:hover i{background:color-mix(in srgb,var(--accent) 45%,var(--line))}
.kx-h-bar.on i{background:var(--accent)}
.kx-h-bar.on{color:var(--accent);font-weight:700}

.kx-h-team{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:5px;font-size:.9em}
.kx-h-team li{display:flex;align-items:center;gap:8px}
.kx-h-team li span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kx-h-team li em{font-style:normal;font-size:.8em;color:var(--accent)}
.kx-h-export{display:grid;gap:8px;font-size:.85em}
.kx-h-export label{display:grid;grid-template-columns:auto 1fr;gap:6px 8px;align-items:center;
  color:var(--muted)}
.kx-h-export label>b{grid-column:1/-1;font-weight:600;color:var(--txt)}
.kx-h-export input{padding:6px 8px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--bg);color:var(--txt);font:inherit;font-size:.95em}
.kx-h-export button{padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface);color:var(--txt);font:inherit;font-weight:600;cursor:pointer}
.kx-h-export button:hover{border-color:var(--accent);color:var(--accent)}

/* --- Module Chantiers : page Planning (agenda de l'espace) ----------------- */
.pl-wrap{display:grid;gap:20px;max-width:760px}
.pl-jour h3{margin:0 0 8px;font-size:1em;display:flex;align-items:baseline;gap:8px}
.pl-n{font-weight:500;font-size:.8em;color:var(--faint)}
.pl-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.pl-item{display:flex;align-items:flex-start;gap:14px;padding:12px 14px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-sm)}
.pl-h{flex:0 0 54px;font-weight:700;font-variant-numeric:tabular-nums}
.pl-corps{flex:1;min-width:0;display:grid;gap:2px}
.pl-titre{font-weight:600;color:var(--txt)}
.pl-titre:hover{color:var(--accent)}
.pl-ch{font-size:.85em;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-notes{font-size:.85em;color:var(--muted)}
.pl-tag{flex:0 0 auto;padding:3px 9px;border-radius:999px;font-size:.75em;font-weight:600;
  background:var(--surface-2);color:var(--muted)}
.pl-commercial{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.pl-jour.passe .pl-item{opacity:.62}
.pl-passes{margin-top:4px}
.pl-passes summary{cursor:pointer;font-weight:600;color:var(--muted);padding:8px 0}
.pl-passes summary:hover{color:var(--txt)}
.pl-passes .pl-jour{margin-top:14px}
.pl-vide p{margin:0 0 6px}
.pl-vide .ic{vertical-align:-2px}

/* --- Module Chantiers : rendez-vous (modale) + rapport de journée ---------- */
.kx-rdvbtn{flex:0 0 auto;width:34px;height:34px;display:inline-flex;align-items:center;
  justify-content:center;border:0;border-radius:50%;background:none;color:var(--muted);cursor:pointer}
.kx-rdvbtn:hover{color:var(--accent);background:var(--surface-2)}
.kx-rdv-back{position:fixed;inset:0;z-index:80;background:rgba(11,17,32,.42);
  display:flex;align-items:center;justify-content:center;padding:20px}
.kx-rdv-back[hidden]{display:none}
.kx-rdv-card{width:min(420px,100%);background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:0 24px 60px rgba(0,0,0,.28);padding:18px;display:grid;gap:12px}
.kx-rdv-card h4{margin:0;display:flex;align-items:center;gap:7px;font-size:1.05em}
.kx-rdv-kind{display:flex;gap:14px;font-size:.9em;color:var(--muted)}
.kx-rdv-f{display:grid;gap:5px;font-size:.85em;color:var(--muted)}
.kx-rdv-f input,.kx-rdv-f textarea{padding:9px 11px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--bg);color:var(--txt);font:inherit;font-size:1em}
.kx-rdv-when{display:grid;grid-template-columns:1fr auto;gap:10px}
.kx-rdv-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:2px}
.kx-rdv-actions button{padding:9px 15px;border-radius:var(--r-sm);font:inherit;font-weight:600;cursor:pointer}
.kx-rdv-cancel{border:1px solid var(--line);background:none;color:var(--muted)}
.kx-rdv-ok{border:0;background:var(--accent);color:#fff}
.kx-rdv-ok:disabled{opacity:.6;cursor:default}
.kx-h-report{width:100%;padding:10px 13px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface-2);color:var(--txt);font:inherit;font-weight:600;font-size:.92em;
  text-align:left;cursor:pointer;display:grid;gap:2px}
.kx-h-report span{font-weight:500;font-size:.82em;color:var(--muted)}
.kx-h-report:hover{border-color:var(--accent);color:var(--accent)}
.kx-h-report:disabled{opacity:.6;cursor:default}
/* Ordinateur : l'onglet Heures est une vue de consultation (le pointage vit sur
   le téléphone, décision Tim 2026-08-31). */
.kx-h-lecture{margin:0;padding:10px 12px;border-radius:var(--r-sm);background:var(--surface-2);
  color:var(--muted);font-size:.87em;line-height:1.45}
