/* ═══════════════════════════════════════════════════════════════════════
   COMPOSANTS APP - migrés depuis locagex.css (harmonisation styles)
   Tous les sélecteurs ci-dessous sont utilisés exclusivement par les
   espaces bailleur (app/), locataire, technicien.
   Héritent des tokens --c-* définis dans locagex.css via la cascade.
   ═══════════════════════════════════════════════════════════════════════ */

/* ============ SIDEBAR (ancienne - conservée pour rétrocompatibilité) ============ */
/* Sidebar - ancre premium sombre dans les deux thèmes.
   Dégradé pétrole profond + halo doré discret + filet droit; items à état actif doré. */
.side{background:linear-gradient(180deg,var(--c-navy-soft) 0%,var(--c-navy) 42%, var(--c-navy) 100%);
  color:#E5E5E5;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
  border-right:1px solid rgba(229,229,229,.06);position:relative;isolation:isolate}
.side::before{content:"";position:absolute;inset:0 0 auto 0;height:220px;pointer-events:none;z-index:-1;
  background:radial-gradient(120% 80% at 20% 0%,rgba(230,184,76,.14),transparent 60%)}

.brand{display:flex;align-items:center;gap:12px;padding:24px 22px 20px}
.brand .mark{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--c-gold-deep),var(--c-gold));color:#241B06;
  font-family:var(--f-titre);font-weight:700;font-size:21px;
  box-shadow:0 6px 18px rgba(180,132,43,.35),inset 0 1px 0 rgba(255,255,255,.4)}
