/* ===== FINDOMI PRO — COMPOSANTS (design system §4) =====
   .btn (44px) · .card · .row (56px) · .sheet · .toast · .empty · .skeleton · .stepper
   .sticky-bar · .segmented · .tabbar (4 onglets) · .chip · .badge · .status · .topbar-title · .ico
   Ne redéfinit pas les classes legacy (elles restent dans app.css) mais les surcharge (chargé après). */

/* ---------- Icônes inline ---------- */
.ico{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:0;color:inherit}
.ico svg{width:1em;height:1em;font-size:18px}
.ico-sm svg{font-size:14px}
.ico-back svg{font-size:22px;margin-left:-6px}
.btn .ico,.btn-sm .ico{margin-right:2px}
.btn-ico-only{padding:0 !important;min-width:var(--tap)}
.btn-ico-only .ico svg{font-size:22px}
.btn-ico-only .ico{margin:0}
svg.illus{color:var(--c-primary);display:block}
svg.illus .ac{stroke:var(--c-accent)}

/* ---------- Boutons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  min-height:var(--tap);padding:0 var(--sp-5);
  border:1px solid transparent;border-radius:var(--r-pill);
  font-family:var(--font);font-size:var(--fs-sm);font-weight:600;line-height:1.2;letter-spacing:0;
  cursor:pointer;-webkit-tap-highlight-color:transparent;user-select:none;
  transition:background var(--dur-fast) var(--ease),color var(--dur-fast),border-color var(--dur-fast),box-shadow var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease),opacity var(--dur-fast);
  text-decoration:none;white-space:nowrap;max-width:100%;
}
.btn:active:not(:disabled){transform:scale(.975)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
.btn:focus-visible{box-shadow:var(--focus-ring)}
.btn-primary,.btn-terra{background:var(--c-primary);color:#fff;border-color:var(--c-primary);box-shadow:var(--sh-primary)}
.btn-primary:hover,.btn-terra:hover{background:var(--c-primary-700);border-color:var(--c-primary-700)}
.btn-primary:active,.btn-terra:active{background:var(--c-primary-800);box-shadow:none}
.btn-accent{background:var(--c-accent);color:#fff;border-color:var(--c-accent);box-shadow:0 6px 16px rgba(232,137,26,.24)}
.btn-accent:hover{background:var(--c-accent-600);border-color:var(--c-accent-600)}
.btn-secondary,.btn-outline{background:var(--c-surface);color:var(--c-primary);border-color:var(--c-border-2)}
.btn-secondary:hover,.btn-outline:hover{background:var(--c-primary-50);border-color:var(--c-primary-200)}
.btn-secondary:active,.btn-outline:active{background:var(--c-primary-100)}
.btn-soft{background:var(--c-primary-50);color:var(--c-primary);border-color:transparent}
.btn-soft:hover{background:var(--c-primary-100)}
.btn-danger{background:var(--c-danger);color:#fff;border-color:var(--c-danger)}
.btn-danger:hover{background:var(--c-danger-700)}
.btn-danger-soft{background:var(--c-danger-50);color:var(--c-danger);border-color:var(--c-danger-border)}
.btn-ghost{background:transparent;color:var(--c-text-2);border-color:transparent}
.btn-ghost:hover{background:var(--c-bg-2)}
.btn-dark{background:var(--c-text);color:#fff;border-color:var(--c-text)}
.btn-dark:hover{background:#1E293B}
.btn-block,.btn-lg{width:100%;white-space:normal;text-align:center}
.btn-lg{min-height:52px;font-size:var(--fs-md);padding:var(--sp-2) var(--sp-6);border-radius:var(--r-md)}
.btn-xl{min-height:56px;font-size:var(--fs-md)}
.btn-md{min-height:var(--tap);font-size:var(--fs-sm)}
.btn-sm{min-height:var(--tap);padding:0 var(--sp-4);font-size:var(--fs-meta);font-weight:600;border-radius:var(--r-pill);border:1px solid var(--c-border-2);background:var(--c-surface);color:var(--c-text-2);font-family:var(--font);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);-webkit-tap-highlight-color:transparent;transition:background var(--dur-fast),border-color var(--dur-fast),transform var(--dur-fast) var(--ease);line-height:1.2}
.btn-sm:hover{background:var(--c-bg);border-color:var(--c-border-2)}
.btn-sm:active{transform:scale(.97)}
.btn-terra.btn-sm,.btn-primary.btn-sm{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}
.btn-danger.btn-sm{background:var(--c-danger);color:#fff;border-color:var(--c-danger)}
.btn-outline.btn-sm,.btn-secondary.btn-sm{color:var(--c-primary)}
.btn-icon{min-width:var(--tap);min-height:var(--tap);padding:0 var(--sp-2);border:none;border-radius:var(--r-pill);background:transparent;color:var(--c-text-2);font-size:var(--fs-sm);font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);font-family:var(--font);-webkit-tap-highlight-color:transparent;transition:background var(--dur-fast)}
.btn-icon:hover{background:var(--c-bg-2)}
.btn-icon svg{width:22px;height:22px}
/* Bouton « dashed » (ajout inline) */
.btn-dashed{width:100%;min-height:var(--tap);border-radius:var(--r-md);border:1.5px dashed var(--c-border-2);background:transparent;color:var(--c-text-2);font-size:var(--fs-sm);font-weight:600;font-family:var(--font);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);transition:background var(--dur-fast),border-color var(--dur-fast)}
.btn-dashed:hover{background:var(--c-primary-50);border-color:var(--c-primary-200);color:var(--c-primary)}
/* État occupé (setBtnBusy) */
.btn-busy{opacity:.75;cursor:progress;pointer-events:none}
.btn-spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:spin .65s linear infinite;margin-right:6px;vertical-align:-2px;flex-shrink:0}
.btn-outline .btn-spinner,.btn-secondary .btn-spinner,.btn-ghost .btn-spinner{border-color:var(--c-border-2);border-top-color:var(--c-primary)}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- Cartes ---------- */
.card{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--sp-4);box-shadow:var(--sh-1)}
.card-t{font-size:var(--fs-md);font-weight:700;color:var(--c-text);margin-bottom:var(--sp-2);letter-spacing:-.01em}
.card-s{font-size:var(--fs-sm);color:var(--c-text-2);line-height:var(--lh-body)}
.card-soft{background:var(--c-primary-50);border-color:var(--c-primary-border);box-shadow:none}
.card-accent{border-color:var(--c-accent-border);background:var(--c-accent-50);box-shadow:none}
.card-success{border-color:var(--c-success-border);background:var(--c-success-50);box-shadow:none}
.card-hero{border:1.5px solid var(--c-primary);background:var(--c-surface);box-shadow:var(--sh-2)}