.brand .word{font-family:var(--f-titre);font-size:22px;letter-spacing:.5px;color:#fff;line-height:1.05}
.brand .word b{color:var(--c-gold);font-weight:700}
.brand .baseline{font-size:9px;letter-spacing:2.4px;color:#8A8F9C;text-transform:uppercase;margin-top:3px}

.nav{padding:6px 12px 12px;overflow-y:auto;flex:1;scrollbar-width:thin;scrollbar-color:#0A4D68 transparent}
.nav::-webkit-scrollbar{width:7px}
.nav::-webkit-scrollbar-thumb{background:#021A28;border-radius:6px}
.nav::-webkit-scrollbar-thumb:hover{background:#0A4D68}
.nav .grp{font-size:10px;letter-spacing:1.8px;text-transform:uppercase;color:#3D465D;
  padding:18px 12px 7px;font-weight:700}
.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:9px;color:#B8C0CE;
  text-decoration:none;font-size:13.5px;font-weight:500;margin-bottom:2px;position:relative;
  transition:background .16s,color .16s,transform .16s}
.nav a .ic{width:20px;text-align:center;opacity:.9;font-size:15px;flex:none;transition:transform .16s}
.nav a:hover{background:rgba(255,255,255,.045);color:#fff}
.nav a:hover .ic{transform:scale(1.08)}
.nav a.on{background:linear-gradient(90deg,rgba(230,184,76,.16),rgba(230,184,76,.03));color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.nav a.on .ic{opacity:1;color:var(--c-gold)}
.nav a.on::before{content:"";position:absolute;left:-12px;top:7px;bottom:7px;width:3px;
  background:linear-gradient(var(--c-gold-deep),var(--c-gold));border-radius:0 3px 3px 0;
  box-shadow:0 0 10px rgba(230,184,76,.5)}
.nav a.mut{opacity:.5;cursor:default}
.nav a .badge{margin-left:auto;background:linear-gradient(135deg,var(--c-critique),#c05038);color:#fff;
  font-size:10.5px;font-weight:700;min-width:19px;text-align:center;padding:1px 6px;border-radius:999px;
  display:none;box-shadow:0 2px 6px rgba(192,57,43,.4)}
.nav a .badge.show{display:inline-block}

.side .foot{padding:16px 18px;border-top:1px solid rgba(229,229,229,.07);font-size:12px;color:#8A8F9C;
  background:rgba(0,0,0,.14)}
.side .foot .plan{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.side .foot .plan b{color:var(--c-gold);font-weight:600}
.side .foot .bar{height:6px;background:rgba(229,229,229,.09);border-radius:3px;overflow:hidden}
.side .foot .bar i{display:block;height:100%;width:46%;border-radius:3px;
  background:linear-gradient(90deg,var(--c-gold-deep),var(--c-gold));box-shadow:0 0 8px rgba(230,184,76,.4)}

/* ============ TOPBAR ============ */
.main{display:flex;flex-direction:column;min-width:0}
.top{display:flex;align-items:center;gap:12px;padding:var(--pad-top-y) var(--pad-page-x);background:var(--c-cream);
  border-bottom:1px solid var(--c-line);position:sticky;top:0;z-index:5;flex-wrap:wrap}
.org{display:flex;align-items:center;gap:10px;min-width:0}
.org .av{width:34px;height:34px;border-radius:var(--radius);background:var(--c-navy-soft);color:#fff;
  display:grid;place-items:center;font-weight:600;flex:none}
.org > div:not(.av){min-width:0}
.org .n{font-weight:600;font-size:var(--fs-corps);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.org .r{font-size:var(--fs-petit);color:var(--c-slate);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top .sp{flex:1;min-width:0}
.search{display:flex;align-items:center;gap:8px;background:var(--c-white);border:1px solid var(--c-line);
  border-radius:3px;padding:8px 12px;width:300px;max-width:34vw;color:var(--c-slate);font-size:13px}
.search input{border:0;background:transparent;outline:0;font:inherit;color:var(--c-navy);width:100%;min-width:0}
.icobtn{width:38px;height:38px;border:1px solid var(--c-line);background:var(--c-white);border-radius:3px;
  display:grid;place-items:center;cursor:pointer;position:relative;font-size:16px;color:var(--c-navy);flex:none}
/* Boutons de la topbar : sous 640 px, on masque les libellés - seuls les
   pictogrammes restent, ce qui libère la place pour éviter tout overflow. */
.hide-sm{display:inline}
@media(max-width:640px){.hide-sm{display:none}}

/* ── Bouton hamburger + voile (mobile) ─────────────────────────────────
   Caché en desktop ; révèle le tiroir .side sous 820 px (cf. média-query). */
.burger{display:none;flex:none;width:40px;height:40px;border:1px solid var(--c-line);
  background:var(--c-white);border-radius:9px;color:var(--c-navy);cursor:pointer;
  align-items:center;justify-content:center;padding:0;transition:border-color .14s,background .14s}
.burger:hover{border-color:var(--c-navy);background:var(--c-cream)}
.burger svg{width:20px;height:20px}
.side-scrim{position:fixed;inset:0;background:rgba(11,20,40,.5);z-index:55;
  opacity:0;visibility:hidden;transition:opacity .28s,visibility .28s}
@media(max-width:820px){
  .burger{display:inline-flex}
  .app.nav-open .side-scrim{opacity:1;visibility:visible}
  /* Sur mobile, .side (sticky→fixed) ne peut plus scroller son propre foot :
     on garantit le défilement interne. */
  .side{overflow-y:auto}
}

/* ── Boutons d'action iconographiques (tableaux) ───────────────────────
   Remplacent les boutons texte « Détail / Quittance / Relancer… » par des
   pictogrammes discrets alignés à droite, façon liste CRM épurée. */
.tbl-actions{
  display:inline-flex;align-items:center;gap:2px;justify-content:flex-end;white-space:nowrap;
}
td.col-actions{text-align:right;white-space:nowrap}
th.col-actions{text-align:right}
.act,.ux-ico{
  width:32px;height:32px;flex:none;display:inline-grid;place-items:center;padding:0;box-sizing:border-box;
  border:1px solid var(--app-border);
  background:var(--app-card);
  border-radius:9px;color:var(--app-ink-muted);cursor:pointer;
  text-decoration:none;transition:background .14s,color .14s,border-color .14s}
.act svg,.ux-ico svg{width:16px;height:16px;display:block;pointer-events:none}
.act:hover:not(:disabled),.ux-ico:hover:not(:disabled){color:var(--az-teal);border-color:var(--az-teal);background:var(--app-card)}
.act.ok:hover:not(:disabled){color:#0B7C46;border-color:#0F9D58;background:rgba(15,157,88,.08)}
.act.danger:hover:not(:disabled),.ux-ico.danger:hover:not(:disabled){color:#C0392B;border-color:#C0392B;background:rgba(192,57,43,.06)}
.act:disabled,.ux-ico:disabled{opacity:.45;cursor:default}
[data-theme="dark"] .app a.ux-ico,[data-theme="dark"] .app a.act{color:var(--app-ink-muted)}
[data-theme="dark"] .app a.ux-ico:hover,[data-theme="dark"] .app a.act:hover{color:var(--az-teal)}
.act[hidden],.ux-ico[hidden]{display:none}
.ux-ico.done{color:#0B7C46;border-color:transparent;background:rgba(15,157,88,.11)}
/* Décision explicite : valider (dégradé vert doux) / rejeter ou contester (dégradé rouge doux).
   Teintes en transparence : lisibles en thème clair comme sombre. */
.ux-ico.valider{color:#0B7C46;border-color:rgba(15,157,88,.32);background:linear-gradient(135deg,rgba(15,157,88,.10),rgba(15,157,88,.24))}
.ux-ico.valider:hover:not(:disabled){color:#0B7C46;border-color:rgba(15,157,88,.55);background:linear-gradient(135deg,rgba(15,157,88,.18),rgba(15,157,88,.36))}
.ux-ico.rejeter{color:#B42318;border-color:rgba(192,57,43,.30);background:linear-gradient(135deg,rgba(192,57,43,.08),rgba(192,57,43,.20))}
.ux-ico.rejeter:hover:not(:disabled){color:#B42318;border-color:rgba(192,57,43,.5);background:linear-gradient(135deg,rgba(192,57,43,.15),rgba(192,57,43,.32))}
[data-theme="dark"] .app .ux-ico.valider{color:var(--az-success)}
[data-theme="dark"] .app .ux-ico.rejeter{color:#FCA5A5}
.row-loyer{display:inline-flex;align-items:center;gap:6px}

/* ============ CONTENU ============ */
.content{padding:clamp(16px,3vw,26px) var(--pad-page-x) 48px;max-width:1320px;width:100%;min-width:0}
.pagehead{display:flex;align-items:flex-end;justify-content:space-between;gap:14px 20px;flex-wrap:wrap;margin-bottom:22px}
.pagehead h1{font-family:var(--f-titre);font-size:var(--fs-h1);font-weight:600;letter-spacing:.2px;line-height:1.15}
.pagehead .sub{color:var(--c-slate);font-size:var(--fs-corps);margin-top:3px}
.actions{display:flex;gap:8px;flex-wrap:wrap}


/* Sélecteur pays / devise */
.paysbar{display:flex;align-items:center;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:3px;font-size:13px;
  font-weight:500;border:1px solid var(--c-line);background:var(--c-white);color:var(--c-slate);cursor:pointer}
.chip.on{background:var(--c-navy);border-color:var(--c-navy);color:#fff}
.paysbar .note{font-size:12px;color:var(--c-slate);margin-left:4px}

/* KPI */
.kpis{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:14px;
  margin-bottom:16px}
/* Variante « dashboard » : 2 colonnes KPI (2×2) à gauche + carte devise à droite sur la même ligne. */
.dash-top{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;margin-bottom:22px;align-items:stretch}
.dash-top .kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.dash-top .kpi{height:100%}
.dash-top .fin-side{display:grid;grid-template-columns:1fr;gap:14px;margin:0}
.dash-top .fin-side .devcard{height:100%}
@media (max-width:1080px){.dash-top{grid-template-columns:1fr}.dash-top .fin-side{grid-template-columns:1fr}}
.kpi{background:var(--c-white);border:1px solid var(--c-line);border-radius:var(--radius);padding:18px 18px 16px;box-shadow:var(--ombre);
  transition:box-shadow .18s,transform .18s,border-color .18s}
.kpi:hover{box-shadow:0 10px 28px rgba(2,48,71,.09);border-color:rgba(230,184,76,.32);transform:translateY(-2px)}
.kpi .lab{font-size:12px;color:var(--c-slate);font-weight:600;display:flex;align-items:center;gap:9px;letter-spacing:.2px}
.kpi .lab .ic{width:34px;height:34px;border-radius:10px;flex:none;display:grid;place-items:center;font-size:16px;
  background:linear-gradient(135deg,rgba(230,184,76,.18),rgba(180,132,43,.07));color:var(--c-gold-deep);
  border:1px solid rgba(230,184,76,.2)}
.kpi .val{font-family:var(--f-titre);font-size:var(--fs-kpi);font-weight:600;margin-top:12px;line-height:1}
.kpi .meta{font-size:12px;color:var(--c-slate);margin-top:7px;line-height:1.5}
.kpi .meta b{color:var(--c-navy)}
.kpi.warn .val{color:var(--c-critique)}
.kpi.warn .lab .ic{background:#f3e3df;color:var(--c-critique);border-color:rgba(192,57,43,.2)}

/* Cartes devise */
.fin{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:6px 0 22px}
.devcard{background:var(--c-navy);color:#E7EAF4;border-radius:var(--radius);padding:18px 20px;position:relative;overflow:hidden}
.devcard::after{content:"";position:absolute;right:-40px;top:-40px;width:150px;height:150px;border-radius:50%;
  background:radial-gradient(circle,rgba(230,184,76,.12),transparent 70%)}
.devcard .h{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.devcard .h .pays{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px}
.devcard .h .dev{font-size:11px;letter-spacing:1px;color:var(--c-gold);border:1px solid rgba(230,184,76,.4);padding:2px 8px;border-radius:2px}
.devrow{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.devrow .b .k{font-size:12px;color:#8A8F9C;margin-bottom:4px}
.devrow .b .m{font-family:var(--f-titre);font-size:var(--fs-kpi-lg);font-weight:600}
.devrow .b.enc .m{color:var(--c-gold)}
.devrow .b .x{font-size:11.5px;margin-top:3px;color:#8A8F9C}
.progress{height:6px;background:var(--c-navy-deep);border-radius:3px;margin-top:16px;overflow:hidden}
.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--c-gold-deep),var(--c-gold))}
.devcard .tx{display:flex;justify-content:space-between;font-size:12px;color:#8A8F9C;margin-top:8px}
.devcard .tx b{color:#fff}

/* Panneaux */
.grid2{display:grid;grid-template-columns:1.35fr 1fr;gap:18px}
.panel{
  height: 550px;
  overflow-y: auto;
  background:var(--c-white);border:1px solid var(--c-line);
  border-radius:var(--radius);
  box-shadow:var(--ombre);
  margin-bottom:18px}
.panel .ph{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--c-line)}
.panel .ph h3{font-size:var(--fs-h3);font-weight:600;font-family:var(--f-titre)}
.panel .ph a{font-size:12.5px;color:var(--c-navy-soft);text-decoration:none;font-weight:600}
.panel .ph .cnt{font-size:12px;background:var(--c-cream);border:1px solid var(--c-line);color:var(--c-slate);padding:2px 9px;border-radius:2px;font-weight:600}

.decl{display:flex;align-items:center;gap:13px;padding:13px 18px;border-bottom:1px solid var(--c-line)}
.decl:last-child{border-bottom:0}
.decl .who{width:38px;height:38px;border-radius:var(--radius);background:var(--c-navy-soft);color:#fff;display:grid;place-items:center;font-weight:600;font-size:14px;flex:none}
.decl .info{min-width:0;flex:1}
.decl .info .n{font-weight:600;font-size:14px}
.decl .info .s{font-size:12px;color:var(--c-slate);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Variante « message » : corps long affiché en entier, retours à la ligne conservés. */
.decl.msg{align-items:flex-start}
.decl .info .s.wrap{
  white-space:pre-wrap;overflow:visible;
  text-overflow:clip;word-break:break-word;
  overflow-wrap:anywhere;line-height:1.5;margin-top:3px}
.decl .amt{font-family:var(--f-titre);font-weight:600;font-size:var(--fs-petit);text-align:right;flex:none}
.decl .amt small{display:block;font-family:var(--f-corps);font-size:var(--fs-micro);color:var(--c-slate);font-weight:500}
.decl .cta{display:flex;gap:6px;flex:none}
.mini{font:inherit;font-size:12.5px;font-weight:600;padding:7px 11px;border-radius:3px;cursor:pointer;border:1px solid transparent}
.mini.ok{background:var(--c-succes);color:#fff}
.mini.no{background:var(--c-white);border-color:var(--c-line);color:var(--c-slate)}
.mini:disabled{opacity:.6;cursor:default}

.alert{display:flex;align-items:center;gap:12px;padding:13px 18px;border-bottom:1px solid var(--c-line)}
.alert:last-child{border-bottom:0}
.alert .ic{width:34px;height:34px;border-radius:var(--radius);display:grid;place-items:center;font-size:15px;flex:none}
.alert.r .ic{background:#f3e3df;color:var(--c-critique)}
.alert.a .ic{background:#f4ebda;color:var(--c-alerte)}
.alert .t{flex:1;min-width:0}
.alert .t .n{font-weight:600;font-size:13.5px}
.alert .t .s{font-size:12px;color:var(--c-slate)}
.alert .badge{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:2px;flex:none}
.alert.r .badge{background:var(--c-critique);color:#fff}
.alert.a .badge{background:#f4ebda;color:var(--c-alerte)}
a.alert.clickable{color:inherit;text-decoration:none;cursor:pointer;transition:background .12s}
a.alert.clickable:hover{background:var(--c-cream)}

/* ============ Ajouts : cartes génériques, tableaux, formulaires ============ */
.carte{
  background:var(--c-white);
  border:1px solid var(--c-line);
  border-radius:var(--radius);
  box-shadow:var(--ombre);
  padding:18px 20px}

.grille{display:grid;gap:14px}
.grille.k4{grid-template-columns:repeat(4,1fr)}
.grille.k3{grid-template-columns:repeat(3,1fr)}
.grille.k2{grid-template-columns:repeat(2,1fr)}
.titre-page{font-family:var(--f-titre);
  font-size:var(--fs-h2);
  margin:0 0 4px;line-height:1.2}
.sous-titre{color:var(--c-slate);margin:0 0 20px;font-size:var(--fs-corps)}
.montant{font-variant-numeric:tabular-nums;white-space:nowrap}
.devise{color:var(--c-slate);font-size:.8em}

.badge-pill{display:inline-block;padding:5px 12px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.2;letter-spacing:.1px}
.badge.ok,.badge-pill.ok{background:#dcfce7;color:#166534}
.badge.warn,.badge-pill.warn{background:#fef3c7;color:#92400e}
.badge.crit,.badge-pill.crit{background:#fee2e2;color:#991b1b}
.badge.neutre,.badge-pill.neutre{background:#e5e7eb;color:#4b5563}
.badge.info,.badge-pill.info{background:#dbeafe;color:#1e40af}
.badge.violet,.badge-pill.violet{background:#ede9fe;color:#5b21b6}
.badge.ok,.badge.warn,.badge.crit,.badge.neutre,.badge.info,.badge.violet{display:inline-block;padding:5px 12px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.2;letter-spacing:.1px}

/* ── Tableaux premium ─────────────────────────────────────────────────
   Style inspiré des dashboards SaaS pro : header léger, lignes aérées,
   séparateurs quasi invisibles, hover bleu très doux. */
table.liste{width:100%;border-collapse:separate;border-spacing:0;
  background:var(--c-white);border:none;border-radius:12px;overflow:hidden}
table.liste th,table.liste td{text-align:left;padding:6px 20px;vertical-align:middle}
table.liste td{border-bottom:1px solid #eef1f5;font-size:14px;color:var(--c-navy);line-height:1.4}
table.liste th{
  font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;
  color:#8a94a6;
  
  background:radial-gradient(1100px 680px at 84% -20%, rgba(230,184,76,.10), transparent 60%),
  linear-gradient(180deg,var(--c-white),var(--c-cream));

  padding-top:14px;padding-bottom:14px;
  border-bottom:1px solid #eef1f5;
  position:sticky;top:0;z-index:1;white-space:nowrap
}

table.liste th:first-child,table.liste td:first-child{padding-left:24px}
table.liste th:last-child,table.liste td:last-child{padding-right:24px}
table.liste tbody tr td{background:var(--c-white);transition:background .18s ease}
table.liste tbody tr:last-child td{border-bottom:0}
table.liste tbody tr:hover td{background:#f5f7fb}

/* Tableaux triables - chevron discret à droite du label, façon Upwork. */
table.liste th.th-sort{cursor:pointer;user-select:none;white-space:nowrap;transition:color .14s}
table.liste th.th-sort::before{
  content:"";display:inline-block;width:0;height:0;
  border-left:3.5px solid transparent;border-right:3.5px solid transparent;
  border-bottom:4px solid #c4cad4;
  margin-right:6px;vertical-align:1px;transition:border-color .14s;
}
table.liste th.th-sort:hover{color:var(--c-gold-deep)}
table.liste th.th-sort:hover::before{border-bottom-color:var(--c-gold-deep)}
table.liste th.th-sort .th-sort-ic{display:none}
table.liste th.th-sort.active{color:var(--c-gold-deep)}
table.liste th.th-sort.active::before{border-bottom-color:var(--c-gold-deep)}

/* Enveloppe scrollable pour les longs tableaux - max ~10 lignes visibles.
   Le container encapsule la carte : ombre douce, border-radius large, aucune bordure. */
.table-scroll{background:var(--c-white);
  border:none;
  border-radius:12px;
  box-shadow:0 1px 2px rgba(15,23,42,.04),0 4px 20px rgba(15,23,42,.06);
  max-height:640px;
  overflow-y:auto;overflow-x:auto;max-width:100%}
.table-scroll table.liste{border:0;box-shadow:none;border-radius:0}
/* En-tête collant : titres de colonnes et tri restent visibles pendant le défilement. */
.table-scroll table.liste thead th{position:sticky;top:0;z-index:2}
.table-scroll::-webkit-scrollbar{width:8px;height:8px}
.table-scroll::-webkit-scrollbar-track{background:transparent}
.table-scroll::-webkit-scrollbar-thumb{background:#e2e6ee;border-radius:8px;border:2px solid transparent;background-clip:padding-box}
.table-scroll::-webkit-scrollbar-thumb:hover{background:#c9d0dc;background-clip:padding-box;border:2px solid transparent}

.champ{margin-bottom:16px}
.champ label{display:block;font-size:12px;font-weight:600;margin-bottom:6px;color:var(--c-slate)}
.champ input,.champ select,.champ textarea{width:100%;padding:5px 5px;font:inherit;color:var(--c-navy);
  background:#fff;border:1px solid var(--c-line);border-radius:var(--radius)}
.champ input:focus,.champ select:focus,.champ textarea:focus{outline:none;border-color:var(--c-gold-deep);
  box-shadow:0 0 0 3px rgba(180,132,43,.15)}

/* Éditeur de pièces / équipements (création & édition d'un logement) */
.pieces-ed{margin-top:12px}
.pieces-ed .pe-titre{font-size:13px;font-weight:600;color:var(--app-ink);margin-bottom:8px}
.piece-card{border:1px solid var(--app-border);border-radius:12px;padding:10px 12px;margin-bottom:10px;background:var(--surface-2)}
.piece-head{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.piece-head .p-nom{flex:1;min-width:0}
.equip-row{display:flex;gap:8px;align-items:center;margin:4px 0}
.equip-row .e-nom{flex:1;min-width:0}
.pieces-ed input,.pieces-ed select{padding:7px 9px;font:inherit;font-size:13.5px;color:var(--app-ink);background:var(--app-input-bg);
  border:1px solid var(--app-border);border-radius:9px;min-width:0}
.pieces-ed input:focus,.pieces-ed select:focus{outline:none;border-color:var(--az-teal);box-shadow:0 0 0 3px var(--az-teal-soft)}
.pieces-ed select.p-type,.pieces-ed select.e-etat{max-width:150px}
.mini-x{flex:none;border:0;background:transparent;color:var(--c-critique);cursor:pointer;font-size:15px;line-height:1;width:30px;height:30px;border-radius:8px}
.mini-x:hover{background:var(--ux-crit-bg,#FEE2E2)}
.add-row{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}
.pe-mut{font-size:12px;font-weight:400;color:var(--app-ink-muted)}
@media(max-width:560px){
  .equip-row{flex-wrap:wrap}
  .equip-row .e-ref{flex:1 1 100%;max-width:none}
  .pieces-ed select.p-type{max-width:120px}
}

/* Galerie de photos (biens / logements) */
.galerie{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.gphoto{position:relative;width:130px;height:96px;border-radius:var(--radius);overflow:hidden;border:1px solid var(--c-line);background:var(--c-cream)}
.gphoto img{width:100%;height:100%;object-fit:cover;display:block}
.gphoto .cov{position:absolute;top:5px;left:5px;background:linear-gradient(135deg,var(--c-gold-deep),var(--c-gold));color:var(--c-navy);font-size:10px;font-weight:700;padding:2px 7px;border-radius:2px}
.gphoto .g-actions{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:4px;padding:4px 6px;background:rgba(2,48,71,.6);opacity:0;transition:opacity .12s}
.gphoto:hover .g-actions{opacity:1}
.gphoto .g-actions button{border:0;background:transparent;color:#fff;cursor:pointer;font-size:11.5px;font-weight:600;padding:2px 4px}
.gphoto .g-actions button:hover{text-decoration:underline}
.g-upload{width:130px;height:96px;border:1.5px dashed var(--c-line);border-radius:var(--radius);display:grid;place-items:center;cursor:pointer;color:var(--c-slate);font-size:12.5px;text-align:center;line-height:1.35}
.g-upload:hover{border-color:var(--c-gold-deep);color:var(--c-gold-deep)}
/* Rattachement d'une photo à une pièce (A1) */
.gphoto-wrap{width:130px}
.gphoto-wrap .gphoto{width:130px;height:96px}
.gpiece-sel{width:130px;margin-top:3px;border:1px solid var(--c-line);border-radius:3px;background:var(--c-white);color:var(--c-navy);font:inherit;font-size:11.5px;font-weight:600;padding:3px 4px;cursor:pointer}
.gpiece-sel:focus{outline:none;border-color:var(--c-gold-deep)}
.gpiece-bar{width:100%;display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--c-slate);margin-bottom:8px;flex-wrap:wrap}
.gpiece-bar select{padding:5px 8px;border:1px solid var(--c-line);border-radius:3px;font:inherit;background:var(--c-white);color:var(--c-navy)}
/* Charges récurrentes (A2) */
.charge-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border:1px solid var(--c-line);border-radius:4px;background:var(--c-white);margin-bottom:6px}
.charge-row .cl-lib{font-weight:600;font-size:13.5px}
.charge-row .cl-meta{font-size:12.5px;color:var(--c-slate);margin-left:auto}
.charge-row .mini-x{border:0;background:transparent;color:var(--c-critique);cursor:pointer;font-size:14px;font-weight:700;flex:none}

/* ─── Calendrier partagé (composant Locagex.Calendrier) ─────────────────
   Utilisé par app/index.php (dashboard) et app/rdv.php (visites).
   Design : ivoire → carte relief → distinction visuelle claire des jours actifs.
   Modificateurs :
     .cal2-compact  → cases plus petites (dashboard)
     .cal2-inline   → détail à droite au lieu du dessous */
.cal2{display:flex;flex-direction:column;gap:14px}
.cal2-inline{display:grid;grid-template-columns:1.15fr 1fr;gap:20px}
.cal2-inline .cal2-detail{margin-top:0}
@media(max-width:900px){.cal2-inline{grid-template-columns:1fr}}
.cal2-panel{background:var(--c-white);border:1px solid var(--c-line);border-radius:var(--radius);
  box-shadow:var(--ombre);padding:18px 20px}

/* En-tête : mois + navigation */
.cal2-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.cal2-mois{font-family:var(--f-titre);font-size:19px;font-weight:600;text-transform:capitalize;
  flex:1;text-align:center;color:var(--c-navy);letter-spacing:.2px}
.cal2-nav{background:var(--c-white);border:1px solid var(--c-line);border-radius:6px;
  width:32px;height:32px;font:inherit;font-size:18px;line-height:1;color:var(--c-slate);cursor:pointer;
  display:grid;place-items:center;transition:border-color .12s,color .12s,background .12s}
.cal2-nav:hover{border-color:var(--c-navy-soft);color:var(--c-navy-soft);background:var(--c-cream)}
.cal2-nav:active{transform:translateY(1px)}

/* Légende */
.cal2-legende{display:flex;gap:14px;font-size:11.5px;color:var(--c-slate);padding:0 2px 12px;flex-wrap:wrap}
.cal2-l{display:inline-flex;align-items:center;gap:6px}
.cal2-l i{width:9px;height:9px;border-radius:2px;display:inline-block}

/* Grille */
.cal2-grille{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal2-dows{margin-bottom:4px}
.cal2-dow{text-align:center;font-size:10.5px;font-weight:700;color:var(--c-slate);
  padding:6px 0;text-transform:uppercase;letter-spacing:.8px}

/* Cellule jour - aspect carré par défaut, hauteur fixe en mode compact */
.cal2-jour{aspect-ratio:1;max-height:96px;background:var(--c-cream);border:1.5px solid transparent;border-radius:6px;
  padding:6px 7px;position:relative;font:inherit;color:var(--c-navy);cursor:pointer;
  display:flex;flex-direction:column;align-items:flex-start;overflow:hidden;
  transition:border-color .12s,background .12s,transform .08s,box-shadow .12s}
.cal2-compact .cal2-jour{aspect-ratio:auto;height:56px;max-height:56px;padding:4px 6px}
.cal2-compact .cal2-num{font-size:12px}
.cal2-compact .cal2-cpt{font-size:9.5px;padding:1px 5px}
.cal2-compact .cal2-barre{height:3px}
.cal2-jour.vide{background:transparent;border:0;cursor:default;pointer-events:none}
.cal2-jour.we:not(.actif){background:#F7F7F5}
.cal2-jour:not(.vide):hover{border-color:var(--c-gold-deep);background:#fff;box-shadow:0 4px 10px rgba(180,132,43,.10)}
.cal2-jour:not(.vide):active{transform:translateY(1px)}

/* Numéro du jour */
.cal2-num{font-size:13px;font-weight:600;color:var(--c-navy);line-height:1}
.cal2-jour.aujourdhui .cal2-num{color:#fff;background:var(--c-navy-soft);border-radius:50%;
  width:22px;height:22px;display:inline-grid;place-items:center;font-size:12px;margin:-3px 0 0 -3px}

/* Compteur d'événements en haut-droite */
.cal2-cpt{position:absolute;top:5px;right:6px;font-size:10.5px;font-weight:700;
  background:var(--c-navy);color:var(--c-gold);border-radius:999px;padding:1px 6px;line-height:1.5}

/* Barres colorées en bas de la cellule (une par type d'événement présent) */
.cal2-barres{margin-top:auto;display:flex;gap:3px;width:100%;align-items:flex-end}
.cal2-barre{flex:1;height:4px;border-radius:2px;opacity:.85}

/* Jour actif (au moins 1 événement) : accent doré subtil */
.cal2-jour.actif{background:linear-gradient(180deg,#fff 55%,rgba(230,184,76,.18));border-color:rgba(180,132,43,.35)}
.cal2-jour.actif:hover{border-color:var(--c-gold-deep)}

/* Jour sélectionné : bordure or franche, halo doux */
.cal2-jour.on{border-color:var(--c-gold-deep);background:#fff;box-shadow:0 0 0 3px rgba(180,132,43,.18)}

/* Panneau détail sous le calendrier (rendu par onDetail ou par défaut) */
.cal2-detail{}
.cal2-detail-titre{font-family:var(--f-titre);font-size:15px;font-weight:600;margin-bottom:8px;text-transform:capitalize}
.cal2-carte{background:var(--c-white);border:1px solid var(--c-line);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--ombre)}
.cal2-events{list-style:none;margin:0;padding:0;font-size:13px}
.cal2-events li{padding:0;border-bottom:1px dashed var(--c-line);color:var(--c-navy)}
.cal2-events li:last-child{border-bottom:0}
.cal2-tag{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;
  color:#fff;padding:2px 8px;border-radius:2px;flex:none;vertical-align:middle}
.cal2-vide{color:var(--c-slate);font-style:italic;text-align:center;padding:18px 8px}

/* Item du détail cliquable */
.cal2-ev-lien{display:flex;align-items:center;gap:8px;padding:9px 4px;text-decoration:none;color:inherit;
  border-radius:4px;transition:background .12s}
.cal2-ev-lien:hover{background:var(--c-cream);text-decoration:none}
.cal2-ev-l1{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.cal2-ev-lab{color:var(--c-navy);flex:1;min-width:0}
.cal2-ev-m{color:var(--c-navy);white-space:nowrap}
.cal2-ev-adr{margin:4px 0 0;padding-left:2px;font-size:12px;color:var(--c-slate);line-height:1.4}
.cal2-ev-fl{color:var(--c-slate);font-size:18px;font-weight:600;line-height:1;flex:none;transition:color .12s,transform .12s}
.cal2-ev-lien:hover .cal2-ev-fl{color:var(--c-navy-soft);transform:translateX(2px)}
/* Version non-cliquable : padding équivalent pour rester cohérent */
.cal2-events > li > .cal2-ev-l1{padding:9px 4px}
.cal2-events > li > .cal2-ev-adr{padding:0 4px 9px}

.alerte-box{padding:12px 16px;border-radius:var(--radius);font-size:14px;margin-bottom:16px}
.alerte-box.err{background:#FEE2E2;color:var(--c-critique)}
.alerte-box.ok{background:#e6f4ee;color:#1f7d4e}
.alerte-box.info{background:#eef1f8;color:var(--c-navy-soft)}
.vide{color:var(--c-slate);font-style:italic;padding:24px;text-align:center}

/* Cartes demandes de visite (app/rdv + app/index modal + locataire/messages) */
.dem-item{border:1px solid var(--c-line);border-left:3px solid var(--c-gold-deep);border-radius:12px;padding:15px 16px;margin-bottom:11px;background:var(--c-white);box-shadow:var(--ombre)}
.dem-item.acceptee{border-left-color:var(--c-succes)}
.dem-item.refusee{border-left-color:var(--c-critique);opacity:.75}
.dem-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.dem-nom{font-weight:600;font-size:15px}
.dem-annonce{color:var(--c-navy-soft);font-size:12.5px;margin-top:2px}
[data-theme="dark"] .app .dem-annonce{color:var(--c-gold)}
.dem-meta{color:var(--c-slate);font-size:12.5px;margin-top:6px;line-height:1.6}
.dem-meta b{color:var(--c-navy)}
.dem-msg{margin-top:10px;padding:10px 12px;background:var(--c-cream);border:1px solid var(--c-line);border-radius:8px;font-size:13px}
.dem-actions{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ============ Titres de sections dans le contenu ============
   .content h2 s'aligne sur l'échelle typographique globale et remplace les
   font-size inline hérités des pages historiques (paiements, baux…). */
.content h2{font-family:var(--f-titre);font-size:var(--fs-h2);font-weight:600;line-height:1.2}

/* ============ Fallback responsive des modales inline ============
   Toutes les modales du back-office suivent le motif :
     <div id="modal-*" style="position:fixed;inset:0;background:rgba(…);z-index:50">
       <div style="max-width:…;margin:5vh auto;background:var(--c-white);padding:24px;…">
         <h3 style="font-family:var(--f-titre);font-size:20px">…</h3>
         … formulaire avec .grille.k2 / .k3 …
       </div>
     </div>
   On homogénéise ici sans toucher aux gabarits : titres à --fs-h3, boîte
   sans marge latérale sur mobile, grilles internes en une colonne. */
[id^="modal-"] > div > h3{font-family:var(--f-titre);font-weight:600;font-size:var(--fs-h3);line-height:1.25}
@media(max-width:640px){
  [id^="modal-"] > div{margin:12px auto !important;padding:18px !important;
    max-width:calc(100vw - 24px) !important;max-height:calc(100vh - 24px) !important;overflow:auto}
  [id^="modal-"] .grille.k4,[id^="modal-"] .grille.k3,[id^="modal-"] .grille.k2{grid-template-columns:1fr}
}

/* ============ RESPONSIVE - dashboard bailleur ============
   Cascade des breakpoints :
     • 1080 : le layout 2-colonnes se replie (dashboard/grid2/fin)
     • 820  : la sidebar disparaît, la recherche aussi (topbar compacte)
     • 640  : les libellés secondaires se masquent (topbar, actions)
     • 480  : les cartes deviennent monocolonnes, les CTA à pleine largeur
     • 380  : réduction typographique de sûreté sur les très petits mobiles
*/
@media(max-width:1080px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .fin{grid-template-columns:1fr}
  .grid2{grid-template-columns:1fr}
  .grille.k4,.grille.k3{grid-template-columns:1fr 1fr}
}
@media(max-width:820px){
  .app{grid-template-columns:1fr}
  /* La sidebar devient un tiroir hors-écran, ouvert par le bouton hamburger. */
  .side{position:fixed;top:0;left:0;bottom:0;height:100dvh;width:270px;max-width:82vw;z-index:60;
    transform:translateX(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1);
    box-shadow:0 24px 60px rgba(0,0,0,.45);will-change:transform}
  .app.nav-open .side{transform:none}
  .search{display:none}
  .grille.k4,.grille.k3,.grille.k2{grid-template-columns:1fr}
  /* Colonnes masquées via hide-on-mobile : en layout auto, les colonnes
     restantes se répartissaient l'espace libéré de façon inégale (grands
     vides) et débordaient quand même. Layout fixed = colonnes visibles
     à largeur égale, texte qui wrap au lieu de pousser la table hors cadre. */
  table.liste{table-layout:fixed;width:100%}
  table.liste th,table.liste td{white-space:normal;word-break:break-word;overflow-wrap:break-word}
}
@media(max-width:640px){
  /* Topbar compacte : org à gauche, boutons à droite, gap serré. */
  .top{gap:8px}
  .org .r{display:none}                        /* rôle + email masqués */
  /* KPI et cartes devise : garantie de lisibilité, pas de collage. */
  .kpi{padding:14px 14px 12px}
  .devcard{padding:14px 16px}
  .devrow{gap:10px}
  /* Panneaux et alertes : cellules plus aérées pour le doigt. */
  .decl,.alert{padding:12px 14px;gap:10px}
  .panel .ph{padding:12px 14px}
  /* Grille des stats-row du dashboard : chaque carte occupe toute la largeur. */
  #stats-row #kpis > .kpi,#stats-row #fin > .fin-mini{flex-basis:100%}
  /* Tableaux : padding/police resserrés pour tenir dans le container sans déborder. */
  table.liste thead th,table.liste tbody td,table.liste tfoot td{padding:8px 8px;font-size:12px}
}
@media(max-width:480px){
  /* Actions du dashboard : boutons empilés sur toute la largeur. */
  .pagehead .actions{width:100%}
  .pagehead .actions,.pagehead .actions {flex:1 1 100%;justify-content:center}
  /* Cartes de paiement à confirmer : la ligne se replie proprement. */
  .decl{flex-wrap:wrap}
  .decl .info{flex-basis:calc(100% - 48px - 10px)}   /* .who = 38 + gap */
  .decl .amt{margin-left:auto}
  .decl .cta{flex-basis:100%;justify-content:flex-end}
  /* Bouton icobtn plus compact pour caser plus d'actions. */
  .icobtn{width:34px;height:34px;font-size:15px}
}
@media(max-width:380px){
  :root{--fs-corps:13px;--fs-corps-lg:14px}
  .decl .amt{font-size:var(--fs-corps-lg)}
}


/* ═══════════════════════════════════════════════════════════════════════
   LOCAGEX APP - REFONTE PRO (v2)  ·  thème clair / sombre partagé + composants
   ───────────────────────────────────────────────────────────────────────
   Le shell bailleur (.app) reprend le thème de la landing :
   clair par défaut, sombre via [data-theme="dark"] sur <html>
   (même clé localStorage « locagex-theme »). Tous les overrides sombres sont
   scopés sous `.app` pour ne jamais impacter la page publique (.home).
   ═══════════════════════════════════════════════════════════════════════ */

/* ───── Compléments dark mode (tokens non couverts par palette K) ───── */
[data-theme="dark"] .app{
  --surface-2:var(--c-navy-deep);
  --ombre:0 1px 2px rgba(0,0,0,.35),0 12px 32px rgba(0,0,0,.42);
}
[data-theme="dark"] body:not(.home){background:var(--c-navy)}

/* Puits clair par défaut (utilisé par les chips/inset) - token dispo partout. */
:root{--surface-2:var(--c-mist)}

/* ════════════ BOUTONS - SYSTÈME UNIQUE = .btn-lux ════════════
   Toute l'app métier (app/, locataire/, technicien/) utilise UNE seule famille
   de boutons : .btn-lux + variantes (--primary teal, --white, --ghost, --green,
   --red, --navy, --danger) et tailles (--sm/--lg/--icon). Définition : voir le
   bloc « BOUTONS PREMIUM » plus bas. Les anciennes classes (.btn, .btn-or,
   .btn-ghost, .cpt-btn, .btn-sm…) ont été retirées ; ne pas les réintroduire.
   (Le site public .home garde son propre .btn dans css/locagex.css.) */

/* ════════════ SÉLECTEURS SEGMENTÉS - SOURCE UNIQUE ════════════
   UN seul composant pour : sélection de période, toggle de devise, mini-onglets.
   Référence : etat-comptable (.cpt-seg). Noms hérités aliasés ici (.per-chips /
   .per-chip d'agence, .seg du tableau de bord) → rendu identique partout. */
.seg,.cpt-seg,.per-chips,.pt-toggle{
  display:inline-flex;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--c-line);border-radius:10px;background:var(--app-card);gap:0}
.seg button,.cpt-seg button,.per-chip,.pt-opt{
  border:0;border-radius:0;background:transparent;padding:7px 13px;
  font-size:12.5px;font-weight:500;color:var(--app-ink-muted);cursor:pointer;white-space:nowrap;
  display:inline-flex;align-items:center;gap:6px;
  transition:background .15s ease,color .15s ease}
.seg button:not(.on):hover,.cpt-seg button:not(.on):hover,.per-chip:not(.on):hover,.pt-opt:not(.on):hover{
  color:var(--app-ink);background:var(--app-card-hover)}
.seg button.on,.cpt-seg button.on,.per-chip.on,.pt-opt.on{
  background:linear-gradient(135deg,var(--az-teal),var(--az-teal-2));color:#fff;font-weight:600;
  box-shadow:0 8px 18px -12px var(--az-teal-glow)}
.seg button:focus-visible,.cpt-seg button:focus-visible,.per-chip:focus-visible,.pt-opt:focus-visible{
  outline:2px solid var(--az-teal);outline-offset:-3px}
[data-theme="dark"] .seg button.on,[data-theme="dark"] .cpt-seg button.on,[data-theme="dark"] .per-chip.on,[data-theme="dark"] .pt-opt.on{
  background:linear-gradient(135deg,var(--az-teal),var(--az-teal-2))}

/* ── Onglets « dossier » (mini) - source unique (.cpt-tab), spec etat-comptable ── */
.cpt-tabs,.fc-tabs{display:flex;gap:0;padding:6px 6px 0;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--c-line);border-radius:14px 14px 12px 12px;
  background:linear-gradient(180deg,#f7f8fa,#e4e6eb);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 1px 2px rgba(12,29,50,.10),0 12px 26px -20px rgba(12,29,50,.5)}
.cpt-tab,.fc-tab{position:relative;flex:0 0 auto;border:0;background:transparent;cursor:pointer;white-space:nowrap;
  padding:12px 22px 14px;font-family:var(--f-titre);font-size:14px;color:#4a4f5a;border-radius:10px 10px 0 0;
  display:inline-flex;align-items:center;gap:7px;
  transition:color .15s ease,background .15s ease}
.cpt-tab+.cpt-tab::before,.fc-tab+.fc-tab::before{content:"";position:absolute;left:0;top:13px;bottom:11px;width:1px;background:rgba(12,29,50,.12)}
.cpt-tab:hover,.fc-tab:hover{color:var(--app-ink);background:rgba(255,255,255,.5)}
.cpt-tab.on,.fc-tab.on{color:#fff;font-weight:600;
  background:linear-gradient(180deg,var(--az-teal),var(--az-teal-2));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.30),0 -1px 0 rgba(0,0,0,.10),0 7px 16px -9px var(--az-teal-glow)}
.cpt-tab.on::before,.cpt-tab.on+.cpt-tab::before,.fc-tab.on::before,.fc-tab.on+.fc-tab::before{display:none}
.cpt-tab:focus-visible,.fc-tab:focus-visible{outline:2px solid var(--az-teal);outline-offset:-3px}
[data-theme="dark"] .cpt-tabs,[data-theme="dark"] .fc-tabs{border-color:var(--c-line);
  background:linear-gradient(180deg,var(--app-card-hover),var(--app-card));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 12px 26px rgba(0,0,0,.35)}
[data-theme="dark"] .cpt-tab,[data-theme="dark"] .fc-tab{color:var(--app-ink-muted)}
[data-theme="dark"] .cpt-tab:hover,[data-theme="dark"] .fc-tab:hover{background:rgba(255,255,255,.04)}
[data-theme="dark"] .cpt-tab+.cpt-tab::before,[data-theme="dark"] .fc-tab+.fc-tab::before{background:rgba(255,255,255,.10)}
[data-theme="dark"] .cpt-tab.on,[data-theme="dark"] .fc-tab.on{color:#fff}
/* Teintes d'onglets inactifs (alternance) - partagées. */
.ong1{background:linear-gradient(90deg,var(--az-teal-glow),var(--az-teal-soft))}
.ong2{background:linear-gradient(180deg,var(--az-teal-soft),var(--az-teal-glow))}

/* Focus accessible - anneau doré */
.menu-btn:focus-visible,.menu-item:focus-visible,.icobtn:focus-visible{
  outline:none;box-shadow:0 0 0 3px rgba(180,132,43,.35)}

/* Topbar : icobtn + search harmonisés au thème */
.icobtn{border-radius:8px;transition:border-color .16s,color .16s,background .16s,transform .16s}
.icobtn:hover{border-color:var(--c-gold-deep);color:var(--c-gold-deep);transform:translateY(-1px)}
/* Bouton de thème : lune en clair, soleil en sombre */
#theme-btn .i-sun{display:none}
[data-theme="dark"] #theme-btn .i-sun{display:block}
[data-theme="dark"] #theme-btn .i-moon{display:none}
.search{border-radius:8px}
.search:focus-within{border-color:var(--c-gold-deep);box-shadow:0 0 0 3px rgba(180,132,43,.12)}

/* ════════════ MENU D'ACTIONS DÉROULANT (regroupe les actions par ligne) ════
   Markup :
     <div class="menu">
       <button class="menu-btn btn btn-ghost btn-sm" aria-haspopup="true"
               aria-expanded="false">Actions <svg class="menu-caret">…</svg></button>
       <div class="menu-list" role="menu">
         <button class="menu-item" role="menuitem" data-…>Confirmer</button>
         <button class="menu-item danger" role="menuitem" data-…>Supprimer</button>
       </div>
     </div>
   Comportement dans js/ui.js (ouverture/fermeture, clavier, clic extérieur). */
.menu{position:relative;display:inline-block}
.menu-btn .menu-caret{width:13px;height:13px;transition:transform .18s}
.menu.open .menu-btn .menu-caret{transform:rotate(180deg)}
.menu-list{position:absolute;top:calc(100% + 6px);right:0;z-index:60;min-width:196px;
  background:var(--c-white);border:1px solid var(--c-line);border-radius:10px;padding:6px;
  box-shadow:0 12px 34px rgba(2,48,71,.16),0 2px 8px rgba(2,48,71,.08);
  opacity:0;transform:translateY(-6px) scale(.98);transform-origin:top right;pointer-events:none;
  transition:opacity .16s,transform .16s}
[data-theme="dark"] .app .menu-list{box-shadow:0 16px 40px rgba(0,0,0,.5)}
.menu.open .menu-list{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}
.menu-list.left{right:auto;left:0;transform-origin:top left}
.menu-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  font:inherit;font-size:13.5px;font-weight:500;color:var(--c-navy);background:transparent;
  border:0;border-radius:7px;padding:9px 11px;cursor:pointer;white-space:nowrap;
  transition:background .12s,color .12s}
.menu-item .mi-ic{width:17px;text-align:center;opacity:.85;flex:none;font-size:14px}
.menu-item:hover,.menu-item:focus-visible{background:var(--c-cream);color:var(--c-navy);outline:none}
[data-theme="dark"] .app .menu-item:hover,[data-theme="dark"] .app .menu-item:focus-visible{
  background:var(--surface-2)}
.menu-item.danger{color:var(--c-critique)}
.menu-item.danger:hover{background:rgba(192,57,43,.10);color:var(--c-critique)}
.menu-item.primary{color:var(--c-gold-deep);font-weight:600}
[data-theme="dark"] .app .menu-item.primary{color:var(--c-gold)}
.menu-item:disabled{opacity:.5;cursor:not-allowed}
.menu-sep{height:1px;background:var(--c-line);margin:5px 4px}
.menu-label{font-size:10.5px;letter-spacing:1px;text-transform:uppercase;color:var(--c-slate);
  font-weight:700;padding:8px 11px 4px}

/* Bouton d'actions compact pour les tableaux (patron unique baux, pannes…).
   Kebab vertical « ⋮ » 34×34, hover doré. Le menu s'ouvre vers le haut
   pour ne pas se faire tronquer en bas de tableau. */
.tbl-menu-btn{width:34px;height:34px;padding:0!important;display:inline-grid;place-items:center;
  border:1px solid var(--c-line-soft);border-radius:9px;background:transparent;color:var(--c-slate);
  font:700 21px/1 var(--f-corps);letter-spacing:1px;cursor:pointer;
  transition:background .16s,color .16s,border-color .16s}
.tbl-menu-btn:hover,.menu.open .tbl-menu-btn{background:var(--c-gold-wash);
  border-color:rgba(180,132,43,.4);color:var(--c-gold-deep)}
.tbl-menu-btn .menu-caret{display:none}
/* Ouverture VERS LE HAUT en tableau : évite la troncature en bas de liste. */
.menu:has(> .tbl-menu-btn){z-index:1}
.menu.open:has(> .tbl-menu-btn){z-index:1000}
.menu:has(> .tbl-menu-btn) .menu-list{top:auto;bottom:calc(100% + 7px);
  z-index:1001;transform-origin:bottom right}
.menu:has(> .tbl-menu-btn) .menu-list.left{transform-origin:bottom left}
/* Le conteneur défilant du tableau ET la table elle-même doivent laisser
   le menu déborder (le menu s'ouvre au-dessus de la ligne). */
.table-scroll:has(.tbl-menu-btn){overflow:visible!important}
.table-scroll:has(.tbl-menu-btn) table,
.table-scroll:has(.tbl-menu-btn) tbody,
.table-scroll:has(.tbl-menu-btn) tr,
.table-scroll:has(.tbl-menu-btn) td{overflow:visible!important}
table.liste:has(.tbl-menu-btn){overflow:visible!important}

/* ════════════ OVERRIDES SOMBRES : éléments à fond clair codé en dur ════════ */
[data-theme="dark"] .app{color:var(--app-ink)}
[data-theme="dark"] .app a{color:var(--c-gold)}
[data-theme="dark"] .app .panel .ph a{color:var(--c-gold)}

/* Tables */
[data-theme="dark"] .app table.liste th{background:#1e2a3a;color:var(--app-ink-muted)}
[data-theme="dark"] .app table.liste tbody tr td{background:var(--c-white)}
[data-theme="dark"] .app table.liste tbody tr:hover td{background:rgba(230,184,76,.07)}
[data-theme="dark"] .app .table-scroll::-webkit-scrollbar-thumb{background:#0A4D68}
[data-theme="dark"] .app .table-scroll::-webkit-scrollbar-thumb:hover{background:var(--c-gold-deep)}

/* Formulaires */
[data-theme="dark"] .app .champ input,[data-theme="dark"] .app .champ select,
[data-theme="dark"] .app .champ textarea,[data-theme="dark"] .app .pieces-ed input,
[data-theme="dark"] .app .pieces-ed select{background:#221a17;border-color:var(--c-line);color:var(--app-ink)}
[data-theme="dark"] .app .champ input::placeholder,
[data-theme="dark"] .app .champ textarea::placeholder{color:#5f67888d}
[data-theme="dark"] .app select option{background:#3a2d28;color:var(--app-ink)}

/* KPI : la puce d'icône devient un puits sombre lisible sur la carte */
[data-theme="dark"] .app .kpi .lab .ic{background:var(--surface-2)}
[data-theme="dark"] .app .kpi.warn .lab .ic{background:rgba(192,57,43,.22);color:#FCA5A5}
[data-theme="dark"] .app .kpi.warn .val{color:#FCA5A5}
[data-theme="dark"] .app .panel .ph .cnt{background:var(--surface-2);color:var(--app-ink-muted)}

/* Badges (pastilles de statut) - variantes sombres */
[data-theme="dark"] .app .badge.ok,[data-theme="dark"] .app .badge-pill.ok{background:rgba(15,157,88,.18);color:#6EE7B7}
[data-theme="dark"] .app .badge.warn,[data-theme="dark"] .app .badge-pill.warn{background:rgba(166,101,14,.22);color:#e9c583}
[data-theme="dark"] .app .badge.crit,[data-theme="dark"] .app .badge-pill.crit{background:rgba(192,57,43,.22);color:#FCA5A5}
[data-theme="dark"] .app .badge.neutre,[data-theme="dark"] .app .badge-pill.neutre{background:rgba(255,255,255,.07);color:var(--app-ink-muted)}

/* Encarts d'alerte */
[data-theme="dark"] .app .alerte-box.err{background:rgba(192,57,43,.16);color:#FCA5A5}
[data-theme="dark"] .app .alerte-box.info{background:rgba(143,160,216,.14);color:#aeb9e6}
[data-theme="dark"] .app .alert.r .ic{background:rgba(192,57,43,.22);color:#FCA5A5}
[data-theme="dark"] .app .alert.a .ic{background:rgba(166,101,14,.22);color:#e9c583}
[data-theme="dark"] .app a.alert.clickable:hover{background:rgba(255,255,255,.03)}

/* Mini-boutons (confirmer/contester) */
[data-theme="dark"] .app .mini.no{background:var(--c-white);border-color:var(--c-line);color:var(--app-ink-muted)}

/* Chips pays / devise */
[data-theme="dark"] .app .chip{background:var(--c-white);border-color:var(--c-line);color:var(--app-ink-muted)}
[data-theme="dark"] .app .chip.on{background:var(--c-gold-deep);border-color:var(--c-gold-deep);color:#241b06}

/* Calendrier partagé - surfaces sombres */
[data-theme="dark"] .app .cal2-jour{background:var(--surface-2);color:var(--az-white)}
[data-theme="dark"] .app .cal2-num{color:var(--az-white)}
[data-theme="dark"] .app .cal2-jour.aujourdhui .cal2-num{background:var(--az-teal);color:#fff}
[data-theme="dark"] .app .cal2-jour.we:not(.actif){background:#1c1613}
[data-theme="dark"] .app .cal2-jour:not(.vide):hover{background:#3a2d28;border-color:var(--az-teal)}
[data-theme="dark"] .app .cal2-jour.actif{background:linear-gradient(180deg,#3a2d28 40%,rgba(230,184,76,.16));border-color:var(--gold-line)}
[data-theme="dark"] .app .cal2-jour.on{background:#3a2d28;border-color:var(--c-gold-deep)}
[data-theme="dark"] .app .cal2-nav:hover{background:var(--surface-2)}
[data-theme="dark"] .app .cal2-events li{color:var(--az-white)}

/* Modales génériques (fond carte via token, déjà ok) - renfort ombre */
[data-theme="dark"] .app .kpi,[data-theme="dark"] .app .panel,[data-theme="dark"] .app .carte{box-shadow:var(--ombre)}

/* ════════════ FINITIONS communes (clair + sombre) ════════════ */
/* Cartes & panneaux : coins un peu plus doux, meilleure présence */
.kpi,.panel,.carte,.cal2-panel,.cal2-carte{border-radius:12px}
.kpi{transition:transform .18s,box-shadow .18s,border-color .18s}
.kpi:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(2,48,71,.09);border-color:var(--gold-line)}
[data-theme="dark"] .app .kpi:hover{box-shadow:0 14px 32px rgba(0,0,0,.45)}
table.liste,.table-scroll{border-radius:12px}
.champ input,.champ select,.champ textarea{border-radius:8px}
.mini{border-radius:7px}

/* En-tête de page : filet doré sous le titre pour la signature « premium » */
.pagehead h1{position:relative}

/* Barre de progression sidebar plus fine et arrondie déjà ok. */

/* Titre de section abonnement / génériques */
.titre-page,.ab-secttl{letter-spacing:-.2px}

/* ════════════ COMPOSANTS RÉUTILISABLES (theme-aware) ════════════ */

/* Tuiles statistiques compactes - grille auto-fit par défaut. */
.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.stat{background:var(--c-white);border:1px solid var(--c-line);border-radius:12px;padding:15px 16px;
  box-shadow:var(--ombre);position:relative;overflow:hidden;
  transition:transform .18s,box-shadow .18s,border-color .18s}
.stat:hover{transform:translateY(-2px);border-color:var(--gold-line);box-shadow:0 10px 24px rgba(2,48,71,.09)}
[data-theme="dark"] .app .stat:hover{box-shadow:0 14px 30px rgba(0,0,0,.45)}
.stat .k{font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:var(--c-slate);
  font-weight:700;display:flex;align-items:center;gap:7px}
.stat .k .ic{width:24px;height:24px;border-radius:7px;background:var(--surface-2);display:grid;
  place-items:center;font-size:13px;flex:none}
.stat .v{font-family:var(--f-titre);font-size:var(--fs-h2);font-weight:600;margin-top:8px;line-height:1.05}
.stat .v small{font-family:var(--f-corps);font-size:var(--fs-corps);font-weight:600;color:var(--c-slate)}
.stat .m{font-size:var(--fs-petit);color:var(--c-slate);margin-top:5px;line-height:1.45}
.stat .m b{color:var(--c-navy);font-weight:600}
.stat.accent::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(var(--c-gold-deep),var(--c-gold))}
.stat.ok .v{color:var(--c-succes)}
[data-theme="dark"] .app .stat.ok .v{color:#6EE7B7}
.stat.crit .v{color:var(--c-critique)}
[data-theme="dark"] .app .stat.crit .v{color:#FCA5A5}

/* Mini-barre de progression réutilisable (occupation, usage…). */
.mbar{height:6px;background:var(--surface-2);border-radius:3px;overflow:hidden;margin-top:8px}
.mbar i{display:block;height:100%;background:linear-gradient(90deg,var(--c-gold-deep),var(--c-gold));border-radius:3px}
.mbar i.ok{background:linear-gradient(90deg,#2E8F63,#57c78e)}
.mbar i.crit{background:linear-gradient(90deg,#C0392B,#d06450)}

/* Bannières d'information contextuelles (theme-aware). */
.banner{display:flex;gap:11px;align-items:flex-start;border-radius:12px;padding:13px 16px;
  margin-bottom:18px;font-size:13.5px;line-height:1.5;border:1px solid transparent}
.banner .bic{font-size:16px;flex:none;line-height:1.4}
.banner b{font-weight:700}
.banner.ok{background:rgba(15,157,88,.10);border-color:rgba(15,157,88,.28);color:#1f7d4e}
.banner.warn{background:rgba(166,101,14,.10);border-color:rgba(166,101,14,.30);color:var(--c-alerte)}
.banner.info{background:rgba(43,58,120,.08);border-color:rgba(43,58,120,.22);color:var(--c-navy-soft)}
.banner.crit{background:rgba(192,57,43,.09);border-color:rgba(192,57,43,.28);color:var(--c-critique)}
[data-theme="dark"] .app .banner.ok{color:#8ee0b2}
[data-theme="dark"] .app .banner.warn{color:#e9c583}
[data-theme="dark"] .app .banner.info{color:#aeb9e6;border-color:rgba(143,160,216,.28)}
[data-theme="dark"] .app .banner.crit{color:#FCA5A5}

/* Carte de bloc générique avec en-tête (réutilise le langage .panel). */
.bloc{background:var(--c-white);border:1px solid var(--c-line);border-radius:12px;
  box-shadow:var(--ombre);padding:20px 22px;margin-bottom:18px}
.bloc-titre{font-family:var(--f-titre);font-size:16px;font-weight:600;margin-bottom:4px;
  display:flex;align-items:center;gap:9px}
.bloc-titre .ic{width:30px;height:30px;border-radius:8px;background:rgba(230,184,76,.14);
  border:1px solid var(--gold-line);display:grid;place-items:center;color:var(--c-gold-deep);font-size:15px;flex:none}
[data-theme="dark"] .app .bloc-titre .ic{color:var(--c-gold)}
.bloc-sub{color:var(--c-slate);font-size:13px;margin-bottom:16px}

/* Titre de section (avec tick doré) - remplace les <h2 style=…> épars. */
.section-h{font-family:var(--f-titre);font-size:18px;font-weight:600;margin:28px 0 14px;
  display:flex;align-items:center;gap:11px;letter-spacing:-.2px;color:var(--c-navy)}
.section-h::before{content:"";width:4px;height:19px;border-radius:2px;flex:none;
  background:linear-gradient(var(--c-gold-deep),var(--c-gold))}
.section-h:first-child{margin-top:6px}
.section-h .cnt{margin-left:auto;font-family:var(--f-corps);font-size:12px;font-weight:600;color:var(--c-slate);
  background:var(--surface-2);border:1px solid var(--c-line);padding:3px 10px;border-radius:999px}

/* Avatar rond pour cellules de tableau / listes - style dashboard SaaS.
   Le fond est décliné automatiquement selon la première lettre pour donner
   la variété colorée du template (via :is/attr-based rotation). */
.row-av{width:36px;height:36px;border-radius:50%;flex:none;display:inline-grid;place-items:center;
  background:linear-gradient(135deg,var(--c-navy),#0a4d68);color:#fff;
  font-family:var(--f-titre);font-weight:600;font-size:13px;letter-spacing:.3px;
  box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);text-transform:uppercase}
.row-av[data-color="1"]{background:linear-gradient(135deg,#0a4d68,#023047)}
.row-av[data-color="2"]{background:linear-gradient(135deg,#0f9d58,#0b7a44)}
.row-av[data-color="3"]{background:linear-gradient(135deg,#e6b84c,#c99a2f);color:#3a2a08}
.row-av[data-color="4"]{background:linear-gradient(135deg,#e11d48,#b91c40);color:#fff}
.row-av[data-color="5"]{background:linear-gradient(135deg,#7c3aed,#5b21b6)}
.row-av[data-color="6"]{background:linear-gradient(135deg,#0284c7,#0369a1)}
.row-av[data-color="7"]{background:linear-gradient(135deg,#f97316,#c2410c)}
.row-ident{display:flex;align-items:center;gap:12px;min-width:0}
.row-ident b{font-weight:600;color:var(--c-navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
table.liste td .devise{color:#94a0b3;font-size:12.5px;margin-top:2px;display:block}

/* ════════════ CARTES-GRAPHIQUES (dashboards) ════════════ */
.chart-card{background:var(--c-white);border:1px solid var(--c-line);border-radius:14px;
  box-shadow:var(--ombre);padding:18px 20px;margin-bottom:18px}
.chart-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:6px}
.chart-head .ttl{font-family:var(--f-titre);font-size:15.5px;font-weight:600;display:flex;align-items:center;gap:9px}
.chart-head .ttl .ic{width:30px;height:30px;border-radius:8px;background:rgba(230,184,76,.14);
  border:1px solid var(--gold-line);display:grid;place-items:center;color:var(--c-gold-deep);font-size:14px;flex:none}
[data-theme="dark"] .app .chart-head .ttl .ic{color:var(--c-gold)}
.chart-sub{color:var(--c-slate);font-size:12.5px;margin-bottom:8px}
.chart-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--c-slate)}
.chart-legend .lg{display:inline-flex;align-items:center;gap:6px}
.chart-legend .lg i{width:10px;height:10px;border-radius:3px;display:inline-block}
.chart-body{width:100%;min-height:40px}
/* Bascule compacte (devise, période…) réutilisable dans les en-têtes de graphe. */
.seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--c-line);border-radius:999px;padding:3px}
.seg button{font:inherit;font-size:12px;font-weight:600;color:var(--c-slate);background:transparent;border:0;
  border-radius:999px;padding:5px 13px;cursor:pointer;transition:all .16s}
.seg button.on{background:var(--c-white);color:var(--c-navy);box-shadow:var(--ombre)}

/* Tendance (delta) - pastille montée/baisse pour les KPI. */
.trend{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;
  padding:2px 8px;border-radius:999px}
.trend.up{background:rgba(15,157,88,.14);color:var(--c-succes)}
.trend.down{background:rgba(192,57,43,.14);color:var(--c-critique)}
.trend.flat{background:var(--surface-2);color:var(--c-slate)}
[data-theme="dark"] .app .trend.up{color:#6EE7B7}
[data-theme="dark"] .app .trend.down{color:#FCA5A5}

/* Grille de dashboard : 2 colonnes de graphes qui se replient. */
.dash-charts{display:grid;grid-template-columns:1.5fr 1fr;gap:18px;margin-bottom:18px;align-items:stretch}
.dash-charts > *{margin-bottom:0}
@media(max-width:1080px){.dash-charts{grid-template-columns:1fr}}

/* Corps principal du tableau de bord : colonne graphes (large) + rail latéral. */
.dash-main{display:grid;grid-template-columns:1.62fr 1fr;gap:18px;margin-bottom:18px;align-items:start}
.dash-main > .col{display:flex;flex-direction:column;gap:18px;min-width:0}
.dash-main .chart-card{margin-bottom:0}
@media(max-width:1080px){.dash-main{grid-template-columns:1fr}}

/* Carte occupation (jauge + ratios) - contenu centré verticalement (évite le décalage). */
.occ-card{display:flex;flex-direction:column}
.occ-center{flex:1;display:flex;flex-direction:column;justify-content:center;gap:14px;padding:6px 0}
.occ-card .occ-ratios{display:flex;gap:10px;width:100%}
.occ-card .occ-r{flex:1;text-align:center;background:var(--surface-2);border:1px solid var(--c-line);
  border-radius:10px;padding:10px 6px}
.occ-card .occ-r .k{font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:var(--c-slate);font-weight:700}
.occ-card .occ-r .v{font-family:var(--f-titre);font-size:18px;font-weight:600;margin-top:3px}
.occ-sep{height:1px;background:var(--c-line);margin:16px -20px 14px}
.occ-card .chart-head{margin-bottom:2px}

/* Rangée des cartes devise - grille alignée (fin du désordre en escalier). */
.fin-row{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:18px;margin-bottom:1px}
.fin-mini{background:var(--c-navy);color:#E7EAF4;border-radius:14px;padding:16px 18px;position:relative;overflow:hidden;
  box-shadow:var(--ombre)}
.fin-mini::after{content:"";position:absolute;right:-40px;top:-40px;width:140px;height:140px;border-radius:50%;
  background:radial-gradient(circle,rgba(230,184,76,.14),transparent 70%)}
.fin-mini .fm-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;position:relative}
.fin-mini .fm-dev{font-size:11px;letter-spacing:1px;color:var(--c-gold);border:1px solid rgba(230,184,76,.4);
  padding:2px 9px;border-radius:999px}
.fin-mini .fm-per{font-size:11.5px;color:#8A8F9C}
.fin-mini .fm-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;position:relative}
.fin-mini .fm-k{font-size:11px;color:#8A8F9C;margin-bottom:3px}
.fin-mini .fm-v{font-family:var(--f-titre);font-size:20px;font-weight:600;line-height:1}
.fin-mini .fm-v.enc{color:var(--c-gold)}
.fin-mini .fm-bar{height:6px;background:var(--c-navy-deep);border-radius:3px;overflow:hidden;margin:14px 0 8px;position:relative}
.fin-mini .fm-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--c-gold-deep),var(--c-gold));border-radius:3px}
.fin-mini .fm-foot{display:flex;justify-content:space-between;font-size:11.5px;color:#8A8F9C;position:relative}
.fin-mini .fm-foot b{color:#fff}
.fin-mini .fm-foot b.crit{color:#FCA5A5}

/* Légende de donut en liste (labels + valeurs). */
.donut-wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap;justify-content:center}
.donut-legend{list-style:none;display:flex;flex-direction:column;gap:9px;font-size:13px;min-width:150px}
.donut-legend li{display:flex;align-items:center;gap:9px}
.donut-legend li i{width:11px;height:11px;border-radius:3px;flex:none}
.donut-legend li b{margin-left:auto;font-variant-numeric:tabular-nums}

/* Utilitaires de couleur sémantique (montants positifs / critiques), theme-aware. */
.txt-succes{color:var(--c-succes)}
.txt-crit{color:var(--c-critique)}
.txt-or{color:var(--c-gold-deep)}
[data-theme="dark"] .app .txt-succes{color:#6EE7B7}
[data-theme="dark"] .app .txt-crit{color:#FCA5A5}
[data-theme="dark"] .app .txt-or{color:var(--c-gold)}


/* ═══════════════════════════════════════════════════════════════════════
   COUCHE PREMIUM - reliefs, micro-animations, finitions « audacieuses »
   Objectif : présence et raffinement (biseaux lumineux, entrées animées,
   barres qui se remplissent, balayage doré des CTA) sans jamais sombrer
   dans le tape-à-l'œil. Tout est désactivé sous prefers-reduced-motion.
   ═══════════════════════════════════════════════════════════════════════ */

/* Biseau lumineux supérieur sur les surfaces (relief premium, peu coûteux). */
.stat,.kpi,.panel,.carte,.bloc,.ag-owner,.devcard,.po-card,.cal2-panel,.cal2-carte{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55),var(--ombre)}
table.liste,.table-scroll{
  box-shadow:0 1px 3px rgba(0,0,0,.06),0 4px 16px rgba(0,0,0,.04)}
[data-theme="dark"] .app .stat,[data-theme="dark"] .app .kpi,[data-theme="dark"] .app .panel,
[data-theme="dark"] .app .carte,[data-theme="dark"] .app .bloc,[data-theme="dark"] .app .ag-owner,
[data-theme="dark"] .app .devcard,[data-theme="dark"] .app .cal2-panel,[data-theme="dark"] .app .cal2-carte{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05),var(--ombre)}
[data-theme="dark"] .app table.liste,[data-theme="dark"] .app .table-scroll{
  box-shadow:0 2px 8px rgba(0,0,0,.3),0 0 1px rgba(255,255,255,.06)}

/* Titre de page : liseré doré animé sous le H1 (signature premium). */
.pagehead h1::after{content:"";display:block;height:3px;width:44px;margin-top:10px;border-radius:3px;
  background:linear-gradient(90deg,var(--c-gold-deep),var(--c-gold));
  transform-origin:left;animation:az-line .6s cubic-bezier(.4,0,.2,1) both}

/* Entrée animée (fondu + montée) des blocs de contenu. */
@keyframes az-rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes az-line{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes az-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes az-pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}

.content .statgrid > .stat,.content .kpi-grid > .kpi,.content .kpis > .kpi,
.content > .grid2 > div > .panel,.content .ag-owner,.content > .bloc,
.content .fin-side > .devcard,.content .fin > .devcard{
  animation:az-rise .5s cubic-bezier(.16,1,.3,1) both}
/* Léger décalage en cascade pour un effet « vague ». */
.content .statgrid > .stat:nth-child(2),.content .kpi-grid > .kpi:nth-child(2){animation-delay:.05s}
.content .statgrid > .stat:nth-child(3),.content .kpi-grid > .kpi:nth-child(3){animation-delay:.1s}
.content .statgrid > .stat:nth-child(4),.content .kpi-grid > .kpi:nth-child(4){animation-delay:.15s}
.content .statgrid > .stat:nth-child(5){animation-delay:.2s}
.content .statgrid > .stat:nth-child(n+6){animation-delay:.25s}

/* Barres de progression qui se remplissent à l'apparition. */
.mbar i,.progress i,.side .foot .bar i{
  transform-origin:left;animation:az-grow .9s cubic-bezier(.16,1,.3,1) both}

/* Survol des tuiles : halo doré diffus en plus du décollage. */
.stat:hover,.kpi:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.55),
  0 12px 30px rgba(2,48,71,.10),0 0 0 1px var(--gold-line)}
[data-theme="dark"] .app .stat:hover,[data-theme="dark"] .app .kpi:hover{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 16px 34px rgba(0,0,0,.5),0 0 0 1px var(--gold-line)}

/* (Sheen doré .btn-or retiré : boutons unifiés sur .btn-lux.) */

/* Icônes de section : léger halo au survol du bloc parent. */
.bloc:hover .bloc-titre .ic,.stat:hover .k .ic{box-shadow:0 0 0 4px rgba(230,184,76,.12)}

/* Puce « statut en ligne » pulsée (réutilisable). */
.dot-live{width:8px;height:8px;border-radius:50%;background:var(--c-succes);display:inline-block;
  box-shadow:0 0 0 0 rgba(15,157,88,.5);animation:az-pulse 2s infinite}
@keyframes az-pulse{0%{box-shadow:0 0 0 0 rgba(15,157,88,.45)}70%{box-shadow:0 0 0 7px rgba(15,157,88,0)}100%{box-shadow:0 0 0 0 rgba(15,157,88,0)}}

@media(prefers-reduced-motion:reduce){
  .pagehead h1::after,.content .statgrid > .stat,.content .kpi-grid > .kpi,.content .kpis > .kpi,
  .content > .grid2 > div > .panel,.content .ag-owner,.content > .bloc,.content .fin-side > .devcard,
  .content .fin > .devcard,.mbar i,.progress i,.side .foot .bar i,.dot-live{
    animation:none}
}


/* En-tête : titre + miniature calendrier et boutons d'action sur la même ligne,
     avec repli propre (wrap) sur mobile pour éviter tout débordement. */
     .pagehead.ph-dash{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:4px;flex-wrap:nowrap}
     .pagehead-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px 16px;width:100%}
     .pagehead-titre{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0}
     .cal-mini{width:42px;height:42px;flex:none;border-radius:9px;overflow:hidden;border:1px solid var(--c-line);
       box-shadow:var(--ombre);cursor:pointer;background:var(--c-white);padding:0;display:flex;flex-direction:column;
       transition:transform .12s,box-shadow .12s}
     .cal-mini:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(18,22,42,.14);border-color:var(--c-gold-deep)}
     .cal-mini .cm-top{background:var(--c-critique);color:#fff;font-size:8px;font-weight:700;text-transform:uppercase;
       text-align:center;padding:2px 0;letter-spacing:.3px;line-height:1.4}
     .cal-mini .cm-day{flex:1;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;
       font-family:'Montserrat',serif;color:var(--c-navy);line-height:1}

         /* Modale calendrier : grille mois en grandes cases + colonne « Planifié ».
            Toujours sombre (verre bleu nuit), quel que soit le thème de l'app. */
  #modal-calendrier,#modal-tech,#modal-agenda-nouveau{padding:11px;box-sizing:border-box}
  #modal-calendrier,#modal-agenda-nouveau{
    --mx-ink:#EEF3FA;--mx-muted:#94A3B8;--mx-line:rgba(255,255,255,.09);--mx-tile:rgba(255,255,255,.045);
    --mx-tile-h:rgba(255,255,255,.08);--mx-blue:#2F8CF0;--mx-blue-2:#1E6FD0;
    /* Couleurs des types lisibles sur fond sombre (réutilisées par js/calendrier.js via var()) */
    --c-gold:#FF6B4A;--c-navy-soft:#60A5FA;--c-slate:#94A3B8;
    background:rgba(8,13,24,.62)!important;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
  #modal-calendrier .mcx{display:grid;grid-template-columns:minmax(0,1fr) 252px;max-width:896px;width:100%;
    margin:4vh auto;height:min(620px,92vh);box-sizing:border-box;overflow:hidden;border-radius:19.5px;
    color:var(--mx-ink);font-family:var(--f-corps);
    background:radial-gradient(120% 80% at 0% 0%,#2B3A52 0%,transparent 60%),
               radial-gradient(90% 70% at 100% 100%,#1D3A5F 0%,transparent 65%),#1B2536;
    border:1px solid rgba(255,255,255,.08);box-shadow:0 21px 56px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.06)}

  /* -- Colonne principale : grille du mois -- */
  #modal-calendrier .mcx-main{padding:21px 18px 17px;min-width:0;overflow:auto}
  #modal-calendrier .cal2-panel{background:transparent;border:0;box-shadow:none;padding:0}
  #modal-calendrier .cal2-legende,#modal-calendrier .cal2-detail,#modal-calendrier .cal2-cpt,#modal-calendrier .cal2-barres{display:none}
  #modal-calendrier .cal2-head{gap:7px;margin:0 3px 18px}
  #modal-calendrier .cal2-mois{order:-1;text-align:left;font-family:var(--f-corps);font-size:21px;font-weight:500;
    color:var(--mx-ink);letter-spacing:.01em}
  #modal-calendrier .cal2-nav{width:28px;height:28px;border-radius:50%;background:transparent;
    border:1px solid rgba(255,255,255,.18);color:var(--mx-ink);font-size:15.5px}
  #modal-calendrier .cal2-nav:hover{background:var(--mx-tile-h);border-color:rgba(255,255,255,.35);color:#fff}
  #modal-calendrier .cal2-grille{gap:7px}
  #modal-calendrier .cal2-dows{margin-bottom:4px}
  #modal-calendrier .cal2-dow{text-align:left;padding:0 7px 3px;font-size:11px;font-weight:400;text-transform:none;
    letter-spacing:0;color:var(--mx-muted)}
  #modal-calendrier .cal2-jour{aspect-ratio:auto;height:78.5px;max-height:none;padding:8.5px 10px 7px;border-radius:12.5px;
    background:var(--mx-tile);border:1px solid var(--mx-line);color:var(--mx-ink);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05);transition:background .15s,border-color .15s,transform .15s}
  #modal-calendrier .cal2-jour.we:not(.actif),#modal-calendrier .cal2-jour.actif{background:var(--mx-tile)}
  #modal-calendrier .cal2-jour.vide{background:transparent;border:1px solid rgba(255,255,255,.03);box-shadow:none}
  #modal-calendrier .cal2-jour:not(.vide):hover{background:var(--mx-tile-h);border-color:rgba(255,255,255,.18);
    box-shadow:none;transform:translateY(-1px)}
  #modal-calendrier .cal2-num{font-size:18px;font-weight:400;color:var(--mx-ink);line-height:1}
  #modal-calendrier .cal2-jour.aujourdhui{background:linear-gradient(180deg,#2F8CF0 0%,rgba(47,140,240,.35) 70%,rgba(47,140,240,.18));
    border-color:rgba(96,165,250,.55)}
  #modal-calendrier .cal2-jour.aujourdhui .cal2-num{width:auto;height:auto;margin:0;background:none;color:#fff;font-size:18px;display:inline}
  #modal-calendrier .cal2-jour.on{background:rgba(47,140,240,.16);border:1.5px dashed #3B8FF0;box-shadow:none}
  #modal-calendrier .cal2-jour.aujourdhui.on{background:linear-gradient(180deg,#2F8CF0,rgba(47,140,240,.3));border-style:dashed}
  #modal-calendrier .cal2-libs{margin-top:auto;display:flex;flex-direction:column;gap:3px;width:100%;min-width:0}
  #modal-calendrier .cal2-lib{display:block;font-size:11px;line-height:1.3;color:rgba(238,243,250,.82);text-align:left;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-left:5px;border-left:2px solid var(--c)}
  #modal-calendrier .cal2-lib.plus{border-left-color:transparent;color:var(--mx-muted);font-size:11px}

  /* -- Colonne « Planifié » -- */
  #modal-calendrier .mcx-side{border-left:1px solid var(--mx-line);display:flex;flex-direction:column;min-height:0;
    background:rgba(255,255,255,.015)}
  #modal-calendrier .mcx-side-head{display:flex;align-items:flex-start;justify-content:space-between;gap:7px;padding:21px 17px 10px}
  #modal-calendrier .mcx-titre{font-family:var(--f-corps);font-size:17px;font-weight:600;color:#fff;margin:0;line-height:1.1}
  #modal-calendrier .mcx-date{font-size:11px;color:var(--mx-muted);margin-top:3px;text-transform:capitalize}
  #modal-calendrier .mcx-acts{display:flex;gap:4px;flex:none}
  #modal-calendrier .mcx-rond{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;padding:0;cursor:pointer;
    background:transparent;border:1px solid rgba(255,255,255,.18);color:var(--mx-ink);font:inherit;font-size:12.5px;line-height:1;
    transition:background .15s,border-color .15s}
  #modal-calendrier .mcx-rond:hover{background:var(--mx-tile-h);border-color:rgba(255,255,255,.35)}
  #modal-calendrier #cal-modal-fermer{font-size:11px}
  #modal-calendrier .mcx-scroll{flex:1;min-height:0;overflow:auto;padding:3px 17px 17px}
  #modal-calendrier .mcx-vide{color:var(--mx-muted);font-size:11px;padding:10px 2px}
  #modal-calendrier .mcx-heure{display:flex;align-items:center;gap:8.5px;font-size:11px;color:var(--mx-ink);margin:10px 0 8.5px}
  #modal-calendrier .mcx-heure::after{content:"";flex:1;height:1px;background:var(--mx-line)}
  #modal-calendrier .mcx-ev{position:relative;background:rgba(255,255,255,.05);border:1px solid var(--mx-line);border-radius:11px;
    padding:10px 10px 8.5px;margin-bottom:8.5px}
  #modal-calendrier .mcx-ev-top{height:5.5px;border-radius:69.5px;background:var(--c);margin-bottom:10px}
  #modal-calendrier .mcx-ev h4{font-family:var(--f-corps);font-size:12.5px;font-weight:600;color:#fff;margin:0 0 3px;line-height:1.25}
  #modal-calendrier .mcx-ev p{font-size:11px;color:var(--mx-muted);margin:0;line-height:1.45}
  #modal-calendrier .mcx-ev-meta{display:flex;align-items:center;justify-content:space-between;gap:7px;margin-top:8.5px;padding-top:7.5px;
    border-top:1px dashed rgba(255,255,255,.12);font-size:11px;color:var(--mx-ink)}
  #modal-calendrier .mcx-ev-meta span{display:inline-flex;align-items:center;gap:5px}
  #modal-calendrier .mcx-ev-meta svg{color:var(--mx-muted);flex:none}
  #modal-calendrier .mcx-ev-meta b{font-weight:500;color:var(--mx-muted);white-space:nowrap}
  #modal-calendrier .mcx-del{position:absolute;top:15.5px;right:8.5px;width:17px;height:17px;border-radius:50%;border:0;cursor:pointer;
    background:rgba(255,255,255,.08);color:var(--mx-ink);font-size:11px;line-height:1;display:grid;place-items:center}
  #modal-calendrier .mcx-del:hover{background:var(--c-critique);color:#fff}
  #modal-calendrier .mcx-add{width:100%;margin:3px 0 0;padding:7.5px;border-radius:8.5px;cursor:pointer;font:inherit;font-size:11px;font-weight:500;
    background:transparent;border:1px dashed rgba(255,255,255,.2);color:var(--mx-ink);display:flex;align-items:center;justify-content:center;gap:5.5px}
  #modal-calendrier .mcx-add:hover{border-color:var(--mx-blue);background:rgba(47,140,240,.1)}
  #modal-calendrier .mcx-sep{display:flex;align-items:center;gap:8.5px;margin:15.5px 0 8.5px;font-size:11px;color:var(--mx-ink)}
  #modal-calendrier .mcx-sep::after{content:"";flex:1;height:1px;background:var(--mx-line)}
  /* Demandes de visite (dem-* global) adaptées au fond sombre */
  #modal-calendrier .dem-item{background:rgba(255,255,255,.05);border-color:var(--mx-line);border-radius:11px;box-shadow:none;color:var(--mx-ink)}
  #modal-calendrier .dem-nom{color:#fff}
  #modal-calendrier .dem-annonce{color:#7DB8F7}
  #modal-calendrier .dem-meta,#modal-calendrier .dem-meta b{color:var(--mx-muted)}
  #modal-calendrier .dem-meta b{color:var(--mx-ink)}
  #modal-calendrier .dem-msg{background:rgba(255,255,255,.04);border-color:var(--mx-line);color:var(--mx-ink)}

  @media(max-width:940px){
    #modal-calendrier .mcx{grid-template-columns:minmax(0,1fr) 236px}
    #modal-calendrier .cal2-jour{height:68px;padding:7px}
    #modal-calendrier .cal2-num,#modal-calendrier .cal2-jour.aujourdhui .cal2-num{font-size:16px}
  }
  @media(max-width:760px){
    /* max-height !important : neutralise le plafond générique [id^="modal-"] > div (≤640px), sinon le contenu déborde du fond */
    #modal-calendrier .mcx{grid-template-columns:1fr;height:auto;max-height:none !important;overflow:visible;margin:0 auto;border-radius:16px}
    #modal-calendrier{overflow:auto}
    #modal-calendrier .mcx-main{padding:14px 10px 10px;overflow:visible}
    #modal-calendrier .mcx-side{border-left:0;border-top:1px solid var(--mx-line)}
    #modal-calendrier .mcx-side-head{padding:14px 12px 8px}
    #modal-calendrier .mcx-scroll{overflow:visible;padding:3px 12px 14px}
    /* Jour chargé : la liste défile dans la carte au lieu de déborder hors du fond */
    #modal-calendrier .mcx-events{max-height:min(420px,55vh);overflow-y:auto;overscroll-behavior:contain;
      -webkit-overflow-scrolling:touch;margin-right:-6px;padding-right:6px}
    #modal-calendrier .cal2-grille{gap:4px}
    #modal-calendrier .cal2-dow{font-size:11px;padding:0 0 2px;text-align:center}
    /* Cases gardées à ~44px : cible tactile minimale */
    #modal-calendrier .cal2-jour{height:44px;padding:5px;border-radius:10px;align-items:center}
    #modal-calendrier .cal2-num,#modal-calendrier .cal2-jour.aujourdhui .cal2-num{font-size:13px}
    #modal-calendrier .cal2-libs{display:none}
    #modal-calendrier .cal2-barres{display:flex;justify-content:center;gap:3px;margin-top:auto}
    #modal-calendrier .cal2-barre{flex:0 0 4px;height:4px;border-radius:50%}
    #modal-calendrier .mcx-rond{width:32px;height:32px}
  }

  /* Modale « + Nouveau » événement : même habillage sombre, libellés à gauche -- */
  #modal-agenda-nouveau .mag-box{max-width:520px;width:100%;margin:8vh auto;border-radius:22px;padding:26px 28px;
    max-height:84vh;overflow:auto;box-sizing:border-box;color:var(--mx-ink);font-family:var(--f-corps);
    background:#222D3F;border:1px solid rgba(255,255,255,.08);box-shadow:0 30px 80px rgba(0,0,0,.55)}
  #modal-agenda-nouveau .mag-head{display:flex;align-items:center;justify-content:space-between;
    padding-bottom:18px;margin-bottom:20px;border-bottom:1px dashed rgba(255,255,255,.14)}
  #modal-agenda-nouveau .mag-head h3{font-family:var(--f-corps);font-size:22px;font-weight:500;color:#fff;margin:0}
  #modal-agenda-nouveau .mc-fermer{background:transparent;border:0;font-size:16px;line-height:1;color:var(--mx-muted);cursor:pointer;padding:6px;border-radius:50%}
  #modal-agenda-nouveau .mc-fermer:hover{background:rgba(255,255,255,.08);color:#fff}
  #modal-agenda-nouveau .champ{display:grid;grid-template-columns:104px minmax(0,1fr);align-items:center;gap:12px;margin-bottom:14px}
  #modal-agenda-nouveau .champ label{margin:0;font-size:14.5px;font-weight:400;color:var(--mx-muted);text-transform:none;letter-spacing:0}
  #modal-agenda-nouveau .champ input,#modal-agenda-nouveau .champ textarea{width:100%;box-sizing:border-box;
    background:rgba(255,255,255,.05);border:1px solid transparent;border-radius:10px;padding:11px 14px;color:var(--mx-ink);
    font:inherit;font-size:14.5px;color-scheme:dark}
  #modal-agenda-nouveau .champ input::placeholder,#modal-agenda-nouveau .champ textarea::placeholder{color:rgba(148,163,184,.7)}
  #modal-agenda-nouveau .champ input:focus,#modal-agenda-nouveau .champ textarea:focus{outline:0;border-color:rgba(47,140,240,.6);
    background:rgba(255,255,255,.07);box-shadow:0 0 0 3px rgba(47,140,240,.18)}
  #modal-agenda-nouveau .champ textarea{align-self:stretch}
  /* Heures début/fin côte à côte : libellé au-dessus pour tenir dans la largeur */
  #modal-agenda-nouveau .champ[style*="flex"]{grid-template-columns:1fr;gap:6px}
  #modal-agenda-nouveau .mag-box > div:has(> .champ[style*="flex"]){padding-left:116px}
  #modal-agenda-nouveau .mag-box > div:last-child{padding-top:20px;margin-top:6px!important;border-top:1px dashed rgba(255,255,255,.14);justify-content:center!important}
  #modal-agenda-nouveau #mag-annuler{background:transparent;border:1px solid rgba(255,255,255,.2);color:var(--mx-ink)}
  #modal-agenda-nouveau #mag-enregistrer{background:var(--mx-blue);border:0;color:#fff;padding-left:28px;padding-right:28px;border-radius:12px}
  #modal-agenda-nouveau #mag-enregistrer:hover{background:var(--mx-blue-2)}
  .mag-couleurs{display:flex;gap:10px}
  .mag-c{--c:#F5A524;width:28px;height:28px;border-radius:50%;background:var(--c);
    border:2px solid transparent;cursor:pointer;padding:0}
  .mag-c.on{border-color:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.16)}
  @media(max-width:520px){
    #modal-agenda-nouveau .mag-box{padding:20px 18px;margin:4vh auto}
    #modal-agenda-nouveau .champ{grid-template-columns:1fr;gap:6px}
    #modal-agenda-nouveau .mag-box > div:has(> .champ[style*="flex"]){padding-left:0}
  }

  @media(max-width:380px){
    #salut{font-size:22px}
    .cal-mini{
      width:26px;height:26px;
    }
    .cal-mini .cm-day{font-size:14px}
  }

  /* ==========================================================================
     BOUTONS - un style par RÔLE, identique sur toutes les pages.
     Deux classes, même rendu :  .ux-btn (pages refondues)  et  .btn-lux (historique).
       Principal  (valider, enregistrer, créer)  .ux-btn--pri | .btn-lux--ghost/--white/--navy
       Secondaire (annuler, fermer, neutre)     .ux-btn       | .btn-lux
       Fichier    (enregistrer PDF / Excel)     .btn-lux--red (PDF) | .btn-lux--green (Excel, CSV)
       Danger     (résilier, supprimer)         .ux-btn--danger | .btn-lux--danger
       Petit : --sm    Icône seule : .ux-ico | .act | .btn-lux--icon
     ========================================================================== */
  .btn-lux,.ux-btn{
    --b-bg:var(--app-card);--b-ink:var(--app-ink);--b-bd:var(--app-border);--b-bg-h:var(--app-card);--b-ink-h:var(--az-teal);--b-bd-h:var(--az-teal);
    position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;vertical-align:middle;
    min-height:38px;padding:0 15px;box-sizing:border-box;
    font:inherit;font-size:13.5px;font-weight:600;line-height:1;letter-spacing:0;white-space:nowrap;user-select:none;text-decoration:none;
    color:var(--b-ink);background:var(--b-bg);border:1px solid var(--b-bd);border-radius:10px;cursor:pointer;box-shadow:none;
    transition:background .15s,border-color .15s,color .15s,transform .15s}
  .btn-lux svg,.ux-btn svg{width:16px;height:16px;flex:none;stroke:currentColor;fill:none}
  .btn-lux i.fa-solid,.btn-lux i.fa-regular,.btn-lux i.fa-brands{font-size:14px;line-height:1}
  .btn-lux::before{content:none}
  .btn-lux:hover:not(:disabled),.ux-btn:hover:not(:disabled){background:var(--b-bg-h);border-color:var(--b-bd-h);color:var(--b-ink-h);text-decoration:none;box-shadow:none;transform:none}
  .btn-lux:active:not(:disabled),.ux-btn:active:not(:disabled){transform:scale(.98)}
  .btn-lux:focus-visible,.ux-btn:focus-visible{outline:2px solid var(--az-teal);outline-offset:2px;box-shadow:none}
  .btn-lux:disabled,.ux-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
  .btn-lux[hidden],.ux-btn[hidden]{display:none}
  /* Principal */
  .btn-lux--ghost,.btn-lux--white,.btn-lux--navy,.ux-btn--pri{
    --b-bg:var(--az-teal);--b-ink:#fff;--b-bd:transparent;--b-bg-h:#0089C2;--b-ink-h:#fff;--b-bd-h:transparent}
  /* Fichiers : --red = enregistrer un PDF, --green = enregistrer un fichier
     Excel / CSV. Teinte du format (rouge PDF, vert tableur) reconnaissable
     d'un coup d'œil ; plein au survol. Réservées à ces deux usages. */
  .btn-lux--red,.btn-lux--green{
    box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 1px 2px rgba(16,24,40,.06);
    transition:background .15s,border-color .15s,color .15s,transform .15s,box-shadow .15s}
  .btn-lux--red{
    --b-bg:linear-gradient(180deg,#FFF5F4 0%,#FDE8E6 100%);--b-ink:#B42318;--b-bd:rgba(217,45,32,.38);
    --b-bg-h:linear-gradient(180deg,#E5372B 0%,#C4281C 100%);--b-ink-h:#fff;--b-bd-h:#B42318}
  .btn-lux--green{
    --b-bg:linear-gradient(180deg,#F1FAF4 0%,#E2F3E8 100%);--b-ink:#0B6B37;--b-bd:rgba(16,124,65,.38);
    --b-bg-h:linear-gradient(180deg,#1A8F50 0%,#0E7038 100%);--b-ink-h:#fff;--b-bd-h:#0B6B37}
  .btn-lux--red:hover:not(:disabled){box-shadow:0 6px 16px -6px rgba(196,40,28,.55)}
  .btn-lux--green:hover:not(:disabled){box-shadow:0 6px 16px -6px rgba(14,112,56,.55)}
  [data-theme="dark"] .app .btn-lux--red{
    --b-bg:rgba(240,68,56,.12);--b-ink:#FDA29B;--b-bd:rgba(240,68,56,.45);box-shadow:none}
  [data-theme="dark"] .app .btn-lux--green{
    --b-bg:rgba(50,213,131,.10);--b-ink:#75E0A7;--b-bd:rgba(50,213,131,.42);box-shadow:none}
  .btn-lux--orange{--b-bg:var(--az-warning);--b-ink:var(--az-slate2);--b-bd:var(--az-slate-2)}
  
  /* Danger */
  .btn-lux--danger,.ux-btn--danger{--b-bg:#C0392B;--b-ink:#fff;--b-bd:transparent;--b-bg-h:#A93226;--b-ink-h:#fff;--b-bd-h:transparent}
  /* Tailles */
  .btn-lux--sm,.ux-btn--sm{min-height:30px;padding:0 11px;font-size:12.5px;border-radius:8px;gap:6px}
  .btn-lux--lg{min-height:44px;padding:0 22px;font-size:15px;border-radius:11px}
  .btn-lux--icon{padding:0;width:36px;height:36px;min-height:36px}
  /* <a> : la règle sombre [data-theme="dark"] .app a colore les liens ; on garde la couleur du rôle. */
  [data-theme="dark"] .app a.btn-lux,[data-theme="dark"] .app a.ux-btn{color:var(--b-ink)}
  [data-theme="dark"] .app a.btn-lux:hover,[data-theme="dark"] .app a.ux-btn:hover{color:var(--b-ink-h)}
  @media (prefers-reduced-motion: reduce){ .btn-lux,.ux-btn{transition:none} }

  /* .cpt-btn supprimé : boutons unifiés sur .btn-lux (voir bloc BOUTONS PREMIUM). */



/* ═══════════════════════════════════════════════════════════════════════
   UTILITAIRES OR MÉTALLIQUE
   ═══════════════════════════════════════════════════════════════════════ */
.btn-gold-metal{
  display:inline-flex;align-items:center;gap:8px;
  padding:11px 24px;font-weight:700;letter-spacing:.04em;
  color:var(--gold-ink);background:var(--grad-gold);
  background-size:180% 180%;background-position:0% 50%;
  border:none;border-radius:6px;cursor:pointer;
  box-shadow:0 2px 10px rgba(180,132,43,.28),inset 0 1px 1px rgba(255,255,255,.55);
  transition:background-position .5s ease,transform .15s,box-shadow .2s;
}
.btn-gold-metal:hover{
  background-position:100% 50%;transform:translateY(-1px);
  box-shadow:0 4px 16px rgba(180,132,43,.38),inset 0 1px 1px rgba(255,255,255,.7);
}
.text-gold-metal{
  background:var(--grad-gold-text);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
}
.badge-gold-metal{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 12px;font-size:.72rem;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;
  color:var(--gold-ink);background:var(--grad-gold);border-radius:999px;
}


/* =========================================================================
   Locagex · thème partagé des espaces app/ locataire/ technicien/
   Palette K (Cobalt Discipline) - Slate + Teal.
   Ce fichier :
     1. Redéfinit les tokens hérités (--c-navy, --c-gold…) sur la palette K
        de sorte que TOUTES les règles existantes de locagex.css basculent
        automatiquement en slate + teal sans modification.
     2. Introduit les composants « ax-* » : sidebar rétractable, topbar,
        cards, boutons d'action, cohérents avec la landing publique.
   À charger APRÈS /css/locagex.css.
   ========================================================================= */

:root{
  /* ---- palette K (source de vérité) ---- */
  --az-slate:#0C1D32;
  --az-slate-2:#0A1729;
  --az-slate-3:#050E1D;
  --az-elev-1:#0F2138;
  --az-elev-2:#132A48;
  --az-white:#FFFBFC;
  --az-white-2:rgba(255,251,252,.88);
  --az-muted:rgba(255,251,252,.62);
  --az-dim:rgba(255,251,252,.42);
  --az-teal:#007AAD;
  --az-teal-2:#4DA9D6;
  --az-teal-soft:rgba(0,122,173,.14);
  --az-teal-glow:rgba(0,122,173,.35);
  --az-gold:#C89238;         /* accent premium ponctuel (item de menu actif) - distinct du teal fonctionnel */
  --az-success:#5DE7A8;
  --az-green:#037240;
  --az-warning:#FFA875;
  --az-danger:#FF7A7A;
  --az-brown: #A52A2A;
  --az-hair:rgba(255,251,252,.08);
  --az-hair-strong:rgba(255,251,252,.18);
  --az-radius:12px;
  --az-radius-lg:18px;

  /* ---- Échelle typo app-only ---- */
  --fs-micro:11px;
  --fs-petit:12px;
  --fs-kpi:clamp(24px, 3.8vw + 12px, 32px);
  --fs-kpi-lg:clamp(20px, 3vw + 10px, 26px);

  /* ---- override des tokens hérités locagex.css ---- */
  --c-navy:#0C1D32;
  --c-navy-deep:#050E1D;
  --c-navy-soft:#0F2138;
  --c-gold:#007AAD;
  --c-gold-soft:#4DA9D6;
  --c-gold-deep:#006491;
  --c-gold-wash:rgba(0,122,173,.10);

  /* ---- Surfaces sémantiques du shell ---- */
  --app-surface:      var(--az-white);
  --app-surface-elev: var(--az-white);
  --app-border:       var(--c-line);
  --app-ink:          var(--az-slate);
  --app-ink-muted:    var(--c-ash);
  --app-card:         #FFFFFF;
  --app-card-hover:   var(--c-cream);
  --app-input-bg:     var(--c-cream);
  --app-input-focus:  var(--az-white);
}

/* =========================================================================
   DARK MODE - bascule via <html data-theme="dark"> (bouton #theme-btn).
   Redéfinit les tokens du shell + surcharges ciblées des surfaces qui
   utilisent des couleurs hardcodées dans les pages (.dv-*, .kpi…).
   ========================================================================= */
[data-theme="dark"]:root{
  /* Tokens sémantiques du shell - les composants ax-* et .dash-v3
     dérivent leurs surfaces de ces variables. */
  --app-surface:      var(--az-slate-2);
  --app-surface-elev: var(--az-slate);
  --app-border:       var(--az-hair-strong);
  --app-ink:          var(--az-white);
  --app-ink-muted:    var(--az-muted);
  --app-card:         var(--az-elev-1);
  --app-card-hover:   var(--az-elev-2);
  --app-input-bg:     var(--az-elev-1);
  --app-input-focus:  var(--az-elev-2);

  /* Tokens sémantiques hérités (landing / connexion) */
  --pg:               var(--az-slate-2);
  --pg-alt:           var(--az-slate);
  --ink:              var(--az-white);
  --ink-soft:         var(--az-white-2);
  --ink-mute:         var(--az-muted);
  --c-line:           var(--az-hair-strong);
  --c-line-soft:      var(--az-hair);
  --c-white:          var(--az-elev-1);
  --c-cream:          var(--az-elev-2);
  --hairline:         var(--az-hair-strong);
  --card-bg:          var(--az-elev-1);
  /* Texte secondaire (.stat .k, .champ label, .sub…) : #3D465D tombait
     à 1.7:1 sur --az-elev-1 ; --az-muted = 6.8:1 (AA). Seul usage non-texte :
     pastille de repli du calendrier (type inconnu), reste visible. */
  --c-slate:          var(--az-muted);
}
/* Fil de messagerie (app, locataire, technicien - messages.php) : fond clair codé en dur, non basculé
   en sombre - on y restaure le slate d'origine pour garder .chat-day lisible. */
[data-theme="dark"] .chat-thread{--c-slate:#3D465D}

/* ---- Shell app : bascule des surfaces vers le sombre ---- */
[data-theme="dark"] .app{background:var(--az-slate-2);color:var(--az-white)}
[data-theme="dark"] .main{background:var(--az-slate-2)}
[data-theme="dark"] .ax-content{color:var(--az-white)}

/* Topbar */
[data-theme="dark"] .ax-top{background:var(--az-slate);border-bottom-color:var(--az-hair-strong)}
[data-theme="dark"] .ax-burger{background:var(--az-elev-1);border-color:var(--az-hair-strong);color:var(--az-white)}
[data-theme="dark"] .ax-burger:hover{background:var(--az-elev-2);border-color:var(--az-teal);color:var(--az-teal-2)}
[data-theme="dark"] .ax-org-av{background:var(--az-teal);color:var(--az-white)}
[data-theme="dark"] .ax-org-txt .n{color:var(--az-white)}
[data-theme="dark"] .ax-org-txt .r{color:var(--az-muted)}
[data-theme="dark"] .ax-search{background:var(--az-elev-1);border-color:var(--az-hair-strong);color:var(--az-muted)}
[data-theme="dark"] .ax-search input{color:var(--az-white)}
[data-theme="dark"] .ax-search input::placeholder{color:var(--az-dim)}
[data-theme="dark"] .ax-icobtn{background:var(--az-elev-1);border-color:var(--az-hair-strong);color:var(--az-white)}
[data-theme="dark"] .ax-icobtn:hover{background:var(--az-elev-2);border-color:var(--az-teal);color:var(--az-teal-2)}

/* Surcharges globales : cartes, tableaux, KPI, badges - pour couvrir
   les composants qui hardcode #fff / rgba(12,29,50,X) dans leurs styles
   inline (dash-v3, chart-card, etc.). */
[data-theme="dark"] .app .carte,
[data-theme="dark"] .app .kpi,
[data-theme="dark"] .app .chart-card,
[data-theme="dark"] .app .panel,
[data-theme="dark"] .app .bloc,
[data-theme="dark"] .app .devcard,
[data-theme="dark"] .app .lease-empty,
[data-theme="dark"] .app .tenant-property,
[data-theme="dark"] .app .tenant-section,
[data-theme="dark"] .app .tenant-details,
[data-theme="dark"] .app .lease-modal__dialog,
[data-theme="dark"] .app .leases-panel,
[data-theme="dark"] .app .fisc-pays{
  background:var(--az-elev-1)!important;
  border-color:var(--az-hair-strong)!important;
  color:var(--az-white);
}
[data-theme="dark"] .app .kpi .val,
[data-theme="dark"] .app .kpi .titre{color:var(--az-white)}
[data-theme="dark"] .app .kpi .lab,
[data-theme="dark"] .app .kpi .meta{color:var(--az-muted)}

/* Table : fond, texte, en-tête, hover */
[data-theme="dark"] .app .table-scroll,
[data-theme="dark"] .app table.liste{background:var(--az-elev-1)}
[data-theme="dark"] .app table.liste th{
  background:var(--az-elev-2)!important;color:var(--az-white-2)!important;
  border-bottom-color:var(--az-hair-strong)
}
[data-theme="dark"] .app table.liste td{color:var(--az-white);border-bottom-color:var(--az-hair)}
[data-theme="dark"] .app table.liste tbody tr td{background:var(--az-elev-1)!important}
[data-theme="dark"] .app table.liste tbody tr:hover td{background:var(--az-teal-soft)!important}

/* Formulaires (inputs / selects) - locagex.css les cible mais avec
   des bruns/beiges (thème historique). On aligne sur la palette K. */
[data-theme="dark"] .app .champ input,
[data-theme="dark"] .app .champ select,
[data-theme="dark"] .app .champ textarea,
[data-theme="dark"] .app .pieces-ed input,
[data-theme="dark"] .app .pieces-ed select,
[data-theme="dark"] .app input[type=text],
[data-theme="dark"] .app input[type=email],
[data-theme="dark"] .app input[type=password],
[data-theme="dark"] .app input[type=number],
[data-theme="dark"] .app input[type=search],
[data-theme="dark"] .app input[type=date],
[data-theme="dark"] .app input[type=datetime-local],
[data-theme="dark"] .app select,
[data-theme="dark"] .app textarea{
  background:var(--az-elev-1)!important;border-color:var(--az-hair-strong)!important;color:var(--az-white)!important;
}
[data-theme="dark"] .app input::placeholder,
[data-theme="dark"] .app textarea::placeholder{color:var(--az-dim)!important}
[data-theme="dark"] .app select option{background:var(--az-slate);color:var(--az-white)}

/* Titres et headings de page - remonte du fond sombre. */
[data-theme="dark"] .app h1,
[data-theme="dark"] .app h2,
[data-theme="dark"] .app h3,
[data-theme="dark"] .app h4,
[data-theme="dark"] .app .pagehead h1,
[data-theme="dark"] .app .pagehead .sub{color:var(--az-white)}
[data-theme="dark"] .app .pagehead .sub{color:var(--az-muted)}

/* Boutons dv-btn (dashboard v2). */
[data-theme="dark"] .app .dv-btn{background:var(--az-elev-1);border-color:var(--az-hair-strong);color:var(--az-white)}
[data-theme="dark"] .app .dv-btn:hover{background:var(--az-elev-2);border-color:var(--az-teal)}
[data-theme="dark"] .app .dv-btn-primary{background:var(--az-teal);color:var(--az-white);border-color:var(--az-teal)}
[data-theme="dark"] .app .dv-btn-primary:hover{background:var(--az-teal-2);border-color:var(--az-teal-2)}
[data-theme="dark"] .app .dv-cal{background:var(--az-elev-1);color:var(--az-white)}

/* Séparateurs / hairlines transverses. */
[data-theme="dark"] .app hr{border-color:var(--az-hair-strong)}

/* Menu dropdown (Actions) - assure lisibilité sur fond sombre. */
[data-theme="dark"] .app .menu-list{background:var(--az-elev-1);border-color:var(--az-hair-strong)}
[data-theme="dark"] .app .menu-item{color:var(--az-white)}
[data-theme="dark"] .app .menu-item:hover{background:var(--az-elev-2);color:var(--az-white)}
[data-theme="dark"] .app .menu-sep{background:var(--az-hair-strong)}
[data-theme="dark"] .app .tbl-menu-btn{border-color:var(--az-hair-strong);color:var(--az-muted)}
[data-theme="dark"] .app .tbl-menu-btn:hover,
[data-theme="dark"] .app .menu.open .tbl-menu-btn{background:var(--az-teal-soft);border-color:var(--az-teal);color:var(--az-teal-2)}

/* =========================================================================
   Sidebar « ax-side » - rétractable + mobile off-canvas
   ========================================================================= */
.app{display:grid;grid-template-columns:280px 1fr;min-height:100vh;background:var(--az-white)}
.app[data-side="collapsed"]{grid-template-columns:76px 1fr}

.ax-side{
  background:var(--az-slate);color:var(--az-white);
  height:100vh;position:sticky;top:0;
  display:flex;flex-direction:column;
  border-right:1px solid var(--az-hair);
  transition:width .28s cubic-bezier(0.16,1,0.3,1);
  overflow:hidden;
  z-index:40;
}

/* Header : logo + toggle */
.ax-brand{
  display:flex;flex-direction:column;align-items:flex-start;gap:8px;
  padding:22px 20px 18px;
  border-bottom:1px solid var(--az-hair);
  position:relative;
}
.ax-brand-logo{
  display:block;flex-shrink:0;max-width:100%;
  transition:opacity .18s ease;
}
.ax-brand-logo img{
  display:block;width:auto;height:30px;max-width:100%;object-fit:contain;
}
.ax-brand-text{min-width:0;width:100%;transition:opacity .18s ease}
.ax-brand-sub{font-size:11.5px;color:var(--az-muted);letter-spacing:0.04em;text-transform:uppercase}

.ax-toggle{
  position:absolute;right:4px;top:34px;
  width:28px;height:28px;border-radius:50%;
  background:var(--az-elev-1);border:1px solid var(--az-hair-strong);
  color:var(--az-white);cursor:pointer;
  display:grid;place-items:center;z-index:5;
  transition:background .15s ease, transform .3s ease;
}
.ax-toggle:hover{background:var(--az-teal);border-color:var(--az-teal)}
.ax-toggle svg{width:14px;height:14px;stroke:currentColor;stroke-width:2;fill:none;transition:transform .3s ease}
.app[data-side="collapsed"] .ax-toggle svg{transform:rotate(180deg)}
.app[data-side="collapsed"] .ax-brand-text{opacity:0;pointer-events:none}
.app[data-side="collapsed"] .ax-brand-logo{opacity:0;pointer-events:none}

/* Groupes de section */
.ax-nav{position:relative;flex:1;overflow-y:auto;padding:16px 12px;display:flex;flex-direction:column;gap:2px;scrollbar-width:thin;scrollbar-color:var(--az-hair-strong) transparent}
.ax-nav::-webkit-scrollbar{width:6px}
.ax-nav::-webkit-scrollbar-thumb{background:var(--az-hair-strong);border-radius:3px}

/* Indicateur flottant : suit la souris entre les items (survol), revient se
   poser sur l'item actif dès que le curseur quitte le menu. Purement visuel,
   ne remplace pas .ax-active qui reste la source de vérité de la sélection. */
.ax-nav-indicator{
  position:absolute;left:12px;right:12px;top:0;height:0;border-radius:10px;z-index:0;
  background:linear-gradient(120deg,rgba(0,122,173,.30),rgba(77,169,214,.08));
  border:1px solid rgba(77,169,214,.35);box-shadow:0 8px 22px -10px var(--az-teal-glow);
  opacity:0;pointer-events:none;
  transition:top .32s cubic-bezier(.16,1,.3,1),height .32s cubic-bezier(.16,1,.3,1),opacity .2s ease;
}
.ax-grp{
  font-size:11px;color:var(--az-dim);letter-spacing:0.14em;text-transform:uppercase;font-weight:500;
  padding:14px 12px 8px;transition:opacity .18s ease;
}
.app[data-side="collapsed"] .ax-grp{opacity:0;height:0;padding:0;overflow:hidden}

/* Nav item : le style clé - icône dans une pastille circulaire qui s'illumine
   sur active (matches maquette de référence) */
.ax-item{
  display:flex;align-items:center;gap:12px;
  padding:8px 10px;border-radius:10px;
  color:var(--az-muted);text-decoration:none;
  transition:background .18s ease, color .18s ease;
  position:relative;z-index:1;
}
.ax-item:hover{background:rgba(255,251,252,.04);color:var(--az-white)}
.ax-item-ic{
  width:36px;height:36px;flex-shrink:0;border-radius:50%;
  background:rgba(255,251,252,.05);color:var(--az-muted);
  display:grid;place-items:center;
  transition:background .22s ease, color .22s ease, transform .22s ease, box-shadow .3s ease;
}
.ax-item-ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7}
.ax-item:hover .ax-item-ic{background:rgba(255,251,252,.10);color:var(--az-white)}

.ax-item-lbl{
  font-size:14px;font-weight:500;letter-spacing:-0.005em;color:inherit;
  flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transition:opacity .18s ease;
}
.app[data-side="collapsed"] .ax-item-lbl{opacity:0;pointer-events:none}

.ax-item-badge{
  font-size:11px;font-weight:600;padding:2px 7px;border-radius:99px;
  background:var(--az-warning);color:var(--az-slate);
  min-width:20px;text-align:center;transition:opacity .18s ease;
}
.ax-item-badge:empty{display:none}
.app[data-side="collapsed"] .ax-item-badge{
  position:absolute;top:6px;right:8px;padding:0;width:8px;height:8px;min-width:0;border-radius:50%;color:transparent;
}

/* Active : pastille icône remplie teal + glow + liseré or/teal + pulse discret */
.ax-item.ax-active{color:var(--az-white)}
.ax-item.ax-active .ax-item-ic{
  background:var(--az-teal);color:var(--az-white);
  box-shadow:0 10px 24px -6px var(--az-teal-glow), 0 0 0 3px rgba(0,122,173,.14);
  transform:scale(1.02);
  animation:axActivePulse 2.6s ease-in-out infinite;
}
.ax-item.ax-active .ax-item-lbl{font-weight:600}
.ax-item.ax-active::before{
  content:"";position:absolute;left:-10px;top:8px;bottom:8px;width:3px;border-radius:3px;
  background:linear-gradient(180deg,var(--az-gold),var(--az-teal-2));
}
@keyframes axActivePulse{
  0%,100%{box-shadow:0 10px 24px -6px var(--az-teal-glow), 0 0 0 3px rgba(0,122,173,.14)}
  50%{box-shadow:0 10px 28px -4px var(--az-teal-glow), 0 0 0 6px rgba(0,122,173,.08)}
}
@media (prefers-reduced-motion: reduce){
  .ax-item.ax-active .ax-item-ic{animation:none}
}

/* Divider */
.ax-div{height:1px;background:var(--az-hair);margin:12px 8px}

/* Bas de sidebar : profil + logout */
.ax-user{
  padding:16px 14px;border-top:1px solid var(--az-hair);
  display:flex;align-items:center;gap:12px;
}
.ax-user-av{
  width:38px;height:38px;flex-shrink:0;border-radius:50%;
  background:linear-gradient(140deg,var(--az-teal),var(--az-teal-2));
  color:var(--az-slate);display:grid;place-items:center;
  font-weight:600;font-size:13px;
}
.ax-user-txt{min-width:0;flex:1;transition:opacity .18s ease}
.ax-user-name{font-size:13.5px;font-weight:500;color:var(--az-white);letter-spacing:-0.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ax-user-role{font-size:11.5px;color:var(--az-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app[data-side="collapsed"] .ax-user-txt{opacity:0;pointer-events:none}
.ax-logout{
  padding:6px;border-radius:8px;color:var(--az-muted);
  display:grid;place-items:center;cursor:pointer;
  transition:background .15s ease, color .15s ease;background:transparent;border:0;
}
.ax-logout:hover{background:rgba(255,122,122,.14);color:var(--az-danger)}
.ax-logout svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7}

/* =========================================================================
   Topbar « ax-top »
   ========================================================================= */
.main{min-width:0;display:flex;flex-direction:column;background:var(--az-white)}
.ax-top{
  height:64px;flex-shrink:0;
  background:var(--az-white);border-bottom:1px solid var(--c-line);
  display:flex;align-items:center;gap:14px;padding:0 24px;
  position:sticky;top:0;z-index:30;
}
.ax-burger{
  display:none;width:38px;height:38px;border-radius:8px;
  border:1px solid var(--c-line);background:var(--az-white);color:var(--az-slate);
  align-items:center;justify-content:center;cursor:pointer;
  transition:background .15s ease, border-color .15s ease;
}
.ax-burger:hover{background:var(--c-cream);border-color:var(--az-slate)}
.ax-burger svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.9}
.ax-org{display:flex;align-items:center;gap:12px}
.ax-org-av{
  width:38px;height:38px;border-radius:50%;
  background:var(--az-slate);
  color:var(--az-white);
  display:grid;place-items:center;font-weight:600;font-size:13px;
}
.ax-org-txt .n{font-size:14px;font-weight:600;color:var(--az-slate);letter-spacing:-0.005em}
.ax-org-txt .r{font-size:12px;color:var(--c-ash);margin-top:2px}
.ax-top .sp{flex:1}
.ax-search{
  display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:99px;
  background:var(--c-cream);border:1px solid var(--c-line);
  min-width:220px;max-width:320px;color:var(--c-ash);
}
.ax-search:focus-within{border-color:var(--az-teal);background:var(--az-white);box-shadow:0 0 0 3px rgba(0,122,173,.12)}
.ax-search svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;flex-shrink:0}
.ax-search input{border:0;background:transparent;outline:none;font:400 13.5px/1 "Geist","Inter",system-ui,sans-serif;color:var(--az-slate);width:100%}
.ax-search input::placeholder{color:var(--c-ash)}

.ax-icobtn{
  width:38px;height:38px;border-radius:8px;border:1px solid var(--c-line);background:var(--az-white);
  color:var(--az-slate);display:grid;place-items:center;cursor:pointer;
  transition:background .15s ease, border-color .15s ease, color .15s ease;
}
.ax-icobtn:hover{background:var(--c-cream);border-color:var(--az-slate);color:var(--az-teal)}
.ax-icobtn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7}
/* Bascule thème : lune en clair, soleil en sombre. */
.ax-theme-btn .i-sun,.ax-theme-btn .i-moon{display:inline-flex;align-items:center;justify-content:center}
.ax-theme-btn .i-sun{display:none}
[data-theme="dark"] .ax-theme-btn .i-moon{display:none}
[data-theme="dark"] .ax-theme-btn .i-sun{display:inline-flex}

/* Contenu de page */
.ax-content{flex:1;padding:24px 32px 60px}
@media(max-width:1100px){.ax-content{padding:20px}}

/* =========================================================================
   Mobile : sidebar off-canvas + scrim
   ========================================================================= */
.ax-scrim{
  position:fixed;inset:0;background:rgba(5,14,29,.55);
  z-index:39;opacity:0;pointer-events:none;
  transition:opacity .25s ease;
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
}
.app.nav-open .ax-scrim{opacity:1;pointer-events:auto}

@media(max-width:900px){
  .app{grid-template-columns:1fr}
  .app[data-side="collapsed"]{grid-template-columns:1fr}
  .ax-side{
    position:fixed;top:0;left:0;bottom:0;width:280px;
    transform:translateX(-100%);
    transition:transform .28s cubic-bezier(0.16,1,0.3,1);
  }
  .app.nav-open .ax-side{transform:translateX(0)}
  .ax-toggle{display:none}
  .ax-burger{display:flex}
  .ax-brand-text,.ax-brand-logo,.ax-item-lbl,.ax-user-txt{opacity:1 !important;pointer-events:auto !important}
}

/* =========================================================================
   Ajustements globaux liés au thème dark → clair du contenu
   ========================================================================= */
body{background:var(--az-white)}

/* =========================================================================
   Chrome v3 - file d'attente en sidebar, recherche globale, menu « Nouveau »
   ========================================================================= */

/* Bloc « file d'attente » épinglé sous la marque. */
.ax-todo{
  display:block;margin:12px;padding:11px 13px;border-radius:12px;text-decoration:none;
  background:linear-gradient(150deg,rgba(0,122,173,.30),rgba(0,122,173,.10));
  border:1px solid rgba(77,169,214,.28);
  transition:border-color .15s ease, transform .15s ease;
}
.ax-todo:hover{border-color:var(--az-teal-2);transform:translateY(-1px)}
.ax-todo-lab{display:block;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--az-muted)}
.ax-todo-row{display:flex;align-items:baseline;gap:8px;margin-top:3px}
.ax-todo-row b{font-family:"Bricolage Grotesque",Georgia,serif;font-size:26px;font-weight:500;color:var(--az-white);line-height:1}
.ax-todo-row span{font-size:11.5px;color:var(--az-white-2)}
.ax-todo-go{
  display:flex;align-items:center;justify-content:center;gap:6px;margin-top:8px;
  font-size:12px;padding:6px;border-radius:8px;background:rgba(255,251,252,.10);color:var(--az-white);
}
.ax-todo-go svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.9}
.app[data-side="collapsed"] .ax-todo{padding:8px 4px;text-align:center}
.app[data-side="collapsed"] .ax-todo-lab,
.app[data-side="collapsed"] .ax-todo-go,
.app[data-side="collapsed"] .ax-todo-row span{display:none}
.app[data-side="collapsed"] .ax-todo-row{justify-content:center}
.app[data-side="collapsed"] .ax-todo-row b{font-size:18px}

/* Déclencheur de recherche globale (la palette est rendue par js/recherche.js). */
button.ax-search{cursor:pointer;text-align:left;flex:1;min-width:200px;max-width:420px;font:inherit}
button.ax-search:hover{border-color:var(--az-slate);background:var(--az-white)}
.ax-search-ph{flex:1;font-size:13.5px;color:var(--c-ash);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ax-search kbd{
  font-family:"Geist","Inter",system-ui,sans-serif;font-size:10.5px;
  border:1px solid var(--c-line);border-radius:5px;padding:2px 5px;color:var(--c-ash);background:var(--az-white);
}
[data-theme="dark"] .ax-search kbd{background:var(--az-elev-2);border-color:var(--az-hair-strong);color:var(--az-muted)}

/* Menu « ＋ Nouveau ». */
.ax-new{position:relative}
.ax-new-btn{
  display:flex;align-items:center;gap:7px;height:38px;padding:0 14px;
  border:1px solid var(--az-teal);
  border-radius:8px;
  /* background:var(--az-slate); */
  color:var(--az-teal);font-size:13px;font-weight:500;cursor:pointer;
  transition:background .15s ease;
}
.ax-new-btn:hover{background:var(--az-teal)}
.ax-new-btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}
[data-theme="dark"] .ax-new-btn{background:var(--az-teal)}
[data-theme="dark"] .ax-new-btn:hover{background:var(--az-teal-2)}
.ax-new-menu{
  display:none;position:absolute;right:0;top:46px;min-width:246px;z-index:60;overflow:hidden;
  background:var(--app-card);border:1px solid var(--c-line);border-radius:12px;
  box-shadow:0 20px 40px -12px rgba(12,29,50,.28);
}
.ax-new-menu.on{display:block}
.ax-new-menu a{
  display:flex;align-items:center;gap:10px;padding:10px 14px;font-size:13.5px;
  color:var(--app-ink);text-decoration:none;border-bottom:1px solid var(--c-line-soft);
}
.ax-new-menu a:last-child{border-bottom:0}
.ax-new-menu a:hover{background:var(--c-gold-wash);color:var(--az-teal)}
.ax-new-menu svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;opacity:.75}

/* Cloche de notifications. */
.ax-bell{position:relative;text-decoration:none}
.ax-bell-dot{display:none;position:absolute;top:7px;right:8px;width:8px;height:8px;border-radius:50%;
  background:var(--c-critique);border:2px solid var(--az-white)}
.ax-bell-dot.on{display:block}
[data-theme="dark"] .ax-bell-dot{border-color:var(--az-elev-1)}

/* =========================================================================
   Palette de recherche ⌘K
   ========================================================================= */
.ax-pal{display:none;position:fixed;inset:0;z-index:80;background:rgba(5,14,29,.55);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.ax-pal.on{display:block}
.ax-pal-box{
  max-width:640px;margin:11vh auto 0;background:var(--app-card);border:1px solid var(--c-line);
  border-radius:16px;box-shadow:0 30px 80px -20px rgba(0,0,0,.45);overflow:hidden;
}
.ax-pal-head{display:flex;align-items:center;gap:11px;padding:14px 16px;border-bottom:1px solid var(--c-line-soft);color:var(--c-ash)}
.ax-pal-head svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;flex-shrink:0}
.ax-pal-head input{
  flex:1;border:0;background:transparent;outline:none;color:var(--app-ink);
  font:400 15px/1.2 "Geist","Inter",system-ui,sans-serif;
}
.ax-pal-head input::placeholder{color:var(--c-ash)}
.ax-pal-head kbd,.ax-pal-foot kbd{
  font-family:"Geist","Inter",system-ui,sans-serif;font-size:10.5px;border:1px solid var(--c-line);
  border-radius:5px;padding:2px 6px;color:var(--c-ash);
}
.ax-pal-list{max-height:52vh;overflow:auto;padding:6px 0}
.ax-pal-grp{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--c-ash);padding:10px 16px 5px}
.ax-pal-item{display:flex;align-items:center;gap:11px;padding:9px 16px;cursor:pointer;color:var(--app-ink)}
.ax-pal-item.on,.ax-pal-item:hover{background:var(--c-gold-wash)}
.ax-pal-ic{width:30px;height:30px;flex:0 0 30px;border-radius:9px;display:grid;place-items:center;
  background:var(--c-cream);color:var(--az-teal)}
[data-theme="dark"] .ax-pal-ic{background:var(--az-elev-2)}
.ax-pal-ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7}
.ax-pal-t{display:flex;flex-direction:column;min-width:0;flex:1}
.ax-pal-t .n{font-size:13.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ax-pal-t .s{font-size:11.5px;color:var(--c-ash);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ax-pal-go{opacity:0;color:var(--az-teal)}
.ax-pal-go svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8}
.ax-pal-item.on .ax-pal-go{opacity:1}
.ax-pal-vide{padding:26px;text-align:center;font-size:13px;color:var(--c-ash)}
.ax-pal-foot{display:flex;gap:16px;padding:9px 16px;border-top:1px solid var(--c-line-soft);
  font-size:11.5px;color:var(--c-ash)}
.ax-pal-foot kbd{margin-right:4px}

/* Bandeau de filtre issu d'un résultat de recherche (?q=). */
.ax-filtre-q{
  display:flex;align-items:center;gap:10px;margin-bottom:16px;padding:9px 14px;border-radius:10px;
  background:var(--c-gold-wash);border:1px solid rgba(0,122,173,.24);font-size:13px;color:var(--app-ink);
}
.ax-filtre-q button{margin-left:auto;border:0;background:transparent;color:var(--c-ash);cursor:pointer;font-size:14px}
.ax-filtre-q button:hover{color:var(--c-critique)}

/* Sous 640px la barre du haut doit tenir sans déborder : boutons compacts,
   gouttières réduites, et bascule d'espace repliée (accessible dans la sidebar). */
@media(max-width:640px){
  .ax-top{gap:5px;padding:0 12px;height:56px}
  .ax-icobtn,.ax-burger,.ax-org-av{width:34px;height:34px}
  .ax-new-btn{height:34px;padding:0 10px}
  button.ax-search{flex:0 0 34px;min-width:34px;width:34px;height:34px}
  #switch-espace{display:none !important}
}

@media(max-width:900px){
  .ax-search-ph,.ax-search kbd{display:none}
  button.ax-search{flex:0 0 38px;min-width:38px;width:38px;padding:8px;justify-content:center;border-radius:8px}
  .ax-new-btn span{display:none}
  .ax-new-btn{padding:0 12px}
  .ax-pal-box{margin:6vh 12px 0}
}

/* =========================================================================
   Espaces locataire & technicien - rafraîchissement v3
   Les deux espaces partagent les composants génériques (.pagehead, .carte,
   table.liste, .badge, .champ). Ce bloc les aligne sur le langage visuel des
   écrans bailleur refondus : surfaces sur jetons applicatifs (donc correctes
   en sombre), rythme resserré, et un comportement mobile propre.
   Scopé par [data-espace] pour ne pas déplacer les écrans bailleur existants.
   ========================================================================= */
[data-espace="locataire"] .ax-content,
[data-espace="technicien"] .ax-content{padding:22px 26px 56px}

/* ---- Titre de page ---- */
[data-espace="locataire"] .pagehead,
[data-espace="technicien"] .pagehead{margin-bottom:18px;align-items:flex-end}
[data-espace="locataire"] .pagehead h1,
[data-espace="technicien"] .pagehead h1{
  font-family:var(--f-titre);font-size:clamp(23px,2.5vw,32px);font-weight:500;
  letter-spacing:-.03em;line-height:1.1;color:var(--app-ink);
}
[data-espace="locataire"] .pagehead .sub,
[data-espace="technicien"] .pagehead .sub{color:var(--app-ink-muted);font-size:13.5px;margin-top:6px;max-width:64ch}
[data-espace="locataire"] .pagehead .actions,
[data-espace="technicien"] .pagehead .actions{display:flex;gap:8px;flex-wrap:wrap}

/* ---- Cartes ---- */
[data-espace="locataire"] .carte,
[data-espace="technicien"] .carte{
  background:var(--app-card);border:1px solid var(--c-line);border-radius:16px;padding:18px 20px;
  box-shadow:0 1px 2px rgba(12,29,50,.04),0 12px 32px -22px rgba(12,29,50,.30);
}
[data-theme="dark"] [data-espace="locataire"] .carte,
[data-theme="dark"] [data-espace="technicien"] .carte{box-shadow:0 1px 2px rgba(0,0,0,.35),0 12px 32px rgba(0,0,0,.35)}
[data-espace="locataire"] .vide,
[data-espace="technicien"] .vide{padding:26px 18px;text-align:center;font-size:13px;color:var(--app-ink-muted)}
[data-espace="locataire"] .sous-titre,
[data-espace="technicien"] .sous-titre{color:var(--app-ink-muted);font-size:13px}

/* ---- Tableaux ---- */
[data-espace="locataire"] .table-scroll,
[data-espace="technicien"] .table-scroll{
  background:var(--app-card);border:1px solid var(--c-line);border-radius:16px;
  box-shadow:0 1px 2px rgba(12,29,50,.04),0 12px 32px -22px rgba(12,29,50,.30);
}
[data-theme="dark"] [data-espace="locataire"] .table-scroll,
[data-theme="dark"] [data-espace="technicien"] .table-scroll{box-shadow:0 1px 2px rgba(0,0,0,.35),0 12px 32px rgba(0,0,0,.35)}
[data-espace="locataire"] table.liste,
[data-espace="technicien"] table.liste{background:transparent;font-size:13px}
[data-espace="locataire"] table.liste th,
[data-espace="technicien"] table.liste th{
  background:var(--app-card-hover);color:var(--app-ink-muted);
  font-size:10.5px;letter-spacing:.08em;font-weight:500;
  padding:9px 16px;border-bottom:1px solid var(--c-line-soft);
}
[data-espace="locataire"] table.liste th:first-child,
[data-espace="technicien"] table.liste th:first-child{padding-left:18px}
[data-espace="locataire"] table.liste th:last-child,
[data-espace="technicien"] table.liste th:last-child{padding-right:18px}
[data-espace="locataire"] table.liste td,
[data-espace="technicien"] table.liste td{
  background:transparent;color:var(--app-ink);
  padding:11px 16px;border-bottom:1px solid var(--c-line-soft);font-size:13px;
}
[data-espace="locataire"] table.liste td:first-child,
[data-espace="technicien"] table.liste td:first-child{padding-left:18px}
[data-espace="locataire"] table.liste td:last-child,
[data-espace="technicien"] table.liste td:last-child{padding-right:18px}
[data-espace="locataire"] table.liste tbody tr:hover td,
[data-espace="technicien"] table.liste tbody tr:hover td{background:var(--app-card-hover)}
[data-espace="locataire"] table.liste .devise,
[data-espace="technicien"] table.liste .devise{color:var(--app-ink-muted)}
[data-espace="locataire"] table.liste .montant,
[data-espace="technicien"] table.liste .montant{font-family:var(--f-titre);letter-spacing:-.01em;text-align:right}

/* ---- Badges : mêmes teintes sémantiques que les écrans bailleur v3 ---- */
[data-espace="locataire"] .badge.ok,[data-espace="technicien"] .badge.ok{background:rgba(15,157,88,.12);color:var(--c-succes)}
[data-espace="locataire"] .badge.warn,[data-espace="technicien"] .badge.warn{background:rgba(245,158,11,.14);color:#B4740B}
[data-espace="locataire"] .badge.crit,[data-espace="technicien"] .badge.crit{background:rgba(220,38,38,.12);color:var(--c-critique)}
[data-espace="locataire"] .badge.neutre,[data-espace="technicien"] .badge.neutre{background:var(--c-line-soft);color:var(--app-ink-muted)}
[data-espace="locataire"] .badge.info,[data-espace="technicien"] .badge.info{background:var(--c-gold-wash);color:var(--az-teal)}
[data-espace="locataire"] .badge,[data-espace="technicien"] .badge,
[data-espace="locataire"] .badge-pill,[data-espace="technicien"] .badge-pill{font-size:11px;padding:3px 9px;font-weight:500}

/* ---- Formulaires ---- */
[data-espace="locataire"] .champ label,
[data-espace="technicien"] .champ label{font-size:11.5px;font-weight:500;color:var(--app-ink-muted);letter-spacing:.02em}
[data-espace="locataire"] .champ input,[data-espace="locataire"] .champ select,[data-espace="locataire"] .champ textarea,
[data-espace="technicien"] .champ input,[data-espace="technicien"] .champ select,[data-espace="technicien"] .champ textarea{
  padding:9px 11px;border-radius:10px;background:var(--app-input-bg);border:1px solid var(--c-line);color:var(--app-ink);
}
[data-espace="locataire"] .champ input:focus,[data-espace="locataire"] .champ select:focus,[data-espace="locataire"] .champ textarea:focus,
[data-espace="technicien"] .champ input:focus,[data-espace="technicien"] .champ select:focus,[data-espace="technicien"] .champ textarea:focus{
  border-color:var(--az-teal);background:var(--app-input-focus);box-shadow:0 0 0 3px rgba(0,122,173,.14);
}

/* ---- Mobile : rien ne doit déborder ---- */
@media(max-width:820px){
  [data-espace="locataire"] .ax-content,
  [data-espace="technicien"] .ax-content{padding:16px 14px 44px}
  [data-espace="locataire"] .grille.k2,[data-espace="locataire"] .grille.k3,[data-espace="locataire"] .grille.k4,
  [data-espace="technicien"] .grille.k2,[data-espace="technicien"] .grille.k3,[data-espace="technicien"] .grille.k4{grid-template-columns:1fr}
  [data-espace="locataire"] .pagehead .actions,
  [data-espace="technicien"] .pagehead .actions{width:100%}
  [data-espace="locataire"] .pagehead .actions > *,
  [data-espace="technicien"] .pagehead .actions > *{flex:1 1 auto;justify-content:center;text-align:center}
  [data-espace="locataire"] .table-scroll,
  [data-espace="technicien"] .table-scroll{overflow-x:auto}
  [data-espace="locataire"] table.liste,
  [data-espace="technicien"] table.liste{min-width:560px}
}

/* Icônes injectées à la place des anciennes balises Font Awesome (voir js/ui.js). */
.ax-ic{display:inline-flex;align-items:center;justify-content:center;line-height:0}
.ax-ic svg{width:1em;height:1em;stroke:currentColor;fill:none;stroke-width:1.8}

/* Remap espace locataire/technicien retiré : .btn-or utilise désormais le
   dégradé teal du TEMPLATE BOUTONS unique dans tous les espaces. */

/* ═══════════════════════════════════════════════════════════════════════
   DARK MODE - pages « Partiel » (index, agence, pannes, messages,
   satisfaction, abonnement) + Layout shell gaps
   --c-navy reste #0C1D32 en sombre (utilisé pour les fonds sidebar) ;
   on le redéfinit localement dans les composants où il ne sert qu'au texte.
   ═══════════════════════════════════════════════════════════════════════ */

/* ---- index.php : calendrier mini + modales ---- */
[data-theme="dark"] .app .cal-mini{background:var(--az-elev-1);border-color:var(--az-hair-strong)}
[data-theme="dark"] .app .cal-mini .cm-day{color:var(--az-white)}
[data-theme="dark"] .app .cal-mini:hover{border-color:var(--az-teal)}

/* ---- pannes.php ---- */
[data-theme="dark"] .app .pi .ph{background:var(--az-elev-2);border-color:var(--az-hair-strong)}
[data-theme="dark"] .app .pi img{border-color:var(--az-hair-strong);background:var(--az-elev-2)}

/* ---- messages.php ---- */
[data-theme="dark"] .app .chat-thread{background:linear-gradient(180deg,var(--az-slate-2),var(--az-slate-3))}
[data-theme="dark"] .app .chat-day{background:rgba(15,33,56,.7);color:var(--az-muted)}
[data-theme="dark"] .app .chat-msg.sent .chat-bubble{background:rgba(0,122,173,.22);color:var(--az-white)}
[data-theme="dark"] .app .chat-msg.recv .chat-bubble{background:var(--az-elev-2);color:var(--az-white)}
[data-theme="dark"] .app .chat-meta{color:var(--az-dim)}
[data-theme="dark"] .app .chat-portee{background:rgba(15,33,56,.6);color:var(--az-muted)}
[data-theme="dark"] .app .chat-from{color:var(--az-teal-2)}
[data-theme="dark"] .app .chat-mini{background:var(--az-teal)}
[data-theme="dark"] .app .chat-mini:hover{background:var(--az-teal-2)}

/* ---- satisfaction.php ---- */
[data-theme="dark"] .app .sat-bien{--c-navy:var(--az-white)}
[data-theme="dark"] .app .avis-item{--c-navy:var(--az-white)}
[data-theme="dark"] .app .avis-texte{background:rgba(0,122,173,.08);border-color:var(--az-hair-strong)}

/* ---- Layout shell : search button hover ---- */
[data-theme="dark"] button.ax-search:hover{background:var(--az-elev-2);border-color:var(--az-teal)}


/* ═══════════════════════════════════════════════════════════════════════
   AUTH SHELL - écrans split-screen (connexion, inscription, mot de passe
   oublié, invitation). Utilisé par app/, locataire/, technicien/.
   100 % tokens de locagex.css - aucun alias local ni hex hardcodé.
   Version claire par défaut, override sombre via [data-theme="dark"].
   ═══════════════════════════════════════════════════════════════════════ */

.auth-page{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh;width:100%;
  background:var(--c-cream);color:var(--ink);font-family:var(--f-corps);-webkit-font-smoothing:antialiased}

/* ─── Colonne visuelle (gauche) : toujours sombre, indépendante du thème.
       On y utilise --az-white (jamais masqué) pour le texte clair. ─── */
.auth-visu{position:sticky;top:0;height:100vh;overflow:hidden;background:var(--c-navy-deep);color:var(--az-white);display:flex;flex-direction:column;justify-content:space-between;padding:40px}
.auth-visu-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.55;transform:scale(1.02);transition:transform 10s ease;filter:saturate(1.15) brightness(.85)}
.auth-visu:hover .auth-visu-img{transform:scale(1.06)}
.auth-visu::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(1000px 600px at 15% 20%, color-mix(in srgb, var(--c-navy) 55%, transparent) 0%, transparent 60%),
    linear-gradient(180deg, color-mix(in srgb, var(--c-navy-deep) 20%, transparent) 0%, color-mix(in srgb, var(--c-navy-deep) 75%, transparent) 100%)}

.auth-visu-header{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between}
.auth-back{display:inline-flex;align-items:center;gap:8px;color:var(--az-white);font-size:13.5px;font-weight:500;padding:9px 18px;border-radius:999px;
  background:color-mix(in srgb, var(--c-navy-deep) 45%, transparent);
  border:1px solid color-mix(in srgb, var(--az-white) 22%, transparent);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  transition:background .25s cubic-bezier(.16,1,.3,1),border-color .25s cubic-bezier(.16,1,.3,1),transform .25s cubic-bezier(.16,1,.3,1)}
.auth-back:hover{background:color-mix(in srgb, var(--c-gold) 25%, transparent);border-color:var(--c-gold);transform:translateX(-3px)}
.auth-back svg{width:15px;height:15px}

.auth-ssl{display:inline-flex;align-items:center;gap:8px;font-size:12px;letter-spacing:.3px;
  color:var(--az-white-2);
  background:color-mix(in srgb, var(--c-navy) 55%, transparent);
  padding:6px 14px;border-radius:999px;
  border:1px solid color-mix(in srgb, var(--az-white) 15%, transparent);
  backdrop-filter:blur(8px)}
.auth-ssl .dot{width:7px;height:7px;border-radius:50%;background:var(--c-succes);box-shadow:0 0 8px var(--c-succes)}

.auth-cite{position:relative;z-index:2;color:var(--az-white);max-width:520px}
.auth-lab{display:inline-flex;align-items:center;gap:10px;font-size:11px;letter-spacing:2.8px;text-transform:uppercase;color:var(--c-gold-soft);font-weight:600;margin-bottom:16px}
.auth-lab::before{content:"";width:24px;height:1.5px;background:var(--c-gold)}
.auth-cite h2{font-family:var(--f-titre);font-weight:400;font-size:clamp(28px,2.8vw,42px);line-height:1.15;letter-spacing:-.5px;color:var(--az-white);margin:0 0 16px}
.auth-cite h2 em{font-style:italic;color:var(--c-gold);font-weight:500}
.auth-cite p{font-size:14.5px;line-height:1.6;color:var(--az-white-2);margin:0 0 24px}

.auth-features{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:20px}
.auth-feat{background:color-mix(in srgb, var(--c-navy-deep) 50%, transparent);border:1px solid color-mix(in srgb, var(--az-white) 12%, transparent);border-radius:10px;padding:12px;backdrop-filter:blur(8px);
  transition:background .2s cubic-bezier(.16,1,.3,1),border-color .2s cubic-bezier(.16,1,.3,1),transform .2s cubic-bezier(.16,1,.3,1)}
.auth-feat:hover{background:color-mix(in srgb, var(--c-navy) 55%, transparent);border-color:color-mix(in srgb, var(--c-gold) 25%, transparent);transform:translateY(-2px)}
.auth-feat svg{width:18px;height:18px;color:var(--c-gold);margin-bottom:6px}
.auth-feat b{display:block;font-size:12px;color:var(--az-white);font-weight:600;line-height:1.3}
.auth-feat span{display:block;font-size:11.5px;color:var(--az-white-2);margin-top:2px;line-height:1.35}

/* ─── Colonne formulaire (droite) : suit le thème via tokens sémantiques ─── */
.auth-form-side{position:relative;display:flex;justify-content:center;padding:44px 40px 60px;background:var(--pg);overflow-y:auto}

.auth-theme-btn{position:absolute;top:24px;right:28px;width:42px;height:42px;border-radius:50%;cursor:pointer;display:grid;place-items:center;
  background:var(--card-bg);color:var(--ink-soft);border:1px solid var(--hairline);
  box-shadow:0 2px 10px color-mix(in srgb, var(--c-black) 5%, transparent);
  transition:color .25s cubic-bezier(.16,1,.3,1),border-color .25s cubic-bezier(.16,1,.3,1),transform .25s cubic-bezier(.16,1,.3,1);
  z-index:10}
.auth-theme-btn:hover{color:var(--c-gold);border-color:color-mix(in srgb, var(--c-gold) 32%, transparent);transform:scale(1.05)}
.auth-theme-btn svg{width:19px;height:19px}
.auth-theme-btn .i-sun{display:none}
[data-theme="dark"] .auth-theme-btn .i-sun{display:block}
[data-theme="dark"] .auth-theme-btn .i-moon{display:none}

.auth-inner{width:100%;max-width:560px;animation:auth-fadeIn .4s ease-out}
@keyframes auth-fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

.auth-brand{display:inline-flex;align-items:center;gap:12px;margin-bottom:28px;text-decoration:none}
.auth-brand .mark{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(135deg,var(--c-gold-deep),var(--c-gold));color:var(--az-white);font-family:var(--f-titre);font-weight:700;font-size:22px;box-shadow:0 6px 18px color-mix(in srgb, var(--c-gold-deep) 28%, transparent)}
.auth-brand .name{font-family:var(--f-titre);font-size:24px;font-weight:600;letter-spacing:.3px;color:var(--ink);line-height:1}
.auth-brand .name b{color:var(--c-gold);font-weight:700}

.auth-eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;letter-spacing:2px;text-transform:uppercase;color:var(--c-gold);font-weight:600;margin-bottom:8px}
.auth-title{font-family:var(--f-titre);font-size:clamp(26px,2.4vw,32px);font-weight:400;letter-spacing:-.4px;color:var(--ink);line-height:1.15;margin:0 0 8px}
.auth-title em{font-style:italic;color:var(--c-gold);font-weight:500}
.auth-desc{color:var(--ink-soft);font-size:14.5px;line-height:1.5;margin:0 0 24px}

/* Info doux (« déjà locataire ? ») */
.auth-note{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;
  background:color-mix(in srgb, var(--c-gold) 8%, transparent);
  border:1px solid color-mix(in srgb, var(--c-gold) 32%, transparent);
  border-radius:12px;color:var(--ink);font-size:13px;line-height:1.45;margin-bottom:22px}
.auth-note svg{width:18px;height:18px;color:var(--c-gold);flex:none;margin-top:1px}
.auth-note b{font-weight:600}

/* Alertes */
.auth-alert{display:none;align-items:flex-start;gap:12px;padding:14px 16px;
  background:color-mix(in srgb, var(--c-critique) 8%, transparent);
  border:1px solid color-mix(in srgb, var(--c-critique) 30%, transparent);
  border-radius:12px;color:var(--c-critique);font-size:13.5px;line-height:1.45;margin-bottom:22px;
  animation:auth-alertSlide .3s ease-out}
.auth-alert.ok{background:color-mix(in srgb, var(--c-succes) 10%, transparent);border-color:color-mix(in srgb, var(--c-succes) 35%, transparent);color:var(--c-succes-dark)}
[data-theme="dark"] .auth-alert.ok{color:var(--c-succes)}
.auth-alert svg{width:18px;height:18px;flex:none;margin-top:1px}
@keyframes auth-alertSlide{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}

/* Sections numérotées */
.auth-section{margin-bottom:0px}
.auth-section-head{display:flex;align-items:center;gap:10px;margin:4px 0 14px}
.auth-step{width:22px;height:22px;border-radius:50%;background:var(--c-gold);color:var(--az-white);font-family:var(--f-titre);font-weight:700;font-size:12px;display:grid;place-items:center;flex:none;
  box-shadow:0 2px 6px color-mix(in srgb, var(--c-gold) 40%, transparent)}
.auth-section-title{font-family:var(--f-titre);font-size:15px;font-weight:600;color:var(--ink);letter-spacing:.1px}
.auth-section-rule{flex:1;height:1px;background:var(--hairline)}

/* Champs */
.auth-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.auth-group{margin-bottom:5px}
.auth-label{display:block;font-size:12.5px;font-weight:600;letter-spacing:.3px;text-transform:uppercase;color:var(--ink-soft);margin-bottom:7px}
.auth-label .opt{font-weight:500;text-transform:none;letter-spacing:0;color:var(--ink-mute);font-size:11.5px;margin-left:4px}

.auth-input-wrap{position:relative;display:flex;align-items:center}
.auth-input-icon{position:absolute;left:15px;color:var(--ink-mute);pointer-events:none;width:18px;height:18px;transition:color .2s ease}

.auth-input,.auth-select{width:100%;height:46px;padding:0 15px 0 44px;background:var(--card-bg);border:1px solid var(--hairline);border-radius:12px;font-family:var(--f-corps);font-size:14.5px;color:var(--ink);
  transition:border-color .2s cubic-bezier(.16,1,.3,1),box-shadow .2s cubic-bezier(.16,1,.3,1);
  -webkit-appearance:none;appearance:none}
.auth-input::placeholder{color:var(--ink-mute)}
.auth-input:focus,.auth-select:focus{outline:none;border-color:var(--c-gold);box-shadow:0 0 0 3px color-mix(in srgb, var(--c-gold) 18%, transparent)}
.auth-input-wrap:focus-within .auth-input-icon{color:var(--c-gold)}

.auth-select{background-image:linear-gradient(45deg,transparent 50%,var(--ink-soft) 50%),linear-gradient(135deg,var(--ink-soft) 50%,transparent 50%);background-position:calc(100% - 20px) 20px,calc(100% - 15px) 20px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:36px}

/* Reveal mot de passe */
.auth-reveal{position:absolute;right:10px;display:grid;place-items:center;width:32px;height:32px;border:0;background:transparent;color:var(--ink-mute);cursor:pointer;border-radius:8px;
  transition:color .2s ease,background .2s ease}
.auth-reveal:hover{color:var(--c-gold);background:color-mix(in srgb, var(--c-gold) 12%, transparent)}
.auth-reveal svg{width:18px;height:18px}
.auth-reveal .off{display:none}
.auth-reveal.on .on{display:none}
.auth-reveal.on .off{display:block}

/* Jauge de force */
.auth-meter{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:8px}
.auth-meter span{height:4px;border-radius:3px;background:var(--hairline);transition:background .25s ease}
.auth-meter[data-level="1"] span:nth-child(-n+1){background:var(--c-critique)}
.auth-meter[data-level="2"] span:nth-child(-n+2){background:var(--c-alerte)}
.auth-meter[data-level="3"] span:nth-child(-n+3){background:var(--c-gold)}
.auth-meter[data-level="4"] span{background:var(--c-succes)}
.auth-meter-label{font-size:12px;color:var(--ink-mute);margin-top:5px;min-height:16px}

/* CGU */
.auth-terms{display:flex;align-items:flex-start;gap:10px;margin:6px 0 18px;font-size:13px;color:var(--ink-soft);line-height:1.5}
.auth-terms input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:1.5px solid var(--hairline);border-radius:5px;background:var(--card-bg);cursor:pointer;flex:none;margin-top:1px;display:grid;place-items:center;
  transition:background .2s cubic-bezier(.16,1,.3,1),border-color .2s cubic-bezier(.16,1,.3,1)}
.auth-terms input[type=checkbox]:checked{background:var(--c-gold);border-color:var(--c-gold)}
.auth-terms input[type=checkbox]:checked::after{content:"";width:10px;height:6px;border-left:2px solid var(--az-white);border-bottom:2px solid var(--az-white);transform:rotate(-45deg) translate(1px,-1px)}
.auth-terms a{color:var(--c-gold);font-weight:500;text-decoration:none}
.auth-terms a:hover{text-decoration:underline}

/* CTA submit */
.auth-submit{width:100%;height:50px;border-radius:12px;border:0;cursor:pointer;
  font-family:var(--f-corps);font-size:15px;font-weight:600;letter-spacing:.2px;
  color:var(--az-white);
  background:linear-gradient(135deg,var(--c-gold),var(--c-gold-deep));
  box-shadow:0 6px 20px color-mix(in srgb, var(--c-gold-deep) 40%, transparent);
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  transition:transform .15s ease,box-shadow .2s ease,opacity .2s ease}
.auth-submit:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 26px color-mix(in srgb, var(--c-gold-deep) 40%, transparent)}
.auth-submit:active:not(:disabled){transform:translateY(0)}
.auth-submit:disabled{opacity:.65;cursor:wait}
.auth-submit svg{width:16px;height:16px}
.auth-spinner{width:16px;height:16px;border:2px solid color-mix(in srgb, var(--az-white) 25%, transparent);border-top-color:var(--az-white);border-radius:50%;animation:auth-spin .7s linear infinite;display:none}
.auth-submit.loading .auth-spinner{display:inline-block}
.auth-submit.loading .auth-label-cta{opacity:.7}
@keyframes auth-spin{to{transform:rotate(360deg)}}

.auth-foot{text-align:center;margin-top:20px;font-size:13.5px;color:var(--ink-soft)}
.auth-foot a{color:var(--c-gold);font-weight:600;text-decoration:none}
.auth-foot a:hover{text-decoration:underline}

.auth-page :focus-visible{outline:2px solid var(--c-gold);outline-offset:2px;border-radius:6px}

/* Responsive */
@media (max-width:980px){
  .auth-page{grid-template-columns:1fr}
  .auth-visu{position:relative;top:auto;height:auto;min-height:260px;padding:24px}
  .auth-cite h2{font-size:clamp(24px,5vw,32px)}
  .auth-cite p,.auth-features{display:none}
  .auth-form-side{padding:32px 20px 48px}
  .auth-theme-btn{top:16px;right:16px}
}
@media (max-width:520px){
  .auth-row{grid-template-columns:1fr;gap:0}
  .auth-visu-header{flex-wrap:wrap;gap:10px}
}
@media (prefers-reduced-motion:reduce){
  .auth-page *,.auth-page *::before,.auth-page *::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}

/* =========================================================================
   UI v2 (ux-*) : socle commun des pages refondues (paiements, baux, états des
   lieux). Même langage que agence / biens / locataires : tokens sémantiques du
   shell (--app-*) donc clair/sombre automatiques, accent unique teal.
   ========================================================================= */
.ux,.ux-mask{--ux-r:16px;--ux-ink:var(--app-ink);--ux-mut:var(--app-ink-muted);--ux-bd:var(--app-border);
  --ux-card:var(--app-card);--ux-acc:var(--az-teal);--ux-wash:var(--az-teal-soft);
  --ux-crit:#B42318;--ux-crit-bg:rgba(192,57,43,.09);--ux-warn:#94580A;--ux-warn-bg:rgba(245,158,11,.14);
  --ux-ok:#0B7C46;--ux-ok-bg:rgba(15,157,88,.11);--ux-brown:#7A3E12;--ux-brown-bg:rgba(139,69,19,.11)}
[data-theme="dark"] .app .ux,[data-theme="dark"] .app .ux-mask{--ux-crit:#FCA5A5;--ux-crit-bg:rgba(255,122,122,.12);
  --ux-warn:var(--az-warning);--ux-warn-bg:rgba(255,168,117,.13);--ux-ok:var(--az-success);--ux-ok-bg:rgba(93,231,168,.12);
  --ux-brown:#E8B48E;--ux-brown-bg:rgba(232,180,142,.13)}
[data-theme="dark"] .app .ux .ux-crumb a,[data-theme="dark"] .app .ux .ux-link{color:inherit}
.ux .num{font-variant-numeric:tabular-nums}

/* Boutons : voir le bloc « BOUTONS - un style par RÔLE » (.ux-btn / .btn-lux / .ux-ico / .act). */
.ux-ico:focus-visible,.act:focus-visible,.ux-row:focus-visible,.ux-chips button:focus-visible,.ux-tabs button:focus-visible{outline:2px solid var(--az-teal);outline-offset:2px}
.ux-acts{display:flex;gap:6px;justify-content:flex-end;align-items:center;flex-wrap:wrap}

/* En-tête de page, fil d'Ariane, sections */
.ux-top{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.ux-top h1{font-family:var(--f-titre);font-size:var(--fs-h1,28px);font-weight:600;margin:0;color:var(--ux-ink);letter-spacing:-.01em;line-height:1.15}
.ux-top .sub{font-size:13.5px;color:var(--ux-mut);margin-top:5px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ux-top .ux-acts{justify-content:flex-start}
.ux-crumb{font-size:13px;color:var(--ux-mut);margin-bottom:12px;display:flex;align-items:center;gap:6px}
.ux-crumb a{color:var(--ux-mut);text-decoration:none}
.ux-crumb a:hover{color:var(--ux-acc)}
.ux-crumb svg{width:14px;height:14px}
.ux-sect{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:26px 0 12px}
.ux-sect h2{font-family:var(--f-titre);font-size:18px;font-weight:600;color:var(--ux-ink);margin:0}
.ux-sect .n{font-size:13px;color:var(--ux-mut)}

/* Synthèse */
.ux-sum{display:grid;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));background:var(--ux-card);border:1px solid var(--ux-bd);
  border-radius:var(--ux-r);margin-bottom:22px;overflow:hidden}
.ux-m{padding:16px 20px;min-width:0;text-align:left;font:inherit;color:inherit;background:transparent;border:0;display:flex;flex-direction:column;align-items:flex-start}
.ux-m+.ux-m{border-left:1px solid var(--ux-bd)}
button.ux-m{cursor:pointer;transition:background .15s}
button.ux-m:hover:not(:disabled){background:var(--app-card-hover)}
button.ux-m:disabled{cursor:default}
button.ux-m:focus-visible{outline:2px solid var(--ux-acc);outline-offset:-2px}
.ux-m .k{font-size:12.5px;color:var(--ux-mut);display:flex;align-items:center;gap:7px}
.ux-m .k svg{width:15px;height:15px;color:var(--ux-acc);flex:none}
.ux-m .v{font-family:var(--f-titre);font-size:24px;font-weight:600;line-height:1.1;margin-top:7px;color:var(--ux-ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ux-m .v.sm{font-size:18px}
.ux-m .v small{font-family:var(--f-corps);font-size:13px;font-weight:500;color:var(--ux-mut);margin-left:3px}
.ux-m.crit .v{color:var(--ux-crit)}
.ux-m.warn .v{color:var(--ux-warn)}
.ux-m .s{font-size:12px;color:var(--ux-mut);margin-top:5px;line-height:1.45}
.ux-m .go{font-size:12px;font-weight:600;color:var(--ux-acc);margin-top:5px}
.ux-bar{align-self:stretch;height:5px;border-radius:99px;background:var(--surface-2);overflow:hidden;margin-top:9px}
.ux-bar i{display:block;height:100%;border-radius:inherit;background:var(--ux-acc);transition:width .5s cubic-bezier(.22,1,.36,1)}
.ux-bar i.warn{background:#E0892E}
.ux-bar i.crit{background:#D64535}
.ux-bar i.ok{background:#0F9D58}

/* Onglets (sections d'une même page) - Design signature Locagex */
.ux-tabs{
  display:flex;
  align-items:flex-end;
  gap:6px;
  border-bottom:1px solid var(--ux-bd);
  margin-bottom:18px;
  padding:4px 4px 0;
  overflow-x:auto;
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
  position:relative;
}
.ux-tabs::-webkit-scrollbar{display:none}

.ux-tabs button{
  position:relative;
  font:inherit;
  font-size:13.5px;
  font-weight:500;
  letter-spacing:-0.01em;
  color:var(--ux-mut);
  background:var(--surface-2);
  border:1px solid var(--ux-bd);
  border-bottom:1px solid var(--ux-bd);
  border-radius:12px 12px 0 0;
  padding:10px 18px;
  margin-bottom:-1px;
  cursor:pointer;
  white-space:nowrap;
  display:inline-flex;
  align-items:center;
  gap:8px;
  user-select:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.55);
  transition:color .2s cubic-bezier(.16,1,.3,1),
             background .2s cubic-bezier(.16,1,.3,1),
             border-color .2s cubic-bezier(.16,1,.3,1),
             transform .2s cubic-bezier(.16,1,.3,1),
             box-shadow .2s cubic-bezier(.16,1,.3,1);
}

.ux-tabs button svg{
  width:16px;
  height:16px;
  stroke:currentColor;
  fill:none;
  stroke-width:1.8;
  flex-shrink:0;
  transition:transform .18s ease;
}

/* Survol interactif distingué (teinte et élévation douce) */
.ux-tabs button:hover:not(.on){
  color:var(--az-teal);
  background:linear-gradient(180deg, rgba(0,122,173,.08) 0%, rgba(0,122,173,.02) 100%);
  border-color:rgba(0,122,173,.35);
  border-bottom-color:var(--ux-bd);
  transform:translateY(-2px);
  box-shadow:0 4px 14px -2px rgba(0,122,173,.14), inset 0 1px 0 rgba(255,255,255,.75);
}
.ux-tabs button:hover:not(.on) svg{transform:scale(1.08)}
.ux-tabs button:hover:not(.on) .c{
  border-color:rgba(0,122,173,.25);
  color:var(--az-teal);
}

/* Onglet actif : dégradé signature cobalt-teal, biseau lumineux et filet d'ancrage */
.ux-tabs button.on{
  color:#FFFFFF !important;
  font-weight:600;
  background:linear-gradient(135deg, #029DDF 0%, #007AAD 52%, #00567E 100%);
  border:1px solid rgba(0,122,173,.75);
  border-bottom-color:transparent;
  transform:translateY(-2px);
  z-index:2;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.45),
    inset 0 -1px 0 rgba(0,0,0,.15),
    0 8px 22px -4px rgba(0,122,173,.45),
    0 2px 6px rgba(12,29,50,.08);
  text-shadow:0 1px 2px rgba(5,14,29,.35);
}
.ux-tabs button.on::after{
  content:"";
  position:absolute;
  bottom:-1px;
  left:0;
  right:0;
  height:3px;
  background:linear-gradient(90deg, #4DA9D6 0%, #C89238 50%, #4DA9D6 100%);
  border-radius:3px 3px 0 0;
  box-shadow:0 -1px 6px rgba(77,169,214,.8);
}

/* Pastilles compteurs */
.ux-tabs .c{
  font-size:11.5px;
  font-weight:600;
  padding:2px 8px;
  border-radius:999px;
  background:var(--app-card);
  color:var(--ux-mut);
  border:1px solid var(--app-border);
  font-variant-numeric:tabular-nums;
  line-height:1.2;
  transition:all .18s ease;
}
.ux-tabs .c.crit{background:var(--ux-crit-bg);color:var(--ux-crit);border-color:transparent}
.ux-tabs .c.warn{background:var(--ux-warn-bg);color:var(--ux-warn);border-color:transparent}

/* Badges sur onglet actif (effet givré / haute lisibilité) */
.ux-tabs button.on .c{
  background:rgba(255,255,255,.22);
  color:#FFFFFF;
  border-color:rgba(255,255,255,.35);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.2);
  text-shadow:none;
}
.ux-tabs button.on .c.crit{
  background:#D92D20;
  color:#FFFFFF;
  border-color:rgba(255,255,255,.45);
  box-shadow:0 2px 8px rgba(217,45,32,.5);
}
.ux-tabs button.on .c.warn{
  background:#F59E0B;
  color:#1C1300;
  font-weight:700;
  border-color:rgba(255,255,255,.5);
  box-shadow:0 2px 8px rgba(245,158,11,.45);
}

/* Thème sombre : adaptation des surfaces et reflets */
[data-theme="dark"] .app .ux-tabs button{
  background:var(--az-elev-1);
  border-color:var(--az-hair-strong);
  color:var(--az-muted);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
}
[data-theme="dark"] .app .ux-tabs button:hover:not(.on){
  background:linear-gradient(180deg, rgba(0,122,173,.22) 0%, rgba(0,122,173,.08) 100%);
  border-color:var(--az-teal);
  color:var(--az-white);
  box-shadow:0 4px 14px -2px rgba(0,122,173,.35), inset 0 1px 0 rgba(255,255,255,.12);
}
[data-theme="dark"] .app .ux-tabs button.on{
  background:linear-gradient(135deg, #029DDF 0%, #007AAD 55%, #004D70 100%);
  border-color:rgba(77,169,214,.5);
  border-bottom-color:transparent;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.35),
    inset 0 -1px 0 rgba(0,0,0,.3),
    0 8px 24px -4px rgba(0,122,173,.65);
}
[data-theme="dark"] .app .ux-tabs .c{
  background:var(--az-elev-2);
  border-color:var(--az-hair-strong);
  color:var(--az-muted);
}

/* Responsive mobile */
@media(max-width:640px){
  .ux-tabs{gap:4px;margin-bottom:14px}
  .ux-tabs button{padding:8px 12px;font-size:12.5px;border-radius:10px 10px 0 0}
}

/* Panneau de l'onglet actif : conteneur teinté, accolé à la barre d'onglets
   (effet intercalaire) pour distinguer d'un coup d'œil ce qui appartient à
   l'onglet. Les listes et cartes blanches ressortent sur ce fond. */
.ux-tabs:has(~ .ux-tabpanel){margin-bottom:0;border-bottom:0;padding-bottom:0}
.ux-tabpanel{
  position:relative;
  background:linear-gradient(180deg, rgba(0,122,173,.085) 0%, rgba(0,122,173,.035) 220px, rgba(0,122,173,.035) 100%);
  border:1px solid rgba(0,122,173,.22);
  border-top:2px solid var(--az-teal);
  border-radius:0 16px 16px 16px;
  padding:16px;
  margin-bottom:22px;
  box-shadow:0 10px 26px -18px rgba(0,86,126,.35);
}
.ux-tabpanel[hidden]{display:none}
.ux-tabpanel > :last-child{margin-bottom:0}
.ux-tabpanel .ux-tools{margin-bottom:14px}
.ux-tabpanel .ux-foot:empty{display:none}
[data-theme="dark"] .app .ux-tabpanel{
  background:linear-gradient(180deg, rgba(2,157,223,.13) 0%, rgba(2,157,223,.05) 220px, rgba(2,157,223,.05) 100%);
  border-color:rgba(77,169,214,.28);
  border-top-color:#029DDF;
  box-shadow:0 10px 26px -16px rgba(0,0,0,.6);
}
@media(max-width:640px){
  .ux-tabpanel{padding:12px 10px;border-radius:0 12px 12px 12px;margin-left:-4px;margin-right:-4px}
}

/* Barre d'outils */
.ux-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.ux-tools[hidden]{display:none}
.ux-search{position:relative;flex:1 1 240px;max-width:340px}
.ux-search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--ux-mut);pointer-events:none}
.ux-search input{width:100%;box-sizing:border-box;border:1px solid var(--ux-bd);border-radius:10px;padding:9px 12px 9px 36px;
  font:inherit;font-size:13.5px;background:var(--ux-card);color:var(--ux-ink)}
.ux-search input::placeholder{color:var(--ux-mut)}
.ux-search input:focus,.ux-sel:focus{outline:none;border-color:var(--ux-acc);box-shadow:0 0 0 3px var(--ux-wash)}
.ux-chips{display:inline-flex;gap:4px;flex-wrap:wrap}
.ux-chips button{font:inherit;font-size:12.5px;font-weight:500;padding:7px 11px;border-radius:999px;border:1px solid var(--ux-bd);
  background:var(--ux-card);color:var(--ux-mut);cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:all .15s}
.ux-chips button:hover{color:var(--ux-ink);border-color:var(--ux-mut)}
.ux-chips button.on{background:var(--ux-ink);border-color:var(--ux-ink);color:var(--ux-card)}
.ux-chips .c{font-size:11px;font-weight:600;opacity:.75;font-variant-numeric:tabular-nums}
.ux-sel{font:inherit;font-size:13px;border:1px solid var(--ux-bd);border-radius:9px;padding:8px 10px;background:var(--ux-card);color:var(--ux-ink);max-width:240px}
.ux-sort{margin-left:auto;display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ux-mut)}

/* Liste en lignes (colonnes définies par --cols sur .ux-list) */
.ux-list{background:var(--ux-card);border:1px solid var(--ux-bd);border-radius:var(--ux-r);overflow:hidden}
/* Listes longues : hauteur plafonnée + défilement interne, en-tête collant (tri toujours visible).
   Réservé aux écrans larges : sur mobile, les cartes s'empilent dans le défilement de la page. */
@media(min-width:761px){
  .ux-list,.ag-list,.lc-list{max-height:min(68vh,720px);overflow-y:auto;scrollbar-width:thin}
  .ux-list > .ux-row.h,.ag-list > .ag-row.h,.lc-list > .lc-row.h{position:sticky;top:0;z-index:2}
}
@media(max-width:760px){.ag-list,.lc-list{overflow:hidden}}
.ux-row{display:grid;grid-template-columns:var(--cols);align-items:center;gap:16px;padding:13px 18px}
.ux-row+.ux-row{border-top:1px solid var(--ux-bd)}
.ux-row.h{padding:10px 18px;font-size:12px;color:var(--ux-mut);background:var(--surface-2)}
.ux-row.h .r{text-align:right}
.ux-row.h .r .ux-th{justify-content:flex-end}
.ux-th{font:inherit;font-size:12px;color:var(--ux-mut);background:none;border:0;padding:2px 0;cursor:pointer;display:inline-flex;align-items:center;gap:5px;text-align:left}
.ux-th svg{width:12px;height:12px;opacity:0;transition:opacity .15s,transform .15s}
.ux-th:hover{color:var(--ux-ink)}
.ux-th:hover svg{opacity:.45}
.ux-th.on{color:var(--ux-ink);font-weight:600}
.ux-th.on svg{opacity:1;color:var(--ux-acc)}
.ux-th.on.asc svg{transform:rotate(180deg)}
.ux-th:focus-visible{outline:2px solid var(--ux-acc);outline-offset:2px;border-radius:4px}
.ux-sort-m{display:none}
.ux-row.clic{cursor:pointer}
.ux-row:not(.h){transition:background .12s}
.ux-row:not(.h):hover{background:var(--app-card-hover)}
.ux-row.dim{opacity:.7}
.ux-cell{min-width:0}
.ux-cell.r{text-align:right}
.ux-cell .lb{display:none;font-size:11.5px;color:var(--ux-mut);margin-bottom:3px}
.ux-cell .a{font-size:13.5px;font-weight:600;color:var(--ux-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ux-cell .b{font-size:12px;color:var(--ux-mut);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ux-cell .b.wrap{white-space:normal}
.ux-cell .nil{color:var(--ux-mut);font-weight:400}
.ux-cell .amt{font-variant-numeric:tabular-nums;white-space:nowrap}
.ux-cell .crit{color:var(--ux-crit)}
.ux-who{display:flex;align-items:center;gap:12px;min-width:0}
.ux-av{flex:none;width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-family:var(--f-titre);font-weight:600;
  font-size:14px;color:var(--ux-acc);background:var(--ux-wash)}
.ux-av svg{width:18px;height:18px}
.ux-av.brown{color:var(--ux-brown);background:var(--ux-brown-bg)}
.ux-pill{display:inline-block;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;white-space:nowrap;line-height:1.4}
.ux-pill.ok{background:var(--ux-ok-bg);color:var(--ux-ok)}
.ux-pill.crit{background:var(--ux-crit-bg);color:var(--ux-crit)}
.ux-pill.warn{background:var(--ux-warn-bg);color:var(--ux-warn)}
.ux-pill.info{background:var(--ux-wash);color:var(--ux-acc)}
.ux-pill.brown{background:var(--ux-brown-bg);color:var(--ux-brown)}
.ux-pill.neutre{background:var(--surface-2);color:var(--ux-mut)}
[data-theme="dark"] .app .ux-pill.info{color:var(--az-teal-2)}
.ux-mini{height:4px;border-radius:99px;background:var(--surface-2);overflow:hidden;margin-top:6px;max-width:130px}
.ux-mini i{display:block;height:100%;background:var(--ux-acc);border-radius:inherit}
.ux-mini i.warn{background:#E0892E}.ux-mini i.ok{background:#0F9D58}.ux-mini i.crit{background:#D64535}

/* Cartes / panneaux, états */
.ux-card{background:var(--ux-card);border:1px solid var(--ux-bd);border-radius:var(--ux-r);padding:18px 20px;margin-bottom:14px}
.ux-card > h2,.ux-card-h h2{font-family:var(--f-titre);font-size:16px;font-weight:600;margin:0;color:var(--ux-ink)}
.ux-card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.ux-card .hint{font-size:12.5px;color:var(--ux-mut);margin:4px 0 12px;line-height:1.5}
.ux-empty{padding:40px 20px;text-align:center}
.ux-empty .ic{width:44px;height:44px;margin:0 auto 12px;border-radius:12px;display:grid;place-items:center;background:var(--ux-wash);color:var(--ux-acc)}
.ux-empty .ic svg{width:22px;height:22px}
.ux-empty b{display:block;font-size:15px;color:var(--ux-ink)}
.ux-empty p{font-size:13px;color:var(--ux-mut);margin:6px auto 14px;max-width:48ch;line-height:1.5}
.ux-empty p:last-child{margin-bottom:0}
.ux-skel{border-radius:8px;height:14px;background:linear-gradient(90deg,var(--surface-2),var(--app-card-hover),var(--surface-2));
  background-size:200% 100%;animation:ux-shim 1.3s ease-in-out infinite}
@keyframes ux-shim{to{background-position:-200% 0}}
.ux-foot{font-size:12px;color:var(--ux-mut);margin-top:10px}
.ux-note{font-size:13px;color:var(--ux-mut);padding:12px 14px;border:1px dashed var(--ux-bd);border-radius:12px;line-height:1.5}
.ux-alert{display:flex;gap:10px;align-items:flex-start;padding:11px 14px;border-radius:11px;font-size:13px;line-height:1.5;margin-bottom:12px}
.ux-alert svg{width:17px;height:17px;flex:none;margin-top:1px}
.ux-alert.err{background:var(--ux-crit-bg);color:var(--ux-crit)}
.ux-alert.info{background:var(--ux-wash);color:var(--ux-ink)}
.ux-alert.warn{background:var(--ux-warn-bg);color:var(--ux-warn)}
.ux-alert[hidden]{display:none}

/* Formulaires */
.ux-fld{margin-bottom:12px;min-width:0}
.ux-fld label{display:block;font-size:12.5px;font-weight:600;color:var(--app-ink);margin-bottom:6px}
.ux-fld .aide{font-size:12px;color:var(--app-ink-muted);margin-top:5px;line-height:1.45}
.ux-fld input,.ux-fld select,.ux-fld textarea{width:100%;box-sizing:border-box;border:1px solid var(--app-border);border-radius:9px;padding:9px 11px;
  font:inherit;font-size:14px;background:var(--app-input-bg);color:var(--app-ink)}
.ux-fld textarea{resize:vertical;line-height:1.5}
.ux-fld input:focus,.ux-fld select:focus,.ux-fld textarea:focus{outline:none;border-color:var(--az-teal);background:var(--app-input-focus);box-shadow:0 0 0 3px var(--az-teal-soft)}
.ux-fld .ro{font-size:14px;color:var(--app-ink);padding:2px 0}
.ux-f2,.ux-f3{display:grid;gap:0 12px}
.ux-f2{grid-template-columns:1fr 1fr}
.ux-f3{grid-template-columns:repeat(3,minmax(0,1fr))}
.ux-fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:0 14px}

/* Fenêtres modales */
.ux-mask{position:fixed;inset:0;z-index:60;overflow-y:auto;padding:6vh 16px;box-sizing:border-box;display:none;
  background:rgba(5,14,29,.58);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.ux-mask.on{display:block}
.ux-dlg{max-width:500px;margin:0 auto;background:var(--app-card);color:var(--app-ink);border:1px solid var(--app-border);border-radius:18px;
  box-shadow:0 30px 80px rgba(5,14,29,.45);animation:uxPop .2s ease}
.ux-dlg--wide{max-width:640px}

@keyframes uxPop{from{transform:translateY(8px) scale(.98);opacity:0}to{transform:none;opacity:1}}
.ux-dlg-h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:22px 24px 4px}
.ux-dlg-h h3{font-family:var(--f-titre);font-size:20px;font-weight:600;margin:0;color:var(--app-ink)}
.ux-dlg-h .sub{font-size:13px;color:var(--app-ink-muted);margin-top:4px;line-height:1.45}
.ux-x{flex:none;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:50%;background:transparent;color:var(--app-ink-muted);cursor:pointer;padding:0}
.ux-x svg{width:16px;height:16px;pointer-events:none}
.ux-x:hover{background:var(--surface-2);color:var(--app-ink)}
.ux-dlg-b{padding:14px 24px 4px}
.ux-dlg-f{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;padding:12px 24px 22px}

@media(max-width:1100px){
  .ux-list .ux-row.h{display:none}
  .ux-list .ux-row{position:relative;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;padding:15px 16px}
  .ux-list .ux-row > .ux-who,.ux-list .ux-row > .full{grid-column:1 / -1}
  .ux-list .ux-row > .ux-acts{grid-column:1 / -1;justify-content:flex-start;border-top:1px dashed var(--ux-bd);padding-top:10px}
  .ux-cell .lb{display:block}
  .ux-cell.r{text-align:left}
  .ux-sort{margin-left:0}
  .ux-sort-m{display:inline-flex}
}
@media(max-width:760px){
  .ux-sum{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ux-m:nth-child(odd){border-left:0}
  .ux-m:nth-child(n+3){border-top:1px solid var(--ux-bd)}
  .ux-search{max-width:none;flex-basis:100%}
}
@media(max-width:560px){
  .ux-top > .ux-acts,.ux-top > .ux-btn{width:100%}
  .ux-top > .ux-acts .ux-btn{flex:1}
  .ux-m{padding:14px 16px}
  .ux-m .v{font-size:20px}
  .ux-f2,.ux-f3{grid-template-columns:1fr}
  .ux-dlg-h,.ux-dlg-b,.ux-dlg-f{padding-left:18px;padding-right:18px}
  .ux-dlg-f .ux-btn{flex:1}
  .ux-ico,.act{width:40px;height:40px}
  .ux-card{padding:16px}
}
@media (prefers-reduced-motion: reduce){
  .ux-skel{animation:none}
  .ux-bar i,.ux-dlg,.ux-btn{transition:none;animation:none}
}

/* =====================================================================
   Pages Paramètres (tous espaces) : sections « titre à gauche, carte à droite »
   alignées sur une même grille, pour que chaque bloc tombe au même endroit.
   ===================================================================== */
.st-sec{display:grid;grid-template-columns:minmax(0,260px) minmax(0,1fr);gap:28px;padding:24px 0;border-top:1px solid var(--ux-bd)}
/* Pas de filet au-dessus de la toute première section (sous le titre de page ou d'onglet). */
.ux-top + .st-sec,.ux-top + div > .st-sec:first-child,[role=tabpanel] > .st-sec:first-child,[role=tabpanel] > form > .st-sec:first-child{border-top:0;padding-top:8px}
.st-sec[hidden]{display:none}
.st-sec-h h2{font-family:var(--f-titre);font-size:15.5px;font-weight:600;color:var(--ux-ink);margin:0 0 6px}
.st-sec-h p{font-size:13px;line-height:1.55;color:var(--ux-mut);margin:0}
.st-sec > .ux-card,.st-sec > form.ux-card,.st-sec > div > .ux-card{margin:0}
.st-body{display:flex;flex-direction:column;gap:14px;min-width:0}
.st-body > .ux-card{margin:0}
.st-foot{display:flex;justify-content:flex-end;align-items:center;gap:12px;flex-wrap:wrap;
  margin:16px -20px -18px;padding:12px 20px;border-top:1px solid var(--ux-bd);background:var(--surface-2);border-radius:0 0 var(--ux-r) var(--ux-r)}
.st-foot .msg{font-size:12.5px;color:var(--ux-mut);margin-right:auto}
.st-sub{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ux-mut);margin:4px 0 12px}
.st-sub:not(:first-child){margin-top:18px;padding-top:16px;border-top:1px dashed var(--ux-bd)}
.st-kv{display:grid;grid-template-columns:minmax(110px,160px) minmax(0,1fr);gap:10px 16px;margin:0;font-size:14px}
.st-kv dt{color:var(--ux-mut)}
.st-kv dd{margin:0;color:var(--ux-ink);overflow-wrap:anywhere}
.st-row{display:flex;align-items:center;justify-content:space-between;gap:16px}
.st-row b{display:block;font-size:14px;color:var(--ux-ink)}
.st-row span{display:block;font-size:13px;color:var(--ux-mut);line-height:1.5;margin-top:3px}
@media(max-width:900px){
  .st-sec{grid-template-columns:1fr;gap:12px;padding:20px 0}
  .ux-f3{grid-template-columns:1fr 1fr}
}
@media(max-width:560px){.ux-f2,.ux-f3,.st-kv{grid-template-columns:1fr}.st-kv dt{margin-top:6px}}

/* Bouton « Aide » du centre d'aide : jaune, même ligne que le titre de la page (posé par Layout::script). */
.lgx-aide-btn{display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 15px 0 12px;border-radius:999px;
  background:#FACC15;color:#3A2E00;font-weight:600;font-size:14px;text-decoration:none;white-space:nowrap;
  box-shadow:0 1px 0 rgba(0,0,0,.08),0 6px 16px -8px rgba(250,204,21,.9);transition:background .15s,transform .15s;margin-left:auto;align-self:center}
.lgx-aide-btn svg{width:18px;height:18px;flex:none}
.lgx-aide-btn:hover{background:#EAB308;color:#2A2100}
.lgx-aide-btn:active{transform:translateY(1px)}
.lgx-aide-btn:focus-visible{outline:3px solid #023047;outline-offset:2px}
[data-theme="dark"] .lgx-aide-btn:focus-visible{outline-color:#FFFBFC}
.ux-acts > .lgx-aide-btn,.bx-acts > .lgx-aide-btn{margin-left:0}
.lgx-aide-btn.seul{margin:10px 0 0}
@media (prefers-reduced-motion:reduce){.lgx-aide-btn{transition:none}}

/* Documents de fin de bail (app/baux.php, modale « Fin de bail ») */
.fb-doc{display:flex;gap:14px;align-items:flex-start;padding:16px;border:1px solid var(--app-border);border-radius:14px;margin-bottom:12px}
.fb-ic{width:38px;height:38px;flex:none;border-radius:10px;background:var(--ux-wash);color:var(--ux-ink);display:grid;place-items:center}
.fb-ic svg{width:18px;height:18px}
.fb-main{flex:1;min-width:0}
.fb-t{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-weight:600;font-size:14.5px;color:var(--app-ink)}
.fb-d{font-size:13px;color:var(--app-ink-muted);margin-top:4px;line-height:1.5}
.fb-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.fb-hist{list-style:none;margin:12px 0 0;padding:0;font-size:12.5px;color:var(--app-ink-muted)}
.fb-hist li{padding:7px 0;border-top:1px solid var(--app-border);line-height:1.45}