/* ---------- Ligne de liste 56px ---------- */
.row{
  display:flex;align-items:center;gap:var(--sp-3);
  min-height:60px;padding:var(--sp-2) var(--sp-4) var(--sp-2) var(--sp-3);
  background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-md);
  cursor:pointer;-webkit-tap-highlight-color:transparent;text-decoration:none;color:inherit;
  width:100%;text-align:left;font-family:var(--font);box-shadow:var(--sh-1);
  transition:background var(--dur-fast),transform var(--dur-fast) var(--ease),border-color var(--dur-fast);
}
.row:hover{border-color:var(--c-border-2)}
.row:active{background:var(--c-bg);transform:scale(.995)}
.row + .row{margin-top:var(--sp-2)}
.row-ic{width:40px;height:40px;flex-shrink:0;border-radius:var(--r-sm);background:var(--c-primary-50);color:var(--c-primary);display:flex;align-items:center;justify-content:center;font-size:18px;line-height:1}
.row-ic svg{width:20px;height:20px}
.row-ic.warn,.row-ic.accent{background:var(--c-accent-50);color:var(--c-accent-600)}
.row-ic.danger{background:var(--c-danger-50);color:var(--c-danger)}
.row-ic.ok{background:var(--c-success-50);color:var(--c-success)}
.row-ic.muted{background:var(--c-bg-2);color:var(--c-text-2)}
.row-body{display:block;flex:1;min-width:0}
.row-t{display:block;font-size:var(--fs-body);font-weight:600;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.row-s{display:block;font-size:var(--fs-meta);color:var(--c-text-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.row-end{display:flex;align-items:center;gap:var(--sp-2);flex-shrink:0}
.row-chev{color:var(--c-text-3);display:flex;align-items:center;font-size:20px;line-height:1}
.row-chev svg{width:18px;height:18px}
.row-group{display:flex;flex-direction:column;gap:var(--sp-2)}
.row-group .row + .row{margin-top:0}
/* Variante « liste groupée » : lignes collées dans une carte */
.row-list{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh-1)}
.row-list .row{border:none;border-radius:0;border-bottom:1px solid var(--c-border);box-shadow:none}
.row-list .row:last-child{border-bottom:none}
.row-list .row + .row{margin-top:0}
.row-list .row:active{transform:none}

/* ---------- Badges & statuts ---------- */
.badge{display:inline-flex;align-items:center;gap:4px;min-height:22px;padding:2px 9px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;white-space:nowrap;line-height:1.2;letter-spacing:.01em}
.badge .ico svg,.badge svg{width:13px;height:13px;font-size:13px}
.badge::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0;opacity:.85}
.badge:has(> .ico)::before,.badge:has(> svg)::before,.badge-count::before,.badge-plain::before,.badge-muted::before{display:none}
.badge-terra,.badge-primary,.badge-info{background:var(--c-primary-50);color:var(--c-primary);border:1px solid var(--c-primary-border)}
.badge-sage,.badge-success,.badge-ok{background:var(--c-success-50);color:var(--c-success-700);border:1px solid var(--c-success-border)}
.badge-blue,.badge-neutral,.badge-warning,.badge-warn{background:var(--c-warning-50);color:var(--c-warning-700);border:1px solid var(--c-warning-border)}
.badge-accent{background:var(--c-accent-50);color:var(--c-accent-600);border:1px solid var(--c-accent-border)}
.badge-red,.badge-danger{background:var(--c-danger-50);color:var(--c-danger);border:1px solid var(--c-danger-border)}
.badge-muted{background:var(--c-bg-2);color:var(--c-text-2);border:1px solid var(--c-border)}
.badge-count{min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--c-danger);color:#fff;font-size:var(--fs-xs);font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:0}
/* Statuts métier — utilisables via <span class="status status-entree"> */
.status{display:inline-flex;align-items:center;gap:5px;min-height:24px;padding:2px 10px 2px 8px;border-radius:var(--r-pill);font-size:var(--fs-xs);font-weight:700;white-space:nowrap;border:1px solid transparent;line-height:1.2}
.status svg,.status .ico svg{width:14px;height:14px;font-size:14px}
.status-entree{background:var(--c-success-50);color:var(--c-success-700);border-color:var(--c-success-border)}
.status-sortie{background:var(--c-accent-50);color:var(--c-accent-600);border-color:var(--c-accent-border)}
.status-en-cours,.status-progress{background:var(--c-primary-50);color:var(--c-primary);border-color:var(--c-primary-border)}
.status-termine,.status-done{background:var(--c-success-50);color:var(--c-success-700);border-color:var(--c-success-border)}
.status-a-signer,.status-pending{background:var(--c-warning-50);color:var(--c-warning-700);border-color:var(--c-warning-border)}
.status-urgent,.status-danger{background:var(--c-danger-50);color:var(--c-danger);border-color:var(--c-danger-border)}
.status-muted{background:var(--c-bg-2);color:var(--c-text-2);border-color:var(--c-border)}

/* ---------- Chips (sélection, gabarits) ≥ 44px ---------- */
.chip,.tpl-btn,.rchip-on,.rchip-off,.rchip-add,.edl-tpl-row .btn-sm{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:var(--tap);min-width:var(--tap);padding:0 var(--sp-4);
  border-radius:var(--r-pill);font-family:var(--font);font-size:var(--fs-sm);font-weight:600;
  cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.2;
  transition:background var(--dur-fast),border-color var(--dur-fast),color var(--dur-fast),transform var(--dur-fast) var(--ease);
}
.chip:active,.tpl-btn:active,.rchip-on:active,.rchip-off:active{transform:scale(.97)}
.chip,.tpl-btn,.rchip-off,.edl-tpl-row .btn-sm{background:var(--c-surface);color:var(--c-text-2);border:1px solid var(--c-border-2)}
.chip.on,.tpl-btn.on,.rchip-on{background:var(--c-primary);color:#fff;border:1px solid var(--c-primary);box-shadow:var(--sh-1)}
.rchip-off .ico svg,.rchip-on .ico svg{font-size:16px}
.rchip-add{background:transparent;color:var(--c-text-3);border:1px dashed var(--c-border-2)}
.chip-row{display:flex;flex-wrap:wrap;gap:var(--sp-2)}

/* ---------- Segmented (hub bien, profil, filtres) ---------- */
.segmented{display:flex;gap:var(--sp-1);padding:var(--sp-1);background:var(--c-bg-2);border-radius:var(--r-md);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.segmented::-webkit-scrollbar{display:none}
.segmented-btn{flex:1 0 auto;min-height:40px;padding:0 var(--sp-3);border:none;border-radius:var(--r-sm);background:transparent;color:var(--c-text-2);font-family:var(--font);font-size:var(--fs-sm);font-weight:600;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);transition:background var(--dur-fast),color var(--dur-fast),box-shadow var(--dur-fast)}
.segmented-btn.on{background:var(--c-surface);color:var(--c-primary);box-shadow:var(--sh-1)}
.segmented-btn .badge-count{height:18px;min-width:18px;font-size:12px}
/* Segmented « type » (Entrée / Sortie) : cartes avec icône */
.type-cards{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
.type-card{display:flex;flex-direction:column;align-items:center;gap:6px;min-height:96px;padding:var(--sp-3);border-radius:var(--r-md);border:1.5px solid var(--c-border-2);background:var(--c-surface);cursor:pointer;-webkit-tap-highlight-color:transparent;text-align:center;font-family:var(--font);transition:border-color var(--dur-fast),background var(--dur-fast),box-shadow var(--dur-fast)}
.type-card-ic{width:40px;height:40px;border-radius:50%;background:var(--c-bg-2);color:var(--c-text-2);display:flex;align-items:center;justify-content:center}
.type-card-ic svg{width:20px;height:20px}
.type-card-t{font-size:var(--fs-sm);font-weight:700;color:var(--c-text)}
.type-card-s{font-size:var(--fs-xs);color:var(--c-text-3)}
/* edl.js pose des styles inline (border/background/couleur) : on force via !important + aria-pressed */
.type-card{border:1.5px solid var(--c-border-2) !important;background:var(--c-surface) !important}
.type-card .type-card-t{color:var(--c-text) !important}
.type-card.on,.type-card[aria-pressed="true"]{border-color:var(--c-primary) !important;background:var(--c-primary-50) !important;box-shadow:0 0 0 3px rgba(0,53,128,.08)}
.type-card.on .type-card-ic,.type-card[aria-pressed="true"] .type-card-ic{background:var(--c-primary);color:#fff}
.type-card.on .type-card-t,.type-card[aria-pressed="true"] .type-card-t{color:var(--c-primary) !important}
.type-card.type-sortie.on,.type-card.type-sortie[aria-pressed="true"]{border-color:var(--c-accent) !important;background:var(--c-accent-50) !important;box-shadow:0 0 0 3px rgba(232,137,26,.12)}
.type-card.type-sortie.on .type-card-ic,.type-card.type-sortie[aria-pressed="true"] .type-card-ic{background:var(--c-accent)}
.type-card.type-sortie.on .type-card-t,.type-card.type-sortie[aria-pressed="true"] .type-card-t{color:var(--c-accent-600) !important}
.type-card[aria-pressed="false"]{box-shadow:none}

/* ---------- Stepper (pièces ✓/⚠) ---------- */
.stepper{display:flex;gap:var(--sp-2);overflow-x:auto;padding:var(--sp-2) 0;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.stepper::-webkit-scrollbar{display:none}
.stepper-item{display:inline-flex;align-items:center;gap:var(--sp-1);min-height:36px;padding:0 var(--sp-3);border-radius:var(--r-pill);border:1px solid var(--c-border);background:var(--c-surface);color:var(--c-text-2);font-size:var(--fs-xs);font-weight:600;white-space:nowrap;cursor:pointer;font-family:var(--font);flex-shrink:0}
.stepper-item.on{border-color:var(--c-primary);color:var(--c-primary);background:var(--c-primary-50)}
.stepper-item.done{border-color:var(--c-success-border);color:var(--c-success-700);background:var(--c-success-50)}
.stepper-item.warn{border-color:var(--c-warning-border);color:var(--c-warning-700);background:var(--c-warning-50)}
.stepper-dot{width:18px;height:18px;border-radius:50%;background:var(--c-bg-3);color:var(--c-text-2);font-size:12px;font-weight:700;display:inline-flex;align-items:center;justify-content:center}
.stepper-item.on .stepper-dot{background:var(--c-primary);color:#fff}
.stepper-item.done .stepper-dot{background:var(--c-success);color:#fff}
.stepper-item.warn .stepper-dot{background:var(--c-warning);color:#fff}

/* ---------- Progression ---------- */
.progress{height:6px;background:var(--c-bg-3);border-radius:var(--r-pill);overflow:hidden}
.progress-fill{height:100%;background:linear-gradient(90deg,var(--c-primary),var(--c-primary-500));border-radius:var(--r-pill);transition:width .4s var(--ease)}
.progress-fill.accent{background:linear-gradient(90deg,var(--c-accent),#F5A94A)}
.progress-fill.ok{background:var(--c-success)}
.ring{--p:0;--size:52px;width:var(--size);height:var(--size);border-radius:50%;background:conic-gradient(var(--c-primary) calc(var(--p) * 1%),var(--c-bg-3) 0);display:grid;place-items:center;flex-shrink:0}
.ring::before{content:'';width:calc(var(--size) - 10px);height:calc(var(--size) - 10px);border-radius:50%;background:var(--c-surface);grid-area:1/1}
.ring-l{grid-area:1/1;font-size:var(--fs-xs);font-weight:800;color:var(--c-primary);letter-spacing:-.02em}

/* ---------- Barre collante bas d'écran ---------- */
.sticky-bar{
  position:sticky;bottom:0;z-index:40;
  display:flex;gap:var(--sp-2);align-items:stretch;
  padding:var(--sp-3) var(--sp-4) calc(var(--sp-3) + var(--safe-b));
  background:rgba(255,255,255,.94);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--c-border);box-shadow:0 -6px 20px rgba(15,23,42,.05);
}
.sticky-bar .btn{flex:1}
.nav.show ~ .screen .sticky-bar,.screen:not(.no-nav) .sticky-bar{bottom:var(--nbh)}

/* ---------- Tabbar 4 onglets ---------- */
.tabbar,.nav{
  position:fixed;left:0;right:0;bottom:0;z-index:10200;
  height:calc(var(--nbh) + var(--safe-b));
  padding-bottom:var(--safe-b);
  display:none;align-items:stretch;
  background:rgba(255,255,255,.96);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--c-border);
}
.tabbar.show,.nav.show{display:flex}
.tabbar-btn,.nav-btn{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  min-height:var(--nbh);padding:var(--sp-1) 0;border:none;background:transparent;
  color:var(--c-text-3);cursor:pointer;-webkit-tap-highlight-color:transparent;position:relative;
  font-family:var(--font);transition:color var(--dur-fast);
}
.tabbar-btn svg,.nav-btn svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;transition:stroke var(--dur-fast),transform var(--dur) var(--ease)}
.tabbar-btn:active svg,.nav-btn:active svg{transform:scale(.9)}
.tabbar-btn span,.nav-btn span{font-size:12px;font-weight:600;color:inherit;letter-spacing:.01em;white-space:nowrap;line-height:1.2}
.tabbar-btn.on,.nav-btn.on{color:var(--c-primary)}
.tabbar-btn.on span,.nav-btn.on span{font-weight:700}
.tabbar-btn.on::before,.nav-btn.on::before{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:28px;height:3px;border-radius:0 0 3px 3px;background:var(--c-primary)}
.tabbar-badge,.nav-badge{position:absolute;top:8px;left:calc(50% + 6px);min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-pill);background:var(--c-danger);color:#fff;font-size:12px;font-weight:700;display:none;align-items:center;justify-content:center;line-height:1;border:2px solid #fff;box-sizing:content-box}
.tabbar-badge.show,.nav-badge.show{display:inline-flex}
.nav-btn .nav-badge{font-size:12px;letter-spacing:0}

/* ---------- Topbar (blanche, 56px) ---------- */
.topbar-title{flex:1;text-align:center;font-size:var(--fs-md);font-weight:700;color:var(--c-text);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;padding:0 var(--sp-2)}
.topbar .btn-ghost.has-ico{padding-left:var(--sp-1)}
.topbar .btn-ghost .ico-back svg{font-size:24px}

/* ---------- Bottom sheet (UI.sheet / UI.confirm / UI.prompt) ---------- */
.sheet-wrap{position:fixed;inset:0;z-index:10300;display:flex;align-items:flex-end;justify-content:center;background:var(--c-overlay);opacity:0;pointer-events:none;transition:opacity var(--dur) ease;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.sheet-wrap.on{opacity:1;pointer-events:auto}
.sheet{
  width:100%;max-width:520px;max-height:90dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  background:var(--c-surface);border-radius:var(--r-xl) var(--r-xl) 0 0;
  padding:var(--sp-2) var(--sp-4) calc(var(--sp-5) + var(--safe-b));
  box-shadow:var(--sh-3);transform:translateY(32px);transition:transform var(--dur-slow) var(--ease);
}
.sheet-wrap.on .sheet{transform:none}
.sheet-handle{width:36px;height:5px;border-radius:3px;background:var(--c-bg-3);margin:var(--sp-1) auto var(--sp-4)}
.sheet-t{font-size:var(--fs-lg);font-weight:700;color:var(--c-text);margin-bottom:var(--sp-2);line-height:1.3;letter-spacing:-.01em}
.sheet-s{font-size:var(--fs-body);color:var(--c-text-2);line-height:1.55;margin-bottom:var(--sp-4);white-space:pre-line}
.sheet-body{margin-bottom:var(--sp-4)}
.sheet-actions{display:flex;gap:var(--sp-2);margin-top:var(--sp-2)}
.sheet-actions .btn{flex:1;min-height:48px;border-radius:var(--r-md)}
.sheet-actions.stack{flex-direction:column}
.sheet-close{position:absolute;top:var(--sp-3);right:var(--sp-3);width:36px;height:36px;border-radius:50%;border:none;background:var(--c-bg-2);color:var(--c-text-2);font-size:var(--fs-md);cursor:pointer;display:flex;align-items:center;justify-content:center}
.sheet-list .row{border-radius:var(--r-md)}
@media (min-width:640px){
  .sheet-wrap{align-items:center;padding:var(--sp-6)}
  .sheet{border-radius:var(--r-xl);padding-bottom:var(--sp-5);transform:translateY(12px) scale(.98)}
}

/* ---------- Toast ---------- */
.toast,.ux-toast{
  position:fixed;left:50%;bottom:calc(var(--nbh) + var(--safe-b) + var(--sp-4));
  transform:translateX(-50%) translateY(16px);z-index:10400;
  max-width:min(92vw,400px);min-height:48px;padding:var(--sp-3) var(--sp-4) var(--sp-3) 44px;
  background:var(--c-text);color:#fff;border-radius:var(--r-md);
  font-size:var(--fs-sm);font-weight:500;line-height:1.4;text-align:left;
  box-shadow:var(--sh-3);opacity:0;pointer-events:none;transition:opacity var(--dur) ease,transform var(--dur-slow) var(--ease);
  display:flex;align-items:center;border:none;
}
.toast::before,.ux-toast::before{content:'';position:absolute;left:14px;top:50%;width:20px;height:20px;transform:translateY(-50%);background-repeat:no-repeat;background-size:20px 20px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2393C5FD' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E")}
.toast-ok::before,.ux-toast-ok::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2334D399' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E")}
.toast-err::before,.ux-toast-err::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F87171' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='m15 9-6 6'/%3E%3Cpath d='m9 9 6 6'/%3E%3C/svg%3E")}
.toast-warn::before,.ux-toast-warn::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FBBF24' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E")}
.toast.on,.ux-toast.on{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.screen.no-nav ~ .toast,body:has(.screen.active.no-nav) .ux-toast,body:has(.screen.active.no-nav) .toast{bottom:calc(var(--safe-b) + 88px)}

/* ---------- Empty state ---------- */
.empty{text-align:center;padding:var(--sp-8) var(--sp-4) var(--sp-6);background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.empty-ic{font-size:32px;line-height:1;margin:0 auto var(--sp-4);color:var(--c-primary);display:flex;justify-content:center;align-items:center;width:72px;height:72px;border-radius:50%;background:var(--c-primary-50)}
.empty-ic svg{width:34px;height:34px}
.empty-ic svg.illus{width:64px;height:64px}
.empty-ic.illus-wrap{width:auto;height:auto;background:transparent;border-radius:0}
.empty-t{font-size:var(--fs-md);font-weight:700;color:var(--c-text);margin-bottom:var(--sp-1);letter-spacing:-.01em}
.empty-s{font-size:var(--fs-sm);color:var(--c-text-2);line-height:1.5;margin-bottom:var(--sp-4);max-width:300px;margin-left:auto;margin-right:auto}
.empty .btn{display:inline-flex;width:auto;min-width:200px}
.empty-inline{padding:var(--sp-4);font-size:var(--fs-sm);color:var(--c-text-2);text-align:center;background:var(--c-bg-2);border-radius:var(--r-md)}

/* ---------- Skeleton (shimmer) ---------- */
.skeleton{display:flex;flex-direction:column;gap:var(--sp-2)}
.skeleton-row,.skeleton-line,.skeleton-card{position:relative;overflow:hidden;background:var(--c-bg-2);border-radius:var(--r-md)}
.skeleton-row{height:60px}
.skeleton-card{height:120px;border-radius:var(--r-lg)}
.skeleton-line{height:14px;border-radius:6px}
.skeleton-line.w60{width:60%}.skeleton-line.w40{width:40%}
.skeleton-row::after,.skeleton-line::after,.skeleton-card::after{content:'';position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);animation:shimmer 1.4s var(--ease) infinite}
@keyframes shimmer{100%{transform:translateX(100%)}}
@keyframes skel{0%{background-position:100% 0}100%{background-position:0 0}}

/* ---------- Section header ---------- */
.section-h{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin:var(--sp-2) 0 var(--sp-3)}
.section-h-t{font-size:var(--fs-md);font-weight:700;color:var(--c-text);letter-spacing:-.01em;display:flex;align-items:center;gap:var(--sp-2)}
.section-h-t .ico{color:var(--c-primary)}
.section-h-a{font-size:var(--fs-sm);font-weight:600;color:var(--c-primary);background:none;border:none;cursor:pointer;font-family:var(--font);min-height:var(--tap);padding:0 var(--sp-2);display:inline-flex;align-items:center;gap:2px;border-radius:var(--r-sm)}
.section-h-a:hover{background:var(--c-primary-50)}

/* ---------- Page header (titre d'écran dans le flux) ---------- */
.page-h{font-size:var(--fs-xl);font-weight:800;color:var(--c-text);letter-spacing:var(--ls-title);line-height:var(--lh-tight)}
.page-s{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:var(--sp-1);line-height:1.45}
.page-kicker{font-size:var(--fs-xs);font-weight:700;color:var(--c-primary);text-transform:uppercase;letter-spacing:var(--ls-caps);margin-bottom:var(--sp-1)}

/* ---------- Champs : erreur / aide ---------- */
.fhelp{font-size:var(--fs-xs);color:var(--c-text-3);margin-top:6px;line-height:1.4}
.finput.is-invalid,.fselect.is-invalid,.ftextarea.is-invalid,.field-error .finput,.field-error .fselect,.field-error .ftextarea{border-color:var(--c-danger);box-shadow:0 0 0 3px rgba(192,57,43,.12)}
.field-error .flabel{color:var(--c-danger)}
.field-msg{display:flex;align-items:flex-start;gap:6px;font-size:var(--fs-xs);color:var(--c-danger);margin-top:6px;line-height:1.4}
.ferr.on,.ferr:not(:empty){display:flex;align-items:center;gap:8px}
.finput-search{padding-left:42px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:14px center;background-size:18px 18px;border-radius:var(--r-pill)}
input[type="search"].finput{padding-left:42px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:14px center;background-size:18px 18px;border-radius:var(--r-pill)}
input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}

/* ---------- Signature ---------- */
.sig-wrap{position:relative;border-radius:var(--r-md);border:1.5px dashed var(--c-border-2);background:var(--c-surface-2);overflow:hidden}
.sig-wrap canvas{width:100%;display:block;background:transparent;touch-action:none;cursor:crosshair;position:relative;z-index:1}
.sig-hint{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--c-text-3);font-size:var(--fs-sm);font-weight:600;pointer-events:none;z-index:0;user-select:none}
.sig-hint svg{width:26px;height:26px;opacity:.8}
.sig-hint::after{content:'';position:absolute;left:12%;right:12%;bottom:26%;height:1px;background:var(--c-border-2)}
.sig-wrap.signed{border-style:solid;border-color:var(--c-success-border);background:var(--c-surface)}
.sig-wrap.signed .sig-hint{display:none}
.sig-row{display:flex;justify-content:space-between;align-items:center;margin:var(--sp-3) 0 var(--sp-2)}
.sig-row-t{font-size:var(--fs-sm);font-weight:700;color:var(--c-text)}
.sig-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-2)}
.sig-actions .fhelp{margin:0;flex:1}

/* ---------- Photo grid & chips de statut ---------- */
.photo-chip{position:absolute;left:6px;bottom:6px;display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:var(--r-pill);font-size:12px;font-weight:700;background:rgba(255,255,255,.94);color:var(--c-text-2);line-height:1.3;box-shadow:var(--sh-1)}
.photo-chip.ok{color:var(--c-success-700)}
.photo-chip.warn{background:var(--c-danger);color:#fff}
.photo-chip.pending{color:var(--c-primary)}

/* ---------- Divers ---------- */
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;font-size:var(--fs-sm)}
.kv dt{color:var(--c-text-3);font-weight:600}
.kv dd{margin:0;color:var(--c-text)}
.divider{height:1px;background:var(--c-border);margin:var(--sp-3) 0}
.muted{color:var(--c-text-2)}
.text-xs{font-size:var(--fs-xs)}
.text-meta{font-size:var(--fs-meta);color:var(--c-text-2)}
.caps{font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:var(--ls-caps);color:var(--c-text-3)}
.avatar{width:40px;height:40px;border-radius:50%;background:var(--c-primary-50);color:var(--c-primary);font-weight:700;font-size:var(--fs-sm);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid var(--c-primary-border)}
