
:root{
  color-scheme:light;
  --paper:#e6eaee;
  --panel:#fdfdfc;
  --panel-alt:#f2f5f7;
  --panel-hover:#ffffff;
  --field-bg:#ffffff;
  --ink:#16202b;
  --ink-soft:#5c6a78;
  --ink-faint:#687582;   /* Lot 1.85.0 : 4,6:1 sur une carte (#8e9aa6 = 2,8:1) ; 3,9:1 sur le fond de page, réservé aux petits textes secondaires */
  --rule:#c6ced6;
  --rule-strong:#9fabb6;
  --rule-soft:#e4e9ed;
  --chrome:#16202b;
  --chip-overlay:#ffffffcc;
  --logo-1:#3fa8ff; --logo-2:#2f6bed; --logo-3:#1a3f9e;
  --action:#2f6bed;
  --action-ink:#ffffff;
  --action-bg:#eaf0fd;
  --danger:#b23a3a;
  --ok:#2f7a4f;
  --weekend:#dde3e8;
  --weekend-soft:#f2f5f8;
  --warn-bg:#fdf6e3; --warn-border:#e0c87a; --warn-ink:#7a5e0e;
  --ok-bg:#eef7f1; --ok-border:#a8ceb8;
  --danger-bg:#fbefef; --danger-border:#e2b4b4;
  --info-bg:#eef6f9; --info-border:#b4cbd5; --info-ink:#12354a;
  --purple:#6d4fc4; --purple-bg:#f1edfa; --purple-border:#cdbdec;
  --radius-sm:6px;
  --radius:8px;
  --radius-lg:14px;
  /* Échelle d'ombre reprise du login (déjà `0 12px 32px -12px #16202b33`, seul endroit avec de la
     profondeur avant cette refonte) plutôt qu'inventée — même langage visuel partout (refonte
     visuelle demandée par l'utilisateur, LOT 1). */
  --shadow-sm:0 1px 2px #16202b12,0 1px 1px #16202b0a;
  --shadow-md:0 8px 20px -10px #16202b2e,0 2px 6px -2px #16202b17;
  --shadow-lg:0 20px 44px -16px #16202b40,0 6px 16px -6px #16202b1f;
  --gutter:clamp(12px,3vw,28px);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --paper:#11161b;
    --panel:#1a2129;
    --panel-alt:#212a33;
    --panel-hover:#2a343e;
    --field-bg:#222c35;
    --ink:#e7ecf1;
    --ink-soft:#a3b0bb;
    --ink-faint:#7c8b98;
    --rule:#2c3742;
    --rule-strong:#3d4b58;
    --rule-soft:#28323c;
    --chip-overlay:#0d131866;
    --logo-1:#6bbcff; --logo-2:#4f8dff; --logo-3:#3560c9;
    --action:#5c93ff;
    --action-ink:#0a1428;
    --action-bg:#1c2c4a;
    --danger:#e08585;
    --ok:#6bc794;
    --weekend:#232d37;
    --weekend-soft:#1e2730;
    --warn-bg:#3a3220; --warn-border:#6b5a2c; --warn-ink:#e8c876;
    --ok-bg:#1c332a; --ok-border:#3c6853;
    --danger-bg:#3a2323; --danger-border:#6b3c3c;
    --info-bg:#1c2e38; --info-border:#375267; --info-ink:#bcdcea;
    --purple:#a78bde; --purple-bg:#2a2340; --purple-border:#4a3d70;
    --shadow-sm:0 1px 2px #00000030,0 1px 1px #00000020;
    --shadow-md:0 8px 20px -10px #00000055,0 2px 6px -2px #00000040;
    --shadow-lg:0 20px 44px -16px #00000070,0 6px 16px -6px #00000055;
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --paper:#11161b;
  --panel:#1a2129;
  --panel-alt:#212a33;
  --panel-hover:#2a343e;
  --field-bg:#222c35;
  --ink:#e7ecf1;
  --ink-soft:#a3b0bb;
  --ink-faint:#7c8b98;
  --rule:#2c3742;
  --rule-strong:#3d4b58;
  --rule-soft:#28323c;
  --chip-overlay:#0d131866;
  --logo-1:#6bbcff; --logo-2:#4f8dff; --logo-3:#3560c9;
  --action:#5c93ff;
  --action-ink:#0a1428;
  --action-bg:#1c2c4a;
  --danger:#e08585;
  --ok:#6bc794;
  --weekend:#232d37;
  --weekend-soft:#1e2730;
  --warn-bg:#3a3220; --warn-border:#6b5a2c; --warn-ink:#e8c876;
  --ok-bg:#1c332a; --ok-border:#3c6853;
  --danger-bg:#3a2323; --danger-border:#6b3c3c;
  --info-bg:#1c2e38; --info-border:#375267; --info-ink:#bcdcea;
  --purple:#a78bde; --purple-bg:#2a2340; --purple-border:#4a3d70;
  --shadow-sm:0 1px 2px #00000030,0 1px 1px #00000020;
  --shadow-md:0 8px 20px -10px #00000055,0 2px 6px -2px #00000040;
  --shadow-lg:0 20px 44px -16px #00000070,0 6px 16px -6px #00000055;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  font-size:15px;
  line-height:1.45;
  -webkit-text-size-adjust:100%;
  padding-bottom:env(safe-area-inset-bottom);
}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--action);outline-offset:2px}

/* ---------- barre supérieure ---------- */
.topbar{
  background:var(--chrome);
  color:#eef2f5;
  padding:10px var(--gutter);
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  position:sticky;top:0;z-index:30;
}
.brand{display:flex;align-items:center;gap:9px;font-weight:700;letter-spacing:-.01em;font-size:17px;margin-right:auto}
.brand-home{display:flex;align-items:center;gap:9px;background:none;border:none;padding:2px 4px;margin:-2px -4px;border-radius:var(--radius);font:inherit;font-weight:700;letter-spacing:-.01em;color:inherit;cursor:pointer}
.brand-home:hover{background:var(--panel-alt)}
.brand-logo{border-radius:7px;flex:0 0 auto}
.brand span{color:#93a4b2;font-weight:400}
.topbar-msg{
  position:relative;background:transparent;border:1px solid #3c4b59;color:#dbe3ea;
  width:32px;height:32px;border-radius:var(--radius);font-size:15px;line-height:1;
  display:grid;place-items:center;margin-left:6px;cursor:pointer;
}
.topbar-msg:hover{background:#243140;border-color:#5a6b7a}
.topbar-msg.active{background:var(--action);border-color:var(--action)}
.topbar-msg .tab-dot{position:absolute;top:2px;right:2px;margin-left:0}
/* display:grid ne doit jamais annuler l'attribut hidden appliqué selon le rôle. */
.topbar-msg[hidden],.topbar-notif[hidden]{display:none}
.tbtn{
  background:transparent;border:1px solid #3c4b59;color:#dbe3ea;
  padding:6px 11px;border-radius:var(--radius);font-size:13.5px;
}
.tbtn:hover{background:#243140;border-color:#5a6b7a}
.theme-toggle{
  background:transparent;border:1px solid #3c4b59;color:#dbe3ea;
  width:32px;height:32px;border-radius:var(--radius);font-size:15px;line-height:1;
  display:grid;place-items:center;
}
.theme-toggle:hover{background:#243140;border-color:#5a6b7a}
.tools-toggle{
  display:grid;place-items:center;width:32px;height:32px;border-radius:var(--radius);
  background:transparent;border:1px solid #3c4b59;color:#dbe3ea;font-size:17px;line-height:1;cursor:pointer;
}
.tools-toggle:hover{background:#243140;border-color:#5a6b7a}
.topbar-notif{
  position:relative;display:grid;place-items:center;width:32px;height:32px;border-radius:var(--radius);
  background:transparent;border:1px solid #3c4b59;color:#dbe3ea;cursor:pointer;margin-left:6px;
}
.topbar-notif:hover{background:#243140;border-color:#5a6b7a}
.topbar-notif[aria-expanded="true"]{background:#243140;border-color:#5a6b7a}
.notif-badge{position:absolute;top:-4px;right:-4px;background:var(--danger);color:#fff;font-size:10px;font-weight:700;min-width:16px;height:16px;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 3px;line-height:1;font-variant-numeric:tabular-nums;border:2px solid var(--chrome)}
.notif-panel{
  position:absolute;top:calc(100% + 8px);right:var(--gutter);min-width:280px;max-width:calc(100vw - 2 * var(--gutter));z-index:60;
  background:var(--panel);color:var(--ink);border:1px solid var(--rule-strong);border-radius:12px;
  box-shadow:0 14px 34px rgba(0,0,0,.22);overflow:hidden;max-height:min(420px,70vh);display:flex;flex-direction:column;
}
/* display:flex ci-dessus a une spécificité égale à la règle [hidden] du navigateur (0,1,0 chacune)
   — sans cette règle explicite, la nôtre gagnerait la cascade et l'attribut hidden n'aurait plus
   aucun effet visuel (bug constaté en test : le panneau restait affiché malgré hidden=true). */
.notif-panel[hidden]{display:none}
.notif-panel-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--rule-soft);font-weight:600;font-size:13.5px}
.notif-panel-body{overflow-y:auto}
.notif-item{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;background:none;border:none;border-bottom:1px solid var(--rule-soft);padding:10px 14px;font:inherit;color:inherit;cursor:pointer}
.notif-item:last-child{border-bottom:none}
.notif-item:hover{background:var(--panel-alt)}
.notif-item svg{color:var(--action);margin-top:1px;flex:0 0 auto}
.notif-item-copy{flex:1;min-width:0}
.notif-item-copy p{margin:0;font-size:13.5px;line-height:1.35}
.notif-item-copy small{color:var(--ink-faint);font-size:11.5px}
.topbar-actions{
  display:none;flex-direction:column;align-items:stretch;gap:2px;
  position:absolute;top:calc(100% + 6px);right:var(--gutter);
  background:var(--chrome);border:1px solid #3c4b59;border-radius:10px;
  padding:8px;min-width:230px;max-width:calc(100vw - 2 * var(--gutter));box-shadow:0 10px 28px rgba(0,0,0,.3);z-index:50;
}
.topbar-actions.open{display:flex}
.topbar-actions .tbtn{width:100%;text-align:left}
.topbar-actions .theme-toggle{width:100%;height:auto;justify-content:flex-start;display:flex;align-items:center;gap:8px;padding:8px 11px;border-radius:6px}
.account-trigger{
  display:flex;align-items:center;gap:8px;background:transparent;border:1px solid transparent;
  padding:4px 8px 4px 4px;border-radius:999px;cursor:pointer;color:inherit;
  transition:background .15s,border-color .15s;
}
.account-trigger:hover{background:#243140;border-color:#3c4b59}
.account-trigger[aria-expanded="true"]{background:#243140;border-color:#5a6b7a}
.avatar-circle{
  width:28px;height:28px;border-radius:50%;background:var(--action);color:#fff;
  display:grid;place-items:center;font-size:12px;font-weight:700;letter-spacing:.02em;flex:0 0 auto;
}
.avatar-circle-lg{width:38px;height:38px;font-size:14px}
.hr-header{
  display:flex;align-items:center;gap:14px;margin:-14px -18px 14px;padding:16px 18px;
  background:var(--panel-alt);border-bottom:1px solid var(--rule);
}
.hr-header-avatar{width:56px;height:56px;font-size:19px}
.hr-header-info{min-width:0}
.hr-header-info b{display:block;font-size:15.5px}
.hr-header-info .muted{margin:2px 0 0}
.hr-photo-edit{display:flex;gap:6px;margin-top:8px}
.hr-section-label{
  font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-faint);margin:18px 0 9px;
}
.hr-section-label:first-of-type{margin-top:0}
.personnel-avatar{width:34px;height:34px;font-size:13px;margin-top:1px}
.account-caret{font-size:10px;color:#93a4b2;transition:transform .15s}
.account-trigger[aria-expanded="true"] .account-caret{transform:rotate(180deg)}
.account-panel{
  position:absolute;top:calc(100% + 8px);right:var(--gutter);min-width:240px;
  max-width:calc(100vw - 2 * var(--gutter));z-index:60;
  background:var(--panel);color:var(--ink);border:1px solid var(--rule-strong);border-radius:12px;
  box-shadow:0 14px 34px rgba(0,0,0,.22);overflow:hidden;
  animation:account-panel-in .14s ease-out;
}
@keyframes account-panel-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.account-panel-head{display:flex;align-items:center;gap:11px;padding:14px 16px;border-bottom:1px solid var(--rule-soft)}
.account-panel-head b{display:block;font-size:14px;font-weight:600}
.account-role-label{font-size:12px;color:var(--ink-soft)}
.account-panel-items{padding:6px}
.account-item{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  padding:9px 10px;border-radius:8px;background:none;border:none;color:var(--ink);
  font-size:13.5px;cursor:pointer;transition:background .12s;
}
.account-item:hover{background:var(--panel-alt)}
.account-item .ai-icon{width:18px;text-align:center;font-size:15px}
.account-item-danger{color:var(--danger)}
.account-item-danger:hover{background:var(--danger-bg)}

/* ---------- navigation semaine ---------- */
.weekbar{
  display:flex;align-items:center;gap:12px;
  padding:14px var(--gutter) 10px;
  flex-wrap:wrap;
}
.nav{display:flex;align-items:center;gap:4px}
.nav button{
  width:34px;height:34px;border:1px solid var(--rule-strong);background:var(--panel);
  border-radius:var(--radius);font-size:17px;line-height:1;color:var(--ink);
}
.nav button:hover{background:var(--panel-hover);border-color:var(--ink-soft)}
.weeklabel{display:flex;flex-direction:column;line-height:1.2}
.weeknum{font-size:12.5px;color:var(--ink-soft)}
.weekrange{font-weight:600;font-size:18px;letter-spacing:-.01em}
.today-btn{
  background:var(--panel);border:1px solid var(--rule-strong);
  padding:7px 13px;border-radius:var(--radius);font-size:13.5px;
}
.today-btn:hover{background:var(--panel-hover)}
.weekbar-more{display:none;width:34px;height:34px;place-items:center;border:1px solid var(--rule-strong);background:var(--panel);border-radius:var(--radius);color:var(--ink)}
.weekbar-more:hover{background:var(--panel-hover)}
/* Boutons d'action de la barre de période : icône et texte sur une ligne (le .icon global est en
   display:block), même hauteur que les boutons de navigation voisins. */
@media(min-width:761px){
  .weekbar .mini:not(.weekbar-more){display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;font-size:13.5px}
}

/* ---------- grille planning ---------- */
.board-wrap{padding:0 var(--gutter) 20px}
.board{
  background:var(--panel);
  border:1px solid var(--rule-strong);
  border-radius:var(--radius);
  overflow:hidden;
}
.grid{display:grid;grid-template-columns:132px repeat(7,minmax(0,1fr))}
.gh{
  background:var(--panel-alt);border-bottom:1px solid var(--rule-strong);
  border-left:1px solid var(--rule);
  padding:8px 6px;text-align:center;
}
.gh:first-child{border-left:none}
.gh.we{background:var(--weekend)}
.gh-day{font-size:12.5px;color:var(--ink-soft);font-weight:500}
.gh-num{font-size:19px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.gh.now .gh-num{color:var(--action)}
.gh.now{box-shadow:inset 0 -3px 0 var(--action)}

.rowname{
  border-left:none;border-top:1px solid var(--rule);
  padding:9px 10px;display:flex;align-items:center;gap:8px;
  background:var(--panel-alt);min-height:62px;
}
.dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
.rowname>span:last-child{overflow:hidden}
.rowname b{display:block;font-weight:600;font-size:14px;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rowname small{display:block;font-size:11.5px;color:var(--ink-faint);font-variant-numeric:tabular-nums}
.cell{
  border-left:1px solid var(--rule);border-top:1px solid var(--rule);
  min-height:62px;padding:4px;display:flex;flex-direction:column;gap:3px;
  position:relative;background:transparent;text-align:left;width:100%;
}
.cell[data-cell]{cursor:pointer}
.cell.we{background:var(--weekend-soft)}
.cell[data-cell]:hover{background:var(--panel-alt)}
.cell.off{
  background-image:repeating-linear-gradient(45deg,transparent,transparent 5px,var(--rule-strong) 5px,var(--rule-strong) 6px);
}
.cell.off:hover{background-color:var(--panel-alt)}
.chip{
  border-radius:var(--radius-sm);padding:3px 6px;color:#fff;font-size:12px;font-weight:600;
  line-height:1.25;text-align:left;border:none;width:100%;
  font-variant-numeric:tabular-nums;box-shadow:var(--shadow-sm);
}
.chip small{display:block;font-weight:400;font-size:11px;opacity:.9}
.chip-adj{display:inline-block;margin-left:3px;padding:0 3px;border-radius:4px;font-size:10px;font-weight:700;line-height:1.3;border:1px solid currentColor;vertical-align:1px}
.chip:hover{filter:brightness(1.08);box-shadow:var(--shadow-md)}
.chip-wrap{position:relative;display:block;width:100%}
.chip-del{
  position:absolute;top:-6px;right:-6px;width:16px;height:16px;border-radius:50%;
  background:var(--danger);color:#fff;border:1px solid var(--panel);font-size:11px;line-height:1;
  padding:0;display:flex;align-items:center;justify-content:center;z-index:2;cursor:pointer;
}
.chip-del:hover{filter:brightness(1.1)}
/* La croix de suppression n'apparaît qu'au survol/focus du créneau (moins de bruit visuel, moins de
   suppressions accidentelles) ; sur écran tactile, où il n'y a pas de survol, elle reste visible. */
.chip-del{opacity:0;pointer-events:none;transition:opacity .12s}
.chip-wrap:hover .chip-del,.chip-wrap:focus-within .chip-del{opacity:1;pointer-events:auto}
@media(hover:none){.chip-del{opacity:1;pointer-events:auto}}
.gauge{display:block;height:3px;border-radius:2px;background:var(--rule-soft);margin-top:4px;overflow:hidden}
.gauge i{display:block;height:100%;background:var(--action)}
.gauge i.over{background:var(--danger)}
.covlab,.covcell{border-top:1px solid var(--rule-strong);background:var(--panel-alt);padding:9px 10px;font-size:12.5px}
.covlab{font-weight:600;color:var(--ink-soft)}
.covcell{border-left:1px solid var(--rule);text-align:center;font-weight:600;font-variant-numeric:tabular-nums}
.covcell.we{background:var(--weekend)}
.covcell.zero{color:var(--ink-faint);font-weight:400}
.offtag{
  align-self:flex-start;font-size:10.5px;font-weight:600;color:var(--ink-soft);font-family:inherit;
  background:var(--chip-overlay);border:1px solid var(--rule-strong);border-radius:var(--radius-sm);padding:1px 4px;
}
button.offtag{cursor:pointer}
button.offtag:hover{filter:brightness(0.95)}
.add-hint{color:var(--rule-strong);font-size:17px;line-height:1;margin:auto}
/* Lot 1.97.2 : jour pas encore publié (vue des salariés) — discret, jamais confondu avec un repos */
.cell-unpub{margin:auto;font-size:11px;font-style:italic;color:var(--ink-faint);text-align:center}
.munpub{display:block;font-size:9px;line-height:1.1;font-style:italic;color:var(--ink-faint);text-align:center;padding-top:6px}
.myshift-unpublished{font-style:italic;color:var(--ink-faint)}
/* Hors période d'emploi (avant la date d'entrée ou après la date de sortie de contrat, Fiche RH,
   voir outOfEmployment() dans planning.js) : case noircie plutôt que vide, pour ne jamais
   suggérer qu'un créneau pourrait y être posé. Couleur fixe (comme .kiosk-box) plutôt qu'un jeton
   thème : doit rester un noir reconnaissable identique en clair et en sombre — un jeton clair y
   perdrait tout contraste avec son sens. Après .off dans le fichier pour gagner sur le hachurage
   jour de repos si jamais les deux se superposent (le "hors emploi" prime). */
.cell.not-employed,.mcell.not-employed,.dayrow-chips.not-employed{background:#15181c;cursor:default}
.cell.not-employed:hover{background:#15181c}

/* ---------- vue mobile ---------- */
.dayview{display:none;padding:0 var(--gutter) 20px}
.shift-toggle{display:flex;gap:4px;background:var(--panel-alt);border:1px solid var(--rule-strong);border-radius:999px;padding:3px;margin-bottom:14px;width:fit-content}
.shift-toggle button{border:none;background:transparent;padding:8px 16px;border-radius:999px;font-size:13.5px;font-weight:600;color:var(--ink-soft)}
.shift-toggle button.sel{background:var(--panel);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.1)}
.myshift-sep{display:flex;align-items:center;gap:10px;margin:18px 0 8px;color:var(--ink-soft);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em}
.myshift-sep::before,.myshift-sep::after{content:"";flex:1;height:1px;background:var(--rule)}
.myshift-sep.today{color:var(--action)}
.myshift-sep.today::before,.myshift-sep.today::after{background:var(--action);opacity:.4}
.myshift-day:first-child .myshift-sep{margin-top:0}
.myshift-block{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;border-radius:10px;padding:14px 16px;margin-bottom:8px;font-size:15px;font-weight:600;box-shadow:var(--shadow-sm)}
.myshift-block b{font-weight:700;font-variant-numeric:tabular-nums}
.myshift-note{flex-basis:100%;font-weight:400;font-size:12.5px;opacity:.85;margin-top:2px}
.myshift-off{padding:12px 16px;border-radius:10px;background:var(--panel-alt);border:1px dashed var(--rule-strong);color:var(--ink-soft);font-size:13.5px;margin-bottom:8px}
.daypicker{display:flex;gap:5px;margin-bottom:12px}
.daypicker button{
  flex:1;background:var(--panel);border:1px solid var(--rule-strong);
  border-radius:var(--radius);padding:7px 2px;display:flex;flex-direction:column;
  align-items:center;gap:1px;
}
.daypicker button b{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}
.daypicker button i{font-style:normal;font-size:11px;color:var(--ink-soft)}
.daypicker button.sel{background:var(--chrome);border-color:var(--chrome);color:#fff}
.daypicker button.sel i{color:#a6b5c2}
.dayrow{
  background:var(--panel);border:1px solid var(--rule-strong);border-top:none;
  padding:10px 12px;display:flex;align-items:center;gap:10px;
}
.dayrow:first-of-type{border-top:1px solid var(--rule-strong);border-radius:var(--radius) var(--radius) 0 0}
.dayrow:last-of-type{border-radius:0 0 var(--radius) var(--radius)}
.dayrow-name{flex:1;min-width:0}
.dayrow-name b{display:block;font-size:14.5px;font-weight:600}
.dayrow-chips{display:flex;flex-direction:column;gap:4px;align-items:flex-end;max-width:55%}
.mini-add{
  border:1px dashed var(--rule-strong);background:transparent;color:var(--ink-faint);
  border-radius:2px;padding:4px 9px;font-size:12.5px;
}

/* ---------- panneaux ---------- */
.cols{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:var(--gutter);padding:0 var(--gutter) 40px;align-items:start;
}
.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:18px}
.personnel-card{display:flex;flex-direction:column;align-items:flex-start;gap:6px;text-align:left;padding:16px;background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);cursor:pointer;transition:border-color .15s,transform .1s}
.personnel-card:hover{border-color:var(--chrome);transform:translateY(-1px)}
.personnel-card .pc-icon{color:var(--ink-soft)}
.personnel-card b{font-size:14.5px;font-weight:600}
.personnel-card .pc-desc{font-size:12.5px;color:var(--ink-soft);line-height:1.4}
.panel{background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);box-shadow:var(--shadow-sm)}
/* Carte principale : hiérarchie forte, réservée à UN élément dominant par écran (hero "Ma
   journée", résumé badgeuse...) — jamais la carte par défaut, sinon plus rien ne se distingue
   (refonte visuelle demandée par l'utilisateur, LOT 1, point 1). */
.card-primary{background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow:hidden}
.card-primary-ok{border-color:var(--ok-border);box-shadow:var(--shadow-md),inset 3px 0 0 var(--ok)}
.card-primary-off{border-color:var(--rule-strong)}
.panel-head{
  display:flex;align-items:center;gap:8px;padding:11px 14px;
  border-bottom:1px solid var(--rule);
}
.panel-head h2{margin:0;font-size:14.5px;font-weight:600;letter-spacing:-.01em}
.count{
  background:var(--action);color:#fff;border-radius:9px;padding:1px 7px;
  font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums;
}
.count.zero{background:#c4ccd3;color:#fff}
.panel-head .mini{margin-left:auto}
.mini{
  background:transparent;border:1px solid var(--rule-strong);color:var(--ink);
  border-radius:var(--radius);padding:4px 10px;font-size:12.5px;
  transition:transform .08s,background .12s;
}
.mini:hover{background:var(--panel-alt)}
/* La classe existait déjà sur le bouton "Ignorer" d'un incident (procedures.js) sans aucune règle
   correspondante — elle ne produisait donc aucun effet visuel, alors que le nom indique clairement
   l'intention de la distinguer (audit UX LOT 5). */
.mini.danger{color:var(--danger);border-color:var(--danger-border)}
.mini.danger:hover{background:var(--danger-bg)}
/* État « activé » générique pour un .mini qui sert de filtre on/off (ex. masquer les salariés
   sortis sur le planning) — même traitement que .stock-chip.active, promu ici au niveau de .mini
   pour être réutilisable sans dépendre du contexte stock. */
.mini.active{outline:2px solid var(--action);outline-offset:-2px}
.panel-body{padding:6px 0}
/* Padding réduit (18→12, 22→14) : ces deux styles d'état vide sont partagés par de nombreux
   écrans (absences, échanges, tâches, carnet, historique...) — un seul ajustement les rend tous
   plus compacts d'un coup, sans changer leur contenu ni en inventer un troisième (audit UX
   mobile ciblé, points 5/18). */
.empty{padding:12px 14px;color:var(--ink-faint);font-size:13.5px}
.empty-state{display:flex;flex-direction:column;align-items:center;gap:5px;padding:14px 14px;color:var(--ink-faint);text-align:center}
.legend-list{display:flex;flex-direction:column;gap:2px}
.legend-row{display:flex;align-items:center;gap:10px;padding:8px 2px}
.legend-dot{width:12px;height:12px;border-radius:4px;flex:0 0 auto}
.legend-row b{font-size:13.5px;min-width:44px}
.legend-row .muted{font-size:12.5px}
.empty-state svg{color:var(--ink-faint);opacity:.7}
.empty-state p{margin:0;font-size:13px}
/* Carte principale "Ma journée" (salarié) : remplace l'ancien bandeau .day-greeting + les 3
   tuiles plates + .next-shift séparé par UNE carte hiérarchisée (refonte visuelle demandée par
   l'utilisateur, LOT 2 — "modifier réellement la hiérarchie visuelle", pas juste le texte). */
.day-hero{padding:20px 22px}
.day-hero-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px}
.day-hero-head h1{margin:0;font-size:21px;letter-spacing:-.01em}
.day-hero-eyebrow{font-size:11px;font-weight:700;letter-spacing:.07em;color:var(--ink-faint);white-space:nowrap}
.day-hero-shift{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.day-hero-time{font-size:24px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.day-hero-status{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink-soft);margin-bottom:16px}
.status-dot{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
.status-dot-ok{background:var(--ok);box-shadow:0 0 0 3px var(--ok-bg)}
.status-dot-warn{background:var(--warn-ink);box-shadow:0 0 0 3px var(--warn-bg)}
.status-dot-soon{background:var(--action);box-shadow:0 0 0 3px var(--action-bg)}
.status-dot-off{background:var(--ink-faint);box-shadow:0 0 0 3px var(--rule-soft)}
.day-hero-tasks{margin-bottom:14px}
.day-hero-tasks-head{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;color:var(--ink-soft);margin-bottom:6px}
.day-hero-tasks-head b{color:var(--ink);font-size:13.5px}
.day-hero-rest{margin:0;font-size:19px;font-weight:600;letter-spacing:-.01em}
.day-hero-next{display:flex;flex-direction:column;gap:1px;padding-top:14px;margin-top:2px;border-top:1px solid var(--rule-soft)}
.day-hero-next small{color:var(--ink-soft);font-size:11.5px}
.day-hero-next b{font-size:14px;font-weight:600}

.item{padding:10px 14px;border-bottom:1px solid var(--rule-soft);display:flex;gap:10px;align-items:flex-start}
.item-click{width:100%;text-align:left;background:none;border:none;border-radius:0;font:inherit;color:inherit;cursor:pointer}
.item-click:hover{background:var(--panel-alt)}
.item:last-child{border-bottom:none}
.logbook-photos{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.logbook-thumb{width:56px;height:56px;border-radius:6px;overflow:hidden;border:1px solid var(--rule-strong);padding:0;background:var(--panel-alt);cursor:pointer;flex:0 0 auto;display:flex;align-items:center;justify-content:center;font-size:18px}
.logbook-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.logbook-photo-full{display:flex;justify-content:center}
.logbook-photo-full img{max-width:100%;max-height:70vh;border-radius:8px}
.item-main{flex:1;min-width:0}
.item-main b{font-weight:600;font-size:14px}
.item-main p{margin:1px 0 0;font-size:12.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.item-acts{display:flex;gap:5px;flex-shrink:0}
/* Icône de type dans "À traiter" (LOT UI dashboard) : distingue absence/échange/pointage/incident
   au premier coup d'œil, sans dépendre uniquement du texte — remplace l'ancien point de couleur
   générique qui rendait tous les types visuellement identiques. */
.totreat-ico{flex:0 0 auto;width:26px;height:26px;border-radius:7px;display:grid;place-items:center;margin-top:1px;background:var(--panel-alt);color:var(--ink-soft)}
.totreat-ico-danger{background:var(--danger-bg);color:var(--danger)}
/* Grille compacte pour les raccourcis du tableau de bord admin, à la place de l'ancien
   empilement vertical de boutons pleine largeur (audit UX/UI 2.0). */
.dash-shortcuts{padding:14px;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dash-shortcuts .btn{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 8px;text-align:center;font-size:12.5px;position:relative;white-space:normal}
@media (max-width:480px){.dash-shortcuts{grid-template-columns:1fr 1fr}}
.drag-handle{
  flex:0 0 auto;width:22px;height:22px;display:grid;place-items:center;cursor:grab;
  color:var(--ink-faint);font-size:15px;touch-action:none;user-select:none;
}
.drag-handle:active{cursor:grabbing}
.reorder-btns{flex:0 0 auto;display:flex;flex-direction:column;gap:1px}
.reorder-btn{
  width:18px;height:13px;display:grid;place-items:center;border:none;background:transparent;
  color:var(--ink-faint);font-size:9px;line-height:1;cursor:pointer;padding:0;border-radius:3px;
}
.reorder-btn:hover{background:var(--rule);color:var(--ink)}
.reorder-btn:active{background:var(--rule-strong)}
[data-person-row].drag-source{opacity:.4}
[data-person-row].drop-before{box-shadow:inset 0 2px 0 var(--action)}
[data-person-row].drop-after{box-shadow:inset 0 -2px 0 var(--action)}
.person-drag-ghost{
  display:flex;align-items:center;gap:7px;padding:6px 12px;border-radius:6px;
  background:var(--panel);border:1px solid var(--rule-strong);font-size:13.5px;font-weight:600;
  box-shadow:0 8px 20px #16202b66;
}
.icon{display:block;flex:0 0 auto}
.icb{
  border:1px solid var(--rule-strong);background:var(--panel);border-radius:var(--radius-sm);
  width:28px;height:28px;font-size:14px;line-height:1;display:grid;place-items:center;
  transition:transform .08s,background .12s;
}
.icb.yes:hover{background:var(--ok);border-color:var(--ok);color:#fff}
.icb.no:hover{background:var(--danger);border-color:var(--danger);color:#fff}
.icb:hover{background:var(--panel-alt)}
/* Badges en pastille (999px) au lieu de coins quasi droits (2px) — un des points concrets de
   "plat/administratif" relevés par l'utilisateur ; même famille de jetons, juste la forme change
   (refonte visuelle, LOT 1 point 1 : badges de statut). */
.badge{font-size:11px;font-weight:600;border-radius:999px;padding:2px 9px;border:1px solid}
.b-wait{color:var(--warn-ink);border-color:var(--warn-border);background:var(--warn-bg)}
.badge-btn{font-size:11px;font-weight:600;border-radius:999px;padding:2px 9px;color:var(--warn-ink);border-color:var(--warn-border);background:var(--warn-bg);cursor:pointer}
.badge-btn:hover{filter:brightness(0.95)}
.b-ok{color:var(--ok);border-color:var(--ok-border);background:var(--ok-bg)}
.b-danger{color:var(--danger);border-color:var(--danger-border);background:var(--danger-bg)}
.b-info{color:var(--info-ink);border-color:var(--info-border);background:var(--info-bg)}
.b-no{color:var(--danger);border-color:var(--danger-border);background:var(--danger-bg)}
.b-purple{color:var(--purple);border-color:var(--purple-border);background:var(--purple-bg)}
.b-neutral{color:var(--ink-soft);border-color:var(--rule-strong);background:var(--panel-alt)}

.hours{display:flex;align-items:center;gap:10px;padding:9px 14px;border-bottom:1px solid var(--rule-soft)}
.hours:last-child{border-bottom:none}
.hours-name{flex:1;font-size:13.5px;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar{width:88px;height:7px;background:var(--rule-soft);border-radius:4px;overflow:hidden;flex:0 0 auto}
.bar i{display:block;height:100%;border-radius:4px}
/* Barre de progression pleine largeur (tâches "Ma journée", onglets Matin/Après-midi/Nuit...) —
   même principe que .bar mais responsive au lieu d'une largeur fixe 88px (refonte visuelle,
   LOT 1 point 1 : progress bars). */
.progress{width:100%;height:6px;background:var(--rule-soft);border-radius:4px;overflow:hidden}
.progress i{display:block;height:100%;border-radius:4px;background:var(--ok);transition:width .25s ease}
.hours-val{font-size:13px;font-variant-numeric:tabular-nums;width:74px;text-align:right;color:var(--ink-soft)}
.hours-val b{color:var(--ink);font-weight:600}

/* ---------- démarrage à vide ---------- */
.blank{
  margin:var(--gutter);padding:36px 24px;text-align:center;
  background:var(--panel);border:1px dashed var(--rule-strong);border-radius:var(--radius);
}
.blank h2{margin:0 0 6px;font-size:19px;font-weight:600;letter-spacing:-.01em}
.blank p{margin:0 auto 18px;max-width:46ch;color:var(--ink-soft);font-size:14px}
.blank-acts{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}

/* ---------- boutons ---------- */
.btn{
  background:var(--action);color:var(--action-ink);border:1px solid var(--action);
  border-radius:var(--radius);padding:8px 15px;font-size:14px;font-weight:500;
  box-shadow:var(--shadow-sm);transition:filter .12s,transform .08s,box-shadow .12s;
}
.btn:hover{filter:brightness(0.92)}
/* Pressed mobile / clic desktop (refonte visuelle, LOT 1 point 22 : micro-interactions utiles
   seulement) : léger tassement, jamais d'effet tape-à-l'œil. */
.btn:active{transform:scale(.97);filter:brightness(0.88);box-shadow:var(--shadow-sm)}
.btn-ghost{background:var(--panel);color:var(--ink);border-color:var(--rule-strong);box-shadow:none}
.btn-ghost:hover{background:var(--panel-alt)}
.btn-ghost:active{transform:scale(.97);background:var(--rule-soft)}
.btn-danger{background:transparent;color:var(--danger);border-color:var(--danger-border);box-shadow:none}
.btn-danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
.mini-danger{color:var(--danger);border-color:var(--danger-border)}
.mini-danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
.btn-danger:active{transform:scale(.97)}
.mini:active,.icb:active{transform:scale(.94)}

/* ---------- fenêtres ---------- */
.veil{
  position:fixed;inset:0;background:#16202bbf;z-index:60;
  display:flex;align-items:flex-end;justify-content:center;padding:0;
}
.veil[hidden]{display:none}
.sheet{
  background:var(--panel);width:100%;max-width:440px;
  border-radius:var(--radius) var(--radius) 0 0;
  max-height:92vh;overflow-y:auto;
  padding-bottom:calc(16px + env(safe-area-inset-bottom));
}
.sheet-head{
  display:flex;align-items:center;padding:14px 18px 10px;
  border-bottom:1px solid var(--rule);position:sticky;top:0;background:var(--panel);
}
.sheet-head h3{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em}
.x{margin-left:auto;background:none;border:none;font-size:22px;line-height:1;color:var(--ink-faint);padding:0 4px}
.sheet-body{padding:14px 18px}
.mfa-qr{display:flex;justify-content:center;margin:10px 0 14px;padding:10px;background:#fff;border-radius:var(--radius);border:1px solid var(--rule-strong)}
.mfa-qr svg{width:180px;height:180px}
.mobile-invite{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:0 0 14px;padding:10px 14px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--info-bg)}
.mfa-recovery-codes{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
.mfa-recovery-codes code{display:block;text-align:center;padding:8px 6px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--field-bg);font-size:14px;letter-spacing:.03em}
.field{margin-bottom:13px}
.field label{display:block;font-size:12.5px;color:var(--ink-soft);margin-bottom:4px;font-weight:500}
.field input,.field select,.field textarea{
  width:100%;padding:9px 10px;border:1px solid var(--rule-strong);
  border-radius:var(--radius);background:var(--field-bg);color:var(--ink);
}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--action);outline:none}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.swatches{display:flex;gap:6px;flex-wrap:wrap}
.swatch{width:27px;height:27px;border-radius:50%;border:2px solid transparent;transition:transform .1s}
.swatch:hover{transform:scale(1.1)}
.swatch:active{transform:scale(.92)}
.swatch.sel{border-color:var(--ink);box-shadow:inset 0 0 0 2px var(--panel)}
.sheet-foot{display:flex;gap:8px;padding:4px 18px 0}
.sheet-foot .btn{flex:1}
.warn{
  background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink);
  border-radius:var(--radius);padding:8px 10px;font-size:12.5px;margin-bottom:13px;
}

.toast{
  position:fixed;left:50%;bottom:22px;transform:translateX(-50%) translateY(8px);
  background:var(--chrome);color:#fff;padding:10px 18px;border-radius:var(--radius-lg);
  font-size:13.5px;z-index:80;opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;
  box-shadow:var(--shadow-lg);
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.on.act{pointer-events:auto}

/* ---------- connexion ---------- */
.topbar[hidden]{display:none}
.login{min-height:100vh;display:grid;place-items:center;padding:24px}
.login-card{
  background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);
  width:100%;max-width:340px;padding:28px 24px;
  box-shadow:0 12px 32px -12px #16202b33;
}
.login-badge{
  width:64px;height:64px;border-radius:16px;display:block;margin:0 auto 16px;
  box-shadow:0 8px 18px -8px #16202b55;
}
.login-brand{margin:0 0 6px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--action);text-align:center}
.login-card h1{margin:0 0 4px;font-size:21px;font-weight:600;letter-spacing:-.015em;text-align:center}
.login-card .sub{margin:0 0 20px;font-size:13.5px;color:var(--ink-soft);text-align:center}
.login-card .btn{width:100%;margin-top:4px}
.login-card .btn:disabled{opacity:.75}
.login-err,.err{
  background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger);
  border-radius:var(--radius);padding:8px 10px;font-size:12.5px;margin-bottom:13px;
}
.pwrap{position:relative}
.pwrap input{padding-right:38px}
.pwtoggle{
  position:absolute;right:2px;top:50%;transform:translateY(-50%);background:none;border:none;
  font-size:16px;padding:8px;line-height:1;color:var(--ink-faint);cursor:pointer;
}
.login-hint{margin:16px 0 0;font-size:12px;color:var(--ink-faint);text-align:center}
/* Compte mémorisé sur l'appareil : « Vous êtes bien … ? » à la place du champ identifiant. */
.login-known{display:flex;align-items:center;gap:12px;padding:12px 14px;margin:0 0 6px;background:var(--panel-alt);border:1px solid var(--rule);border-radius:var(--radius)}
.login-known-av{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--chrome);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:15px}
.login-known-id{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.login-known-id b{font-size:14.5px;font-weight:600;overflow-wrap:break-word}
.login-known-id small{font-size:12px;color:var(--ink-soft)}
.model-grid{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed;min-width:760px}
.model-grid th,.model-grid td{border-top:1px solid var(--rule-soft);padding:6px;vertical-align:top;text-align:left}
.model-grid thead th{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);border-top:0}
.model-grid .model-person{width:110px;font-weight:600}
.model-grid .model-person span{display:block;font-weight:400;font-size:11px;color:var(--ink-faint)}
.model-cell{border-left:1px solid var(--rule-soft)}
.model-cell.we{background:var(--weekend)}
.model-chip{display:block;width:100%;text-align:left;border:1px solid var(--rule);background:var(--panel);color:var(--ink);border-radius:6px;padding:4px 6px;margin-bottom:4px;font:inherit;font-size:12px;cursor:pointer;overflow-wrap:anywhere}
.model-chip:hover{background:var(--panel-hover)}
.model-chip.off{opacity:.5;text-decoration:line-through}
.model-add{border:1px dashed var(--rule);background:transparent;color:var(--ink-faint);border-radius:6px;width:100%;height:22px;font:inherit;cursor:pointer}
.model-add:hover{color:var(--action);border-color:var(--action)}
.model-panel{padding:6px 10px;overflow:hidden}
.model-apply{margin-top:14px;padding:14px 16px}
.model-apply h2{margin:0 0 4px;font-size:15px}
.model-summary{font-weight:600;margin:4px 0 10px}
.model-days{display:flex;flex-wrap:wrap;gap:8px}
.model-day{display:flex;align-items:center;gap:4px;font-size:14px}
.task-closed>summary{cursor:pointer;list-style:none}.task-closed>summary::-webkit-details-marker{display:none}.task-closed>summary::before{content:'▸ '}.task-closed[open]>summary::before{content:'▾ '}
.temp-h2{margin:18px 0 8px;font-size:15px}
.temp-place{border-bottom:1px solid var(--rule-soft)}
.temp-place:last-child{border-bottom:0}
.temp-place>summary,.temp-day>summary{cursor:pointer;list-style:none}
.temp-place>summary::-webkit-details-marker,.temp-day>summary::-webkit-details-marker{display:none}
.temp-place>summary{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:11px 14px}
.temp-place>summary::before,.temp-day>summary::before{content:'▸';color:var(--ink-faint);display:inline-block;width:14px}
.temp-place[open]>summary::before,.temp-day[open]>summary::before{content:'▾'}
.temp-place-name{font-weight:600}
.temp-place-sub{font-size:12px;color:var(--ink-faint)}
.temp-entry{display:flex;align-items:center;gap:10px;padding:8px 14px 10px 38px;border-top:1px solid var(--rule-soft)}
.temp-entry-main{flex:1;min-width:0}
.temp-entry-main p{margin:3px 0 0;font-size:12px}
.temp-times{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.temp-time{border:1px solid var(--rule);border-radius:999px;padding:1px 9px;font-size:12px;font-variant-numeric:tabular-nums;background:var(--panel)}
.task-day-title{padding:7px 14px;font-size:12px;font-weight:700;text-transform:capitalize;color:var(--ink);background:var(--panel-hover);border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft)}
.task-closed-title{padding:7px 14px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);background:var(--panel-hover);border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft)}
.taskrow.done{background:transparent}
.taskrow.done .taskcopy>p{color:var(--ink-faint)}
.closing-late{color:var(--danger);font-weight:600}
.task-extra-time{display:flex;align-items:center;gap:6px;margin:-2px 0 8px}
.task-extra-time input{flex:1;max-width:180px}
.notes-page{max-width:760px}
.note-new{display:flex;flex-direction:column;gap:8px;margin:14px 0 18px}
.note-new textarea,.note-edit textarea,#note-edit-body{width:100%;padding:10px 12px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--panel);color:var(--ink);font:inherit;resize:vertical;min-height:84px}
.note-new .btn{align-self:flex-end}
.note-list{display:flex;flex-direction:column;gap:10px}
.note-card{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);padding:12px 14px}
.note-card.pinned{background:var(--warn-bg);border-color:var(--warn-border)}
.note-body{margin:0 0 8px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:14.5px;line-height:1.45}
.note-foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px}
.note-acts{display:flex;gap:6px;flex-wrap:wrap}
.daily-punches{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;padding-top:8px;border-top:1px dashed var(--rule);font-size:12.5px}
.daily-punches-label{color:var(--ink-faint);font-weight:600;margin-right:2px}
.punch-chip{display:inline-flex;gap:4px}
.punch-chip.open>.mini:first-child{border-color:var(--ok);color:var(--ok)}
.pair-code{margin:12px 0;text-align:center;font:600 30px/1.2 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.12em;user-select:all}
.pair-input{text-transform:uppercase;letter-spacing:.1em;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;text-align:center;font-size:18px}
.login-switch[hidden]{display:none}
.login-switch{display:block;margin:0 auto 14px;background:none;border:none;padding:4px 8px;font-size:12.5px;color:var(--action);text-decoration:underline;cursor:pointer}
.who{display:flex;align-items:center;gap:7px;font-size:13px;color:#c3cfd9}
.role{border:1px solid #3c4b59;border-radius:2px;padding:1px 6px;font-size:11px;color:#9db0c0}
.alert{
  margin:var(--gutter) var(--gutter) 0;background:var(--warn-bg);border:1px solid var(--warn-border);
  color:var(--warn-ink);border-radius:var(--radius);padding:10px 13px;font-size:13px;
  display:flex;align-items:center;gap:10px;
}
.alert button{
  margin-left:auto;background:transparent;border:1px solid var(--warn-border);color:var(--warn-ink);
  border-radius:2px;padding:4px 10px;font-size:12.5px;white-space:nowrap;
}
span.chip{display:block}
.acct{font-size:11.5px;color:var(--ink-faint)}

/* ---------- vue mensuelle ---------- */
.viewtoggle{
  display:flex;border:1px solid var(--rule-strong);border-radius:var(--radius);
  overflow:hidden;margin-left:auto;
}
.viewtoggle button{background:var(--panel);border:none;padding:7px 14px;font-size:13.5px;color:var(--ink-soft)}
.viewtoggle button.sel{background:var(--chrome);color:#fff}
.month-wrap{padding:0 var(--gutter) 20px}
.monthscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.mgrid{display:grid;min-width:max-content}
.mh{
  background:var(--panel-alt);border-bottom:1px solid var(--rule-strong);border-left:1px solid var(--rule);
  padding:5px 0;text-align:center;
}
.mh.we{background:var(--weekend)}
.mh.now{box-shadow:inset 0 -3px 0 var(--action)}
.mh b{display:block;font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.mh i{font-style:normal;display:block;font-size:10.5px;color:var(--ink-faint)}
.mcorner{
  position:sticky;left:0;z-index:3;background:var(--panel-alt);
  border-bottom:1px solid var(--rule-strong);border-left:none;
}
.mname{
  position:sticky;left:0;z-index:2;background:var(--panel-alt);
  border-top:1px solid var(--rule);border-right:1px solid var(--rule-strong);
  padding:5px 9px;display:flex;align-items:center;gap:7px;
}
.mname span.txt{min-width:0}
.mname b{display:block;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mname small{display:block;font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums}
.mcell{
  border-left:1px solid var(--rule);border-top:1px solid var(--rule);
  min-height:56px;padding:3px;display:flex;flex-direction:column;gap:2px;
  background:transparent;width:100%;
}
.mcell.we{background:var(--weekend-soft)}
.mcell.off{background-image:repeating-linear-gradient(45deg,transparent,transparent 4px,var(--rule-strong) 4px,var(--rule-strong) 5px)}
button.mcell:hover{background-color:var(--panel-alt)}
.mblock{
  border-radius:2px;color:#fff;font-size:11px;font-weight:700;text-align:center;
  padding:4px 0;line-height:1.15;font-variant-numeric:tabular-nums;display:block;
}
.moff{
  font-size:10px;font-weight:600;color:var(--ink-soft);text-align:center;
  background:var(--chip-overlay);border-radius:2px;padding:3px 0;display:block;
}

.steps{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px}
.steps button{
  background:var(--panel);border:1px solid var(--rule-strong);color:var(--ink-soft);
  border-radius:var(--radius);padding:8px 0 6px;font-size:14px;
  font-variant-numeric:tabular-nums;line-height:1.2;transition:background .12s,transform .1s;
}
.steps button i{display:block;font-style:normal;font-size:9.5px;color:var(--ink-faint)}
.steps button:not(.sel):hover{background:var(--panel-hover)}
.steps button:active{transform:scale(.96)}
.steps button.sel{background:var(--chrome);border-color:var(--chrome);color:#fff}
.steps button.sel i{color:#93a4b2}
.madj{display:block;font-style:normal;font-size:8px;font-weight:600;opacity:.95;letter-spacing:-.02em}
.recap{
  display:flex;align-items:center;gap:7px;flex-wrap:wrap;
  background:var(--panel-alt);border:1px solid var(--rule);border-radius:var(--radius);
  padding:9px 11px;margin-bottom:13px;font-size:13px;
}
.recap b{font-weight:700}
.recap em{font-style:normal;margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}
.swatch-mini{width:13px;height:13px;border-radius:2px;display:inline-block;flex:0 0 auto}
.codetag{
  border-radius:2px;padding:3px 6px;font-size:11.5px;font-weight:700;
  margin-top:3px;flex:0 0 auto;min-width:34px;text-align:center;
}
.grouplab{
  margin:0;padding:9px 14px 5px;font-size:12px;font-weight:600;color:var(--ink-soft);
  background:var(--panel-alt);border-bottom:1px solid var(--rule);
}

/* ---------- glisser-déposer ---------- */
button.chip,.mblock{touch-action:none}
button.chip{cursor:grab}
.cell.dropok,.mcell.dropok{background-color:var(--panel-alt);box-shadow:inset 0 0 0 2px var(--action)}
.dayrow-chips.dropok{box-shadow:0 0 0 2px var(--action);border-radius:2px}
.ghost{
  position:fixed;z-index:90;pointer-events:none;opacity:.92;
  transform:translate(-50%,-50%);box-shadow:0 8px 20px #16202b66;
}
body.dragging{user-select:none;-webkit-user-select:none;cursor:grabbing}
.toast-act{
  background:transparent;border:1px solid #4d5d6c;color:#fff;border-radius:2px;
  padding:3px 9px;margin-left:12px;font-size:12.5px;
}
.toast-act:hover{background:#2b3947}

.steps.two{grid-template-columns:1fr 1fr}
.offtag.part{background:var(--warn-bg);border-color:var(--warn-border);color:var(--warn-ink)}
.clash{
  width:100%;color:var(--danger);font-weight:600;font-size:12.5px;
  border-top:1px solid var(--rule);padding-top:7px;margin-top:2px;
}

@media (max-width:760px){
  .board-wrap{display:none}
  .dayview{display:block}
  .brand span{display:none}
  .weekrange{font-size:16px}
  .topbar{position:static;padding:8px var(--gutter)}
  .topbar-actions{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
  .topbar-actions .tbtn,.topbar-actions .theme-toggle{flex:0 0 auto}
  .data-table th:first-child,.data-table td:first-child{position:sticky;left:0;background:var(--panel);box-shadow:1px 0 0 var(--rule-soft)}
  .data-table th:first-child{background:var(--panel-alt)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
@media print{
  .topbar,.weekbar .nav,.today-btn,.cols,.dayview,.add-hint{display:none!important}
  body{background:#fff;color:#16202b}
  .board{border-color:#333}
}

/* Gestion quotidienne */
.workspace-tabs{display:flex;gap:6px;padding:14px var(--gutter) 0;flex-wrap:wrap}
.workspace-tabs button{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-sm);padding:10px 15px;position:relative;transition:background .12s,box-shadow .12s,transform .1s}
.nav-group-label{padding:14px 8px 4px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint)}
.nav-group-label:first-child{padding-top:4px}
.workspace-tabs button.active{background:var(--chrome);color:white;border-color:var(--chrome);box-shadow:var(--shadow-sm)}
/* Jusqu'ici seul l'état actif réagissait : les autres entrées de la sidebar ne donnaient aucun
   retour au survol/clic, contrairement à tous les autres groupes de boutons déjà polis (LOT 1) —
   gap trouvé en auditant le LOT 7. */
.workspace-tabs button:not(.active):hover{background:var(--panel-hover);border-color:var(--rule-strong)}
.workspace-tabs button.active:hover{filter:brightness(1.08)}
.workspace-tabs button:active{transform:scale(.97)}
.nav-collapse{display:none}
.nav-ico{display:none}
@media(min-width:761px){
  .app-shell{display:flex;align-items:flex-start}
  .app-main{flex:1;min-width:0}
  .workspace-tabs{flex:0 0 224px;width:224px;flex-direction:column;flex-wrap:nowrap;padding:12px 10px;gap:2px;transition:width .16s ease,flex-basis .16s ease}
  /* Menu en lignes plates avec icône (plus de boutons encadrés) : état actif = fond léger,
     compteurs à droite — rouge quand une action est attendue. */
  .workspace-tabs button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;border:none;box-shadow:none;border-radius:var(--radius-sm);padding:8px 10px;font-size:14px;color:var(--ink-soft)}
  .nav-ico{display:flex;flex:0 0 auto}
  .workspace-tabs button:not(.active):hover{background:var(--panel-alt);color:var(--ink);border-color:transparent}
  .workspace-tabs button.active{background:var(--rule-soft);color:var(--ink);font-weight:600;border-color:transparent;box-shadow:none}
  .workspace-tabs button.active:hover{filter:none;background:var(--rule-soft)}
  .workspace-tabs .tab-dot{margin-left:auto}
  .nav-count{margin-left:auto;font-size:11px;font-weight:600;min-width:18px;text-align:center;padding:1px 6px;border-radius:9px;background:var(--rule-soft);color:var(--ink)}
  .nav-count.hot{background:var(--danger-bg);color:var(--danger)}
  .workspace-tabs button.active .nav-count:not(.hot){background:var(--panel)}
  .workspace-tabs .nav-collapse{display:flex;color:var(--ink-faint);font-size:12.5px;font-weight:600;margin-bottom:4px}
  .workspace-tabs .nav-collapse:hover{color:var(--ink)}
  .nav-group-label{font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}
  body.nav-collapsed .workspace-tabs{flex-basis:58px;width:58px}
  body.nav-collapsed .nav-lbl{display:none}
  body.nav-collapsed .workspace-tabs button{justify-content:center;padding:9px 0}
  body.nav-collapsed .nav-collapse .nav-ico{transform:rotate(180deg)}
  body.nav-collapsed .nav-group-label{font-size:0;padding:0;margin:8px 8px 6px;border-top:1px solid var(--rule-soft)}
  body.nav-collapsed .nav-group-label:first-child{display:none}
  body.nav-collapsed .nav-count,body.nav-collapsed .workspace-tabs .tab-dot{position:absolute;top:6px;right:11px;margin:0;width:8px;min-width:0;height:8px;padding:0;font-size:0;border-radius:50%}
  body.nav-collapsed .nav-count:not(.hot){background:var(--ink-faint)}
  body.nav-collapsed .nav-count.hot{background:var(--danger)}
}
.section-pad{padding:18px var(--gutter) 28px}
.section-title{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.section-title h1{font-size:23px;margin:0;margin-right:auto;letter-spacing:-.04em}
.temp-shortcut{
  margin-left:14px;vertical-align:middle;font-size:13.5px;font-weight:600;letter-spacing:0;
  background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink);
  border-radius:20px;padding:6px 14px;display:inline-flex;align-items:center;gap:6px;
}
.temp-shortcut:hover{filter:brightness(0.97)}
.temp-shortcut.done{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.muted{color:var(--ink-soft);font-size:13px}
/* Texte annoncé aux lecteurs d'écran mais retiré du flux visuel, quand le contexte visuel
   (placeholder, icône, libellé voisin) suffit déjà à une personne voyante — audit accessibilité
   LOT UI 11. Ne jamais utiliser display:none/visibility:hidden ici : les lecteurs d'écran
   ignoreraient alors le texte aussi. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.notice{padding:12px 16px;border:1px solid var(--info-border);background:var(--info-bg);border-radius:7px;margin:14px var(--gutter);font-size:13px}
.notice-compact{display:flex;align-items:center;justify-content:space-between;gap:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.notice-info{cursor:help;opacity:.75}
.notice-compact .notice-info{flex:0 0 auto}
/* Barre de publication compacte (une ligne : état + décompte à gauche, boutons à droite) — la
   phrase d'explication repasse derrière l'icône ⓘ pour tous, plus seulement sur mobile. */
.publishbar-info{display:inline;margin-left:4px}
.publishbar-note{display:none}
.publishbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 var(--gutter) 12px;padding:8px 14px;background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:var(--radius)}
.publishbar.ready{background:var(--ok-bg);border-color:var(--ok-border)}
.publishbar .status-copy{flex:1;min-width:180px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.publishbar strong{display:inline;font-size:13.5px}
.publishbar .btn{padding:6px 14px}
.palette{margin:0 var(--gutter) 12px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius);padding:0}
.palette summary{font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;padding:9px 14px;font-size:13.5px}
.palette summary::-webkit-details-marker{display:none}
.palette summary::before{content:'+';font-size:17px;font-weight:600;color:var(--ink-soft);width:14px;text-align:center}
.palette[open] summary::before{content:'–'}
.palette summary:hover{background:var(--panel-alt);border-radius:var(--radius)}
.palette .pal-sel{font-weight:500;font-size:12px;padding:1px 8px;border-radius:9px;background:var(--rule-soft)}
.palette>p,.palette>.templates,.palette>.template-toggles{margin-left:14px;margin-right:14px}
.palette[open]>.template-toggles{margin-bottom:12px}
.inv-session{background:var(--panel);border:1px solid var(--rule);border-radius:7px;padding:10px 12px;margin-bottom:8px}
.inv-session summary{cursor:pointer;display:flex;align-items:center;gap:8px;font-size:13.5px}
.inv-session summary .icb{margin-left:auto}
.inv-session ul{margin:10px 0 0;padding-left:20px;font-size:13px}
.stock-lot{border-left:3px solid var(--rule-strong);flex-wrap:wrap}
.stock-lot.lot-danger{border-left-color:var(--danger)}
.stock-lot.lot-warn{border-left-color:var(--warn-ink)}
.stock-lot.lot-ok{border-left-color:var(--ok)}
.stock-chip.active{outline:2px solid var(--action);outline-offset:-2px}
.templates{display:flex;gap:8px;overflow-x:auto;padding:12px 0 4px}
.template{border:2px solid transparent;border-radius:5px;min-width:111px;text-align:left;padding:8px 10px;flex-shrink:0;touch-action:none;cursor:grab}
.template b,.template small{display:block}.template.selected{outline:3px solid var(--action);outline-offset:1px}
/* Absences : une seule famille de couleur neutre (jamais les teintes vives des créneaux horaires)
   pour que la nature "absence" saute aux yeux au premier coup d'œil, lisible clair/sombre. */
.absence-template{background:var(--info-bg);color:var(--info-ink);border-color:var(--info-border)}
.template-divider{flex:0 0 auto;width:1px;align-self:stretch;background:var(--rule-strong);margin:2px 4px}
.template-toggles{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.panel-foot{padding:10px 16px;border-top:1px solid var(--rule)}
.dash-week{font-size:13px;color:var(--ink-soft);margin:-6px 0 14px;font-weight:600}
.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:12px;margin-bottom:18px}
.bday-today{background:var(--warn-bg)}
.stat{background:var(--panel);border:1px solid var(--rule);padding:15px;border-radius:var(--radius);box-shadow:var(--shadow-sm);display:block;width:100%;text-align:left;font:inherit;color:inherit;transition:box-shadow .15s,transform .1s}
.stat-click:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.stat strong{display:block;font-size:26px;letter-spacing:-.04em}.stat span{font-size:12px;color:var(--ink-soft)}
.stat-click{cursor:pointer}
.stat-click:hover{border-color:var(--action)}
.alert-panel{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:8px;margin-bottom:18px;overflow:hidden}
.alert-panel-head{display:flex;align-items:center;gap:8px;padding:11px 16px;font-weight:700;font-size:14px;color:var(--warn-ink);border-bottom:1px solid var(--warn-border)}
.alert-panel-head .count{background:var(--warn-ink);color:var(--warn-bg)}
.alert-panel-body .item{border-bottom:1px solid var(--warn-border)}
.alert-panel-body .item:last-child{border-bottom:none}
.alert-panel-body .item-main p{color:var(--warn-ink)}
.alert-banner{
  display:flex;align-items:center;gap:8px;margin:0 0 14px;padding:11px 16px;
  background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink);
  border-radius:8px;font-weight:700;font-size:14px;
}
.msg-shortcut{position:relative}
.msg-shortcut .tab-dot{position:relative;top:-1px}
.day-layout{display:grid;grid-template-columns:1.15fr 1fr;gap:18px;align-items:start}
.daily-person{padding:13px 16px;border-bottom:1px solid var(--rule-soft)}
.daily-person:last-child{border-bottom:0}.daily-person-head{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.timeline{position:relative;height:28px;background:repeating-linear-gradient(90deg,var(--panel-alt) 0,var(--panel-alt) calc(4.1667% - 1px),var(--rule-soft) calc(4.1667% - 1px),var(--rule-soft) 4.1667%);border-radius:4px;overflow:hidden;margin-top:7px}
.timeblock{position:absolute;top:3px;height:22px;border-radius:3px;min-width:3px;font-size:10px;padding:3px;overflow:hidden;white-space:nowrap}
.timeaxis{display:flex;justify-content:space-between;color:var(--ink-faint);font-size:10px;margin-top:3px}
.taskrow{padding:5px 12px;border-bottom:1px solid var(--rule-soft);display:flex;align-items:center;gap:10px}
.taskrow:last-child{border-bottom:0}.taskrow .taskcopy{flex:1;min-width:0}.taskrow.done .tasktitle{text-decoration:line-through;color:var(--ink-soft)}
.taskrow p{margin:3px 0;font-size:12px;color:var(--ink-soft)}
.taskrow .tasksub{flex:1 1 120px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ink-faint)}
@media(max-width:640px){.taskrow .tasksub{flex-basis:100%}.taskrow .tasktime{min-width:0}.taskrow .tasktitle{flex:1 1 110px;min-width:0}}
.tasktime{font-size:12px;font-variant-numeric:tabular-nums;color:var(--ink-soft);min-width:42px}
.taskwho{font-size:11px;color:var(--ink-faint)}
.tasktitle{font-size:14px}
/* Statut À FAIRE/EN RETARD/TERMINÉ (refonte visuelle demandée par l'utilisateur, LOT 3) : le
   titre passe en rouge en plus du badge quand la tâche est en retard, pour rester lisible même
   dans une liste dense. */
.tasktitle-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.taskrow.late .tasktitle{color:var(--danger)}
.taskcheck{width:28px;height:28px;flex:0 0 auto;border:1px solid var(--rule-strong);border-radius:6px;background:var(--field-bg);font-weight:bold;color:var(--ink);transition:transform .08s}
.taskcheck.checked{background:var(--ok);border-color:var(--ok);color:white;animation:task-check-pop .28s ease-out}
.taskcheck:disabled{cursor:default;opacity:.55}
.taskcheck:active{transform:scale(.9)}
/* Feedback bref à la validation (refonte visuelle, LOT 3 point 5 : "pas d'animation excessive") —
   rejoue à chaque rendu où la case est déjà cochée (pas seulement à l'instant du clic, le rendu
   étant une reconstruction complète du DOM sans état transitoire côté tasks.js), donc volontairement
   très courte pour rester discrète même répétée. */
@keyframes task-check-pop{0%{transform:scale(.6)}60%{transform:scale(1.15)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.taskcheck.checked{animation:none}}
.period-tabs{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.period-tabs button{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 16px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--panel);color:var(--ink);font-weight:600;font-size:13px;cursor:pointer;box-shadow:var(--shadow-sm);transition:background .12s}
.period-tabs button:hover{background:var(--panel-alt)}
.period-tabs button.active{background:var(--chrome);border-color:var(--chrome);color:#fff}
.period-tabs .period-range{font-size:11px;font-weight:400;opacity:.8}
/* Progression par période (refonte visuelle, LOT 3 : "Matin 2/4" plutôt qu'un simple total). */
.period-frac{font-size:13px;font-weight:700;margin-top:1px}
.period-frac.muted{font-weight:400;opacity:.6}
.period-mini-bar{width:44px;height:4px;background:var(--rule-soft);border-radius:3px;overflow:hidden;margin-top:2px}
.period-tabs button.active .period-mini-bar{background:#ffffff40}
.period-mini-bar i{display:block;height:100%;background:var(--ok);border-radius:inherit}
.period-tabs button.active .period-mini-bar i{background:#ffffff}
.task-actions{display:flex;gap:4px}.task-filters{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:14px}
.task-filters input,.task-filters select,.section-title input,.section-title select{padding:8px;border:1px solid var(--rule);border-radius:6px;background:var(--field-bg);color:var(--ink)}
.table-scroll{overflow:auto;background:var(--panel);border:1px solid var(--rule);border-radius:7px}
.data-table{border-collapse:collapse;width:100%;font-size:13px;white-space:nowrap}
.data-table th,.data-table td{text-align:left;padding:11px 13px;border-bottom:1px solid var(--rule-soft)}.data-table th{background:var(--panel-alt);font-size:12px;color:var(--ink-soft)}
.data-table td.num{text-align:right;font-variant-numeric:tabular-nums}.data-table tr:last-child td{border-bottom:0}
.kiosk-box{position:relative;background:var(--chrome);color:#f1f5f8;border-radius:14px;padding:22px 26px;margin-bottom:18px}
.kiosk-box .muted{color:#b9cad7}
.kiosk-punch-confirm{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  background:var(--chrome);border-radius:14px;text-align:center;padding:22px;animation:kiosk-punch-confirm-in .25s ease-out}
.kiosk-punch-confirm-check{width:64px;height:64px;border-radius:50%;background:#1c7a4d;color:#fff;display:flex;align-items:center;justify-content:center;margin-bottom:6px}
.kiosk-punch-confirm-greet{margin:0;font-size:22px;font-weight:700}
.kiosk-punch-confirm-status{margin:0;font-size:16px;color:#cfe3d6}
.kiosk-punch-confirm-time{margin:0;font-size:30px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
@keyframes kiosk-punch-confirm-in{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.kiosk-punch-confirm{animation:none}}
/* Badge refusé (LOT 5) : même carte plein cadre que l'acceptation, teintée rouge au lieu de
   verte — statut clair d'un coup d'œil, même à distance de la tablette. */
.kiosk-punch-reject{background:#3d1f22}
.kiosk-punch-reject-icon{background:var(--danger)}
.kiosk-punch-reject .kiosk-punch-confirm-status{color:#f3d3d3;font-size:18px;font-weight:600;max-width:26ch}
.kiosk-standby{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:16px}
.kiosk-clockwrap{display:flex;flex-direction:column;gap:2px}
.kiosk-clock{font-size:42px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1}
.kiosk-date{font-size:13.5px;color:#b9cad7;text-transform:capitalize}
.kiosk-badge-icon{position:relative;width:80px;height:80px;border-radius:50%;border:2px dashed #3c4b59;display:flex;align-items:center;justify-content:center;font-size:32px;flex:0 0 auto}
/* Élément NFC animé (LOT 5) : deux anneaux qui se dilatent en boucle autour du badge, comme une
   onde — signale que la tablette attend activement un passage de badge, plutôt qu'un pictogramme
   figé. Purement décoratif (aucun lien avec l'état réel du lecteur, déjà donné par
   nfcStatusLines() juste au-dessus) : reste identique que ce soit le NFC, un lecteur USB ou la
   simple saisie du champ qui attend. */
.kiosk-badge-pulse{position:absolute;inset:0;border-radius:50%;border:2px solid var(--action);opacity:0;animation:kiosk-badge-ping 2.4s ease-out infinite}
.kiosk-badge-pulse-2{animation-delay:1.2s}
@keyframes kiosk-badge-ping{0%{transform:scale(1);opacity:.55}75%{opacity:0}100%{transform:scale(1.55);opacity:0}}
@media (prefers-reduced-motion:reduce){.kiosk-badge-pulse{animation:none;display:none}}
.kiosk-prompt{margin:0 0 14px;font-size:15.5px;color:#dfe4e8}
/* Couleurs fixes (pas de jeton thème) : .kiosk-box reste toujours sombre (voir --chrome, non
   redéfini en clair), donc un jeton adaptatif y perdrait tout contraste en thème clair — même
   logique que .kiosk-offline-pill juste au-dessus. */
.kiosk-nfc-status{display:flex;align-items:center;gap:6px;margin:-6px 0 14px;font-size:13px;font-weight:600;color:#bcdcea}
.kiosk-nfc-status.ok{color:#8fe0a8}
.kiosk-reader{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.kiosk-reader input{padding:13px 15px;border-radius:8px;border:0;min-width:200px;flex:1;background:#1e2933;color:#fff;font-size:15px}
.kiosk-reader input::placeholder{color:#7c8b98}
.kiosk-reader .btn,.kiosk-reader .btn-ghost{padding:13px 18px;font-size:14.5px}
.kiosk-identified{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:16px}
.kiosk-greet p{margin:0 0 2px;font-size:13.5px;color:#b9cad7}
.kiosk-greet h2{margin:0;font-size:28px;font-weight:700}
.kiosk-status{background:#1c332a;color:#8fd6b6;border-radius:10px;padding:10px 20px;text-align:center;flex:0 0 auto;min-width:132px}
.kiosk-status.away{background:#3a3220;color:#e8c876}
.kiosk-status .ico{font-size:21px}
.kiosk-status .lbl{font-weight:600;font-size:13px}
.kiosk-status .val{font-size:12.5px;font-variant-numeric:tabular-nums}
.kiosk-actions{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:2px}
.kiosk-actions .btn{flex:1;min-width:150px;padding:13px 0;font-size:15px}
.kiosk-tasks-hint{background:#1e2933;border-radius:10px;padding:11px 15px;font-size:13px;color:#c3ccd4;margin-top:14px}
.kiosk-tasks-hint b{color:#fff}
.kiosk-offline-pill{background:#3a3220;color:#e8c876;border-radius:10px;padding:9px 14px;font-size:12.5px;font-weight:600;margin-bottom:14px}
.print-only{display:none}

/* ---------- messagerie ---------- */
.item-main .msgtext{color:var(--ink);font-size:13.5px;margin:0 0 3px;white-space:pre-wrap;word-break:break-word}
.msg-list{display:flex;flex-direction:column;gap:6px;padding:16px;max-height:420px;overflow-y:auto}
.msg-day{align-self:center;font-size:11px;font-weight:600;color:var(--ink-faint);background:var(--panel);border:1px solid var(--rule-soft);padding:2px 11px;border-radius:20px;margin:10px 0 4px;text-transform:capitalize}
.msg-day:first-child{margin-top:0}
.msg{position:relative;max-width:78%;padding:9px 13px;border-radius:16px;background:var(--panel-alt);box-shadow:0 1px 1px rgba(16,24,32,.04)}
.msg .msgtext{margin:0 0 3px;white-space:pre-wrap;word-break:break-word}
.msg span{display:block;font-size:10.5px;color:var(--ink-soft)}
.msg-mine{align-self:flex-end;background:var(--action);color:var(--action-ink);border-bottom-right-radius:4px}
.msg-mine span{color:var(--action-ink);opacity:.8}
.msg-them{align-self:flex-start;border-bottom-left-radius:4px}
.msg-del{position:absolute;top:2px;right:2px;background:none;border:none;color:inherit;opacity:.4;font-size:15px;line-height:1;padding:3px 5px;cursor:pointer;border-radius:5px}
.msg-del:hover{opacity:1;background:rgba(0,0,0,.1)}
.msg-photos{margin:2px 0 5px}
.msg-mine .logbook-thumb{border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.14)}
.message-form{display:flex;flex-direction:column;gap:8px;padding:10px 14px;border-top:1px solid var(--rule)}
.message-form textarea{width:100%;min-height:44px;max-height:140px;resize:vertical;padding:9px 11px;border:1px solid var(--rule);border-radius:6px;background:var(--field-bg);color:var(--ink)}
.message-form-actions{display:flex;align-items:center;gap:8px}
.message-form-actions .btn{margin-left:auto}
#message-attach{position:relative;font-size:15px}
#message-attach-count:not(:empty){position:absolute;top:-5px;right:-5px;background:var(--action);color:#fff;border-radius:8px;font-size:9.5px;font-weight:700;min-width:14px;height:14px;line-height:14px;text-align:center;padding:0 2px}
.tab-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--danger);margin-left:6px;vertical-align:middle}
.msg-toptabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}
.msg-toptabs button{display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid var(--rule-strong);border-radius:8px;background:var(--panel);color:var(--ink);font-weight:600;font-size:13px;cursor:pointer;position:relative}
.msg-toptabs button:hover{background:var(--panel-alt)}
.msg-toptabs button.active{background:var(--chrome);border-color:var(--chrome);color:#fff}
.msg-toptabs .tab-dot{position:absolute;top:5px;right:6px}
.msg-shell{display:flex;height:min(640px,70vh);min-height:360px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--panel);overflow:hidden}
.conv-list{flex:0 0 270px;border-right:1px solid var(--rule-strong);overflow-y:auto;display:flex;flex-direction:column}
.conv-search{flex:0 0 auto;margin:0;padding:10px 10px 8px;border-bottom:1px solid var(--rule-soft);position:sticky;top:0;background:var(--panel);z-index:1}
.conv-item{display:flex;align-items:center;gap:10px;padding:11px 12px;border-bottom:1px solid var(--rule-soft);text-align:left;background:transparent;width:100%}
.conv-item:hover{background:var(--panel-alt)}
.conv-item.sel{background:var(--panel-alt);box-shadow:inset 3px 0 0 var(--action)}
.conv-avatar{width:32px;height:32px;font-size:12.5px}
.conv-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.conv-main b{font-size:13.5px;font-weight:600}
.conv-main small{color:var(--ink-soft);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.conv-item.has-unread .conv-main small{color:var(--ink);font-weight:500}
.conv-meta{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.conv-meta i{font-style:normal;font-size:11px;color:var(--ink-faint)}
.msg-pane{flex:1;min-width:0;display:flex;flex-direction:column}
.msg-pane-head{display:flex;align-items:center;gap:9px;padding:11px 14px;border-bottom:1px solid var(--rule);font-weight:600}
.msg-thread-wrap{flex:1;overflow-y:auto}
.msg-pane .msg-list{max-height:none;min-height:100%}
.msg-empty{flex:1;display:grid;place-items:center;color:var(--ink-faint);font-size:13.5px;padding:20px}
.conv-back{display:none}
@media(max-width:700px){
  .msg-shell{height:min(560px,75vh)}
  .msg-shell:not(.thread-open) .msg-pane{display:none}
  .msg-shell:not(.thread-open) .conv-list{flex:1}
  .msg-shell.thread-open .conv-list{display:none}
  .conv-back{display:inline-block;margin-right:2px}
}

/* ---------- historique ---------- */
.history-list{background:var(--panel);border-radius:7px}
.history-item{padding:11px 15px;border-bottom:1px solid var(--rule-soft)}
.history-item:last-child{border-bottom:0}
.history-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;justify-content:space-between}
.history-head b{font-size:13.5px;font-weight:600}
.history-meta{font-size:11.5px;color:var(--ink-faint);white-space:nowrap}
.history-sub{margin:6px 0 0;padding-left:18px;font-size:12.5px;color:var(--ink-soft)}
.history-sub li{margin-bottom:2px}
/* Lot 1.104.0 : page Historique (recherche, filtres repliables, liste par jour, « Voir plus », détail). Textes secondaires en --ink-soft
   (lisibles sur le fond de page comme sur les cartes) ; --ink-faint seulement sur fond de carte. Cibles de 44 px au doigt. */
.hist{max-width:1100px}
.hist-head{align-items:flex-start}.hist-head>div{flex:1;min-width:0}.hist-head h1{margin:0 0 2px}.hist-head .mini{min-height:44px}
.hist-search{margin-bottom:10px}
.hist-search input{width:100%;min-height:48px;padding:10px 14px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--field-bg);font-size:16px}
.hist-search input:focus{outline:2px solid var(--action);outline-offset:1px}
.hist-filters>summary{padding:12px 14px;min-height:44px}
.hist-filters .tk-field select,.hist-filters .tk-field input{min-height:44px}
.hist-count{display:inline-block;min-width:20px;margin-left:4px;padding:0 6px;border-radius:999px;background:var(--action);color:var(--action-ink);font-size:11px;font-weight:700;line-height:18px;text-align:center}
.hist-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;margin:4px 0 12px}.hist-toolbar .mini{min-height:44px}
.hist-summary{margin:0;flex:1 1 220px;min-width:0;font-size:13px;color:var(--ink-soft)}.hist-summary b{color:var(--ink)}
.hist-error{color:var(--danger);font-size:13.5px;margin:0 0 10px}
.hist-day{margin-bottom:16px}
.hist-day-title{margin:0 0 6px;font-size:14px;font-weight:700;color:var(--ink)}.hist-day-title::first-letter{text-transform:uppercase}
.hist-day-title span{margin-left:6px;font-size:12px;font-weight:600;color:var(--ink-soft)}
.hist-rows{list-style:none;margin:0;padding:0;border:1px solid var(--rule);border-radius:10px;overflow:hidden}
.hist-row{display:grid;grid-template-columns:50px minmax(0,1fr) 14px;gap:10px;align-items:start;width:100%;min-height:52px;margin:0;padding:11px 14px;
  border:0;border-bottom:1px solid var(--rule-soft);border-radius:0;background:var(--panel);color:var(--ink);text-align:left;font:inherit}
.hist-rows li:last-child .hist-row{border-bottom:0}
.hist-row:hover{background:var(--panel-hover)}.hist-row:focus-visible{outline:2px solid var(--action);outline-offset:-2px}
.hist-time{padding-top:1px;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink-soft)}
.hist-main{display:block;min-width:0}
.hist-title{display:block;font-size:14px;font-weight:600;line-height:1.35;overflow-wrap:anywhere}
.hist-row .history-sub{overflow-wrap:anywhere}
.hist-lines{display:block;padding-left:0}.hist-line{display:block;position:relative;margin-bottom:2px;padding-left:14px}.hist-line::before{content:'•';position:absolute;left:3px}
.hist-line.hist-more-items::before{content:none}
.hist-toolbar .hist-chip{min-height:44px;border-color:var(--action);background:var(--action-bg);color:var(--ink);font-weight:600}
.hist-chip span{margin-left:4px;font-size:15px}
.hist-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:5px;font-size:12px;color:var(--ink-soft)}
.hist-who{overflow-wrap:anywhere}
.hist-cat{padding:1px 8px;border:1px solid var(--rule);border-radius:999px;background:var(--panel-alt);color:var(--ink-soft)}
.hist-go{align-self:center;font-size:18px;color:var(--ink-faint)}
.hist-hl{padding:0 1px;border-radius:3px;background:var(--warn-bg);color:var(--ink);box-shadow:0 0 0 1px var(--warn-border)}
.hist-more-items{list-style:none;color:var(--ink-soft);font-style:italic}
.hist-days.is-loading{opacity:.6;transition:opacity .15s}
.hist-foot{display:flex;flex-direction:column;align-items:center;gap:8px;margin:4px 0 8px}.hist-more{min-height:44px;min-width:220px}
.hist-kept{margin:10px 0 0;text-align:center;font-size:12.5px;color:var(--ink-soft)}
.hist-state{display:flex;flex-direction:column;align-items:center;gap:6px;padding:28px 16px;border:1px solid var(--rule);border-radius:10px;background:var(--panel);text-align:center}
.hist-state p{margin:0}.hist-state .mini,.hist-state .btn{min-height:44px;margin-top:6px}
.hist-detail{display:grid;gap:16px;min-width:0}
.hist-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 18px;margin:0}
.hist-facts dt,.hist-fields dt{font-size:12px;font-weight:600;color:var(--ink-soft)}
.hist-facts dd,.hist-fields dd{margin:2px 0 0;min-width:0;overflow-wrap:anywhere}
.hist-block h4{margin:0 0 6px;font-size:13.5px;font-weight:700}
.hist-fields{display:grid;margin:0}.hist-fields>div{display:grid;grid-template-columns:minmax(110px,32%) minmax(0,1fr);gap:10px;padding:7px 0;border-bottom:1px solid var(--rule-soft)}
.hist-fields>div:last-child{border-bottom:0}.hist-fields>div>dd{margin:0}
.hist-fields .hist-fields{padding-left:10px;border-left:2px solid var(--rule-soft)}
.hist-vlist{margin:0;padding-left:18px}
.hist-change{margin-bottom:6px;padding:8px 10px;border:1px solid var(--rule-soft);border-radius:8px}.hist-change.changed{border-color:var(--rule-strong)}
.hist-ba{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:start;margin-top:4px}
.hist-before,.hist-after{min-width:0;overflow-wrap:anywhere}.hist-before small,.hist-after small{display:block;font-size:11px;font-weight:600;color:var(--ink-soft)}
.hist-arrow{color:var(--ink-soft)}
.hist-tech>summary{min-height:44px;padding:13px 0;box-sizing:border-box;cursor:pointer;font-size:13px;color:var(--ink-soft)}
.hist-tech pre{max-height:260px;margin:0;padding:10px;overflow:auto;border-radius:8px;background:var(--panel-alt);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:720px){.hist-row{grid-template-columns:44px minmax(0,1fr) 12px;gap:8px;padding:11px 12px}.hist-fields>div{grid-template-columns:1fr;gap:2px}
  .hist-ba{grid-template-columns:1fr}.hist-arrow{display:none}.hist-more{width:100%}}
.system-page{max-width:1200px}
.system-page .section-title>div{margin-right:auto}
.system-page .section-title h1{margin:0}
.system-page .section-title p{margin:3px 0 0}
.system-hero{display:flex;align-items:center;gap:13px;padding:16px 18px;border:1px solid;border-radius:10px;margin-bottom:16px}
.system-hero.system-ok{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.system-hero.system-warning{background:var(--warn-bg);border-color:var(--warn-border);color:var(--warn-ink)}
.system-hero .system-dot{width:12px;height:12px;box-shadow:0 0 0 5px color-mix(in srgb,currentColor 14%,transparent)}
.system-hero div{display:flex;flex-direction:column;gap:2px}
.system-hero strong{font-size:15px}.system-hero span{font-size:12.5px}
.system-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.system-card{background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);padding:17px 18px;min-width:0}
.system-card-wide{grid-column:span 2}
.system-card h2{margin:0 0 12px;font-size:15px;letter-spacing:-.01em}
.system-card dl{margin:10px 0 0}
.system-card dl>div{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;padding:8px 0;border-bottom:1px solid var(--rule-soft)}
.system-card dl>div:last-child{border-bottom:0}
.system-card dt{color:var(--ink-soft);font-size:12.5px}.system-card dd{margin:0;text-align:right;font-size:13px;font-weight:600;overflow-wrap:anywhere}
.system-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px}
.system-badge{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;border:1px solid;border-radius:999px;padding:4px 9px}
.system-badge.system-ok{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-border)}
.system-badge.system-warning{color:var(--warn-ink);background:var(--warn-bg);border-color:var(--warn-border)}
.system-badge.system-danger{color:var(--danger);background:var(--danger-bg);border-color:var(--danger-border)}
.system-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:currentColor;flex:0 0 auto}
.system-meter{height:7px;border-radius:5px;background:var(--rule-soft);overflow:hidden;margin:14px 0 5px}
.system-meter i{display:block;height:100%;background:var(--action);border-radius:inherit}
.system-card small,.system-note{display:block;margin:6px 0 0;color:var(--ink-faint);font-size:11.5px;line-height:1.45}
.system-loading,.system-error{background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);padding:28px;text-align:center;color:var(--ink-soft)}
.system-error{color:var(--danger);background:var(--danger-bg);border-color:var(--danger-border)}
.system-error p{color:var(--danger);margin:6px 0 14px}
.system-spinner{display:inline-block;width:16px;height:16px;margin-right:8px;vertical-align:-3px;border:2px solid var(--rule-strong);border-top-color:var(--action);border-radius:50%;animation:system-spin .8s linear infinite}
@keyframes system-spin{to{transform:rotate(360deg)}}
/* .spinner : utilisé tel quel dans procedures.js (4 écrans de chargement) sans aucune règle
   correspondante jusqu'ici — div vide invisible, pas de spinner du tout à l'écran (bug trouvé
   pendant la refonte visuelle, LOT 1 point 10 "skeletons"). Même anneau que .system-spinner, en
   plus grand et centré pour un écran de chargement plein cadre. */
.spinner{width:28px;height:28px;margin:0 auto 10px;border:3px solid var(--rule-strong);border-top-color:var(--action);border-radius:50%;animation:system-spin .8s linear infinite}
/* Skeleton shimmer : primitive de chargement réutilisable (refonte visuelle, LOT 1 point 1) —
   un ou plusieurs <div class="skeleton"> de la largeur/hauteur voulue via style inline. */
.skeleton{background:linear-gradient(90deg,var(--panel-alt) 25%,var(--rule-soft) 37%,var(--panel-alt) 63%);background-size:400% 100%;animation:skeleton-shimmer 1.4s ease infinite;border-radius:var(--radius-sm)}
@keyframes skeleton-shimmer{0%{background-position:100% 50%}100%{background-position:0 50%}}
@media (prefers-reduced-motion:reduce){.spinner,.system-spinner{animation-duration:1.6s}.skeleton{animation:none;background:var(--panel-alt)}}
.sheet.sheet-wide{max-width:880px}
.procedure-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:14px}
.procedure-card{background:var(--panel);border:1px solid var(--rule-strong);border-radius:var(--radius);padding:17px 18px;min-width:0}
.procedure-card-inactive{background:var(--panel-alt);opacity:.82}
.procedure-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.procedure-card h2{font-size:17px;margin:4px 0 0;overflow-wrap:anywhere}
.eyebrow{display:block;font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--action);margin:0}
/* Violet réservé aux procédures/fonctions métier (refonte visuelle, LOT 1 point 3) : distingue
   ce repère de l'accent "action" générique utilisé partout ailleurs (bleu). */
.procedure-category{display:block;font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--purple);margin:0}
.procedure-meta{color:var(--ink-soft);font-size:12.5px;margin:10px 0 0;line-height:1.45}
.procedure-step-preview{margin:12px 0;padding-left:22px;font-size:13px}
.procedure-step-preview li{padding:3px 0}.procedure-step-preview li span{display:inline-block;margin-right:7px;color:var(--ink-faint);font-size:11px;font-weight:600;text-transform:uppercase}
.procedure-actions{display:flex;gap:7px;flex-wrap:wrap;padding-top:12px;border-top:1px solid var(--rule-soft)}
.procedure-empty{padding:42px 24px;text-align:center;background:var(--panel);border:1px dashed var(--rule-strong);border-radius:var(--radius);color:var(--ink-soft)}
.procedure-empty h2{color:var(--ink);margin:8px 0 4px}.procedure-empty p{margin:0 0 14px}.procedure-empty .empty-icon{font-size:34px}
.procedure-editor-panel{border:1px solid var(--rule);border-radius:var(--radius);padding:14px;margin:0 0 14px;background:var(--panel-alt)}
.procedure-editor-panel h3{font-size:14px;margin:0 0 12px}.procedure-editor-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.procedure-editor-heading p{margin:3px 0 12px}.procedure-days{display:flex;gap:7px;flex-wrap:wrap;margin:-2px 0 13px}
.procedure-days label,.checkline{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-soft)}
.procedure-step-editor{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:10px;padding:13px 0;border-top:1px solid var(--rule)}
.procedure-step-editor:first-child{border-top:0}.procedure-step-number{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;background:var(--chrome);color:#fff;font-size:12px;font-weight:700}
.procedure-step-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.procedure-step-fields>.field{margin-bottom:8px}
.procedure-step-config{display:grid;grid-template-columns:1fr;gap:0;margin-top:10px}.procedure-step-config [hidden]{display:none!important}
.procedure-step-controls{display:flex;flex-direction:column;gap:5px}.procedure-step-controls .mini{padding:4px 8px}
.procedure-section-tabs{padding-bottom:0}.procedure-tabs{display:flex;gap:4px;border-bottom:1px solid var(--rule);overflow-x:auto}
.procedure-tabs button{border:0;background:none;color:var(--ink-soft);font:inherit;font-size:13.5px;font-weight:650;padding:10px 16px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer;transition:color .12s}
.procedure-tabs button:not(.active):hover{color:var(--ink)}
.procedure-tabs button.active{color:var(--action);border-bottom-color:var(--action)}.procedure-back-day{margin-bottom:12px}
.procedure-kiosk-identity{padding-bottom:0}.procedure-date-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.procedure-date-tools input{min-height:38px}
/* Géométrie alignée sur .badge (audit UX LOT 8) : Procédures/Incidents utilisaient une forme
   pilule entièrement arrondie pour le même concept de badge de statut que le reste de l'appli
   (angles à peine arrondis ailleurs) — deux formes différentes selon l'écran pour la même idée.
   Couleurs (.status-online/warning/danger/neutral) inchangées, seule la forme est alignée. */
.status-pill{display:inline-flex;align-items:center;border:1px solid var(--rule);border-radius:2px;padding:1px 6px;font-size:11px;font-weight:600;white-space:nowrap}
.status-online{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-border)}.status-warning{color:var(--warn-ink);background:var(--warn-bg);border-color:var(--warn-border)}
.status-danger{color:var(--danger);background:var(--danger-bg);border-color:var(--danger-border)}.status-neutral{color:var(--ink-soft);background:var(--panel-alt)}
.procedure-run-list,.procedure-history-list{display:grid;gap:16px}.procedure-run-card,.procedure-history-card{background:var(--panel);border:1px solid var(--rule);border-radius:11px;overflow:hidden}
.procedure-run-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:17px 18px}.procedure-run-card-head h2{font-size:18px;margin:4px 0 0;overflow-wrap:anywhere}.procedure-run-card-head p{color:var(--ink-soft);font-size:12.5px;margin:5px 0 0}
.procedure-progress{display:flex;align-items:center;gap:11px;padding:0 18px 15px}.procedure-progress>div{height:7px;flex:1;background:var(--rule-soft);border-radius:8px;overflow:hidden}.procedure-progress>div span{display:block;height:100%;background:var(--ok);border-radius:8px}.procedure-progress b{font-size:12px;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.procedure-run-steps{border-top:1px solid var(--rule)}.procedure-run-step{display:grid;grid-template-columns:34px minmax(0,1fr);gap:12px;padding:16px 18px;border-top:1px solid var(--rule-soft)}.procedure-run-step:first-child{border-top:0}.procedure-run-step.completed{background:var(--ok-bg)}
.procedure-run-step-number{display:grid;place-items:center;width:31px;height:31px;border-radius:50%;background:var(--chrome);color:#fff;font-size:13px;font-weight:800}.procedure-run-step.completed .procedure-run-step-number{background:var(--ok)}
.procedure-run-step-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.procedure-run-step-head h3{font-size:15px;margin:2px 0 3px}.procedure-run-step-head p{font-size:11.5px;color:var(--ink-faint);margin:0}.procedure-run-input{display:grid;gap:10px;margin-top:13px;max-width:680px}
.procedure-choice,.procedure-value-line{display:flex;gap:9px;align-items:stretch}.procedure-choice .btn{min-width:110px}.procedure-touch{min-height:46px}.procedure-value-line input{flex:1;min-width:120px}.procedure-proof{margin:0}.procedure-identify-note{margin:0;color:var(--warn-ink);font-size:12.5px;font-weight:600}
.procedure-step-result{display:flex;flex-wrap:wrap;align-items:baseline;gap:7px 12px;margin-top:10px}.procedure-step-result>b{font-size:14px}.procedure-step-result>span{font-size:13px;color:var(--ink-soft)}.procedure-step-result>small{flex-basis:100%;color:var(--ink-faint)}
.procedure-range{margin:0;color:var(--ink-faint);font-size:12px}.procedure-photo-proof input[type=file]{width:100%;min-height:46px;padding:9px;border:1px solid var(--rule-strong);border-radius:7px;background:var(--panel)}.procedure-photo-proof small{display:block;margin-top:5px;color:var(--ink-faint)}
.procedure-run-step.procedure-step-alert{background:var(--danger-bg);border-left:4px solid var(--danger)}.procedure-result-alert>b,.procedure-anomaly-count{color:var(--danger);font-weight:750}.procedure-anomaly-count{font-size:12px!important}.procedure-photo-full{display:grid;place-items:center;min-height:180px}.procedure-photo-full img{display:block;max-width:100%;max-height:72vh;border-radius:8px}.procedure-event-photo{grid-column:1/-1;justify-self:start}
.procedure-history-card{padding-bottom:4px}.procedure-events{list-style:none;margin:0;padding:0 18px 12px}.procedure-event{display:grid;grid-template-columns:minmax(160px,1fr) auto;gap:3px 12px;padding:11px 0;border-top:1px solid var(--rule-soft);font-size:12.5px}.procedure-event span{color:var(--ink-faint);text-align:right}.procedure-event small,.procedure-event em{grid-column:1/-1}.procedure-event em{font-style:normal;color:var(--warn-ink)}.procedure-event.corrected{border-left:3px solid var(--warn-border);padding-left:10px}
.procedure-generate{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.incident-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:0 0 14px}.incident-toolbar label{font-size:12px;font-weight:700;color:var(--ink-soft)}.incident-toolbar select{min-height:38px;min-width:165px}
/* Lot 1.98.0 : tickets lisibles */
.tickets .tk-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}.tickets .tk-head h1{margin:0}
.tk-status{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 10px}.tk-status-chip{border:1px solid var(--rule-strong);background:var(--panel);color:var(--ink-soft);border-radius:999px;padding:6px 12px;font:600 13px system-ui;cursor:pointer}
.tk-status-chip b{margin-left:4px;padding:0 7px;border-radius:999px;background:var(--panel-alt);color:var(--ink)}.tk-status-chip.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}.tk-status-chip.on b{background:rgba(255,255,255,.25);color:inherit}
.tk-filters{border:1px solid var(--rule);border-radius:10px;background:var(--panel);margin-bottom:10px}.tk-filters>summary{cursor:pointer;padding:9px 14px;font-weight:650;list-style-position:inside}
.tk-filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;padding:4px 14px 14px;align-items:end}.tk-field{display:grid;gap:4px;font-size:12px;color:var(--ink-soft)}.tk-field select,.tk-field input{width:100%}.tk-search{grid-column:span 2}
.tk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:4px 0 8px}.tk-summary{margin:0;font-size:13px;color:var(--ink-soft)}.tk-summary b{color:var(--ink)}.tk-nobody-text{color:var(--warn-ink);font-weight:650}
.tk-list{display:grid;border:1px solid var(--rule);border-radius:12px;overflow:hidden;background:var(--panel)}
.tickets .incident-card.tk-row{display:grid;grid-template-columns:5px minmax(0,1fr) 170px 96px 132px;align-items:center;gap:12px;padding:10px 14px 10px 0;border:0;border-bottom:1px solid var(--rule);border-radius:0;box-shadow:none;transform:none;cursor:pointer;background:var(--panel)}
.tickets .incident-card.tk-row:last-child{border-bottom:0}.tickets .incident-card.tk-row:hover,.tickets .incident-card.tk-row:focus-visible{background:var(--panel-hover);outline:none}
.tk-prio{align-self:stretch;background:var(--rule-strong)}.priority-critical>.tk-prio{background:var(--danger)}.priority-high>.tk-prio{background:#e5a50a}.priority-normal>.tk-prio{background:var(--action)}.priority-low>.tk-prio{background:var(--rule-strong)}
.tk-main{min-width:0}.tk-title{font-weight:700;font-size:15px;overflow-wrap:anywhere}.tk-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;font-size:12px}.tk-meta .status-pill{font-size:11px}
.tk-cat{color:var(--ink-soft);font-size:12px}.tk-count{display:inline-flex;align-items:center;gap:3px;color:var(--ink-soft)}
.tk-desc{margin:4px 0 0;font-size:13px;color:var(--ink-soft);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tk-who{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;min-width:0}.tk-who>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tk-avatar{flex:none;width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--info-bg);color:var(--info-ink);border:1px solid var(--info-border)}
.tk-me .tk-avatar{background:var(--action);color:var(--action-ink);border-color:var(--action)}.tk-nobody{color:var(--warn-ink);background:var(--warn-bg);border:1px dashed var(--warn-border);border-radius:999px;padding:3px 10px}
.tk-who.large{font-size:15px}.tk-who.large .tk-avatar{width:32px;height:32px;font-size:12px}
.tk-age{font-size:12px;color:var(--ink-soft);white-space:nowrap}.tk-act{display:flex;justify-content:flex-end}.tk-primary{font-weight:700;border-color:var(--action);color:var(--action)}
.tk-detail .tk-meta{margin:0 0 12px}.tk-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:12px}.tk-detail-grid>div{display:flex;align-items:center;flex-wrap:wrap;gap:8px;border:1px solid var(--rule);border-radius:10px;padding:10px 12px}
.tk-label{width:100%;font-size:12px;color:var(--ink-soft);font-weight:600}
.tk-detail-foot{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.tk-detail-foot .btn{flex:0 0 auto;width:auto;min-width:0;border-radius:999px;padding:9px 16px;white-space:nowrap}
@media(max-width:720px){.tickets .incident-card.tk-row{grid-template-columns:5px minmax(0,1fr) auto;grid-template-areas:"p m m" "p w a" "p g a";row-gap:6px}.tk-prio{grid-area:p}.tk-main{grid-area:m}.tk-assignee{grid-area:w}.tk-age{grid-area:g}.tk-act{grid-area:a;align-self:center}.tk-search{grid-column:auto}}
.incident-list{display:grid;gap:14px}.incident-card{background:var(--panel);border:1px solid var(--rule);border-left:5px solid var(--rule-strong);border-radius:10px;padding:17px 18px;min-width:0}.incident-card.priority-low{border-left-color:var(--ink-faint)}.incident-card.priority-normal{border-left-color:var(--action)}.incident-card.priority-high{border-left-color:var(--warn-border)}.incident-card.priority-critical{border-left-color:var(--danger)}
.incident-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.incident-card-head h2{margin:4px 0 0;font-size:17px;overflow-wrap:anywhere}.incident-badges{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0}.incident-badges span{display:inline-flex;padding:3px 8px;border-radius:999px;background:var(--panel-alt);color:var(--ink-soft);font-size:11.5px;font-weight:650}.incident-priority{color:var(--ink)!important}.incident-description{margin:8px 0;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.incident-photos{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}.incident-actions{margin-top:14px}.incident-history{margin-top:13px;border-top:1px solid var(--rule-soft);padding-top:11px}.incident-history summary{cursor:pointer;color:var(--ink-soft);font-size:12.5px;font-weight:700}.incident-history ol{list-style:none;margin:7px 0 0;padding:0}.incident-history li{display:grid;grid-template-columns:minmax(140px,1fr) auto;gap:3px 12px;padding:8px 0;border-top:1px solid var(--rule-soft);font-size:12px}.incident-history li span{color:var(--ink-faint);text-align:right}.incident-history li small{grid-column:1/-1;color:var(--ink-soft)}.incident-report{min-height:42px}.incident-report-form textarea{resize:vertical}
.kiosk-procedure-shortcut{display:flex;align-items:center;gap:13px;width:100%;margin:0 0 16px;padding:15px 17px;border:1px solid var(--info-border);border-radius:10px;background:var(--info-bg);color:var(--info-ink);text-align:left;cursor:pointer}.kiosk-procedure-shortcut span{display:flex;flex:1;flex-direction:column;gap:2px}.kiosk-procedure-shortcut small{font-size:12px;font-weight:400}
@media(max-width:850px){.day-layout{grid-template-columns:1fr}.section-title h1{font-size:21px}.workspace-tabs button{padding:9px 11px;font-size:13px}}
@media(max-width:700px){.system-grid{grid-template-columns:1fr}.system-card-wide{grid-column:auto}.system-columns{grid-template-columns:1fr;gap:0}.procedure-grid{grid-template-columns:1fr}.procedure-step-editor{grid-template-columns:25px minmax(0,1fr)}.procedure-step-controls{grid-column:2;flex-direction:row}.procedure-step-grid{grid-template-columns:1fr}.sheet.sheet-wide{max-width:100%}.procedure-run-card-head{padding:15px}.procedure-run-step{padding:15px 13px;grid-template-columns:31px minmax(0,1fr);gap:9px}.procedure-run-step-head{flex-direction:column}.procedure-choice,.procedure-value-line{flex-direction:column}.procedure-choice .btn,.procedure-value-line .btn{width:100%;min-height:46px}.procedure-event{grid-template-columns:1fr}.procedure-event span{text-align:left}.procedure-date-tools{width:100%}.procedure-date-tools input{flex:1}.incident-toolbar{justify-content:stretch;flex-wrap:wrap}.incident-toolbar select{flex:1}.incident-card{padding:15px 13px}.incident-card-head{flex-direction:column}.incident-actions .mini,.incident-photos .mini{min-height:42px}.incident-history li{grid-template-columns:1fr}.incident-history li span{text-align:left}.incident-report{width:100%}}

/* Procédures : un espace de pilotage plutôt qu'une succession de grandes zones vides. */
.procedure-workspace{max-width:1240px;margin-inline:auto}
.procedure-section-tabs{max-width:1240px;margin-inline:auto}
.procedure-tabs{width:fit-content;max-width:100%;padding:4px;gap:3px;background:var(--panel-alt);border:1px solid var(--rule-strong);border-radius:10px;box-shadow:var(--shadow-sm)}
.procedure-tabs button{border:1px solid transparent;border-radius:7px;padding:8px 14px;color:var(--ink-soft);font-size:13px;line-height:1.25;transition:background .14s,color .14s,border-color .14s,box-shadow .14s}
.procedure-tabs button:not(.active):hover{background:var(--panel);border-color:var(--rule);color:var(--ink)}
.procedure-tabs button.active{background:var(--panel);border-color:var(--action);border-bottom-color:var(--action);box-shadow:0 1px 3px rgba(15,23,42,.12);color:var(--action)}
.procedure-hero{align-items:flex-start;padding:20px 22px;margin-bottom:18px;border:1px solid var(--purple-border);border-radius:12px;background:linear-gradient(115deg,var(--purple-bg),var(--panel) 62%);box-shadow:var(--shadow-sm)}
.procedure-hero h1{font-size:25px}.procedure-hero .muted{max-width:620px;margin:5px 0 0;line-height:1.5}.procedure-hero>.btn{margin-left:auto}
.procedure-onboarding{display:grid;grid-template-columns:auto minmax(0,1fr);gap:20px 22px;padding:30px;max-width:940px;border:1px solid var(--purple-border);border-radius:12px;background:linear-gradient(135deg,var(--panel),var(--purple-bg));box-shadow:var(--shadow-sm)}
.procedure-onboarding-mark{display:grid;place-items:center;width:58px;height:58px;border-radius:16px;background:var(--purple);color:#fff;box-shadow:0 7px 18px color-mix(in srgb,var(--purple) 30%,transparent)}
.procedure-onboarding-copy h2{margin:4px 0 8px;font-size:22px;letter-spacing:-.025em}.procedure-onboarding-copy>p:not(.eyebrow){max-width:650px;margin:0;color:var(--ink-soft);line-height:1.55}
.procedure-onboarding-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:18px}.procedure-onboarding-steps{grid-column:2;margin:0;padding:15px 0 0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;list-style:none;border-top:1px solid var(--purple-border)}
.procedure-onboarding-steps li{display:flex;align-items:center;gap:8px;color:var(--ink-soft);font-size:12.5px;line-height:1.35}.procedure-onboarding-steps b{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--panel);border:1px solid var(--purple-border);color:var(--purple);font-size:11px;flex:0 0 auto}
.procedure-grid{gap:16px}.procedure-card{position:relative;display:flex;flex-direction:column;padding:19px;border-color:var(--rule-strong);border-radius:12px;box-shadow:var(--shadow-sm);transition:transform .14s,box-shadow .14s,border-color .14s}.procedure-card:hover{transform:translateY(-2px);border-color:var(--purple-border);box-shadow:var(--shadow-md)}
.procedure-card-head>div{position:relative;padding-left:30px}.procedure-card-mark{position:absolute;top:0;left:0;display:grid;place-items:center;width:22px;height:22px;border-radius:6px;background:var(--purple-bg);color:var(--purple)}
.procedure-facts{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}.procedure-facts span{display:inline-flex;align-items:center;padding:3px 7px;border-radius:999px;background:var(--panel-alt);border:1px solid var(--rule);color:var(--ink-soft);font-size:11.5px;font-weight:650}
.procedure-card .procedure-meta{margin-top:10px;min-height:36px}.procedure-step-preview{margin-top:15px;margin-bottom:15px}.procedure-actions{margin-top:auto}.procedure-primary-action{font-weight:700}
.procedure-example-dialog{display:grid;gap:10px}.procedure-example-dialog h2{margin:0;font-size:20px}.procedure-example-dialog>p:not(.eyebrow){margin:0;color:var(--ink-soft);line-height:1.55}.procedure-example-dialog ol{display:grid;gap:8px;margin:4px 0 0;padding:14px 0 0 25px;border-top:1px solid var(--rule-soft);color:var(--ink-soft);line-height:1.4}
.incident-hero{border-color:var(--info-border);background:linear-gradient(115deg,var(--info-bg),var(--panel) 62%)}
.incident-overview{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 15px;margin:-5px 0 14px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--panel)}
.incident-overview>div:first-child{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.incident-overview strong{font-size:13px}.incident-overview strong+span{color:var(--ink-soft);font-size:12.5px}.incident-priority-legend{display:flex;gap:6px;flex-wrap:wrap}.incident-priority-legend span{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--ink-soft)}.incident-priority-legend span::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--rule-strong)}.incident-priority-legend .priority-critical::before{background:var(--danger)}.incident-priority-legend .priority-high::before{background:var(--warn-border)}.incident-priority-legend .priority-normal::before{background:var(--action)}
.incident-toolbar{justify-content:flex-start;padding:0 2px 13px;margin-bottom:16px;border-bottom:1px solid var(--rule-soft)}.incident-toolbar .mini{margin-left:auto}
.incident-card{padding:19px;border-radius:12px;box-shadow:var(--shadow-sm);transition:transform .14s,box-shadow .14s}.incident-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.incident-card-head h2{font-size:18px}
.incident-badges{margin:14px 0 11px}.incident-badges .priority-chip{font-weight:750}.incident-badges .priority-low{background:var(--panel-alt);color:var(--ink-soft)!important}.incident-badges .priority-normal{background:var(--action-bg);color:var(--action)!important}.incident-badges .priority-high{background:var(--warn-bg);color:var(--warn-ink)!important}.incident-badges .priority-critical{background:var(--danger-bg);color:var(--danger)!important}
.incident-description{font-size:14px}.incident-actions{padding-top:14px}.incident-report{font-weight:700}
@media(max-width:700px){.procedure-section-tabs{padding-top:12px}.procedure-tabs{width:100%;overflow-x:auto}.procedure-tabs button{flex:1;padding-inline:11px}.procedure-hero{padding:17px;margin-bottom:15px}.procedure-hero h1{font-size:22px}.procedure-hero>.btn{width:100%;margin-left:0}.procedure-onboarding{grid-template-columns:1fr;padding:22px;gap:15px}.procedure-onboarding-mark{width:50px;height:50px}.procedure-onboarding-steps{grid-column:auto;grid-template-columns:1fr;padding-top:13px}.procedure-card{padding:16px}.incident-overview{align-items:flex-start;flex-direction:column}.incident-toolbar .mini{margin-left:0}.incident-card{padding:16px}}


.kiosk-admin-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 16px;margin:0 0 16px;background:var(--info-bg);color:var(--info-ink);border:1px solid var(--info-border);border-radius:8px;font-size:13.5px;font-weight:600}
.kiosk-admin-bar span{display:flex;align-items:center;gap:8px}
.kiosk-admin-actions{display:flex;gap:8px;flex-wrap:wrap}
.maintenance-banner{background:var(--danger);color:#fff;text-align:center;font-weight:800;font-size:18px;letter-spacing:.02em;padding:16px;border-radius:8px}
/* Bloque toute interaction avec la page en dessous (voir showTranslateReturnBarIfNeeded) : un
   simple bandeau laisserait des formulaires cassés accessibles au clic. */
.translate-block-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(10,14,20,.92);font:14px system-ui}
.translate-block-card{max-width:420px;background:var(--panel);color:var(--ink);border-radius:14px;padding:28px 26px;text-align:center;box-shadow:0 12px 40px rgba(0,0,0,.35)}
.translate-block-title{font-size:17px;font-weight:700;margin:0 0 10px}
.translate-block-body{font-size:14px;color:var(--ink-soft);margin:0 0 18px;line-height:1.5}
.translate-block-card button{padding:10px 20px;border-radius:8px;border:0;background:var(--chrome);color:#fff;font-weight:600;font-size:14px;cursor:pointer}
.translate-block-card button:hover{filter:brightness(1.1)}
.connection-state{position:sticky;top:0;z-index:100;background:var(--info-bg);color:var(--info-ink);padding:10px 20px;font:14px system-ui}.connection-state.error{background:var(--warn-bg);color:var(--warn-ink)}.blocking #app,.blocking #tools,.blocking #veil{pointer-events:none;opacity:.7}
/* Lot 1.97.3 : enregistrement du planning en arrière-plan — l'écran reste utilisable, une pastille discrète le signale */
body.saving:not(.blocking)::after{content:'Enregistrement…';position:fixed;right:14px;bottom:14px;z-index:300;padding:6px 12px;border-radius:999px;background:var(--info-bg);color:var(--info-ink);border:1px solid var(--info-border);font:13px system-ui;pointer-events:none}button:disabled{opacity:.5;cursor:default}
.mobile-bottom-nav{display:none}
@media(max-width:760px){
  .tbtn-mobile-hide{display:none}
  .publishbar{padding:11px 14px}
  .publishbar-note{display:none}
  .publishbar-info{display:inline}
  /* La barre grandit avec l'encoche du bas (env(safe-area-inset-bottom) dans son propre padding,
     ligne suivante) mais cette réserve d'espace pour le contenu restait fixe à 74px — sur un
     téléphone avec une zone de sécurité basse notable, le dernier contenu visible pouvait passer
     derrière la barre (audit UX mobile ciblé, point 12). */
  body.admin,body.employee{padding-bottom:calc(74px + env(safe-area-inset-bottom))}
  body.admin .workspace-tabs,body.employee .workspace-tabs{display:none}
  body.admin .topbar,body.employee .topbar{position:relative}
  body.admin .mobile-bottom-nav,body.employee .mobile-bottom-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;bottom:0;left:0;right:0;z-index:40;background:var(--panel);border-top:1px solid var(--rule);padding:6px 2px calc(6px + env(safe-area-inset-bottom))}
  .mobile-bottom-nav button{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 6px;margin:0 2px;font-size:10.5px;background:none;border:none;color:var(--ink-soft);border-radius:12px;transition:background .15s,color .15s}
  /* Onglet actif = pastille pleine (icône + texte), pas juste un changement de couleur du texte
     (refonte visuelle demandée par l'utilisateur, LOT 1 point 8 : "immédiatement évident quel
     onglet est ouvert"). */
  .mobile-bottom-nav button.active{color:var(--action);background:var(--action-bg);font-weight:600}
  .mobile-bottom-nav button:active{transform:scale(.95)}
  .mobile-bottom-nav .mbn-icon{display:flex;align-items:center;justify-content:center;height:20px}
  .mobile-bottom-nav .tab-dot{position:absolute;top:2px;right:calc(50% - 16px);margin-left:0}
  .mbn-badge{position:absolute;top:0;right:calc(50% - 19px);background:var(--danger);color:#fff;font-size:9px;font-weight:700;min-width:15px;height:15px;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 3px;line-height:1;font-variant-numeric:tabular-nums}
  /* Cartes stat compactées : la version desktop (padding 15px, chiffre 26px) prenait trop de
     hauteur utile sur un écran de téléphone une fois empilée 2+1 (grille auto-fit déjà en place). */
  .statgrid{gap:8px;margin-bottom:14px}
  .stat{padding:10px 12px}
  .stat strong{font-size:19px}
  .stat span{font-size:11px}
  .weekbar-more{display:grid;margin-left:auto}
}
.more-group{padding:6px 0}
.more-group+.more-group{border-top:1px solid var(--rule-soft)}
.more-group-label{padding:10px 14px 4px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint)}
.more-item{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:none;border:none;padding:10px 14px;font:inherit;color:inherit;cursor:pointer}
.more-item:hover{background:var(--panel-alt)}
.more-item svg:first-child{color:var(--ink-soft)}
.more-item svg:last-child{color:var(--ink-faint)}
.more-item-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.more-item-copy b{font-size:14px;font-weight:600}
.more-item-copy small{font-size:12px;color:var(--ink-soft)}
/* ---- Relevés de température : cartes tactiles, jauge, pavé numérique ---- */
.temp-val.ok{color:var(--ok);font-weight:600}
.temp-val.bad{color:var(--danger);font-weight:700}
.temp-presets{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.temp-hero{display:flex;align-items:center;gap:16px;padding:14px 18px;margin-bottom:6px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm)}
.temp-ring{--pct:0;width:76px;height:76px;flex:0 0 auto;border-radius:50%;background:conic-gradient(var(--ok) calc(var(--pct)*1%),var(--rule-soft) 0);display:grid;place-items:center;position:relative}
.temp-ring::before{content:'';position:absolute;inset:8px;border-radius:50%;background:var(--panel)}
.temp-ring span{position:relative;font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}
.temp-ring small{font-size:13px;font-weight:500;color:var(--ink-faint)}
.temp-hero-copy{display:flex;flex-direction:column;gap:2px;min-width:0}
.temp-hero-copy b{font-size:18px}
.temp-hero-copy span{color:var(--ink-soft);font-size:13px}
.temp-hero.complete{background:var(--ok-bg);border-color:var(--ok-border);animation:temp-pop .5s ease-out}
.temp-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.temp-card{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-height:132px;padding:14px;text-align:left;font:inherit;color:var(--ink);background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .08s,border-color .12s}
.temp-card:active{transform:scale(.97)}
.temp-card:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.temp-card-icon{font-size:34px;line-height:1}
.temp-card-name{font-size:17px;font-weight:700;margin-top:4px}
.temp-card-sub{font-size:12px;color:var(--ink-soft)}
.temp-card-state{font-size:13px;font-weight:600;margin-top:auto}
.temp-card-range{font-size:11px;color:var(--ink-faint)}
.temp-card.due{border-color:var(--action);background:var(--action-bg)}
.temp-card.late{border-color:var(--danger);background:var(--danger-bg)}
.temp-card.late .temp-card-state{color:var(--danger)}
.temp-card.later{opacity:.72}
.temp-card.done.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.temp-card.done.ok .temp-card-state{color:var(--ok)}
.temp-card.done.bad{border-color:var(--danger);background:var(--danger-bg)}
.temp-card.done.bad .temp-card-state{color:var(--danger)}
@keyframes temp-pop{0%{transform:scale(.96)}60%{transform:scale(1.02)}100%{transform:scale(1)}}

/* Fête d'un quart (Lot Félicitations) : confettis en CSS seul, par-dessus tout (sous l'écran de veille) ; sans mouvement si l'appareil demande moins d'animations. */
.shift-party{position:fixed;inset:0;z-index:2147480000;display:flex;align-items:center;justify-content:center;background:rgba(15,23,42,.72);padding:20px;animation:shift-party-in .35s ease-out}
.shift-party-confetti{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.shift-party-confetti i{position:absolute;top:-24px;left:var(--x);width:10px;height:16px;border-radius:2px;background:hsl(var(--h) 85% 58%);opacity:0;animation:shift-party-fall var(--t) ease-in var(--d) infinite}
.shift-party-card{position:relative;max-width:560px;width:100%;text-align:center;background:var(--panel,#fff);color:var(--ink,#111);border:1px solid var(--ok-border,#86efac);border-radius:20px;padding:32px 24px;box-shadow:0 24px 70px rgba(0,0,0,.45);animation:shift-party-pop .6s cubic-bezier(.2,1.4,.4,1)}
.shift-party-emoji{font-size:64px;line-height:1;margin-bottom:8px}
.shift-party-card h2{margin:0 0 8px;font-size:30px;line-height:1.2}
.shift-party-card p{margin:0 0 20px;font-size:18px;color:var(--ink-soft,#475569)}
.shift-party-card .btn{min-height:48px;min-width:160px;font-size:17px}
@keyframes shift-party-in{from{opacity:0}to{opacity:1}}
@keyframes shift-party-pop{0%{transform:scale(.7);opacity:0}100%{transform:scale(1);opacity:1}}
@keyframes shift-party-fall{0%{transform:translateY(0) rotate(0);opacity:0}8%{opacity:1}100%{transform:translateY(105vh) rotate(var(--r));opacity:1}}
@media (prefers-reduced-motion:reduce){.shift-party,.shift-party-card{animation:none}.shift-party-confetti{display:none}}
.tempk{display:flex;flex-direction:column;gap:10px;outline:0}
.tempk-head{display:flex;align-items:center;gap:12px}
.tempk-head small{display:block;color:var(--ink-soft)}
.tempk-icon{font-size:34px}
.tempk-display{display:flex;align-items:center;gap:10px;padding:10px 14px;border:3px solid var(--rule-strong);border-radius:var(--radius-lg);background:var(--field-bg);transition:border-color .15s,background .15s}
.tempk[data-state=ok] .tempk-display{border-color:var(--ok);background:var(--ok-bg)}
.tempk[data-state=hot] .tempk-display,.tempk[data-state=cold] .tempk-display{border-color:var(--danger);background:var(--danger-bg)}
.tempk-mood{font-size:34px}
.tempk-value{flex:1;font-size:46px;font-weight:700;font-variant-numeric:tabular-nums;text-align:right;line-height:1.1}
.tempk-unit{font-size:20px;color:var(--ink-soft)}
.tempk-back{border:1px solid var(--rule-strong);background:var(--panel);color:var(--ink);border-radius:var(--radius);width:48px;height:48px;font-size:20px;cursor:pointer}
.tempk-msg{margin:0;min-height:20px;text-align:center;font-weight:600;color:var(--ink-soft)}
.tempk[data-state=ok] .tempk-msg{color:var(--ok)}
.tempk[data-state=hot] .tempk-msg,.tempk[data-state=cold] .tempk-msg{color:var(--danger)}
.tempk-step{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.tempk-stepbtn,.tempk-key{min-height:52px;border:1px solid var(--rule-strong);background:var(--panel);color:var(--ink);border-radius:var(--radius);font:inherit;font-size:20px;font-weight:600;cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .06s}
.tempk-stepbtn{font-size:16px;background:var(--action-bg);color:var(--action)}
.tempk-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.tempk-key:active,.tempk-stepbtn:active,.tempk-back:active{transform:scale(.93)}
@media(prefers-reduced-motion:reduce){.temp-hero.complete,.temp-card,.tempk-key{animation:none;transition:none}}
@media(max-width:520px){.temp-cards{grid-template-columns:1fr 1fr}.temp-card{min-height:118px;padding:11px}.tempk-value{font-size:38px}}
/* ---- Gestion des périmés : tuiles, cartes tactiles, retour immédiat ---- */
.stock-hero{display:flex;align-items:center;gap:8px;margin:0 0 10px;padding:10px 14px;border-radius:var(--radius-lg);font-weight:700;font-size:16px;border:1px solid var(--rule)}
.stock-hero.danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger)}
.stock-hero.warn{background:var(--warn-bg);border-color:var(--warn-border);color:var(--warn-ink)}
.stock-hero.ok{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ok)}
.expiry-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.expiry-go{flex:0 0 auto;min-width:92px;padding:0 14px;font:inherit;font-weight:700;color:var(--ok);background:var(--ok-bg);border:0;border-left:1px solid var(--ok-border);cursor:pointer}
.expiry-go:active{background:var(--ok-border)}
.expiry-hero{display:flex;align-items:center;gap:14px;margin:12px 14px;padding:14px 16px;border-radius:var(--radius-lg);border:1px solid var(--rule)}
.expiry-hero b{display:block;font-size:18px}
.expiry-hero span:not(.expiry-hero-emoji){font-size:13px;color:var(--ink-soft)}
.expiry-hero-emoji{font-size:38px;line-height:1}
.expiry-hero.danger{background:var(--danger-bg);border-color:var(--danger-border)}
.expiry-hero.ok{background:var(--ok-bg);border-color:var(--ok-border);animation:temp-pop .5s ease-out}
.expiry-sub{margin:14px 14px 8px;font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft)}
.expiry-panel .expiry-cards{padding:0 14px 14px}
.expiry-card{display:flex;align-items:stretch;min-height:76px;background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);overflow:hidden}
.expiry-card.perime{border-color:var(--danger);background:var(--danger-bg)}
.expiry-card.today{border-color:var(--warn-border);background:var(--warn-bg)}
.expiry-card-main{flex:1;min-width:0;padding:12px 14px}
.expiry-card-main b{font-size:17px;margin-right:6px}
.expiry-card-main p{margin:4px 0 0;font-size:12px;color:var(--ink-soft)}
.expiry-go{min-width:112px;font-size:16px}
.date-chips{display:flex;gap:6px;flex-wrap:wrap;margin:-2px 0 6px}
.qa-hint{min-height:20px;margin:0 0 10px;font-weight:700}
.qa-hint.lot-danger{color:var(--danger)}
.qa-hint.lot-warn{color:var(--warn-ink)}
.qa-hint.lot-ok{color:var(--ok)}
@media(prefers-reduced-motion:reduce){.expiry-hero.ok{animation:none}}
/* ---- Écran de veille de la badgeuse ---- */
.screensaver{position:fixed;inset:0;z-index:2147483000;background:#000;display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-tap-highlight-color:transparent;overflow:hidden;animation:screensaver-in .6s ease-out}
.screensaver-drift{display:flex;flex-direction:column;align-items:center;gap:18px;transition:transform 4s ease-in-out}
.screensaver-drift img{border-radius:30px;opacity:.6}
body.screensaver-on{overflow:hidden}
.screensaver-name{color:#8794a4;font-size:46px;font-weight:700;letter-spacing:.05em}
.screensaver-hint{position:absolute;bottom:6%;margin:0;color:#3a4552;font-size:14px}
@keyframes screensaver-in{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.screensaver{animation:none}.screensaver-drift{transition:none}}
/* ---- Tâches : cartes tactiles et accessibles ---- */
.task-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.task-card{display:flex;align-items:flex-start;gap:12px;min-height:84px;padding:12px 14px;text-align:left;font:inherit;color:var(--ink);background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .08s,border-color .12s}
.task-card:active:not(:disabled){transform:scale(.98)}
.task-card:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.task-card:disabled{cursor:default;opacity:.62}
.task-card-check{flex:0 0 auto;width:44px;height:44px;display:grid;place-items:center;border:3px solid var(--rule-strong);border-radius:50%;background:var(--field-bg);font-size:22px;font-weight:700;color:#fff}
.task-card-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.task-card-title{font-size:16px;overflow-wrap:anywhere}
.task-card-meta{font-size:12px;color:var(--ink-soft)}
.task-card-note{font-size:12px;color:var(--ink-soft);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.task-card-state{margin-top:3px;font-size:13px;font-weight:600}
.task-card.due{border-color:var(--action);background:var(--action-bg)}
.task-card.due .task-card-check{border-color:var(--action)}
.task-card.late{border-color:var(--danger);background:var(--danger-bg)}
.task-card.late .task-card-check{border-color:var(--danger)}
.task-card.late .task-card-state,.task-card.late .task-card-title{color:var(--danger)}
.task-card.later{opacity:.75}
.task-card.done{border-color:var(--ok-border);background:var(--ok-bg)}
.task-card.done .task-card-check{background:var(--ok);border-color:var(--ok);animation:task-check-pop .28s ease-out}
.task-card.done .task-card-title{text-decoration:line-through;color:var(--ink-soft)}
.task-card.done .task-card-state{color:var(--ok)}
.task-closed-cards>.task-cards{padding:10px 0}
@media(pointer:coarse){.taskcheck{width:40px;height:40px}.taskrow{padding-top:7px;padding-bottom:7px}.task-actions .icb{min-width:38px;min-height:38px}}
@media(max-width:520px){.task-cards{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.task-card,.task-card.done .task-card-check{animation:none;transition:none}}
/* ---- Génération automatique, opérations du jour, action corrective ---- */
.model-auto{margin-top:14px;padding:14px 16px}
.model-auto h2{margin:0 0 8px;font-size:15px}
.model-check{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0}
.ops-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-bottom:14px}
.ops-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:'emoji value' 'emoji label' 'detail detail';column-gap:12px;align-items:center;padding:12px 14px;text-align:left;font:inherit;color:var(--ink);background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer}
.ops-emoji{grid-area:emoji;font-size:30px}
.ops-value{grid-area:value;font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}
.ops-label{grid-area:label;font-size:12px;color:var(--ink-soft)}
.ops-detail{grid-area:detail;margin-top:6px;font-size:13px;font-weight:600}
.ops-tile.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.ops-tile.ok .ops-detail{color:var(--ok)}
.ops-tile.warn{border-color:var(--action);background:var(--action-bg)}
.ops-tile.bad{border-color:var(--danger);background:var(--danger-bg)}
.ops-tile.bad .ops-detail,.ops-tile.bad .ops-value{color:var(--danger)}
.ops-tile:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.tempk-fix{display:flex;flex-direction:column;gap:6px}
.tempk-fix[hidden]{display:none}
.tempk-fixchips{display:flex;gap:6px;flex-wrap:wrap}
/* ---- Carnet de liaison, inventaire : cartes plus lisibles ---- */
.qtystep{display:flex;gap:6px;align-items:stretch}
.qtystep input{flex:1;min-width:0;text-align:center;font-size:18px;font-weight:600}
.qtystep .mini{min-width:44px;font-size:20px}
.logbook-entry{align-items:flex-start;gap:12px}
.logbook-avatar{flex:0 0 auto;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--action-bg);color:var(--action);font-weight:700}
.logbook-entry.recent{border-left:4px solid var(--action);background:var(--action-bg)}
.logbook-entry .msgtext{font-size:15px}
.logbook-thread{border-bottom:1px solid var(--rule)}
.logbook-thread:last-child{border-bottom:0}
.logbook-replies{margin:0 0 8px 26px;padding-left:12px;border-left:2px solid var(--rule-strong)}
.logbook-reply{padding-top:8px;padding-bottom:8px}
.logbook-reply .logbook-avatar{width:30px;height:30px;font-size:13px}
.logbook-reply .msgtext{font-size:14px}
.logbook-entry .item-acts{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.logbook-reply-btn,.lb-replying .btn-sm{white-space:nowrap;min-height:36px;padding:6px 12px;font-size:14px}
.logbook-quote{margin:0 0 12px;padding:8px 12px;border-left:3px solid var(--action);background:var(--action-bg);border-radius:0 8px 8px 0;font-size:14px;color:var(--ink-soft);overflow-wrap:anywhere}
.lb-replying{margin-top:14px;display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.lb-replying[hidden]{display:none}
.lb-replying .logbook-quote{margin:0;width:100%;box-sizing:border-box}
/* ---- Modèles de relevés, import de liste ---- */
.temp-model-tools{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 10px}
.temp-entry.off{opacity:.55}
.imp-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-bottom:10px}
.imp-group{border:1px solid var(--rule);border-radius:var(--radius);padding:8px 12px;margin:0}
.imp-group legend{font-weight:700;padding:0 6px}
.imp-place{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:14px}
.imp-times{display:flex;gap:12px;flex-wrap:wrap}
.imp-time{display:flex;align-items:center;gap:6px}
/* ---- Modèles de tâches nombreux : liste par période ---- */
.model-period{border-bottom:1px solid var(--rule-soft)}
.model-period:last-child{border-bottom:0}
.model-period>summary{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:11px 14px;cursor:pointer;list-style:none}
.model-period>summary::-webkit-details-marker{display:none}
.model-period>summary::before{content:'▸';color:var(--ink-faint);width:14px}
.model-period[open]>summary::before{content:'▾'}
.model-period-name{font-weight:700}
.model-period-sub{font-size:12px;color:var(--ink-faint)}
.model-line{display:flex;align-items:center;gap:10px;width:100%;padding:7px 14px;text-align:left;font:inherit;color:var(--ink);background:transparent;border:0;border-top:1px solid var(--rule-soft);cursor:pointer}
.model-line:hover{background:var(--panel-hover)}
.model-line b{font-variant-numeric:tabular-nums;min-width:44px;color:var(--ink-soft);font-size:13px}
.model-line-title{flex:1;min-width:0;overflow-wrap:anywhere;font-size:14px}
.model-line-title small{color:var(--ink-faint)}
.model-line.off{opacity:.5;text-decoration:line-through}
.model-dots{display:flex;gap:2px;flex:0 0 auto}
.model-dots i{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-size:10px;font-weight:600;color:var(--ink-faint);border:1px solid var(--rule)}
.model-dots i.on{background:var(--action);border-color:var(--action);color:#fff}
/* ---- Fiches hebdo : jours par tâche, étiquette de semaine ---- */
.imp-place{flex-wrap:wrap;justify-content:space-between}
.imp-place>label{display:flex;align-items:center;gap:8px;flex:1 1 260px;min-width:0}
.imp-days{display:flex;gap:2px;flex:0 0 auto}
.imp-days label{position:relative;cursor:pointer}
.imp-days input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.imp-days i{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;border:1px solid var(--rule);font-style:normal;font-size:11px;font-weight:600;color:var(--ink-faint)}
.imp-days input:checked+i{background:var(--action);border-color:var(--action);color:#fff}
.imp-days input:focus-visible+i{outline:3px solid var(--action);outline-offset:1px}
.model-weeks{font-size:10px;font-style:normal;text-transform:uppercase;letter-spacing:.04em;color:var(--purple);margin-left:4px}
/* ---- État du système : une ligne par badgeuse ---- */
.system-devices{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;margin:12px 0}
.system-device{border:1px solid var(--rule);border-radius:var(--radius);padding:10px 12px;background:var(--panel-alt)}
.system-device-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:6px}
/* ---- Rapports, fiche mensuelle, courbes ---- */
.steps.four{grid-template-columns:repeat(4,1fr)}
@media(max-width:600px){.steps.four{grid-template-columns:1fr 1fr}}
.rep-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:10px 0}
.rep-tile{display:flex;flex-direction:column;gap:2px;padding:12px 14px;background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.rep-tile strong{font-size:24px;font-variant-numeric:tabular-nums;line-height:1.1}
.rep-tile span{font-size:12px;color:var(--ink-soft)}
.rep-tile.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.rep-tile.warn{border-color:var(--warn-border);background:var(--warn-bg)}
.rep-tile.bad{border-color:var(--danger-border);background:var(--danger-bg)}
.rep-tile.bad strong{color:var(--danger)}
.rep-h3{margin:18px 0 6px;font-size:14px}
.rep-table td:last-child{white-space:nowrap}
.rep-bar{display:inline-block;width:90px;height:8px;border-radius:4px;background:var(--rule-soft);vertical-align:middle;margin-right:8px;overflow:hidden}
.rep-bar i{display:block;height:100%;border-radius:4px;background:var(--ok)}
.rep-bar i.warn{background:var(--warn-ink)}
.rep-bar i.bad{background:var(--danger)}
.temp-tools{margin-top:14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.temp-tools>summary{cursor:pointer;list-style:none;padding:11px 14px;font-weight:700}
.temp-tools>summary::-webkit-details-marker{display:none}
.temp-tools>summary::before{content:'▸ ';color:var(--ink-faint)}
.temp-tools[open]>summary::before{content:'▾ '}
.temp-tools-body{padding:4px 14px 14px}
.temp-chart-box{margin-top:12px}
.temp-chart{width:100%;height:auto;max-height:320px}

/* Inventaire — cartes de comptage tactiles (même famille que les cartes de la gestion des périmés) */
.inv-gap{font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;border:1px solid var(--rule)}
.inv-gap.up,.inv-gap.down{color:var(--danger);background:var(--danger-bg);border-color:var(--danger-border)}
.inv-gap.same{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-border)}
.inv-step,.inv-qty,.inv-reset{min-height:48px;font:inherit;font-weight:700;color:var(--ink);background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);cursor:pointer}
.inv-step{flex:0 0 52px;font-size:24px}
.inv-qty{flex:1;min-width:0;font-size:22px;font-variant-numeric:tabular-nums}
.inv-qty.empty{color:var(--ink-faint)}
.inv-reset{flex:0 0 48px;font-size:20px;color:var(--ink-soft)}
.inv-step:active,.inv-qty:active,.inv-reset:active{transform:scale(.97)}

/* Valider plusieurs tâches d'un coup (salarié et badgeuse) */
.task-multi-start{display:flex;justify-content:flex-end;margin:0 0 10px}
.task-multibar{position:sticky;bottom:8px;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;padding:10px 12px;background:var(--panel);border:2px solid var(--action);border-radius:var(--radius-lg);box-shadow:var(--shadow-md,0 6px 18px rgba(0,0,0,.18))}
.task-multi-count{flex:1 1 120px;font-weight:700;font-variant-numeric:tabular-nums}
.task-multibar .btn{min-height:44px}
.task-card.selecting{cursor:pointer}
.task-card.selecting.selected{border-color:var(--action);background:var(--action-bg)}
.task-card.selecting.selected .task-card-check{background:var(--action);border-color:var(--action);color:#fff}
.task-card.selecting:disabled{opacity:.55;cursor:default}

/* Page Équipe : synthèse en une ligne à la place des tuiles de statistiques */
.team-summary{margin:0 0 10px;color:var(--ink-soft);font-size:14px}
.team-summary b{color:var(--ink)}
.team-warn{color:var(--danger);font-weight:600}
.row-actions{display:flex;flex-wrap:wrap;gap:6px;min-width:150px}

/* Étiquette de version de l'interface (bas de l'écran, discrète) */
.build-tag{position:fixed;left:6px;bottom:3px;z-index:1;font:10px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--ink-faint);opacity:.65;pointer-events:none}
.build-tag.outdated{color:var(--warn-ink);opacity:1;font-weight:700}

/* Relevés de température incrustés sur l'accueil de la badgeuse (créneau en cours) */
.temp-embedded{margin-top:16px}
.temp-embedded-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 10px;font-size:16px}

/* Bandeau du créneau en cours sur la badgeuse (remplace les onglets) */
.period-now{display:flex;align-items:center;gap:12px;margin:0 0 12px;padding:10px 14px;background:var(--panel);border:2px solid var(--action);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.period-now-emoji{font-size:28px;line-height:1}
.period-now-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.period-now-text b{font-size:17px}
.period-now-text small{font-size:12px;color:var(--ink-soft)}
.period-now-prog{display:flex;flex-direction:column;align-items:flex-end;gap:4px;min-width:72px}
.period-now-prog .period-frac{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}
.period-now-prog .period-mini-bar{display:block;width:72px}

/* Accueil de la badgeuse : liste limitée à 6 cartes, le reste derrière un bouton ; relevés déjà faits repliés */
.task-more{width:100%;min-height:52px;margin:10px 0 0;font-size:16px;font-weight:700}
.temp-done-fold{margin-top:10px}
.temp-done-fold>summary{cursor:pointer;list-style:none;margin:0 0 8px;padding:6px 2px}
.temp-done-fold>summary::-webkit-details-marker{display:none}
.temp-done-fold>summary::before{content:'▸ ';color:var(--ink-faint)}
.temp-done-fold[open]>summary::before{content:'▾ '}

/* Appui long sur une carte de tâche : pas de menu contextuel ni de sélection de texte sur tablette */
.task-card{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}
.task-multi-start{align-items:center;justify-content:space-between;gap:12px}
.task-multi-hint{font-size:12.5px;color:var(--ink-soft)}
/* Dernier message du carnet de liaison sur l'accueil de la badgeuse */
.logbook-latest{display:flex;align-items:flex-start;gap:12px;width:100%;margin:0 0 12px;padding:12px 14px;font:inherit;color:var(--ink);text-align:left;background:var(--panel);border:2px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);cursor:pointer}
.logbook-latest.recent{border-color:var(--action);background:var(--action-bg)}
.logbook-latest:active{transform:scale(.99)}
.logbook-latest-icon{font-size:26px;line-height:1}
.logbook-latest-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.logbook-latest-body b{font-size:15px}
.logbook-latest-text{font-size:15px;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.logbook-latest-body small{font-size:12px;color:var(--ink-soft)}
.logbook-latest-more{align-self:center;font-weight:700;color:var(--action);white-space:nowrap}

/* Carnet de liaison (badgeuse) : « Qui publie cette note ? » */
.lb-cred{padding:4px 0 0}
.lb-cred-title{margin:0 0 4px;font-size:17px}

/* Relevé de température : « Machine hors service » */
.tempk-hs{display:block;width:100%;margin-top:10px;min-height:48px;border-radius:14px;border:2px dashed var(--line,#c9ced6);background:transparent;color:inherit;font:inherit;font-weight:700;cursor:pointer}
.tempk-hs[aria-pressed="true"]{border-style:solid;border-color:#b42318;color:#b42318;background:rgba(180,35,24,.08)}
.tempk[data-state="hs"] .tempk-value{color:#b42318}
.temp-card.done.bad .temp-card-state{color:#b42318}

/* Carnet de liaison en grand (badgeuse) : carte d'accueil et fenêtre de lecture / saisie */
.logbook-latest{gap:16px;padding:18px 20px;border-radius:20px}
.logbook-latest-icon{font-size:40px}
.logbook-latest-body{gap:6px}
.logbook-latest-body b{font-size:18px}
.logbook-latest-text{font-size:20px;line-height:1.35;-webkit-line-clamp:4}
.logbook-latest-body small{font-size:15px}
.logbook-latest-more{font-size:18px}
.sheet.sheet-logbook{max-width:min(980px,96vw);max-height:94vh}
.sheet-logbook .sheet-head h3{font-size:22px}
.sheet-logbook .sheet-body{padding:18px 24px}
.sheet-logbook #kiosk-logbook-rows{max-height:44vh!important}
.sheet-logbook .logbook-entry{padding:14px 0}
.sheet-logbook .logbook-entry .msgtext{font-size:19px;line-height:1.4}
.sheet-logbook .logbook-avatar{width:48px;height:48px;font-size:20px}
.sheet-logbook .field label{font-size:16px;font-weight:700}
.sheet-logbook textarea{min-height:130px;font-size:19px;line-height:1.4}
.sheet-logbook .sheet-foot .btn{min-height:54px;font-size:18px}

/* Carnet de liaison ludique : carte colorée qui s'agite quand il y a du nouveau, bulles de messages, avatars en couleurs, phrases rapides */
.logbook-latest{position:relative;background:linear-gradient(135deg,var(--panel),var(--action-bg));overflow:hidden}
.logbook-latest-icon{display:grid;place-items:center;flex:0 0 auto;width:64px;height:64px;border-radius:20px;background:var(--action-bg);box-shadow:inset 0 0 0 2px var(--action)}
.logbook-latest.recent .logbook-latest-icon{animation:lb-wiggle 2.8s ease-in-out infinite}
.logbook-latest.recent::after{content:"✨ Nouveau";position:absolute;top:10px;right:14px;padding:3px 12px;border-radius:999px;background:var(--action);color:#fff;font-size:13px;font-weight:800;letter-spacing:.02em}
.logbook-latest-text{position:relative;padding:10px 14px;border-radius:4px 18px 18px 18px;background:var(--panel);box-shadow:0 1px 0 var(--rule)}
.logbook-latest-more{padding:12px 18px;border-radius:999px;background:var(--action);color:#fff;box-shadow:0 3px 0 rgba(0,0,0,.18)}
.logbook-latest:active .logbook-latest-more{transform:translateY(2px);box-shadow:none}
@keyframes lb-wiggle{0%,86%,100%{transform:rotate(0)}89%{transform:rotate(-12deg)}92%{transform:rotate(10deg)}95%{transform:rotate(-6deg)}98%{transform:rotate(3deg)}}
.sheet-logbook .logbook-entry{border-left:0;background:transparent;animation:lb-pop .35s ease-out both}
.sheet-logbook .logbook-entry:nth-child(2){animation-delay:.06s}
.sheet-logbook .logbook-entry:nth-child(3){animation-delay:.12s}
.sheet-logbook .logbook-entry .msgtext{display:inline-block;max-width:100%;padding:10px 16px;border-radius:4px 20px 20px 20px;background:var(--action-bg)}
.sheet-logbook .logbook-entry:nth-child(3n+2) .msgtext{background:#fff2d6}
.sheet-logbook .logbook-entry:nth-child(3n) .msgtext{background:#e4f6e8}
.sheet-logbook .logbook-avatar{background:#ffd9d0;color:#b3331f}
.sheet-logbook .logbook-entry:nth-child(3n+2) .logbook-avatar{background:#ffe7a8;color:#8a5a00}
.sheet-logbook .logbook-entry:nth-child(3n) .logbook-avatar{background:#c8ecd3;color:#1d6b3a}
.sheet-logbook .logbook-entry.recent .msgtext{box-shadow:0 0 0 2px var(--action)}
.lb-quick{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 10px}
.lb-chip{min-height:46px;padding:8px 16px;border-radius:999px;border:2px solid var(--rule);background:var(--panel);color:var(--ink);font:inherit;font-size:16px;font-weight:700;cursor:pointer;box-shadow:0 2px 0 var(--rule)}
.lb-chip:active{transform:translateY(2px);box-shadow:none;background:var(--action-bg);border-color:var(--action)}
.sheet-logbook textarea{border-radius:16px;border:2px solid var(--rule)}
@keyframes lb-pop{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.logbook-latest.recent .logbook-latest-icon,.sheet-logbook .logbook-entry{animation:none}}

/* Annonces de l'équipe sur l'accueil de la badgeuse */
.announce-latest{position:relative;display:flex;align-items:flex-start;gap:16px;width:100%;margin:0 0 12px;padding:18px 20px;font:inherit;color:var(--ink);text-align:left;background:linear-gradient(135deg,var(--panel),#fff3d9);border:2px solid var(--rule);border-radius:20px;box-shadow:var(--shadow-sm);cursor:pointer;overflow:hidden}
.announce-latest.recent{border-color:#f0a020}
.announce-latest:active{transform:scale(.99)}
.announce-latest-icon{display:grid;place-items:center;flex:0 0 auto;width:64px;height:64px;border-radius:20px;background:#ffe7a8;font-size:36px;box-shadow:inset 0 0 0 2px #f0a020}
.announce-latest.recent .announce-latest-icon{animation:announce-ring 3.2s ease-in-out infinite}
.announce-latest.recent::after{content:"✨ Nouveau";position:absolute;top:10px;right:14px;padding:3px 12px;border-radius:999px;background:#f0a020;color:#3b2500;font-size:13px;font-weight:800;letter-spacing:.02em}
.announce-latest-body{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}
.announce-latest-body b{font-size:18px}
.announce-latest-text{position:relative;padding:10px 14px;border-radius:4px 18px 18px 18px;background:var(--panel);box-shadow:0 1px 0 var(--rule);font-size:20px;line-height:1.35;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.announce-latest-body small{font-size:15px;color:var(--ink-soft)}
.announce-latest.empty{align-items:center;padding:14px 20px}
.announce-latest-more{align-self:center;padding:12px 18px;border-radius:999px;background:#f0a020;color:#3b2500;font-size:18px;font-weight:800;white-space:nowrap;box-shadow:0 3px 0 rgba(0,0,0,.18)}
@keyframes announce-ring{0%,84%,100%{transform:rotate(0)}87%{transform:rotate(-14deg)}90%{transform:rotate(12deg)}93%{transform:rotate(-8deg)}96%{transform:rotate(4deg)}}
.sheet.sheet-announce{max-width:min(900px,96vw);max-height:94vh}
.sheet-announce .sheet-head h3{font-size:22px}
.sheet-announce .sheet-body{padding:18px 24px}
.sheet-announce .sheet-foot .btn{min-height:54px;font-size:18px}
.announce-list{display:flex;flex-direction:column;gap:14px;max-height:62vh;overflow-y:auto}
.announce-entry{display:flex;align-items:flex-start;gap:12px;animation:lb-pop .35s ease-out both}
.announce-avatar{flex:0 0 auto;display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:#ffe7a8;font-size:24px}
.announce-main{min-width:0}
.announce-text{margin:0 0 4px;display:inline-block;max-width:100%;padding:10px 16px;border-radius:4px 20px 20px 20px;background:#fff3d9;font-size:19px;line-height:1.4;white-space:pre-wrap;overflow-wrap:anywhere}
.announce-entry:nth-child(2n) .announce-text{background:var(--action-bg)}
.announce-entry:nth-child(2n) .announce-avatar{background:#cfe0ff}
.announce-entry.recent .announce-text{box-shadow:0 0 0 2px #f0a020}
.announce-meta{margin:0;font-size:15px;color:var(--ink-soft)}
@media (prefers-reduced-motion:reduce){.announce-latest.recent .announce-latest-icon,.announce-entry{animation:none}}

/* Accueil de la badgeuse (tablette paysage) : bandeau du haut = Carnet de liaison + Annonces à gauche, Système badge à droite ; travail du jour en dessous. */
.kiosk-home .kiosk-top{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:16px;align-items:stretch;margin-bottom:16px}
.kiosk-home .kiosk-top-left{display:flex;flex-direction:column;gap:12px;min-width:0}
.kiosk-home .kiosk-top-left>*{margin:0;flex:1 1 0}
.kiosk-home .kiosk-top-right{min-width:0;display:flex}
.kiosk-home .kiosk-top-right>*{flex:1;margin:0}
.kiosk-home .kiosk-shortcuts{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:16px}
.kiosk-home .kiosk-shortcuts .kiosk-procedure-shortcut{margin:0}
.kiosk-home .kiosk-work{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.kiosk-home .kiosk-work>*{margin:0}
@media (max-width:900px){.kiosk-home .kiosk-top,.kiosk-home .kiosk-work{grid-template-columns:1fr}.kiosk-home .kiosk-top-left>*{flex:0 0 auto}}   /* lot 1.105.1 : tablette en portrait, cartes Annonces et Carnet entières */

/* Badgeuse « tâches uniquement » : produits à retirer (périmés du jour) juste sous le bandeau du haut, visibles sans défiler */
.kiosk-home .kiosk-expiring{margin-bottom:16px}
.kiosk-home .kiosk-expiring>*{margin:0}

/* Planning de la journée sur la badgeuse : ligne discrète repliée en bas de l'accueil */
.kiosk-planning{margin-top:16px;border:1px solid var(--rule);border-radius:12px;background:var(--panel);font-size:14px}
.kiosk-planning>summary{display:flex;align-items:center;gap:12px;padding:10px 14px;list-style:none;cursor:pointer;color:var(--ink-soft)}
.kiosk-planning>summary::-webkit-details-marker{display:none}
.kiosk-planning>summary::after{content:"▾";margin-left:auto;font-size:12px}
.kiosk-planning[open]>summary::after{content:"▴"}
.kiosk-planning-title{font-weight:700;white-space:nowrap}
.kiosk-planning-names{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kiosk-planning small{white-space:nowrap}
.kiosk-planning[open]>summary{border-bottom:1px solid var(--rule)}

/* Cartes vides (aucune note / aucune annonce) : hauteur naturelle, sans s'étirer */
.kiosk-home .kiosk-top-left>.empty{flex:0 0 auto}

/* Ma journée (salarié) sans tâches : le planning occupe toute la largeur */
.day-layout.day-layout-solo{grid-template-columns:1fr}

/* Annonces : pièces jointes, accusés de lecture, carte verrouillée de la badgeuse */
.announce-files{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;margin:8px 0 4px}
.announce-thumb{padding:0;border:2px solid var(--rule);border-radius:12px;background:var(--panel);cursor:pointer;overflow:hidden;line-height:0}
.announce-thumb img{display:block;max-height:130px;max-width:220px;object-fit:cover}
.announce-file{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:8px 14px;border:2px solid var(--rule);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;cursor:pointer;text-align:left}
.announce-file b{font-size:15px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.announce-file small{color:var(--ink-soft)}
.announce-file:active,.announce-thumb:active{transform:scale(.98)}
.announce-seen{margin:6px 0 0;font-size:13px;color:var(--ink-soft)}
.announce-seen>summary{cursor:pointer;font-weight:600}
.announce-seen p{margin:6px 0 0}
.announce-pdf{width:100%;height:62vh;border:0;border-radius:12px;background:#fff}
.announce-latest.locked .announce-latest-text{color:var(--ink-soft)}
.sheet-announce .announce-files{margin:8px 0}
.ann-cred{padding:4px 0 0}

/* Suivi des heures : prévisionnel / réel, correction directe, demandes, validation du mois */
.hx-table td{vertical-align:middle}
.hx-time{width:96px;min-height:38px;padding:4px 8px;border:1px solid var(--rule);border-radius:8px;background:var(--panel);color:var(--ink);font:inherit;text-align:center}
.hx-time.planned{color:var(--ink-soft);font-style:italic}
.hx-time.changed{border-color:var(--action);box-shadow:0 0 0 2px var(--action-bg)}
.hx-time:disabled{opacity:.7}
.hx-cell{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.hx-arrow{color:var(--ink-soft)}
.hx-save{min-height:38px;padding:4px 14px}
.hx-plan .muted{font-size:12px}
.hx-gap.pos{color:#17653a}.hx-gap.neg{color:var(--danger,#b42318)}
.hx-lock,.chip-lock{font-size:.85em}
.chip-lock{margin-left:4px;filter:saturate(.9)}
.hx-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap}
.hx-pill.wait{background:#fff0cf;color:#7a4b00}.hx-pill.ok{background:#dff5e5;color:#17653a}.hx-pill.no{background:#fde2e0;color:#8e1d15}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .hx-pill.wait{background:#4a3710;color:#ffd98a}:root:not([data-theme="light"]) .hx-pill.ok{background:#12391f;color:#9be3b3}:root:not([data-theme="light"]) .hx-pill.no{background:#4a1612;color:#ffb3ac}:root:not([data-theme="light"]) .hx-gap.pos{color:#9be3b3}}
:root[data-theme="dark"] .hx-pill.wait{background:#4a3710;color:#ffd98a}:root[data-theme="dark"] .hx-pill.ok{background:#12391f;color:#9be3b3}:root[data-theme="dark"] .hx-pill.no{background:#4a1612;color:#ffb3ac}:root[data-theme="dark"] .hx-gap.pos{color:#9be3b3}
.hx-h2{font-size:16px;margin:16px 0 8px}
.hx-req{border:2px solid #f0a020;border-radius:14px;padding:14px 16px;background:var(--panel);margin:0 0 12px}
.hx-req h3{margin:0 0 4px;font-size:16px}.hx-req p{margin:2px 0;color:var(--ink-soft);font-size:14px}
.hx-diff{font-weight:800;color:#b45309}
:root[data-theme="dark"] .hx-diff{color:#ffd98a}
.hx-opt{display:flex;gap:8px;align-items:flex-start;margin:10px 0;padding:10px 12px;border-radius:10px;background:var(--action-bg);font-size:14px}
.hx-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.hx-month{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:space-between;padding:14px 16px;border:2px solid var(--action);border-radius:14px;background:var(--action-bg);margin:0 0 14px}
.hx-month.locked{border-color:#17653a}
.hx-month b{font-size:16px}.hx-month .muted{font-size:13px}
.hx-day{border:1px solid var(--rule);border-radius:14px;background:var(--panel);padding:12px 14px;margin:0 0 10px}
.hx-day-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.hx-day-head b{flex:1}
.hx-day-grid{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;margin:6px 0;font-size:14px}
.hx-day-grid span{color:var(--ink-soft)}
.hx-note{margin:4px 0;font-size:13px}
.hx-ask{width:100%;min-height:44px;margin-top:6px}
/* ============================================================================
   Habillage « moderne » : fond dégradé clair, cartes blanches arrondies et ombrées, rail de navigation à gauche (icône + libellé),
   barre du haut claire, boutons en pilule (corail pour l'action principale), pastilles d'état douces.
   Tout passe par les jetons (:root) puis quelques ajustements de composants : aucune logique, aucun changement de structure.
   ============================================================================ */
:root{
  /* Palette NexaTime : bleu du logo (#3fa8ff → #2f6bed → #1a3f9e), encre marine #16202b, gris-bleu froids. */
  --paper:#e7edf5;
  --panel:#ffffff;
  --panel-alt:#f1f5fa;
  --panel-hover:#f7f9fd;
  --field-bg:#ffffff;
  --ink:#16202b;
  --ink-soft:#586878;
  --ink-faint:#687582;   /* lot 1.102.0 : ce second bloc :root, venant après, remettait #8a97a6 (3:1) et annulait le correctif du lot 1.85.0 */
  --rule:#dae2ec;
  --rule-strong:#c4cfdc;
  --rule-soft:#e6ecf3;
  --chrome:#16202b;
  --chip-overlay:#ffffffd9;
  --action:#2f6bed;
  --action-ink:#ffffff;
  --action-bg:#eaf0fd;
  --btn-1:#3fa8ff;
  --btn-2:#2f6bed;
  --danger:#b23a3a;
  --ok:#2f7a4f;
  --weekend:#e1e8f1;
  --weekend-soft:#f0f4f9;
  --warn-bg:#fdf6e3; --warn-border:#e8d28e; --warn-ink:#7a5e0e;
  --ok-bg:#eaf6ef; --ok-border:#aad2bb;
  --danger-bg:#fbefef; --danger-border:#e6bcbc;
  --info-bg:#eaf2fb; --info-border:#b9cfe6; --info-ink:#12354a;
  --radius-sm:10px;
  --radius:14px;
  --radius-lg:22px;
  --shadow-sm:0 1px 2px rgba(22,32,43,.05),0 6px 16px -10px rgba(22,32,43,.22);
  --shadow-md:0 14px 34px -18px rgba(47,107,237,.35),0 3px 10px -5px rgba(22,32,43,.12);
  --shadow-lg:0 26px 56px -22px rgba(26,63,158,.42),0 8px 20px -8px rgba(22,32,43,.18);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--btn-1:#4f8dff;--btn-2:#3560c9;--shadow-md:0 14px 34px -18px #000000aa,0 3px 10px -5px #00000066;--shadow-lg:0 26px 56px -22px #000000cc,0 8px 20px -8px #00000077}}
:root[data-theme="dark"]{--btn-1:#4f8dff;--btn-2:#3560c9;--shadow-md:0 14px 34px -18px #000000aa,0 3px 10px -5px #00000066;--shadow-lg:0 26px 56px -22px #000000cc,0 8px 20px -8px #00000077}

/* Lot 1.99.0 : la page fait au moins la hauteur de l'écran, sinon le fond (dégradés) se répète sous une page courte. */
html{min-height:100%}
body{
  font-family:'Segoe UI Variable Display','Segoe UI Variable Text','Segoe UI',system-ui,-apple-system,Roboto,'Helvetica Neue',Arial,sans-serif;
  background:
    radial-gradient(900px 480px at 8% -8%,rgba(255,255,255,.85),transparent 62%),
    radial-gradient(800px 520px at 100% 0,rgba(63,168,255,.20),transparent 60%),
    linear-gradient(165deg,var(--paper),#e2eaf4 60%,#ecf1f8) fixed;
  letter-spacing:-.003em;
}
:root[data-theme="dark"] body{background:radial-gradient(900px 480px at 8% -8%,rgba(79,141,255,.12),transparent 62%),linear-gradient(165deg,#11161b,#131a21 60%,#0f1418) fixed}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) body{background:radial-gradient(900px 480px at 8% -8%,rgba(79,141,255,.12),transparent 62%),linear-gradient(165deg,#11161b,#131a21 60%,#0f1418) fixed}}
h1,h2,h3{letter-spacing:-.02em;color:var(--ink)}
.section-title h1{font-size:26px;font-weight:700;letter-spacing:-.03em}

/* ---------- barre du haut : claire, translucide ---------- */
.topbar{
  background:rgba(255,255,255,.78);color:var(--ink);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);
  border-bottom:1px solid var(--rule);box-shadow:0 8px 24px -22px rgba(16,48,74,.55);padding:10px var(--gutter);
}
:root[data-theme="dark"] .topbar{background:rgba(26,33,41,.84)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .topbar{background:rgba(26,33,41,.84)}}
.brand{font-size:18px;font-weight:700;color:var(--ink)}
.brand span{color:var(--ink-soft)}
.topbar-msg,.tbtn,.theme-toggle,.tools-toggle,.topbar-notif{background:var(--panel);border:1px solid var(--rule-strong);color:var(--ink-soft);border-radius:12px;box-shadow:var(--shadow-sm)}
.topbar-msg:hover,.tbtn:hover,.theme-toggle:hover,.tools-toggle:hover,.topbar-notif:hover,.topbar-notif[aria-expanded="true"]{background:var(--action-bg);border-color:var(--action);color:var(--action)}
.topbar-msg.active{background:var(--action);border-color:var(--action);color:#fff}
.topbar-actions{background:var(--panel);border:1px solid var(--rule);border-radius:16px;box-shadow:var(--shadow-lg)}
.account-trigger{color:var(--ink)}
.account-trigger:hover,.account-trigger[aria-expanded="true"]{background:var(--action-bg);border-color:var(--rule)}
.notif-panel{border-radius:18px;border-color:var(--rule);box-shadow:var(--shadow-lg)}

/* ---------- rail de navigation : icône au-dessus du libellé ---------- */
@media(min-width:761px){
  .workspace-tabs{flex:0 0 108px;width:108px;padding:8px 6px 22px;gap:2px;align-items:stretch;position:sticky;top:64px;max-height:calc(100vh - 64px);overflow-y:auto;scrollbar-width:none}
  .workspace-tabs::-webkit-scrollbar{display:none}
  .workspace-tabs button{flex-direction:column;justify-content:center;gap:4px;text-align:center;padding:9px 4px 7px;border-radius:16px;font-size:12px;line-height:1.15;font-weight:600;color:var(--ink-soft);position:relative}
  .workspace-tabs button .nav-lbl{display:block;max-width:100%;overflow-wrap:normal;hyphens:manual}   /* Lot 1.85.0 : un mot n'est plus coupé au milieu (« Confidentialit-é ») */
  .workspace-tabs button .nav-ico{margin:0}
  .workspace-tabs button .nav-ico svg{width:24px;height:24px;stroke-width:1.8}
  .workspace-tabs button:not(.active):hover{background:rgba(255,255,255,.75);color:var(--action);box-shadow:var(--shadow-sm)}
  .workspace-tabs button.active{background:var(--action);color:#fff;font-weight:700;box-shadow:0 12px 24px -12px rgba(47,107,237,.65)}
  .workspace-tabs button.active:hover{background:var(--action)}
  /* Lot 1.86.0 : retour aux TRAITS entre les groupes (les groupes nommés du lot 1.85.0 déplaisaient) ; le texte reste dans la page pour un lecteur d'écran */
  .nav-group-label{font-size:0;padding:0;margin:6px 12px 4px;border-top:1px solid var(--rule)}
  .nav-group-label:first-child{display:none}
  /* Lot 1.86.0 : « Réduire » revient — le rail se replie en icônes seules (58 px), mémorisé d'une ouverture à l'autre */
  .workspace-tabs .nav-collapse{display:flex;flex-direction:row;justify-content:center;gap:4px;padding:6px 4px;font-size:11px;font-weight:600;color:var(--ink-faint);border-radius:12px}
  .workspace-tabs .nav-collapse .nav-ico svg{width:18px;height:18px}
  .nav-count,.workspace-tabs .tab-dot{position:absolute;top:6px;right:12px;margin:0;min-width:18px;font-size:10.5px}
  .workspace-tabs .tab-dot{width:9px;min-width:0;height:9px;padding:0;border-radius:50%;top:9px;right:20px}
  .nav-count.hot{background:var(--danger);color:#fff}
  body.nav-collapsed .workspace-tabs{flex-basis:58px;width:58px;padding-left:4px;padding-right:4px}
  body.nav-collapsed .nav-lbl{display:none}
  body.nav-collapsed .workspace-tabs button{padding:9px 0;border-radius:12px}
  body.nav-collapsed .workspace-tabs .nav-collapse{padding:6px 0}
  body.nav-collapsed .nav-collapse .nav-ico{transform:rotate(180deg)}
  body.nav-collapsed .nav-group-label{margin:6px 8px 4px}
  body.nav-collapsed .nav-count,body.nav-collapsed .workspace-tabs .tab-dot{top:4px;right:6px;width:9px;min-width:0;height:9px;padding:0;font-size:0;border-radius:50%}
  body.nav-collapsed .nav-count:not(.hot){background:var(--ink-faint)}
}

/* ---------- onglets de section (Planning / Journée / Heures) : contrôle segmenté ---------- */
.section-tabs,.workspace-tabs[role="tablist"]{gap:6px}
[role="tablist"] [role="tab"],.section-tab{border-radius:999px}

/* ---------- cartes ---------- */
.panel,.card-primary,.stat,.palette,.hx-day,.hx-req,.hx-month{
  background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);
}
.panel{overflow:hidden}
.panel-head{padding:16px 20px 12px;border-bottom:none}
.panel-head h2{font-size:17px;font-weight:700;margin:0}
.stat{padding:18px 20px;transition:transform .15s,box-shadow .15s}
.stat strong{font-size:30px;font-weight:700;letter-spacing:-.03em;color:var(--action);line-height:1.1}
.stat span{color:var(--ink-soft);font-size:13px}
.stat:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}
.statgrid{gap:14px}
.item{border-color:var(--rule-soft)}

/* ---------- boutons : pilules ---------- */
.btn{
  background:linear-gradient(135deg,var(--btn-1),var(--btn-2));border:none;color:#fff;border-radius:999px;padding:9px 20px;font-weight:600;
  box-shadow:0 10px 20px -10px rgba(47,107,237,.55);
}
.btn:hover{filter:brightness(1.04);box-shadow:0 14px 24px -10px rgba(47,107,237,.6)}
.btn-ghost{background:var(--panel);color:var(--action);border:1px solid var(--rule-strong);box-shadow:var(--shadow-sm)}
.btn-ghost:hover{background:var(--action-bg);filter:none}
.btn-danger{background:var(--danger);box-shadow:none}
.mini{border-radius:999px;border:1px solid var(--rule-strong);background:var(--panel);color:var(--action);font-weight:600;padding:4px 12px}
.mini:hover{background:var(--action-bg);border-color:var(--action)}
input,select,textarea{border-radius:12px;border:1px solid var(--rule-strong);background:var(--field-bg)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--action);box-shadow:0 0 0 4px var(--action-bg)}
.badge{border-radius:999px;font-weight:700}

/* ---------- tableaux et planning ---------- */
.table-scroll{border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm);overflow:auto}
.data-table th{background:var(--panel-alt);color:var(--ink-soft);font-size:12.5px;font-weight:700;text-transform:none;letter-spacing:0}
.data-table td,.data-table th{border-color:var(--rule-soft)}
.chip{border-radius:10px;box-shadow:0 6px 12px -8px rgba(16,48,74,.55)}
.publishbar{border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.week-grid,.planning-grid,.grid{border-radius:var(--radius-lg)}

/* ---------- fenêtres ---------- */
.sheet{border-radius:26px 26px 0 0;box-shadow:var(--shadow-lg)}
@media(min-width:761px){.sheet{border-radius:26px}}
.sheet-head{border-bottom:1px solid var(--rule-soft)}
.veil{backdrop-filter:blur(3px)}

/* ---------- état / pastilles ---------- */
.hx-pill,.temp-shortcut{border-radius:999px}

/* ---------- retouches ---------- */
.topbar .account-trigger,.topbar .account-trigger span:not(.avatar-circle):not(.account-caret){color:var(--ink)}
.account-role-label{color:var(--ink-soft)}
.dash-shortcuts .btn{border-radius:18px;background:var(--panel-alt);color:var(--action);border:1px solid var(--rule);box-shadow:none;font-weight:600}
.dash-shortcuts .btn:hover{background:var(--action-bg);border-color:var(--action)}
.panel-head .count{background:var(--action-bg);color:var(--action);border-radius:999px}
@media (max-width:760px){
  body.admin .mobile-bottom-nav,body.employee .mobile-bottom-nav{left:10px;right:10px;bottom:calc(8px + env(safe-area-inset-bottom));border:1px solid var(--rule);border-radius:26px;background:rgba(255,255,255,.92);backdrop-filter:blur(14px);box-shadow:var(--shadow-lg);padding:4px}
  :root[data-theme="dark"] body.admin .mobile-bottom-nav,:root[data-theme="dark"] body.employee .mobile-bottom-nav{background:rgba(26,33,41,.94)}
  .mobile-bottom-nav button{border-radius:20px;font-weight:600}
  .mobile-bottom-nav button.active{background:var(--action);color:#fff}
  .section-pad{padding-bottom:96px}
}

/* ---------- habillage moderne, suite : onglets, planning en cartes pastel, tuiles, états vides ---------- */
.steps[role="tablist"]{display:inline-flex;grid-template-columns:none;gap:4px;padding:5px;background:var(--panel);border:1px solid var(--rule);border-radius:999px;box-shadow:var(--shadow-sm);max-width:100%;overflow-x:auto;scrollbar-width:none}
.steps[role="tablist"] button{flex:0 0 auto;border:none;background:transparent;border-radius:999px;padding:8px 18px;font-weight:600;color:var(--ink-soft);box-shadow:none;width:auto}
.steps[role="tablist"] button:not(.sel):hover{background:var(--action-bg);color:var(--action)}
.steps[role="tablist"] button.sel{background:var(--action);border-color:var(--action);color:#fff;box-shadow:0 8px 16px -10px rgba(47,107,237,.7)}
.chip{
  border-left:5px solid transparent;color:var(--ink)!important;
  background-image:linear-gradient(rgba(255,255,255,.86),rgba(255,255,255,.86)),linear-gradient(transparent,transparent)!important;
  background-clip:padding-box,border-box!important;box-shadow:0 5px 12px -9px rgba(16,48,74,.55);
}
.chip small{opacity:.78}
.chip:hover{filter:none;box-shadow:var(--shadow-md);transform:translateY(-1px)}
:root[data-theme="dark"] .chip{background-image:linear-gradient(rgba(17,22,27,.82),rgba(17,22,27,.82)),linear-gradient(transparent,transparent)!important}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .chip{background-image:linear-gradient(rgba(17,22,27,.82),rgba(17,22,27,.82)),linear-gradient(transparent,transparent)!important}}
@media (min-width:1000px){.grid{grid-template-columns:200px repeat(7,minmax(0,1fr))}}
.stat{position:relative}
.stat-ico{position:absolute;top:14px;right:14px;width:36px;height:36px;border-radius:12px;display:grid;place-items:center;background:var(--action-bg);color:var(--action);font-style:normal}
.statgrid>.stat:nth-child(2) .stat-ico{background:#e3f4ea;color:#2f7a4f}
.statgrid>.stat:nth-child(3) .stat-ico{background:#efe9fb;color:#6d4fc4}
.statgrid>.stat:nth-child(4) .stat-ico{background:#fff1da;color:#b7791f}
.statgrid>.stat:nth-child(5) .stat-ico{background:#fde8e4;color:#d9544a}
.empty-state{border:1.5px dashed var(--rule-strong);border-radius:var(--radius-lg);background:rgba(255,255,255,.55);padding:22px 16px;margin:12px}
.empty-state svg{color:var(--action);opacity:.75}
.data-table tbody tr:hover td{background:var(--panel-alt)}
.notice{border-radius:var(--radius)}
.sheet-foot .btn{min-height:44px}
::selection{background:var(--action-bg)}
*{scrollbar-width:thin;scrollbar-color:var(--rule-strong) transparent}

/* états sélectionnés : le bleu NexaTime partout (la carte sombre de la badgeuse garde l'encre marine) */
.daypicker button.sel,.viewtoggle button.sel,.period-tabs button.active,.msg-toptabs button.active,.steps button.sel,.procedure-step-number,.procedure-run-step-number{background:var(--action);border-color:var(--action);color:#fff}
.viewtoggle{border-radius:999px;overflow:hidden}

/* ---------- rail de navigation : tient sur les écrans bas / très zoomés, défilement visible ---------- */
@media(min-width:761px){
  .workspace-tabs{top:58px;max-height:calc(100vh - 58px);max-height:calc(100dvh - 58px);flex-basis:108px;width:108px;padding:6px 6px 28px;gap:2px;scrollbar-width:thin;scrollbar-color:var(--rule-strong) transparent;overscroll-behavior:contain}
  .workspace-tabs::-webkit-scrollbar{display:block;width:6px}
  .workspace-tabs::-webkit-scrollbar-thumb{background:var(--rule-strong);border-radius:6px}
  .workspace-tabs button{padding:7px 3px 6px;gap:3px;font-size:12px}
  .workspace-tabs button .nav-ico svg{width:22px;height:22px}
  .nav-group-label{margin:4px 10px 3px}
}
@media(min-width:761px) and (max-height:900px){
  .workspace-tabs button{padding:6px 2px 5px;gap:1px;font-size:12px;border-radius:14px}   /* Lot 1.85.0 : jamais sous 12 px, même sur un écran bas */
  .workspace-tabs button .nav-ico svg{width:20px;height:20px}
}
@media(min-width:761px) and (max-height:680px){
  .workspace-tabs button{padding:4px 2px 3px;font-size:10px}
  .workspace-tabs button .nav-ico svg{width:18px;height:18px}
}
/* jours hors contrat : hachures claires au lieu d'un aplat noir */
.cell.not-employed,.mcell.not-employed,.dayrow-chips.not-employed{background:repeating-linear-gradient(135deg,var(--panel-alt) 0 8px,var(--rule-soft) 8px 16px)}
.cell.not-employed:hover{background:repeating-linear-gradient(135deg,var(--panel-alt) 0 8px,var(--rule-soft) 8px 16px)}

/* ---------- mode léger (tablettes, téléphones, appareils modestes) : aucun effet coûteux ---------- */
html.lite body,html.lite[data-theme="dark"] body,html.lite[data-theme="light"] body{background:var(--paper)!important;background-attachment:scroll!important}
html.lite .topbar,html.lite .mobile-bottom-nav,html.lite body.admin .mobile-bottom-nav,html.lite body.employee .mobile-bottom-nav,html.lite .veil,html.lite .sheet,html.lite .notif-panel,html.lite .account-panel{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
html.lite .topbar{background:var(--panel)}
html.lite body.admin .mobile-bottom-nav,html.lite body.employee .mobile-bottom-nav{background:var(--panel)}
html.lite{--shadow-sm:0 1px 2px rgba(22,32,43,.12);--shadow-md:0 2px 8px rgba(22,32,43,.14);--shadow-lg:0 6px 18px rgba(22,32,43,.22)}
html.lite .btn,html.lite .workspace-tabs button.active,html.lite .steps[role="tablist"] button.sel,html.lite .chip{box-shadow:none}
html.lite .stat:hover,html.lite .chip:hover,html.lite .btn:hover{transform:none;filter:none}
html.lite .logbook-latest.recent .logbook-latest-icon,html.lite .announce-latest.recent .announce-latest-icon,html.lite .announce-entry,html.lite .sheet-logbook .logbook-entry{animation:none}
html.lite *{transition-duration:.01ms!important}
html.lite .chip{background-image:none!important;border-left:5px solid currentColor}

/* mode léger : plus aucune animation continue (impulsion du lecteur de badge, carnet / annonces qui s'agitent, chargements) */
html.lite .kiosk-badge-pulse,html.lite .skeleton{animation:none}
/* même hors mode léger : l'icône du carnet / des annonces s'agite quelques fois puis s'arrête (plus d'animation infinie sur la badgeuse) */
.logbook-latest.recent .logbook-latest-icon{animation-iteration-count:3}
.announce-latest.recent .announce-latest-icon{animation-iteration-count:3}

/* Badgeuse : « Tâches de la semaine paire / impaire » (Lot 1.82.0) : une carte du même style que « Tâches du jour » (le badge violet seul la distingue), dans la 2e rangée de la grille du travail du jour */
.kiosk-home .kiosk-work-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start;margin-top:16px}
.kiosk-home .kiosk-work-row.solo{grid-template-columns:minmax(0,1fr)}
.kiosk-home .kiosk-work-row>*{margin:0}
/* Lot 1.83.0 : coordonnées de la station en haut de l'accueil de la badgeuse (texte simple, lisible à distance) */
.kiosk-station{display:flex;flex-direction:column;gap:6px;margin:0 0 14px;padding:12px 18px;border:1px solid var(--rule);border-radius:12px;background:var(--panel);color:var(--ink)}
.kiosk-station-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 24px;font-size:18px}
.kiosk-station-name{font-size:18px}
.kiosk-station-item{white-space:nowrap}
@media (max-width:900px){.kiosk-home .kiosk-work-row{grid-template-columns:1fr}}
.kiosk-week .panel-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.kiosk-week-badge{margin-left:auto;display:inline-flex;align-items:center;padding:4px 12px;border-radius:999px;background:var(--purple);color:#fff;font-weight:800;font-size:13px;white-space:nowrap}
.kiosk-week .temp-hero{margin:0 14px 10px}
.kiosk-week-cards .task-cards,.kiosk-week-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.kiosk-week-cards{padding:0 14px 14px}
.kiosk-week-cards .task-closed{grid-column:1/-1}

/* Appui long sur une tâche (badgeuse tactile) : pas de menu contextuel ni de sélection de texte du navigateur, qui interrompaient le geste */
.task-card[data-check]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}

.kiosk-planned-end{margin:10px 0 0;font-size:14px;line-height:1.35;color:#c7d3e0}
.kiosk-planned-end b{color:#fff}

/* Badgeuse : barre « Valider plusieurs » unique, collée en bas de l'écran pendant la sélection ; bouton d'entrée aligné à droite au-dessus des listes */
.kiosk-home>.task-multibar{position:sticky;bottom:8px;margin-top:16px;z-index:20}
.kiosk-home>.task-multi-start{margin:0 0 12px}

/* ---------- Badgeuse : planning de la journée en cartes (avatar, état en gros, horaire lisible, barre de la journée) ---------- */
.kiosk-planning>summary{min-height:56px;padding:12px 16px;font-size:17px;color:var(--ink)}
.kiosk-planning-title{font-size:19px}
.kiosk-planning .kp-stack{display:flex;flex:1;min-width:0;padding-left:10px}
.kiosk-planning small{font-size:15px;font-weight:700;color:var(--ink-soft)}
.kp{padding:14px}
.kp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
@media (max-width:900px){.kp-grid{grid-template-columns:1fr}}
.kp-card{background:var(--panel);border:2px solid var(--rule);border-radius:22px;padding:16px 18px;box-shadow:var(--shadow-sm)}
.kp-card.now{border-color:var(--ok);background:linear-gradient(135deg,var(--ok-bg),var(--panel))}
.kp-card.soon{border-color:var(--warn-border);background:linear-gradient(135deg,var(--warn-bg),var(--panel))}
.kp-card.late{border-color:var(--danger);background:linear-gradient(135deg,var(--danger-bg),var(--panel))}
.kp-card.due{border-color:var(--rule-strong);background:linear-gradient(135deg,var(--panel-alt),var(--panel))}
.kp-card.night{border-color:var(--info-border);background:linear-gradient(135deg,var(--action-bg),var(--panel))}
.kp-card.done,.kp-card.absent{opacity:.88}
.kp-top{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px}
.kp-av{flex:0 0 auto;display:grid;place-items:center;width:56px;height:56px;border-radius:50%;font-weight:800;font-size:20px;letter-spacing:.02em}
.kp-av-sm{width:38px;height:38px;font-size:14px;margin-left:-10px;border:3px solid var(--panel)}
.kp-av-sm:first-child{margin-left:0}
.kp-who{min-width:0;flex:1 1 8em}
.kp-who b{display:block;font-size:21px;line-height:1.15;overflow-wrap:break-word}
.kp-when{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-top:12px;font-size:19px;font-weight:700}
.kp-when .em{font-size:26px;line-height:1}
.kp-when .t{background:var(--panel-alt);border-radius:12px;padding:3px 12px}
.kp-when small{font-size:15px;font-weight:600;color:var(--ink-soft)}
.kp-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;font-weight:800;font-size:15px;white-space:nowrap;background:var(--rule-soft);color:var(--ink-soft)}
.kp-pill.now{background:var(--ok);color:#fff}
.kp-pill.soon{background:#f4d983;color:#5c4308}
.kp-pill.late{background:var(--danger);color:#fff}
.kp-pill.due{background:var(--rule-soft);color:var(--ink)}
.kp-pill.night{background:var(--action);color:#fff}
.kp-bar{position:relative;height:22px;margin:32px 0 4px;border-radius:999px;background:repeating-linear-gradient(90deg,var(--panel-alt) 0 calc(100%/24 - 1px),var(--rule) calc(100%/24 - 1px) calc(100%/24))}
.kp-seg{position:absolute;top:0;bottom:0;border-radius:999px;display:flex;align-items:center;padding-left:10px;font-weight:800;font-size:13px;min-width:8px;overflow:hidden;white-space:nowrap}
.kp-nowline{position:absolute;top:-6px;bottom:-6px;width:4px;margin-left:-2px;border-radius:4px;background:var(--ink)}
.kp-nowline::after{content:"Maintenant";position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-size:12px;font-weight:800;color:var(--ink);white-space:nowrap;font-style:normal}
.kp-axis{display:flex;justify-content:space-between;font-size:15px;font-weight:700;color:var(--ink-soft);margin-top:6px}

/* ---------- Fiche salarié RH (page dédiée) ---------- */
.hr-name-link{display:inline-flex;align-items:center;background:none;border:none;padding:4px 0;font:inherit;color:var(--ink);cursor:pointer;text-align:left}
.hr-name-link:hover b{color:var(--action);text-decoration:underline}
.rh{display:grid;grid-template-columns:300px minmax(0,1fr);gap:18px;align-items:start;padding:18px var(--gutter)}
.rh-side{position:sticky;top:70px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:18px 14px;max-height:calc(100vh - 86px);overflow-y:auto}
.rh-back{display:flex;align-items:center;justify-content:space-between;margin:0 6px 12px}
.rh-back .link{background:none;border:none;color:var(--action);font-weight:700;font-size:14px;cursor:pointer;padding:4px}
.rh-back .link:disabled{opacity:.35;cursor:default}
.rh-arrows{display:flex;gap:6px}
.rh-id{text-align:center;padding:4px 8px 14px;border-bottom:1px solid var(--rule-soft)}
.avatar-circle.rh-av{width:84px;height:84px;font-size:30px;font-weight:800;margin:0 auto 10px;box-shadow:0 10px 24px -12px rgba(47,107,237,.7)}
.rh-id h2{margin:0;font-size:20px}
.rh-id p{margin:2px 0 8px;color:var(--ink-soft);font-size:14px}
.rh-quick{display:flex;justify-content:center;gap:10px;margin:12px 0 8px}
.rh-q{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--action-bg);color:var(--action);font-size:18px;border:none;text-decoration:none;cursor:pointer}
.rh-q.off{opacity:.4;cursor:default}
.rh-nav{display:flex;flex-direction:column;gap:2px;margin-top:12px}
.rh-nav a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;color:var(--ink-soft);font-weight:600;font-size:15px;text-decoration:none;cursor:pointer}
.rh-nav a:hover{background:var(--action-bg);color:var(--action)}
.rh-nav a.active{background:var(--action);color:#fff;box-shadow:0 10px 20px -12px rgba(47,107,237,.7)}
.rh-nav a.sub{padding:6px 12px 6px 42px;font-size:13.5px;font-weight:500}
.rh-nav a.sub.on{color:var(--action);font-weight:700}
.rh-nav .n{margin-left:auto;background:var(--rule-soft);border-radius:999px;padding:0 8px;font-size:12px;color:var(--ink)}
.rh-main{display:flex;flex-direction:column;gap:16px;min-width:0}
.rh-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.rh-kpi{position:relative;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:16px 18px}
.rh-kpi b{display:block;font-size:24px;letter-spacing:-.03em;color:var(--action);line-height:1.15}
.rh-kpi b small{font-size:14px;color:var(--ink-soft);font-weight:600}
.rh-kpi span{color:var(--ink-soft);font-size:13px}
.rh-ring{--pct:0;position:absolute;right:14px;top:14px;width:46px;height:46px;border-radius:50%;background:conic-gradient(var(--action) calc(var(--pct)*1%),var(--rule) 0);display:grid;place-items:center}
.rh-ring i{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--panel);font-style:normal;font-weight:800;font-size:12px}
.rh-check{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.rh-check span{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:999px;font-size:13px;font-weight:600}
.rh-check .ok{background:var(--ok-bg);color:var(--ok)}
.rh-check .todo{background:var(--warn-bg);color:var(--warn-ink)}
.rh-alerts{display:flex;gap:12px;flex-wrap:wrap}
.rh-alert{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:16px;font-weight:600;font-size:14px}
.rh-alert.warn{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink)}
.rh-alert.danger{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger)}
.rh-alert.info{background:var(--action-bg);border:1px solid var(--info-border);color:var(--info-ink)}
.rh-card{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden;scroll-margin-top:76px}
.rh-card.editing{border-color:var(--action);box-shadow:0 0 0 4px var(--action-bg),var(--shadow-sm)}
.rh-card-head{display:flex;align-items:center;gap:10px;padding:16px 20px 8px}
.rh-card-head h3{margin:0;font-size:18px}
.rh-card-head .mini,.rh-card-head .muted{margin-left:auto}
.rh-rows{margin:0;padding:4px 20px 16px;display:grid;grid-template-columns:200px minmax(0,1fr)}
.rh-rows dt{color:var(--ink-soft);font-size:14px;padding:9px 0;border-top:1px solid var(--rule-soft)}
.rh-rows dd{margin:0;padding:9px 0;border-top:1px solid var(--rule-soft);font-weight:600;overflow-wrap:anywhere}
.rh-rows dd.empty{color:var(--ink-faint);font-weight:400}
.rh-form{padding:6px 20px 12px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 16px}
.rh-form .full{grid-column:1/-1}
.rh-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 18px}
.rh-list{padding:0 20px 14px;display:flex;flex-direction:column;gap:6px;font-size:14px}
.rh-notes{padding:4px 20px 18px;line-height:1.5}
.rh-hist{padding:0 20px 18px}
.rh-docs{padding:0 20px 8px;display:flex;flex-direction:column;gap:8px}
.rh-doc{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--rule);border-radius:14px;background:var(--panel-alt)}
.rh-doc>i{font-style:normal;font-size:22px}
.rh-doc-main{flex:1;min-width:0}
.rh-doc-main small{display:block;color:var(--ink-soft)}
.rh-doc-acts{display:flex;gap:4px}
.rh-cat{display:inline-flex;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;background:var(--action-bg);color:var(--action);margin:0 6px}
.rh-docform{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 20px 18px}
.rh-valid{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft)}
@media (max-width:900px){.rh{grid-template-columns:1fr}.rh-side{position:static;max-height:none}.rh-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.rh-rows{grid-template-columns:130px minmax(0,1fr)}.rh-form{grid-template-columns:1fr}}
/* Tableau de bord : anniversaires et rappels RH */
.dash-hr{margin-top:16px}
.dash-hr-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;padding:4px 20px 18px}
.dash-hr-col h3{margin:0 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft)}
.dash-hr-item{display:flex;align-items:center;gap:12px;width:100%;margin:0 0 8px;padding:10px 12px;border:1px solid var(--rule);border-radius:16px;background:var(--panel-alt);font:inherit;color:inherit;text-align:left;cursor:pointer}
.dash-hr-item:hover{border-color:var(--action);background:var(--action-bg)}
.dash-hr-item.today{border-color:var(--warn-border);background:var(--warn-bg)}
.dash-hr-item.warn{border-color:var(--warn-border);background:var(--warn-bg)}
.dash-hr-item.danger{border-color:var(--danger-border);background:var(--danger-bg)}
.dash-hr-main{display:flex;flex-direction:column;min-width:0;flex:1}
.dash-hr-main small{color:var(--ink-soft);font-size:13px}
.dash-hr-tag{font-size:24px}
.hr-mini-av{flex:0 0 auto;display:grid;place-items:center;width:38px;height:38px;border-radius:50%;color:#fff;font-weight:800;font-size:14px}
.dash-hr-empty{margin:0;font-size:14px}
@media (max-width:760px){.dash-hr-body{grid-template-columns:1fr}}

/* ---------- Page Équipe : annuaire de cartes ---------- */
.eq-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:10px 0 14px}
.eq-search{flex:1;min-width:220px;max-width:380px;display:flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--rule);border-radius:999px;padding:0 16px;color:var(--ink-soft)}
.eq-search input{flex:1;min-width:0;border:none;background:none;outline:none;font:inherit;color:var(--ink);padding:10px 0}
.eq-search:focus-within{border-color:var(--action);box-shadow:0 0 0 4px var(--action-bg)}
.eq-chip{padding:7px 14px;border-radius:999px;border:1px solid var(--rule);background:var(--panel);font:inherit;font-weight:600;font-size:14px;color:var(--ink-soft);cursor:pointer}
.eq-chip:hover{border-color:var(--action);color:var(--action)}
.eq-chip.on{background:var(--action);border-color:var(--action);color:#fff}
.eq-chip b{margin-left:4px;opacity:.8}
.eq-strip{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.eq-note{padding:10px 16px;border-radius:16px;font-weight:600;font-size:14px}
.eq-note.info{background:var(--action-bg);border:1px solid var(--info-border);color:var(--info-ink)}
.eq-note.warn{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink)}
.eq-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px}
.eq-card{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:16px;display:flex;flex-direction:column;gap:10px}
.eq-card[hidden],.eq-empty[hidden]{display:none}
.eq-card.former{opacity:.85}
.eq-top{display:flex;gap:12px;align-items:center}
.eq-id{display:flex;gap:12px;align-items:center;min-width:0;flex:1;background:none;border:none;padding:0;font:inherit;color:inherit;text-align:left;cursor:pointer}
.eq-id:hover h3{color:var(--action)}
.eq-avwrap{position:relative;flex:0 0 auto}
.avatar-circle.eq-av{width:56px;height:56px;font-size:19px;font-weight:800}
.eq-on{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;border-radius:50%;background:var(--ok);border:3px solid var(--panel)}
.eq-who{min-width:0}
.eq-who h3{margin:0;font-size:17px;overflow-wrap:anywhere}
.eq-who p{margin:2px 0 0;color:var(--ink-soft);font-size:13.5px}
.eq-ring{--pct:0;width:42px;height:42px;border-radius:50%;background:conic-gradient(var(--action) calc(var(--pct)*1%),var(--rule) 0);display:grid;place-items:center;flex:0 0 auto}
.eq-ring i{display:grid;place-items:center;width:31px;height:31px;border-radius:50%;background:var(--panel);font-style:normal;font-weight:800;font-size:11px}
.eq-tags{display:flex;gap:6px;flex-wrap:wrap;min-height:26px;align-content:flex-start}
.eq-tag{padding:3px 10px;border-radius:999px;font-size:12.5px;font-weight:700;background:var(--rule-soft);color:var(--ink-soft)}
.eq-tag.info{background:var(--action-bg);color:var(--action)}
.eq-tag.warn{background:var(--warn-bg);color:var(--warn-ink)}
.eq-tag.danger{background:var(--danger-bg);color:var(--danger)}
.eq-kv{display:flex;justify-content:space-between;gap:8px;font-size:13.5px;color:var(--ink-soft);border-top:1px solid var(--rule-soft);padding-top:9px}
.eq-kv b{color:var(--ink)}
.eq-foot{display:flex;gap:8px;align-items:center;margin-top:auto}
.eq-foot .eq-open{margin-left:auto}
.eq-q{text-decoration:none;display:inline-grid;place-items:center}
.eq-q.off{opacity:.4}
.eq-empty{padding:18px 4px}
@media (max-width:640px){.eq-grid{grid-template-columns:1fr}.eq-search{max-width:none}}
.eq-foot .reorder-btns{display:inline-flex;flex-direction:row;gap:2px}

/* Vue de la journée (téléphone / ordinateur) : mêmes cartes que la badgeuse */
.kp-day{padding:14px}
.kp-day .kp-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.kp-card.free{background:var(--panel-alt);border-style:dashed}
.kp-card.free .kp-pill,.kp-pill.absent{background:var(--rule-soft);color:var(--ink-soft)}
.kp-card .daily-punches{margin-top:10px}
@media (max-width:640px){.kp-day{padding:10px}.kp-card{padding:14px}.kp-who b{font-size:19px}.kp-when{font-size:17px}.kp-pill{font-size:14px;padding:6px 12px}.kp-axis{font-size:13px}}

/* ---------- Messagerie harmonisée (même langage que les cartes Équipe / Journée) ---------- */
.msg-toptabs{gap:8px;margin-bottom:16px}
.msg-toptabs button{border-radius:999px;padding:9px 18px;font-size:14px;border-color:var(--rule);color:var(--ink-soft)}
.msg-toptabs button:hover{border-color:var(--action);color:var(--action);background:var(--panel)}
.msg-toptabs button.active:hover{color:#fff}
.msg-toptabs .tab-dot{top:6px;right:8px}
.msg-shell{height:min(720px,78vh);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.conv-list{flex:0 0 330px;padding:10px;gap:4px;background:var(--panel-alt);border-right:1px solid var(--rule-soft)}
.conv-search{position:sticky;top:-10px;margin:-10px -10px 4px;padding:12px 12px 8px;border:0;background:var(--panel-alt)}
.conv-search input{border-radius:999px;padding:10px 16px;border:1px solid var(--rule);background:var(--panel)}
.conv-item{border:0;border-radius:16px;padding:10px 12px;gap:12px;cursor:pointer;font:inherit;color:inherit}
.conv-item:hover{background:var(--panel)}
.conv-item.sel{background:var(--panel);box-shadow:0 0 0 2px var(--action),var(--shadow-sm)}
.conv-avatar{width:44px;height:44px;font-size:16px;font-weight:800}
.conv-main b{font-size:15.5px;font-weight:700}
.conv-main small{font-size:13.5px}
.conv-item.has-unread .conv-main b{font-weight:800}
.conv-item.has-unread .conv-main small{color:var(--ink);font-weight:600}
.conv-meta i{font-size:12px}
.msg-pane-head{padding:14px 22px;gap:12px;font-size:17px;font-weight:700}
.msg-pane-head .conv-avatar{width:40px;height:40px;font-size:15px}
.msg-list{padding:20px 24px;gap:8px}
.msg-day{font-size:12px;padding:3px 14px;margin:14px 0 6px}
.msg{max-width:min(72%,600px);padding:11px 16px;border-radius:20px;font-size:15px;line-height:1.4}
.msg-them{background:var(--panel-alt);border:1px solid var(--rule-soft);border-bottom-left-radius:6px}
.msg-mine{border-bottom-right-radius:6px;box-shadow:0 8px 18px -12px rgba(47,107,237,.7)}
.msg span{font-size:11.5px;margin-top:2px}
.msg-del{top:6px;right:8px}
.message-form{padding:12px 20px 16px;border-top:1px solid var(--rule-soft)}
.message-form textarea{min-height:48px;padding:12px 16px;border-radius:18px;font:inherit}
.message-form textarea:focus{outline:none;border-color:var(--action);box-shadow:0 0 0 4px var(--action-bg)}
.msg-empty{font-size:15px}
@media (max-width:900px){.msg-shell{height:min(620px,78vh)}.conv-list{flex:1}.msg-list{padding:14px}.msg{max-width:85%}.message-form{padding:10px 12px 12px}}
.msg:has(.msg-del){padding-right:34px}
.message-form-actions .icb{width:42px;height:42px;border-radius:50%;font-size:18px}

/* ---------- Page Rapports ---------- */
.rp-chips{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 16px}
.rp-chip{padding:8px 16px;border-radius:999px;border:1px solid var(--rule);background:var(--panel);font:inherit;font-weight:600;font-size:14px;color:var(--ink-soft);cursor:pointer}
.rp-chip:hover{border-color:var(--action);color:var(--action)}
.rp-chip.on{background:var(--action);border-color:var(--action);color:#fff}
.rp-group{margin:22px 0 10px;font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);font-weight:700}
.rp-group:first-of-type{margin-top:6px}
.rp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}
.rp-card{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:18px;display:flex;flex-direction:column;gap:10px}
.rp-head{display:flex;gap:12px;align-items:center}
.rp-ico{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;font-size:22px;background:var(--action-bg);flex:0 0 auto}
.rp-head h3{margin:0;font-size:17px}
.rp-head small{display:block;color:var(--ink-soft);font-size:13px;margin-top:2px}
.rp-desc{margin:0;color:var(--ink-soft);font-size:14px;line-height:1.45}
.rp-fmt{display:flex;gap:6px;flex-wrap:wrap}
.rp-tag{padding:3px 10px;border-radius:999px;font-size:12.5px;font-weight:700;background:var(--rule-soft);color:var(--ink-soft)}
.rp-foot{margin-top:auto;display:flex;gap:8px;align-items:center}
.rp-foot .btn{margin-left:auto}
.rp-body{min-width:0}
.rp-embedded{display:block}
.temp-reports-link{margin:16px 0}
@media (max-width:640px){.rp-grid{grid-template-columns:1fr}}
.tools-toggle[hidden],.topbar-msg[hidden]{display:none}

/* Badgeuse : le nom de la personne identifiée (h2 sur fond sombre) était affiché en encre foncée par la règle générale des titres */
.kiosk-box h1,.kiosk-box h2,.kiosk-box h3,.kiosk-greet h2{color:#f1f5f8}

/* Guides d'utilisation : grande fenêtre avec la page du guide */
.sheet.sheet-guide{max-width:960px;width:96vw}
.sheet-guide .sheet-body{padding:0}
.guide-frame{display:block;width:100%;height:min(74vh,820px);border:0;background:#fff}
@media (max-width:700px){.sheet.sheet-guide{width:100vw;max-width:100vw}.guide-frame{height:72vh}}
.sheet-foot a.btn{text-decoration:none;display:inline-grid;place-items:center}

/* ---------- Onglets homogènes : même pastille segmentée pour Planning, Messagerie, Procédures, Rapports (comme Équipe et Gestion des tâches) ---------- */
.msg-toptabs,.procedure-tabs,.rp-chips{display:inline-flex;flex-wrap:nowrap;gap:4px;width:auto;max-width:100%;padding:5px;margin:0 0 14px;background:var(--panel);border:1px solid var(--rule);border-radius:999px;box-shadow:var(--shadow-sm);overflow-x:auto;scrollbar-width:none}
.msg-toptabs button,.procedure-tabs button,.rp-chip{position:relative;display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;padding:8px 18px;border:none;border-radius:999px;background:transparent;box-shadow:none;color:var(--ink-soft);font:inherit;font-weight:600;font-size:14px;white-space:nowrap;cursor:pointer}
.msg-toptabs button:not(.active):hover,.procedure-tabs button:not(.active):hover,.rp-chip:not(.on):hover{background:var(--action-bg);border-color:transparent;color:var(--action)}
.msg-toptabs button.active,.procedure-tabs button.active,.rp-chip.on{background:var(--action);border:none;box-shadow:none;color:#fff}
.procedure-tabs button.active span{color:#fff}
.procedure-section-tabs{padding-bottom:0}
@media (max-width:700px){.msg-toptabs,.procedure-tabs,.rp-chips{display:flex}.procedure-tabs button{flex:1 0 auto}}

/* ---------- Pages de gestion : cartes (badgeuses, badges, comptes, produits) ---------- */
.dv-h2{margin:22px 0 10px;font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);font-weight:700}
.dv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.dv-card{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:16px;display:flex;flex-direction:column;gap:10px;min-width:0}
.dv-head{display:flex;gap:12px;align-items:center}
.dv-title{min-width:0;flex:1}
.dv-title h3{margin:0;font-size:17px;overflow-wrap:anywhere}
.dv-title small{display:block;margin-top:2px;color:var(--ink-soft);font-size:13px;overflow-wrap:anywhere}
.dv-ico,.dv-av{flex:0 0 auto;width:46px;height:46px;border-radius:14px;display:grid;place-items:center;font-size:22px}
.dv-ico{background:var(--action-bg)}
.dv-av{border-radius:50%;color:#fff;font-weight:800;font-size:16px;background:var(--action)}
.dv-av-kiosk{background:var(--action-bg);font-size:22px}
.dv-chips{display:flex;gap:6px;flex-wrap:wrap}
.dv-chip{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:12.5px;font-weight:700;background:var(--rule-soft);color:var(--ink-soft);white-space:nowrap}
.dv-chip.ok{background:var(--ok-bg);color:var(--ok)}
.dv-chip.warn{background:var(--warn-bg);color:var(--warn-ink)}
.dv-chip.info{background:var(--action-bg);color:var(--action)}
.dv-meta{margin:0;color:var(--ink-soft);font-size:13px}
.dv-foot{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto}
.dv-danger{color:var(--danger);border-color:var(--danger-border)}
.dv-danger:hover{background:var(--danger-bg)}
.dv-product{text-align:left;cursor:pointer;font:inherit;color:inherit;gap:4px;padding:12px 16px}
.dv-product:hover{border-color:var(--action);background:var(--action-bg)}
.dv-product b{font-size:15px}
.dv-product small{color:var(--ink-soft);font-size:13px}
@media (max-width:640px){.dv-grid{grid-template-columns:1fr}}

/* ---------- Gestion des périmés : encouragements, Contrôle du jour, retrait en rafale ---------- */
.stock-reward{margin:-4px 0 12px;padding:6px 12px;border-radius:var(--radius-lg);background:var(--panel-alt);color:var(--ink-soft);font-size:14px;font-weight:600}
.rv-progress{height:10px;border-radius:999px;background:var(--rule-soft);overflow:hidden;margin:2px 0 4px}
.rv-progress i{display:block;height:100%;background:var(--ok);border-radius:999px;transition:width .25s}
.rv-count{margin:0 0 12px;font-size:13px;font-weight:700;color:var(--ink-soft);font-variant-numeric:tabular-nums;text-align:right}
.rv-card,.bt-card{padding:18px 16px;border-radius:var(--radius-lg);border:2px solid var(--rule);background:var(--panel);margin-bottom:12px}
.rv-card.lot-danger,.bt-card.lot-danger{border-color:var(--danger-border);background:var(--danger-bg)}
.rv-card.lot-warn,.bt-card.lot-warn{border-color:var(--warn-border);background:var(--warn-bg)}
.rv-card.lot-ok,.bt-card.lot-ok{border-color:var(--ok-border);background:var(--ok-bg)}
.rv-pill{font-size:15px;padding:6px 12px}
.rv-name{margin:12px 0 6px;font-size:26px;line-height:1.15;overflow-wrap:anywhere}
.rv-meta{margin:0;font-size:16px;color:var(--ink-soft)}
.rv-main{min-height:56px;font-size:19px}
.sheet-foot-wrap{flex-wrap:wrap}
.sheet-foot-wrap .btn{min-height:50px;flex:1 1 40%}
.sheet-foot-wrap .rv-main{flex:1 1 100%}
.rv-done{text-align:center;padding:10px 0}
.rv-done-emoji{font-size:54px;margin:0;line-height:1}
.rv-done h3{margin:8px 0 12px;font-size:21px}
.rv-done ul{list-style:none;margin:0 0 10px;padding:0;font-size:17px;display:grid;gap:6px}
.rv-streak{margin:0;font-weight:700;color:var(--ok)}
.bt-tally{margin:0 0 10px;font-weight:700;color:var(--ok)}
.bt-hint{margin:6px 0 0}
.bt-card b{font-size:21px;overflow-wrap:anywhere}
.bt-card p{margin:8px 0 10px;font-size:15px}
.bt-acts{display:flex;flex-wrap:wrap;gap:8px}
.bt-acts .btn{min-height:50px;flex:1 1 40%}
.bt-acts .rv-main{flex:1 1 100%}
@media (prefers-reduced-motion:reduce){.rv-progress i{transition:none}}

/* Produit BTP — chantiers, équipes de travail (Lot BTP 1B) : gros éléments tactiles, une colonne sur téléphone */
.site-filters{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 4px}
.site-filters .mini{min-height:38px;padding:0 14px}
.site-filters .mini.on{background:var(--action);color:#fff;border-color:var(--action)}
.site-card{cursor:pointer}
.site-card:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.site-card .dv-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.site-actions{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 12px}
.site-row{display:grid;grid-template-columns:minmax(110px,170px) 1fr;gap:8px;padding:6px 0;border-bottom:1px solid var(--rule-soft)}
.team-dot{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:8px;vertical-align:-1px}
.team-members{display:grid;gap:4px;max-height:240px;overflow:auto;border:1px solid var(--rule);border-radius:8px;padding:8px}
.check{display:flex;align-items:center;gap:8px;min-height:36px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:760px){#site-new,[data-site-assign],[data-site-edit],[data-site-archive],[data-site-restore],[data-team-new],#sf-save,#as-save,#tf-save,#ok-confirm,.site-filters .mini,.site-card .mini,.team-card .mini,.item .mini[data-site-unassign]{min-height:44px}}
@media (max-width:560px){.site-row{grid-template-columns:1fr}.row2{grid-template-columns:1fr}.site-actions .btn{flex:1 1 100%;min-height:48px}}

/* Produit BTP — planning par chantier (Lot BTP 2) */
.sp-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:8px 0}
.sp-bar select{min-height:40px;max-width:100%}
.sp-scroll{overflow-x:auto;margin-top:8px}
.sp-grid{border-collapse:collapse;width:100%;min-width:760px}
.sp-grid th,.sp-grid td{border:1px solid var(--rule);padding:6px;vertical-align:top;text-align:left}
.sp-grid th.sp-who{position:sticky;left:0;background:var(--panel);min-width:130px;font-weight:700}
.sp-grid td.sp-today,.sp-grid th.sp-today{background:var(--action-bg)}
.sp-grid td.sp-unassigned{background:var(--rule-soft)}
.sp-chip{display:inline-block;margin:2px 4px 2px 0;padding:4px 8px;border-radius:8px;border:1.5px solid var(--rule);background:var(--panel);font-size:13px;font-weight:700;cursor:default}
button.sp-chip{cursor:pointer;min-height:32px}
.sp-chip i{font-style:normal;font-weight:400;opacity:.75}
.sp-draft{border-style:dashed;border-color:var(--action);color:var(--action)}
.sp-changed{border-color:var(--warn-ink);background:var(--warn-bg);color:var(--warn-ink)}
.sp-published{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)}
.sp-removed{text-decoration:line-through;opacity:.7}
.sp-absent{display:inline-block;padding:2px 8px;border-radius:8px;background:var(--rule-soft);color:var(--ink-soft);font-size:12.5px}
.sp-add{min-width:32px;min-height:32px;border:1px dashed var(--rule);border-radius:8px;background:transparent;color:var(--ink-soft);cursor:pointer}
.sp-days{display:none;gap:10px;margin-top:8px}
.sp-days .dv-card.sp-today{border-color:var(--action)}
.sp-line{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--rule-soft)}
.sp-daypick{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:4px}
.sp-codes{display:flex;gap:6px;flex-wrap:wrap;margin:-4px 0 10px}
.sp-legend{margin-top:12px}
@media (max-width:760px){.sp-scroll{display:none}.sp-days{display:grid}.sp-bar .mini,.sp-bar select,.sp-days .dv-head .mini,.sp-add,button.sp-chip,.sp-codes .mini,#sp-plan,#sp-publish,#sp-unpublish,#sp-save,#sp-delete{min-height:44px}}

/* ---- Pointage mobile et QR de chantier (produit BTP, Lot 3A) ---- */
.ck-page{max-width:640px}
.ck-card{background:var(--panel);border:1px solid var(--rule);border-radius:14px;padding:16px;margin:12px 0;display:flex;flex-direction:column;gap:10px}
.ck-on{border-color:var(--ok);background:var(--ok-bg)}
.ck-qr{border-color:var(--action)}
.ck-state{margin:0;font-size:15px;color:var(--ink-soft)}
.ck-site{margin:0;font-size:20px;font-weight:700}
.ck-site small{font-weight:400;color:var(--ink-soft);font-size:13px}
.ck-big{min-height:56px;font-size:17px;width:100%;justify-content:center}
.ck-big small{font-weight:400}
.ck-switch{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.ck-error{color:var(--danger,#b3261e);margin:0}
.ck-recent{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.ck-recent li{padding:6px 0;border-bottom:1px solid var(--rule-soft)}
.ck-k{display:inline-block;min-width:64px;font-size:13px;font-weight:600}
.ck-in{color:var(--ok)}
.ck-out{color:var(--ink-soft)}
.ck-qr-box{display:flex;justify-content:center;padding:8px;background:#fff;border-radius:12px;margin-bottom:8px}
.ck-qr-box svg{width:min(260px,100%);height:auto}
.ck-print-sheet{display:none}
@media print{body>*:not(.ck-print-sheet){display:none!important}.ck-print-sheet{display:block;text-align:center;padding:24px;color:#000;background:#fff}.ck-print-sheet svg{width:360px;height:360px}.ck-print-qr{display:flex;justify-content:center}}
@media (max-width:760px){.ck-big,#ck-scan,#ck-for,#ck-gen,#ck-print,#ck-for-save,.ck-page .btn{min-height:48px}}

/* ---- Pointage hors ligne et anomalies (produit BTP, Lot 3B) ---- */
.ck-warn{border-color:var(--action,#b26a00)}
.ck-offline{position:fixed;inset:0;z-index:9999;background:var(--paper);overflow:auto;padding:16px}
.ck-offline-box{max-width:520px;margin:0 auto;display:flex;flex-direction:column;gap:6px}
.ck-anom{border-top:1px solid var(--rule-soft);padding:10px 0;display:flex;flex-direction:column;gap:6px}
.ck-anom input{min-height:44px}
@media (max-width:760px){#ck-sync,#ck-anom,#ck-reload,.ck-anom .mini,.ck-recent .mini{min-height:44px}}

/* ---- Heures par chantier (produit BTP, Lot 4) ---- */
.sh-scroll{overflow-x:auto;margin-top:8px}
.sh-grid{border-collapse:collapse;width:100%;min-width:820px}
.sh-grid th,.sh-grid td{border:1px solid var(--rule);padding:4px;vertical-align:top;text-align:left}
.sh-who{min-width:130px;background:var(--panel-alt);font-weight:600}
.sh-today{background:var(--panel-alt)}
.sh-empty{color:var(--ink-faint);text-align:center}
.sh-total{text-align:right}
.sh-cell,.sh-line{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;background:none;border:0;padding:4px;text-align:left;cursor:pointer;color:inherit;font:inherit}
.sh-cell small{color:var(--ink-soft)}
.sh-pill{display:inline-block;font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft)}
.sh-wait{border-color:var(--action);color:var(--action)}
.sh-part{border-color:var(--action);color:var(--action)}
.sh-done{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)}
.sh-locked{background:var(--panel-alt)}
.sh-running{border-style:dashed}
.sh-segments{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-direction:column;gap:6px}
.sh-segments li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--rule-soft)}
.sh-days{display:none}
.sh-line{flex-direction:row;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--rule-soft)}
@media (max-width:760px){.sh-scroll{display:none}.sh-days{display:grid;gap:8px}.sh-cell,.sh-line,#sh-validate,#sh-config,#sh-ok,#sh-reopen,#sh-save,#sh-anomalies,.sh-segments .mini,[data-sh-nav],[data-sh-add]{min-height:44px}.sh-page .sp-bar select{min-height:44px}}

/* ---- Carnet de chantier et photos (produit BTP, Lot 5A) ---- */
.sd-page{max-width:760px}
.sd-entry{margin:10px 0}
.sd-text{white-space:pre-wrap;margin:6px 0}
.sd-meta{margin:4px 0}
.sd-cat{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft)}
.sd-probleme,.sd-securite{border-color:var(--danger,#b3261e);color:var(--danger,#b3261e)}
.sd-livraison,.sd-avancement{border-color:var(--ok);color:var(--ok)}
.sd-thumbs{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.sd-thumb{width:84px;height:84px;border:1px solid var(--rule);border-radius:10px;overflow:hidden;padding:0;background:var(--panel-alt);display:flex;align-items:center;justify-content:center;cursor:pointer}
.sd-thumb img{width:100%;height:100%;object-fit:cover}
.sd-wait{cursor:default;color:var(--ink-faint)}
.sd-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin-top:8px}
.sd-gallery figure{margin:0;display:flex;flex-direction:column;gap:4px}
.sd-gallery .sd-thumb{width:100%;height:110px}
.sd-gallery figcaption{font-size:13px;display:flex;flex-direction:column}
.sd-big{max-width:100%;max-height:70vh;border-radius:10px}
@media (max-width:760px){#sd-new,#sd-find,#sd-more,#sd-more-photos,#sd-site-photo,#sd-save,#sd-ok,.sd-entry .mini,.sd-page select,.sd-page input[type=search]{min-height:44px}}

/* ---- Tâches par chantier (produit BTP, Lot 5B) ---- */
.st-page{max-width:760px}
.st-h2{font-size:16px;margin:16px 0 6px}
.st-task{margin:10px 0}
.st-done{opacity:.8}
.st-late{border-color:var(--danger,#b3261e)}
.st-ok{color:var(--ok);margin:4px 0}
.st-pill{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft)}
.st-high{border-color:var(--danger,#b3261e);color:var(--danger,#b3261e)}
.st-low{color:var(--ink-faint)}
.st-big{min-height:52px;font-size:16px;flex:1}
@media (max-width:760px){.st-big,#st-new,#st-save,#st-ok,.st-task .mini,.st-page select,[data-st-nav]{min-height:44px}}

/* Incidents de chantier (produit BTP, Lot 6A) */
.si-page{max-width:760px}
.si-item{margin:10px 0}
.si-closed{opacity:.8}
.si-desc{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.si-comments{margin:4px 0 0;padding-left:18px}
.si-pill{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft)}
.si-critical,.si-high{border-color:var(--danger,#b3261e);color:var(--danger,#b3261e)}
.si-critical{font-weight:700}
.si-low{color:var(--ink-faint)}
.si-filters .mini.on{border-color:var(--action);font-weight:700}
@media (max-width:760px){#si-new,#si-save,#si-ok,#si-more,.si-item .mini,.si-page select,.si-filters .mini{min-height:44px}}

/* Vue par mois : mêmes cartes pastel à liseré coloré que la vue par semaine (voir `.chip` ci-dessus) */
.mblock{
  border-left:4px solid transparent;border-radius:7px;color:var(--ink)!important;
  background-image:linear-gradient(rgba(255,255,255,.86),rgba(255,255,255,.86)),linear-gradient(transparent,transparent)!important;
  background-clip:padding-box,border-box!important;box-shadow:0 3px 8px -7px rgba(16,48,74,.55);
}
.moff{border-radius:7px}
:root[data-theme="dark"] .mblock{background-image:linear-gradient(rgba(17,22,27,.82),rgba(17,22,27,.82)),linear-gradient(transparent,transparent)!important}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .mblock{background-image:linear-gradient(rgba(17,22,27,.82),rgba(17,22,27,.82)),linear-gradient(transparent,transparent)!important}}
html.lite .mblock{background-image:none!important;border-left:4px solid currentColor;box-shadow:none}

/* Documents de chantier (produit BTP, Lot 6B) */
.sdoc-page{max-width:760px}
.sdoc-item{margin:10px 0}
.sdoc-item .dv-head strong{overflow-wrap:anywhere}
.sdoc-pill{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft);white-space:nowrap}
.sdoc-restricted{border-color:var(--danger,#b3261e);color:var(--danger,#b3261e)}
.sdoc-open{min-height:44px}
@media (max-width:760px){#sdoc-new,#sdoc-save,#sdoc-ok,#sdoc-more,.sdoc-item .mini,.sdoc-page select{min-height:44px}}

/* Habilitations (produit BTP, Lot 7) */
.sq-page{max-width:820px}
.sq-summary{margin:6px 0 10px}
.sq-person{margin:10px 0}
.sq-chips{display:flex;flex-wrap:wrap;gap:6px}
.sq-chip{display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 10px;border-radius:10px;border:1px solid var(--rule-strong);border-left-width:5px;background:var(--panel);color:var(--ink);font:inherit;text-align:left}
button.sq-chip{cursor:pointer;min-height:44px}
.sq-chip small{color:var(--ink-soft)}
.sq-valid{border-left-color:var(--ok)}
.sq-expiring{border-left-color:#d98a00}
.sq-expired{border-left-color:var(--danger,#b3261e)}
.sq-gaps{margin:8px 0 0;color:var(--danger,#b3261e);font-weight:600}
.sq-filters{display:inline-flex;gap:6px}
.sq-filters .mini.on{border-color:var(--action);font-weight:700}
.sq-catalogue{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.sq-catalogue li{display:flex;justify-content:space-between;align-items:center;gap:10px}
@media (max-width:760px){#sq-catalogue,#sq-required,#sq-save,.sq-person .mini,.sq-page select,.sq-filters .mini,.sq-catalogue .mini{min-height:44px}}

/* Déplacements et paniers (produit BTP, Lot 8) */
.tv-page{max-width:820px}
.tv-tabs .mini.on{border-color:var(--action);font-weight:700}
.tv-totals{margin:6px 0 10px}
.tv-entry{margin:10px 0}
.tv-pill{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft);white-space:nowrap}
.tv-validated{border-color:var(--ok);color:var(--ok)}
.tv-rejected{border-color:var(--danger,#b3261e);color:var(--danger,#b3261e)}
.tv-submitted{border-color:var(--action);color:var(--action)}
.tv-reason{margin:4px 0 0;color:var(--danger,#b3261e);font-weight:600}
.tv-note{margin:0;overflow-wrap:anywhere}
.tv-pick{display:inline-flex;align-items:center;gap:6px;min-height:44px}
.tv-types{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.tv-types li{display:flex;justify-content:space-between;align-items:center;gap:10px}
@media (max-width:760px){#tv-new,#tv-types,#tv-send,#tv-validate,#tv-reject,#tv-all,#tv-more,#tv-export,#tv-save,#tv-save-send,#tv-ok,#tv-save-type,.tv-entry .mini,.tv-page select,.tv-page input,.tv-tabs .mini{min-height:44px}}

/* Rapports de chantier (produit BTP, Lot 9) */
.sr-page{max-width:900px}
.sr-period{align-items:center}
.sr-site,.sr-block{margin:10px 0}
.sr-figs{display:flex;flex-wrap:wrap;gap:8px}
.sr-fig{display:inline-flex;flex-direction:column;padding:6px 12px;border:1px solid var(--rule);border-radius:10px;background:var(--panel-alt);min-width:96px}
.sr-fig small{color:var(--ink-soft)}
.sr-fig b{font-variant-numeric:tabular-nums}
.sr-h2{font-size:16px;margin:0 0 8px}
.sr-table{width:100%;border-collapse:collapse;margin-top:10px}
.sr-table th,.sr-table td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--rule)}
.sr-table td:not(:first-child),.sr-table th:not(:first-child){font-variant-numeric:tabular-nums}
.sr-gaps{margin:0;padding-left:18px}
@media (max-width:760px){#sr-export,#sr-export-hours,.sr-site .mini,.sr-period .mini,.sr-page select,.sr-page input{min-height:44px}.sr-table{display:block;overflow-x:auto}}

/* Données personnelles BTP (produit BTP, Lot 10) */
.pv-page{max-width:820px}
.pv-h2{font-size:16px;margin:16px 0 8px}
.pv-item{margin:10px 0}
.pv-pill{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;border:1px solid var(--rule-strong);color:var(--ink-soft)}
.pv-covered{border-color:var(--ok);color:var(--ok)}
.pv-none{border-color:var(--warn-border,var(--rule-strong));color:var(--warn-ink,var(--ink-soft))}
/* Conservation et effacement BTP (Lot 11) */
.pv-h3{font-size:14px;margin:16px 0 6px}
.pv-warn{margin:6px 0 10px;padding:8px 12px;border:1px solid var(--warn-border,var(--rule-strong));border-radius:10px;background:var(--panel-alt)}
.pv-pol{margin:10px 0}
.pv-sim{margin:6px 0;padding:6px 10px;border-radius:8px;background:var(--panel-alt);font-variant-numeric:tabular-nums}
.pv-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.pv-edit{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.pv-edit label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--ink-soft)}
.pv-holds,.pv-log{margin:0;padding-left:0;list-style:none}
.pv-holds li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--rule)}
.pv-log li{padding:4px 0;border-bottom:1px solid var(--rule);font-variant-numeric:tabular-nums}
.pv-danger:not(:disabled){border-color:var(--warn-border,var(--rule-strong))}
@media (max-width:760px){#pv-export,.pv-page select,.pv-page .mini,.pv-page input{min-height:44px}}

/* ----- Rapport par salarié (Lot Rapport salarié) ----- */
.sr-note{margin:10px 0;padding:8px 12px;font-size:13px;color:var(--info-ink);background:var(--info-bg);border:1px solid var(--info-border);border-radius:var(--radius)}
.sr-month{margin:14px 0 6px;font-size:16px;text-transform:capitalize}
.sr-pershift{display:flex;gap:8px;align-items:center;margin:6px 0 10px;font-size:14px}
.sr-table td.num,.sr-table th.num{text-align:right;font-variant-numeric:tabular-nums}
.sr-table small{color:var(--ink-soft);font-size:11px}
.sr-table .sr-total th,.sr-table .sr-total td{background:var(--action-bg);font-weight:700}
.sr-table tr.muted td{color:var(--ink-soft);font-style:italic}
.sr-table tr.sel td{background:var(--action-bg)}
.sr-sort,.sr-person{background:none;border:0;padding:4px 2px;font:inherit;font-weight:600;color:var(--action);cursor:pointer;text-align:left}
.sr-sort.on{text-decoration:underline}
.sr-sort:focus-visible,.sr-person:focus-visible{outline:3px solid var(--action);outline-offset:2px;border-radius:var(--radius-sm)}
.sr-detail{margin-top:18px;padding-top:6px;border-top:2px solid var(--rule)}
.sr-detail .section-title{flex-wrap:wrap;gap:8px}
.sr-legend{display:flex;gap:16px;margin:10px 0 2px;font-size:13px}
.sr-key::before{content:'';display:inline-block;width:18px;height:3px;margin-right:6px;vertical-align:middle;border-radius:2px;background:currentColor}
.sr-key-tasks{color:var(--action)}
.sr-key-readings{color:var(--purple)}
.sr-chart{width:100%;height:auto;max-height:260px}
.sr-grid{stroke:var(--rule-soft);stroke-width:1}
.sr-axis{fill:var(--ink-soft);font-size:11px}
.sr-line{stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.sr-line-tasks{stroke:var(--action)}
.sr-line-readings{stroke:var(--purple);stroke-dasharray:6 4}
.sr-dot-tasks{fill:var(--action)}
.sr-dot-readings{fill:var(--purple)}
.sr-values{margin-top:8px}
.sr-values summary{cursor:pointer;font-weight:600;padding:6px 0}

/* ----- Catalogue unique : Famille › Produit › Format (Lot Catalogue unique) ----- */
.inv-sections{margin-bottom:6px}
.cat-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin:4px 0 12px}
.cat-tile{display:flex;flex-direction:column;gap:2px;padding:10px 12px;background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.cat-tile b{font-size:24px;font-variant-numeric:tabular-nums;line-height:1.1}
.cat-tile span{font-size:12px;color:var(--ink-soft)}
.cat-tile.warn{background:var(--warn-bg);border-color:var(--warn-border)}
.cat-tile.warn b{color:var(--warn-ink)}
.cat-tools{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:10px}
.cat-tools .field{margin:0}
.cat-search{flex:1 1 240px}
.cat-search input{width:100%}
.cat-actions{display:flex;flex-wrap:wrap;gap:6px}
.cat-hint{margin:0 0 10px;padding:8px 12px;font-size:13px;color:var(--warn-ink);background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:var(--radius)}
.cat-bulk{position:sticky;top:8px;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;padding:8px 12px;background:var(--action-bg);border:1px solid var(--action);border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}
.cat-bulk b{margin-right:auto}
.cat-tree{display:flex;flex-direction:column;gap:8px;margin-bottom:22px}
.cat-family{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}
.cat-family>summary{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;list-style:none}
.cat-family>summary::-webkit-details-marker{display:none}
.cat-family>summary::before{content:'▸';color:var(--ink-faint);transition:transform .15s}
.cat-family[open]>summary::before{transform:rotate(90deg)}
.cat-family-name{font-size:16px;font-weight:700}
.cat-count{font-size:12px;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.cat-family>summary .icb{margin-left:auto}
.cat-unfiled{border-style:dashed}
.cat-family-body{display:flex;flex-direction:column;gap:6px;padding:0 12px 12px}
.cat-group{border:1px solid var(--rule-soft);border-radius:var(--radius);background:var(--panel-alt)}
.cat-group-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--rule-soft)}
.cat-group-head b{font-size:14px}
.cat-group-head .mini{margin-left:auto}
.cat-format{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:7px 10px;background:var(--panel);border-top:1px solid var(--rule-soft)}
.cat-format.ro{grid-template-columns:minmax(0,1fr) auto}
.cat-format:first-of-type{border-top:0}
.cat-format.sel{background:var(--action-bg)}
.cat-format-main{display:flex;flex-direction:column;min-width:0}
.cat-format-main b{font-size:14px;overflow-wrap:anywhere}
.cat-format-main small{font-size:12px;color:var(--ink-soft);overflow-wrap:anywhere}
.cat-format-meta{display:flex;align-items:center;justify-content:flex-end;gap:14px}
.cat-format-code{min-width:118px;text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.cat-format-code.none{font-family:inherit;color:var(--ink-faint)}
.cat-format-unit{min-width:66px;font-size:12px;color:var(--ink-soft)}
.cat-format-price{min-width:64px;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;text-align:right}
.cat-edit .icon,.cat-family .icb .icon,.cat-group-head .icb .icon{display:block}
.cat-check{width:20px;height:20px}
.cat-empty{margin:0;padding:8px 10px;font-size:13px}
.cat-import-sum ul{margin:6px 0 10px;padding-left:20px}
.cat-import-errors{max-height:180px;overflow:auto;font-size:13px}
@media (max-width:640px){
  .cat-format{grid-template-columns:auto minmax(0,1fr) auto;row-gap:2px}
  .cat-format.ro{grid-template-columns:minmax(0,1fr)}
  .cat-format-meta{grid-column:2;grid-row:2;justify-content:flex-start;flex-wrap:wrap;gap:4px 10px}
  .cat-format.ro .cat-format-meta{grid-column:1}
  .cat-format-code,.cat-format-unit,.cat-format-price{min-width:0;text-align:left}
  .cat-edit{grid-column:3;grid-row:1 / span 2}
  .cat-check{grid-column:1;grid-row:1 / span 2}
}

/* ----- Lot 2 de la refonte : retrait d'un lot à sa date limite (jeté + écoulé) et rubrique Stock ----- */
.rv-close-hint{margin:10px 0;padding:8px 12px;font-size:13px;line-height:1.4;color:var(--info-ink);background:var(--info-bg);border:1px solid var(--info-border);border-radius:var(--radius)}
.lc-quick{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.lc-quick .btn{flex:1 1 200px;min-height:48px}
.mv-qty{margin-left:6px;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ok)}
.mv-qty.out{color:var(--danger)}
.inv-recal{margin:6px 0 10px;font-size:12px}
.sk-tools .sk-all{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft);align-self:center}
.sk-note{margin:0 0 12px;font-size:12.5px;color:var(--ink-soft);max-width:110ch}
.cat-tile.bad{background:var(--danger-bg);border-color:var(--danger-border)}
.cat-tile.bad b{color:var(--danger)}
.sk-family>summary .cat-count{margin-left:auto}
.sk-table{width:100%;font-size:13px}
.sk-table th,.sk-table td{white-space:nowrap}
.sk-table td:first-child{white-space:normal;min-width:160px}
.sk-table td small{display:block;font-size:11px;color:var(--ink-faint);font-weight:400}
.sk-table td.num{text-align:right;font-variant-numeric:tabular-nums}
.sk-table .sk-group th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);background:var(--panel-alt)}
.sk-table .sk-sub td{font-weight:600;background:var(--panel-alt)}
.sk-table .sk-total td{font-weight:700;background:var(--action-bg)}
.sk-neg{color:var(--danger)}
.sk-loss{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:700;border:1px solid var(--rule)}
.sk-loss.ok{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-border)}
.sk-loss.warn{color:var(--warn-ink);background:var(--warn-bg);border-color:var(--warn-border)}
.sk-loss.bad{color:var(--danger);background:var(--danger-bg);border-color:var(--danger-border)}

/* ===== Inventaire : parcours de comptage (Lot 3 de la refonte) — préparer › compter › vérifier › terminé ===== */
.inv-steps{display:flex;gap:6px;list-style:none;margin:0 0 16px;padding:0;counter-reset:none;overflow-x:auto}
.inv-steps li{display:flex;align-items:center;gap:7px;padding:6px 12px 6px 6px;border-radius:999px;background:var(--panel-alt);color:var(--ink-faint);font-size:13px;font-weight:600;white-space:nowrap}
.inv-steps li span{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--rule-soft);color:var(--ink-soft);font-size:12px;font-variant-numeric:tabular-nums}
.inv-steps li.past{color:var(--ok)}
.inv-steps li.past span{background:var(--ok);color:#fff}
.inv-steps li.now{background:var(--action-bg);color:var(--action)}
.inv-steps li.now span{background:var(--action);color:var(--action-ink)}
/* 1. préparer */
.ip-card{padding:18px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm)}
.ip-h{margin:0 0 10px;font-size:16px}
.ip-h+.ip-fams,.ip-h+.ip-modes{margin-bottom:18px}
.ip-fams{display:flex;flex-wrap:wrap;gap:8px}
.ip-fam{min-height:44px;padding:8px 14px;border-radius:999px;border:2px solid var(--rule);background:var(--panel);font:inherit;font-weight:600;color:var(--ink);cursor:pointer}
.ip-fam small{margin-left:4px;color:var(--ink-faint);font-variant-numeric:tabular-nums}
.ip-fam.on{border-color:var(--action);background:var(--action-bg);color:var(--action)}
.ip-fam.on small{color:var(--action)}
.ip-modes{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.ip-mode{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:12px;align-items:center;text-align:left;padding:14px;border:2px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);font:inherit;color:var(--ink);cursor:pointer}
.ip-mode span{grid-row:1/3;font-size:28px}
.ip-mode b{font-size:16px}
.ip-mode small{color:var(--ink-soft);font-size:12.5px}
.ip-mode.on{border-color:var(--action);background:var(--action-bg)}
.ip-blind{margin:0 0 14px;font-size:13px}
.ip-go{width:100%;min-height:54px;font-size:18px}
.ip-draft{display:flex;flex-wrap:wrap;align-items:center;gap:12px;justify-content:space-between;margin-bottom:14px;padding:14px 16px;border:1px solid var(--info-border);border-radius:var(--radius-lg);background:var(--info-bg);color:var(--info-ink)}
.ip-draft p{margin:2px 0 0;font-size:13px}
.ip-draft-acts{display:flex;gap:8px}
/* 2. compter */
.ic-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px}
.ic-bar .rp-chips{margin:0}
.ic-scan{margin-left:auto}
.ic-scan[aria-pressed="true"]{border-color:var(--ok);color:var(--ok);background:var(--ok-bg)}
.ic-find{margin:12px 0}
.ic-tabs{margin:0 0 10px}
.ic-tabs small,.rp-chip small{opacity:.8;font-variant-numeric:tabular-nums}
.ic-list{display:flex;flex-direction:column}
.ic-family{margin:18px 0 6px;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft)}
.ic-family:first-child{margin-top:4px}
.ic-group{margin:10px 0 4px;font-weight:700;font-size:15px}
.ic-row{display:flex;align-items:center;gap:10px;padding:7px 0 7px 12px;border-left:4px solid var(--warn-border);border-bottom:1px solid var(--rule-soft)}
.ic-row.done{border-left-color:var(--ok)}
.ic-name{flex:1;min-width:0;display:flex;flex-direction:column}
.ic-name b{font-size:15px;overflow-wrap:anywhere}
.ic-name small{color:var(--ink-faint);font-size:12px}
.ic-count{display:flex;gap:6px;align-items:stretch;flex:0 0 auto}
.ic-count .inv-qty{flex:0 0 76px;min-width:76px}
.ic-row.done .inv-qty{color:var(--ok);border-color:var(--ok-border);background:var(--ok-bg)}
.ic-more{margin-top:10px}
.ic-list,.ic-tabs,.ic-find,.ic-more{max-width:860px}                                          /* sur grand écran, la quantité reste près du nom */
.ic-foot{position:sticky;bottom:0;z-index:5;display:flex;gap:10px;justify-content:space-between;margin:18px calc(-1 * var(--gutter,16px)) 0;padding:12px var(--gutter,16px);background:var(--paper);border-top:1px solid var(--rule)}
.ic-foot .btn:last-child{flex:1;max-width:360px;min-height:50px;font-size:16px}
/* pas à pas */
.is-card{max-width:440px;margin:14px auto 0;padding:16px;border:2px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm);text-align:center}
.is-card.done{border-color:var(--ok-border)}
.is-pos{margin:0;font-size:12.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.is-name{margin:6px 0 0;font-size:26px;font-weight:800;line-height:1.15;overflow-wrap:anywhere}
.is-unit{margin:2px 0 10px;color:var(--ink-faint);font-size:14px}
.is-display{margin:0 auto;padding:10px;border-radius:var(--radius-lg);background:var(--panel-alt);font-size:44px;font-weight:800;font-variant-numeric:tabular-nums;min-height:72px;line-height:52px;color:var(--ink)}
.is-display.idle{color:var(--ink-faint)}
.is-card.done .is-display.idle{color:var(--ok);background:var(--ok-bg)}
.is-hint{margin:8px 0 12px;font-size:13px;color:var(--ink-soft)}
.is-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.is-key{min-height:60px;border-radius:var(--radius-lg);border:2px solid var(--rule);background:var(--panel);font:inherit;font-size:26px;font-weight:700;color:var(--ink);cursor:pointer;touch-action:manipulation}
.is-key.back{color:var(--ink-soft)}
.is-key:active{transform:scale(.96);background:var(--action-bg)}
.is-nav{display:grid;grid-template-columns:auto auto 1fr;gap:8px;margin-top:12px}
.is-nav .btn{min-height:54px}
.is-ok{font-size:18px}
/* scan en continu : panneau posé au-dessus de la page, il survit aux réaffichages */
.inv-scanner{position:fixed;z-index:60;right:12px;bottom:12px;width:min(340px,calc(100vw - 24px));padding:10px;border-radius:var(--radius-lg);background:var(--panel);border:1px solid var(--rule);box-shadow:0 10px 30px #0004;display:grid;gap:8px}
.inv-scanner[hidden]{display:none}
.inv-scanner video{width:100%;max-height:200px;object-fit:cover;border-radius:10px;background:#000}
.inv-scanner-info{display:flex;flex-direction:column;gap:2px}
.inv-scanner-info b{font-size:16px;overflow-wrap:anywhere}
.inv-scanner-info span{font-size:12px;color:var(--ink-soft)}
.inv-scanner-acts{display:flex;gap:8px}
.inv-scanner-acts .inv-step{flex:0 0 52px}
.inv-scanner-acts .btn{flex:1}
/* 3. vérifier */
.iv-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:16px}
.iv-tile{padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.iv-tile b{display:block;font-size:24px;font-variant-numeric:tabular-nums}
.iv-tile span{font-size:12.5px;color:var(--ink-soft)}
.iv-tile.neg b{color:var(--danger)}
.iv-h{margin:18px 0 2px;font-size:16px}
.iv-sub{margin:0 0 8px;font-size:13px}
.iv-list{display:flex;flex-direction:column;gap:8px}
.iv-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 12px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--panel)}
.iv-row.big{border-color:var(--danger-border);background:var(--danger-bg)}
.iv-name{flex:1 1 180px;min-width:0;display:flex;flex-direction:column}
.iv-name small{color:var(--ink-faint);font-size:12px}
.iv-figs{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:13.5px;font-variant-numeric:tabular-nums}
.iv-act{min-height:44px}
.iv-more{margin-top:14px}
.iv-more summary{cursor:pointer;font-weight:600}
.iv-more .iv-list{margin-top:8px}
.iv-calm{margin:12px 0 4px}
.iv-fields{margin-top:14px}
/* 4. terminé */
.inv-done{max-width:520px;margin:10px auto;padding:26px 20px;text-align:center;border:1px solid var(--ok-border);border-radius:var(--radius-lg);background:var(--ok-bg);animation:temp-pop .5s ease-out}
.inv-done-icon{font-size:56px;line-height:1}
.inv-done h2{margin:8px 0 6px;font-size:22px}
.inv-done p{margin:0 0 8px;font-size:15px}
.inv-done-acts{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px}
@media(max-width:640px){
  .inv-steps li:not(.now){font-size:0;gap:0;padding:4px}                                       /* au téléphone : le nom de l'étape en cours seulement */
  .inv-steps li:not(.now) span{font-size:12px}
  .inv-flow .temp-hero{padding:10px 14px;gap:12px}
  .inv-flow .temp-ring{width:56px;height:56px}
  .inv-flow .temp-ring::before{inset:6px}
  .inv-flow .temp-ring span{font-size:17px}
  .inv-flow .temp-hero-copy b{font-size:16px}
  .ic-count .inv-qty{flex-basis:64px;min-width:64px}
  .ic-count .inv-step{flex-basis:46px}
  .ic-scan{margin-left:0}
  .iv-fields{grid-template-columns:1fr}
}
/* téléphone : la barre « Vérifier / Valider » reste en fin de page (fixée, elle cacherait le pavé et passerait sous la barre de navigation du bas) */
@media(max-width:760px){.ic-foot{position:static;margin:18px 0 0;padding:0;background:none;border-top:0}}
@media(prefers-reduced-motion:reduce){.inv-done{animation:none}.is-key:active{transform:none}}
/* Cases à cocher d'une fiche (« Produit actif », « Format actif »…) : une vraie case alignée sur son texte, pas un champ pleine largeur. */
.field>label>input[type=checkbox]{flex:0 0 auto;width:18px;height:18px;padding:0;margin:0;accent-color:var(--action)}
/* Contrôle du jour au téléphone : les réponses passent chacune sur sa ligne plutôt que de se tasser à deux par ligne. */
@media(max-width:480px){.sheet-foot-wrap .btn{flex:1 1 100%;min-height:48px}}

/* ===== Rapports du stock et de l'inventaire (Lot 4 de la refonte) ===== */
.rs-block{margin-top:26px;scroll-margin-top:14px}
.rs-block:first-child{margin-top:6px}
.rs-block .section-title h2{margin:0;font-size:18px}
.rs-tools{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.rs-tools .rp-chips{margin:0 0 4px}
.rs-tools .task-filters{align-items:flex-end}
.rs-acts{display:flex;flex-wrap:wrap;gap:8px}
.rs-period{margin:0 0 8px;font-weight:600}
.rs-opts{margin:10px 0}
.ip-sheet{width:100%;margin-top:10px}
@media(max-width:640px){.rs-acts .btn{flex:1 1 100%;min-height:48px}}

/* ===== Tâches urgentes : bandeau rouge visible partout, panneau de la Gestion des tâches ===== */
:root{--urgent-bg:#c62828;--urgent-bg-alt:#8e1b1b;--urgent-ink:#ffffff;--urgent-soft:#fbe9e7}
.urgent-banner{margin:0 0 14px;padding:12px 14px;border-radius:var(--radius-lg);background:var(--urgent-bg);color:var(--urgent-ink);box-shadow:0 6px 18px #c6282855;border:2px solid #ffffff55}
.urgent-banner.blink{animation:urgent-blink 1.1s ease-in-out infinite}
@keyframes urgent-blink{0%,100%{background:var(--urgent-bg)}50%{background:var(--urgent-bg-alt)}}
.urgent-head{display:flex;align-items:center;gap:10px;font-size:18px}
.urgent-siren{font-size:26px}
.urgent-count{margin-left:auto;padding:2px 10px;border-radius:999px;background:#ffffff26;font-size:13px;font-weight:700}
.urgent-list{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}
.urgent-item{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:10px 12px;border-radius:var(--radius);background:#ffffff1f}
.urgent-item.taken{background:#00000026}
.urgent-main{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:3px}
.urgent-title{font-size:19px;line-height:1.2;overflow-wrap:anywhere}
.urgent-meta,.urgent-note,.urgent-who{font-size:13.5px;opacity:.95;overflow-wrap:anywhere}
.urgent-who{font-weight:700}
.urgent-acts{display:flex;flex-wrap:wrap;gap:8px}
.urgent-btn{min-height:50px;padding:0 18px;border-radius:var(--radius-lg);border:2px solid #ffffffcc;background:transparent;color:var(--urgent-ink);font:inherit;font-weight:700;font-size:15px;cursor:pointer;touch-action:manipulation}
.urgent-btn.main{background:#fff;color:var(--urgent-bg);border-color:#fff;font-size:17px}
.urgent-btn:active{transform:scale(.97)}
.urgent-btn:focus-visible,.urgent-mute:focus-visible{outline:3px solid #fff;outline-offset:2px}
.urgent-more{margin:8px 0 0;font-size:13px;opacity:.95}
.urgent-sound{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:10px;font-size:13.5px}
.urgent-mute{min-height:40px;padding:0 12px;border-radius:999px;border:1px solid #ffffffaa;background:transparent;color:var(--urgent-ink);font:inherit;cursor:pointer}
/* panneau de la Gestion des tâches : même liste, mais sur le fond de la page */
.urgent-panel{margin-bottom:10px}
.urgent-panel .section-title h2{margin:0;font-size:18px}
.urgent-panel .urgent-new{background:var(--urgent-bg);border-color:var(--urgent-bg);color:var(--urgent-ink)}
.urgent-list.in-panel .urgent-item{background:var(--urgent-soft);color:#4a1010;border:1px solid #e5a9a3}
.urgent-list.in-panel .urgent-item.taken{background:var(--panel-alt);color:var(--ink);border-color:var(--rule)}
.urgent-list.in-panel .urgent-btn{border-color:var(--urgent-bg);color:var(--urgent-bg)}
.urgent-list.in-panel .urgent-btn.main{background:var(--urgent-bg);color:#fff}
.urgent-sub{margin:16px 0 6px;font-size:14px;color:var(--ink-soft)}
.urgent-closed-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.urgent-closed{display:flex;flex-direction:column;gap:2px;padding:8px 12px;border-radius:var(--radius);background:var(--panel);border:1px solid var(--rule);border-left:5px solid var(--ok)}
.urgent-closed.cancelled{border-left-color:var(--ink-faint)}
.urgent-closed span{font-size:12.5px;color:var(--ink-soft)}
.urgent-histo{margin:10px 0 0}
.urgent-shortcut{color:var(--urgent-bg)}
:root[data-theme="dark"] .urgent-list.in-panel .urgent-item{background:#3a1c1c;color:#ffd9d4;border-color:#6b2d2d}
:root[data-theme="dark"] .urgent-list.in-panel .urgent-btn{border-color:#ff8a80;color:#ff8a80}
:root[data-theme="dark"] .urgent-list.in-panel .urgent-btn.main{background:#c62828;color:#fff}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .urgent-list.in-panel .urgent-item{background:#3a1c1c;color:#ffd9d4;border-color:#6b2d2d}
  :root:not([data-theme="light"]) .urgent-list.in-panel .urgent-btn{border-color:#ff8a80;color:#ff8a80}
  :root:not([data-theme="light"]) .urgent-list.in-panel .urgent-btn.main{background:#c62828;color:#fff}
  :root:not([data-theme="light"]) .urgent-list.in-panel .urgent-item.taken{background:var(--panel-alt);color:var(--ink)}}
:root[data-theme="dark"] .urgent-list.in-panel .urgent-item.taken{background:var(--panel-alt);color:var(--ink)}
@media(max-width:640px){.urgent-acts{width:100%}.urgent-acts .urgent-btn{flex:1 1 100%}.urgent-title{font-size:17px}}
@media(prefers-reduced-motion:reduce){.urgent-banner.blink{animation:none;border-color:#fff}}


/* Alignement du tableau de synthèse des heures : une valeur sous son en-tête. */
.hours-summary-table th:not(:first-child),
.hours-summary-table td:not(:first-child),
.hours-summary-table td.num{ text-align:center; }

/* Services et catégories d'incidents (static/incident-services.js) : accueil de la badgeuse, formulaire, administration. */
:root{--incident-bg:#d9480f;--incident-ink:#ffffff;--incident-shadow:#d9480f55}
/* « Incidents » de la badgeuse (Lot 1.82.0) : une carte du même style que « Tâches du jour » / « Relevés de température » (titre, bandeau, cartes), au lieu d'un gros bouton orange pleine largeur */
.incident-quick{margin:0}
.incident-quick .panel-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.incident-chip-open{margin-left:auto;padding:3px 12px;border-radius:999px;border:1px solid var(--rule-strong);background:var(--panel-alt);color:var(--ink-soft);font-size:13px;font-weight:700}
.incident-chip-open.has-open{border-color:var(--incident-bg);background:var(--incident-bg);color:var(--incident-ink)}
.incident-hero-btn{width:calc(100% - 28px);min-height:76px;margin:0 14px 12px;border:2px solid var(--incident-bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.incident-hero-btn:active{transform:scale(.99)}
.incident-hero-btn:focus-visible,.incident-tile:focus-visible,.incident-chip:focus-visible{outline:3px solid var(--action);outline-offset:3px}
.incident-big-icon{display:grid;place-items:center;flex:0 0 auto;width:60px;height:60px;border-radius:50%;background:var(--incident-bg);font-size:30px;line-height:1}
.incident-big-more{margin-left:auto;font-size:40px;font-weight:300;line-height:1;color:var(--incident-bg)}
.incident-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:10px}
.incident-quick .incident-tiles{padding:0 14px 14px}
.incident-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:88px;padding:10px 8px;border:2px solid var(--rule-strong);border-radius:16px;background:var(--field-bg);color:var(--ink);font:inherit;cursor:pointer}
.incident-tile:active{transform:scale(.97)}
.incident-tile-icon{font-size:32px;line-height:1}
.incident-tile-name{font-size:15px;font-weight:700;text-align:center;overflow-wrap:anywhere}
.incident-chips{display:flex;flex-wrap:wrap;gap:8px}
.incident-chip{min-height:44px;padding:6px 14px;border:2px solid var(--rule-strong);border-radius:999px;background:var(--field-bg);color:var(--ink);font:inherit;font-weight:600;cursor:pointer}
.incident-chip.active{border-color:var(--incident-bg);background:var(--incident-bg);color:var(--incident-ink)}
.incident-chips.icons .incident-chip{min-width:44px;padding:4px 8px;font-size:20px}
.sheet-incident .incident-chip{min-height:52px;font-size:17px}
/* Services d'incident (Lot 1.82.0) : une couleur par service (sa place dans la liste), sur chaque ticket ; « Sans service » en pointillés ; « Mes tickets » avec son compteur. */
.service-tone-1{--tone:#2563eb}.service-tone-2{--tone:#7c3aed}.service-tone-3{--tone:#0d9488}.service-tone-4{--tone:#c2410c}.service-tone-5{--tone:#be185d}.service-tone-6{--tone:#475569}
.incident-service-badge{display:inline-block;padding:2px 10px;border-radius:999px;border:1px solid var(--tone,var(--action));background:color-mix(in srgb,var(--tone,var(--action)) 12%,var(--panel));color:var(--tone,var(--action));font-size:12px;font-weight:700}
.incident-service-badge.service-none{--tone:var(--ink-soft);border-style:dashed;background:transparent;font-weight:600}
.procedure-tabs .tab-count{display:inline-block;min-width:20px;margin-left:6px;padding:0 6px;border-radius:999px;background:var(--action);color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}
.isv-panel{margin-bottom:16px}
.isv-hint{margin:0 16px 8px}
.isv-list{list-style:none;margin:0;padding:0}
.isv-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 16px;border-top:1px solid var(--rule-soft)}
.isv-row.off{opacity:.65}
.isv-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.isv-main small{color:var(--ink-soft)}
.isv-icon{font-size:22px}
.isv-acts{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.isv-select select{min-height:36px;max-width:260px}
.isv-table-wrap{overflow-x:auto;padding:0 16px 12px}
.isv-table{border-collapse:collapse;width:100%}
.isv-table th,.isv-table td{padding:6px 10px;border-bottom:1px solid var(--rule-soft);text-align:center}
.isv-table th:first-child{text-align:left;font-weight:600}
.isv-check input{width:22px;height:22px}
@media (max-width:700px){.incident-big-more{display:none}.incident-big-icon{width:48px;height:48px;font-size:24px}}

/* Rapport des heures : ligne de total de l'équipe. */
.rp-total th,.rp-total td{font-weight:700;border-top:2px solid var(--rule-strong);background:transparent}
.rp-total th{text-align:left}

/* Champs obligatoires : « * » rouge après le libellé et légende de la boîte de dialogue. */
.req{color:var(--danger);font-weight:700;margin-left:3px;text-decoration:none}
.req-legend{margin:14px 0 0;font-size:12.5px;color:var(--ink-soft)}
.req-legend::first-letter{color:var(--danger);font-weight:700}

/* Gestion des périmés : deux volets (à retirer maintenant / suivi des dates) et fenêtre d'ajout unifiée. */
.stock-line{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;margin:0 0 14px}
.stock-line .stock-hero{margin:0;padding:7px 14px;font-size:15px}
.stock-line .stock-reward{margin:0;padding:7px 12px;font-size:14px}
.vl{display:grid;grid-template-columns:minmax(340px,5fr) 7fr;gap:16px;align-items:start}
.vl-pane{background:var(--panel);border:1px solid var(--rule);border-radius:16px;overflow:hidden;min-width:0}
.vl-pane>header{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 16px;border-bottom:1px solid var(--rule)}
.vl-pane>header h2{margin:0;font-size:17px}.vl-pane>header small{color:var(--ink-soft);margin-left:auto}
.vl-due>header small{margin-left:0}.vl-add{margin-left:auto;min-height:44px}
.vl-count{min-width:28px;height:28px;border-radius:999px;display:grid;place-items:center;background:var(--danger);color:#fff;font-weight:700;font-size:14px;padding:0 8px}
.vl-act{padding:14px 16px 0}
.vl-scan{position:relative;display:flex;align-items:center;gap:8px}
.vl-scan-ico{position:absolute;left:14px;font-size:22px;pointer-events:none}
.vl-scan input{flex:1;min-width:0;min-height:54px;font-size:16px;padding-left:48px;border:2px solid var(--action);border-radius:12px}
.vl-cam{min-height:54px;padding:0 14px;border-radius:12px;border:1px solid var(--rule-strong);background:var(--field-bg);color:var(--ink);font:inherit;font-weight:600;cursor:pointer}
.vl-feedback:empty{display:none}.vl-feedback{margin-top:12px}
.vl-ok{position:relative;overflow:hidden;display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;background:var(--ok-bg);border:1px solid var(--ok-border);color:var(--ink)}
.vl-ok b{display:block;font-size:15px}.vl-ok small{display:block;color:var(--ink-soft);margin-top:2px}
.vl-ok .vl-sec{margin-left:auto;min-height:38px}
.vl-ok-ico{flex:0 0 auto;font-size:20px;font-weight:700}
.vl-ok.warn{background:var(--warn-bg);border-color:var(--warn-border)}.vl-ok.error{background:var(--danger-bg);border-color:var(--danger-border)}.vl-ok.info{background:var(--panel-alt);border-color:var(--rule)}
.vl-undo-bar{position:absolute;left:0;bottom:0;height:3px;width:100%;background:var(--ok);transform-origin:left;animation:vl-undo linear forwards}
@keyframes vl-undo{from{transform:scaleX(1)}to{transform:scaleX(0)}}
.vl-review{margin-top:12px;min-height:44px;padding:0 14px;border-radius:10px;border:1px solid var(--rule-strong);background:var(--field-bg);color:var(--ink);font:inherit;font-weight:600;cursor:pointer}
.vl-list{padding:14px 16px 16px;display:flex;flex-direction:column;gap:10px}
.vl-item{display:grid;grid-template-columns:1fr;gap:8px;padding:12px 14px;border-radius:12px;border:1px solid var(--rule);border-left:5px solid var(--rule-strong);background:var(--field-bg)}
.vl-item.lot-danger{border-left-color:var(--danger)}.vl-item.today{border-left-color:#e07a1a}
.vl-name{all:unset;cursor:pointer;display:block;max-width:100%}.vl-name:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.vl-item .vl-name b{font-size:16px}.vl-meta{color:var(--ink-soft);font-size:13px;margin-top:3px;overflow-wrap:anywhere}
.vl-btns{display:flex;gap:8px}
.vl-go{flex:1;min-height:46px;border-radius:10px;border:0;background:var(--ok);color:#fff;font:inherit;font-weight:700;font-size:15px;cursor:pointer}
.vl-sec{min-height:46px;padding:0 16px;border-radius:10px;border:1px solid var(--rule-strong);background:var(--field-bg);font:inherit;font-weight:600;color:var(--ink);cursor:pointer}
.vl-go:active,.vl-sec:active{transform:scale(.98)}
.vl-empty{padding:24px 16px;text-align:center;color:var(--ink-soft)}.vl-clear-emoji{font-size:30px;margin:0 0 4px}.vl-clear b{color:var(--ok);font-size:16px}
.vl-foot-note{margin:0;padding:0 16px 14px;color:var(--ink-soft);font-size:13px}
.vl-filters{display:grid;grid-template-columns:minmax(160px,2fr) repeat(3,minmax(110px,1fr));gap:10px;padding:12px 16px 0}
.vl-filters .field{margin:0}.vl-filters label{font-size:12px;color:var(--ink-soft)}
.vl-tabs{display:flex;gap:6px;flex-wrap:wrap;padding:12px 16px}
.vl-tab{display:inline-flex;gap:6px;align-items:center;min-height:38px;padding:4px 12px;border-radius:999px;border:1px solid var(--rule);background:var(--panel);font:inherit;font-size:13px;color:var(--ink);cursor:pointer}
.vl-tab b{font-size:15px}.vl-tab.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}
.vl-tablewrap{overflow-x:auto}
table.vl-table{width:100%;border-collapse:collapse;font-size:14px}
.vl-table th{background:var(--panel-alt);text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);padding:9px 12px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);white-space:nowrap}
.vl-table th button{all:unset;cursor:pointer}.vl-table th button:focus-visible{outline:2px solid var(--action)}.vl-table th.sorted{color:var(--action)}
.vl-table td{padding:9px 12px;border-bottom:1px solid var(--rule-soft);vertical-align:middle}
.vl-table tr.stock-lot td:first-child{box-shadow:inset 4px 0 var(--rule-strong)}
.vl-table tr.d td:first-child{box-shadow:inset 4px 0 var(--danger)}.vl-table tr.w td:first-child{box-shadow:inset 4px 0 #e0a31a}.vl-table tr.g td:first-child{box-shadow:inset 4px 0 var(--ok)}
.vl-table tr.grp td{background:var(--panel-alt);font-weight:700;font-size:13px;padding:7px 12px}
.vl-table td.n,.vl-table th.n{text-align:right;font-variant-numeric:tabular-nums}
.vl-table .name b{display:block}.vl-table .name small{color:var(--ink-soft)}.vl-table .badge{white-space:nowrap}
.vl-table td.acts{text-align:right;white-space:nowrap}.vl-table th.acts{width:1%}
.vl-mini{min-height:36px;padding:0 10px;border-radius:8px;border:1px solid var(--rule-strong);background:var(--field-bg);font:inherit;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer}
.vl-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 16px;font-size:13px;color:var(--ink-soft)}
.sub-loc{display:none}.stock-tocomplete{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink);font-size:11px;font-weight:700}
.stock-actions-list{display:flex;flex-direction:column;gap:8px}
@media (max-width:1300px){.vl-table td.col-loc,.vl-table th.col-loc{display:none}.sub-loc{display:inline}}
@media (max-width:1000px){.vl{grid-template-columns:1fr}.vl-filters{grid-template-columns:1fr 1fr}}
@media (max-width:700px){
  .vl-table thead{display:none}.vl-table,.vl-table tbody{display:block}
  .vl-table tr.stock-lot{display:grid;grid-template-columns:1fr auto;grid-template-areas:"name status" "date qty" "acts acts";gap:4px 10px;padding:10px 12px;border-bottom:1px solid var(--rule-soft)}
  .vl-table tr.stock-lot td{display:block;padding:0;border:0}.vl-table td.name{grid-area:name}.vl-table td.status{grid-area:status;text-align:right}.vl-table td.date{grid-area:date}
  .vl-table td.n{grid-area:qty}.vl-table td.n::before{content:'Qté ';color:var(--ink-soft)}.vl-table td.acts{grid-area:acts;text-align:left;margin-top:6px}
  /* en cartes, le repère d'urgence est le bord gauche de la carte (et non plus la première cellule) */
  .vl-table tr.stock-lot td:first-child{box-shadow:none}.vl-table tr.stock-lot td.col-loc{display:none}      /* l'emplacement est déjà sous le nom */
  .vl-table tr.stock-lot{border-left:4px solid var(--rule-strong)}.vl-table tr.stock-lot.d{border-left-color:var(--danger)}.vl-table tr.stock-lot.w{border-left-color:#e0a31a}.vl-table tr.stock-lot.g{border-left-color:var(--ok)}
  .vl-table tr.grp,.vl-table tr.grp td{display:block}.vl-filters{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){.vl-undo-bar{animation:none;transform:scaleX(1)}}
/* Fenêtre « Ajouter un produit » : scan, produit connu / inconnu, saisie de la date. */
.qa2 .field{margin-bottom:12px}.qa2-scan input{font-size:17px;min-height:50px}
.qa2-hint{margin:-6px 0 12px;font-size:13px;color:var(--ink-soft)}
.qa2-card{display:flex;gap:14px;align-items:flex-start;padding:14px 16px;border-radius:14px;margin:4px 0 14px;border:1px solid}
.qa2-card.known{background:var(--ok-bg);border-color:var(--ok-border);color:var(--ink)}.qa2-card.new{background:var(--warn-bg);border-color:var(--warn-border);color:var(--ink)}
.qa2-ico{flex:0 0 36px;height:36px;border-radius:50%;display:grid;place-items:center;font-size:20px;font-weight:700;background:var(--ok);color:#fff}.qa2-card.new .qa2-ico{background:#d98a14}
.qa2-card h3{margin:2px 0 4px;font-size:18px;color:inherit}.qa2-card p{margin:0;font-size:13px;opacity:.9}.qa2-card small{display:block;font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:11px}
.qa2-card .mini{margin-left:auto;align-self:center}
.qa2-chip{display:inline-block;padding:2px 9px;border-radius:999px;background:var(--panel);border:1px solid var(--rule);font-size:12px;margin:0 6px 4px 0}
.qa2-auto{font-size:11px;font-weight:700;color:var(--ok);margin-left:6px;text-transform:none}
.qa2-todo input{outline:3px solid #e0a31a55;border-color:#d98a14}
.qa2-seg{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.qa2-seg button{min-height:46px;border-radius:10px;border:2px solid var(--rule-strong);background:var(--field-bg);font:inherit;font-weight:600;color:var(--ink);cursor:pointer}
.qa2-seg button.on{border-color:var(--action);background:var(--action-bg);color:var(--action)}
.qa2-chips{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 4px}
.qa2-chips button{min-height:42px;padding:0 14px;border-radius:999px;border:1px solid var(--rule-strong);background:var(--field-bg);font:inherit;color:var(--ink);cursor:pointer}
.qa2-step{display:flex;gap:8px;align-items:center}
.qa2-step button{width:50px;min-height:50px;border-radius:10px;border:1px solid var(--rule-strong);background:var(--field-bg);font-size:22px;color:var(--ink);cursor:pointer}
.qa2-step input{text-align:center;max-width:120px;font-size:20px;font-weight:700}
.qa2-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.qa2-sug{border:1px solid var(--rule);border-radius:12px;overflow:hidden;margin:-4px 0 14px;background:var(--panel)}
.qa2-sug button{all:unset;box-sizing:border-box;display:flex;width:100%;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--rule-soft);cursor:pointer}
.qa2-sug button:focus-visible{outline:2px solid var(--action);outline-offset:-2px}.qa2-sug button:last-child{border:0}
.qa2-sug b{font-size:15px}.qa2-sug small{color:var(--ink-soft)}.qa2-sug .new{color:var(--action);font-weight:700}
.qa2-sug .tag{margin-left:auto;font-size:11px;font-weight:700;color:var(--ok);background:var(--ok-bg);border-radius:999px;padding:2px 8px}
@media (max-width:560px){.qa2-grid{grid-template-columns:1fr}}
/* Photo d'un incident : bouton « Prendre une photo », caméra dans le formulaire, aperçu. */
.incident-photo-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.incident-photo-bar input[type=file]{flex:1 1 220px;width:auto;min-width:0}
.incident-photo-take{min-height:46px}
.incident-camera{display:grid;gap:10px;margin-top:10px}
.incident-camera video{width:100%;max-height:40vh;object-fit:cover;border-radius:10px;background:#000;display:block}
.incident-camera-actions{display:flex;flex-wrap:wrap;gap:10px}.incident-camera-actions .btn{flex:1 1 160px;min-height:50px}
.incident-photo-preview{display:flex;align-items:center;gap:12px;margin-top:10px}
.incident-photo-preview img{width:96px;height:96px;object-fit:cover;border-radius:10px;border:1px solid var(--rule-strong)}
.incident-photo-preview div{display:flex;flex-wrap:wrap;gap:8px}
.incident-camera[hidden],.incident-photo-preview[hidden],.incident-photo-take[hidden]{display:none}
.incident-report-form.kiosk .incident-photo-take,.incident-report-form.kiosk .incident-camera-actions .btn{min-height:56px;font-size:17px}
/* Aire d'autoroute (produit Aire de service) : fiche d'une aire. */
.aire-label{margin:0 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em}
.aire-notes{white-space:pre-wrap;margin:0}
.aire-card.archived{opacity:.7}
.aire-first{max-width:640px}
.aire-archived-toggle{margin-top:14px}
/* NexaPOS (produit NexaPOS, lot P1) : gestion de la caisse — articles, vendeurs, terminaux, journal fiscal. */
.pos-page .section-title{align-items:flex-start;gap:12px;flex-wrap:wrap}
.pos-page .section-title p{margin:4px 0 0}
.pos-chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 12px}
.pos-chip{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:5px 14px;border:1.5px solid var(--rule-strong);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;font-size:13px;font-weight:600;cursor:pointer}
.pos-chip b{min-width:20px;padding:0 6px;border-radius:999px;background:var(--rule);font-size:12px;text-align:center}
.pos-chip.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}
.pos-chip.on b{background:rgba(255,255,255,.28);color:var(--action-ink)}
.pos-chip-edit{border:0;background:transparent;color:var(--ink-soft);font-size:15px;min-width:32px;min-height:32px;margin-left:-6px;cursor:pointer;border-radius:8px}
.pos-chip-edit:hover{background:var(--rule)}
.pos-dot{display:inline-block;width:12px;height:12px;border-radius:4px;margin-right:8px;vertical-align:-1px;border:1px solid rgba(0,0,0,.12)}
.pos-dot.empty{background:transparent;border-style:dashed}
.pos-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:0 0 12px}
.pos-toolbar input[type=search]{flex:1 1 260px;min-height:40px;padding:8px 12px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--field-bg);color:var(--ink);font:inherit}
.pos-table{width:100%;border-collapse:collapse;font-size:14px}
.pos-table th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);padding:8px 10px;border-bottom:1px solid var(--rule-strong)}
.pos-table td{padding:10px;border-bottom:1px solid var(--rule);vertical-align:middle}
.pos-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.pos-table .mono,.pos-terminal .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}
.pos-table tr.archived{opacity:.6}
.pos-table tr.void td{color:var(--danger,#b42318)}
.pos-journal tbody tr{cursor:pointer}
.pos-journal tbody tr:hover,.pos-journal tbody tr:focus{background:var(--rule);outline:none}
.pos-actions{white-space:nowrap;text-align:right}
.pos-actions .mini+.mini{margin-left:6px}
.pos-tag{display:inline-block;padding:1px 8px;border-radius:999px;border:1px solid var(--rule-strong);font-size:11px;font-weight:700;color:var(--ink-soft);vertical-align:1px}
.pos-tag.strong{border-color:var(--action);color:var(--action)}
.pos-tag.ok{border-color:#15803d;color:#15803d}
.pos-tag.warn{border-color:var(--warn-border,#d97706);color:var(--warn-ink,#92400e);background:var(--warn-bg,#fffbeb)}
.pos-tag.danger{border-color:#b42318;color:#b42318}
.pos-hint{font-size:13px;margin:-4px 0 12px}
.pos-first{max-width:680px}
.pos-empty{padding:12px 0}
.pos-rights{border:1px solid var(--rule);border-radius:10px;padding:8px 12px;margin:0 0 12px;display:grid;gap:4px}
.pos-seller.archived,.pos-terminal.archived{opacity:.65}
.pos-pairing{text-align:center}
.pos-code{font:700 34px/1.2 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.12em;margin:12px 0;user-select:all}
.pos-qr svg{width:220px;height:220px;max-width:100%}
.pos-address{margin:12px 0 0}.pos-address .mono{font:600 18px/1.3 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;user-select:all;overflow-wrap:anywhere}
.pos-app{margin-top:16px;max-width:560px}
.pos-receipt{margin-top:16px;max-width:560px}
.pos-receipt-preview{margin:10px 0;padding:12px 14px;max-width:100%;overflow-x:auto;background:var(--surface-2,#f8fafc);border:1px dashed var(--rule-strong);border-radius:8px;font:13px/1.45 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre;color:var(--ink)}
.pos-app .pos-qr svg{width:180px;height:180px}
.pos-journal-head{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:flex-end;margin:0 0 14px}
.pos-terminal-pick{margin:0;min-width:200px}
.pos-terminal-pick span{display:block;font-size:12px;color:var(--ink-soft);font-weight:600}
.pos-journal-facts{display:flex;flex-wrap:wrap;gap:6px 18px;flex:1 1 300px;font-size:14px}
.pos-check{border-radius:10px;padding:10px 14px;margin:0 0 14px}
.pos-check.ok{background:#ecfdf3;border:1px solid #15803d;color:#14532d}
.pos-check.bad{background:#fef3f2;border:1px solid #b42318;color:#7a271a}
.pos-check.bad p{margin:4px 0 0}
/* NexaPOS lot P4 : formules, options, droits des vendeurs, avoirs du journal */
.pos-views{margin:0 0 14px}
.pos-table tr.refund td{color:var(--warn-ink,#92400e)}
.pos-item-options{font-size:12px}
.pos-slots{margin:8px 0;padding-left:18px;display:grid;gap:6px;font-size:14px}
.pos-issues{border-left:3px solid var(--warn-border,#d97706);padding:4px 10px;margin:8px 0;font-size:13px}.pos-issues p{margin:2px 0}
.pos-formula.archived,.pos-group.archived{opacity:.65}
.pos-slot{border:1px solid var(--rule-strong);border-radius:10px;padding:8px 12px;margin:0 0 12px}
.pos-slot-required{align-self:end;min-height:40px}
.pos-slot-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:2px 12px;max-height:220px;overflow-y:auto;margin:4px 0 8px}
.pos-choice{align-items:end;grid-template-columns:2fr 1fr auto}
.pos-choice .mini{margin-bottom:12px}
.pos-subtitle{font-size:17px;margin:22px 0 4px}
.pos-anomalies{border:1px solid #b42318;border-radius:10px;padding:8px 14px;margin:0 0 14px;background:var(--panel)}
.pos-anomalies h2{font-size:15px;margin:4px 0 6px;color:#b42318}
.pos-anomalies p{margin:6px 0}
.pos-anomalies p.blocking b{color:#b42318}
.pos-json{max-height:60vh;overflow:auto;background:var(--field-bg);border:1px solid var(--rule);border-radius:10px;padding:10px;font-size:12px;white-space:pre-wrap;word-break:break-all}
.pos-start ol{list-style:none;margin:0;padding:0}
.pos-start li.done{opacity:.6}
.pos-start .item{gap:10px}
@media(max-width:720px){.pos-table thead{display:none}.pos-table tr{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:10px 0;border-bottom:1px solid var(--rule)}
  .pos-table td{border:0;padding:0}.pos-table td:first-child{grid-column:1/-1}.pos-actions{grid-column:1/-1;text-align:left}.pos-journal-facts{flex-basis:100%}}
/* NexaPOS lot P5 (1.107.0) : statistiques (barres CSS, sans bibliothèque) et exports comptables */
.pos-period{margin:0 0 14px}
.pos-period-fields{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:flex-end}
.pos-period-fields .field{margin:0;min-width:150px}.pos-period-fields .field span{display:block;font-size:12px;color:var(--ink-soft);font-weight:600}
.pos-period-fields input,.pos-period-fields select,.pos-fiscal-form select{min-height:40px;padding:6px 10px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--field-bg);color:var(--ink);font:inherit}
.pos-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin:0 0 16px}
.pos-kpi strong{display:block;font-size:22px;font-variant-numeric:tabular-nums}.pos-kpi span{display:block;font-weight:600}.pos-kpi small{display:block;font-size:12px;margin-top:2px}
.pos-kpi.main{border-color:var(--action)}.pos-kpi.neg strong{color:var(--danger,#b42318)}
.pos-charts{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.pos-chart h2{font-size:15px;margin:0}.pos-chart.wide{grid-column:1/-1}
.pos-cols{display:flex;align-items:stretch;gap:3px;height:170px;overflow-x:auto;padding-bottom:2px}
.pos-col{flex:1 0 18px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;min-width:18px}
.pos-col-bar{display:block;width:100%;max-width:34px;min-height:2px;border-radius:4px 4px 0 0;background:var(--action)}
.pos-col-bar.neg{background:repeating-linear-gradient(45deg,var(--danger,#b42318) 0 4px,transparent 4px 7px);border:1px solid var(--danger,#b42318)}
.pos-col-label{font-size:10px;color:var(--ink-soft);margin-top:4px;white-space:nowrap}
.pos-rank{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.pos-rank-head{display:flex;justify-content:space-between;gap:10px;font-size:14px}.pos-rank-head b{font-variant-numeric:tabular-nums;white-space:nowrap}
.pos-rank-name{min-width:0;overflow-wrap:anywhere}
.pos-rank-track{height:8px;border-radius:999px;background:var(--rule);overflow:hidden;margin-top:3px}.pos-rank-track span{display:block;height:100%;border-radius:999px;background:var(--action)}
.pos-rank li.neg .pos-rank-track span{background:var(--danger,#b42318)}.pos-rank li.neg b{color:var(--danger,#b42318)}
.pos-rank-note{font-size:12px}
.pos-exports-list{margin:0 0 16px}.pos-export p{margin:0}
.pos-fiscal-year{max-width:560px}.pos-fiscal-form{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}.pos-fiscal-form .field{margin:0}.pos-fiscal-form .field span{display:block;font-size:12px;color:var(--ink-soft);font-weight:600}
@media(max-width:640px){.pos-charts{grid-template-columns:1fr}.pos-kpis{grid-template-columns:1fr 1fr}.pos-kpi strong{font-size:18px}.pos-period-fields .field{flex:1 1 140px;min-width:0}}
/* NexaPOS lot P5 (1.107.0) : archives fiscales, vérification d'une archive, attestation de l'éditeur (static/nexapos-archives.js) */
.pa-page .dv-card{margin:0 0 14px}
.pa-key{margin:0 0 12px;overflow-wrap:anywhere}
.pa-periods{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.pa-period{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 0;border-bottom:1px solid var(--rule)}
.pa-extract{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}.pa-extract .field{margin:0}.pa-extract .field span{display:block;font-size:12px;color:var(--ink-soft);font-weight:600}
.pa-extract input{min-height:40px;padding:6px 10px;border:1px solid var(--rule-strong);border-radius:10px;background:var(--field-bg);color:var(--ink);font:inherit;max-width:100%}
.pa-report{margin-top:12px}.pa-report ul{margin:6px 0;padding-left:20px}
.pa-doc{padding:8px 4px;line-height:1.55}.pa-doc h2{margin:0}.pa-doc h3{font-size:15px;margin:14px 0 4px}.pa-doc .pa-watermark{color:var(--danger,#b42318)}
.pa-review{border-top:1px solid var(--rule);margin-top:16px;padding-top:8px}
.aire-services{border:1px solid var(--rule);border-radius:10px;padding:8px 12px;margin:0 0 12px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px 12px}
.aire-services legend{font-weight:700;font-size:13px;padding:0 6px}
.aire-services .check{display:flex;align-items:center;gap:8px;min-height:36px}
.aire-first h2,.aire-first p{margin:0}

/* ===== Demandes de matériel (lot 1.84.0) : boutons de la badgeuse, tableau, parcours en quatre étapes, historique, formulaire ===== */
.mat-quick,.cash-quick,.lf-quick{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;padding:0 14px 14px}          /* .cash-quick : lot 1.88.0, même disposition, classe à part (sélecteurs des parcours) */
.mat-quick-btn{display:flex;align-items:center;gap:12px;min-height:64px;padding:12px 16px;border:2px solid var(--action);border-radius:16px;background:var(--action-bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.mat-quick-btn.alt{border-color:var(--rule-strong);background:var(--field-bg)}
.mat-quick-btn b{display:block;font-size:17px}
.mat-quick-btn small{display:block;color:var(--ink-soft);font-size:13px}
.mat-quick-icon{font-size:30px;line-height:1}
.mat-quick-btn:focus-visible,.mat-filter:focus-visible,.mat-urgency-pick:focus-visible,.mat-chip:focus-visible{outline:3px solid var(--action);outline-offset:2px}
.material-page{max-width:1100px}
.mat-board{display:flex;flex-direction:column;gap:14px}
.mat-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.mat-head h1{margin:0}
.mat-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.mat-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i v" "i l" "i h";column-gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.mat-tile-icon{grid-area:i;font-size:28px}
.mat-tile b{grid-area:v;font-size:22px;font-variant-numeric:tabular-nums}
.mat-tile>span:not(.mat-tile-icon){grid-area:l;color:var(--ink-soft);font-size:13px}
.mat-tile small{grid-area:h;color:var(--ink-faint);font-size:12px}
.mat-tile.ask{border-color:var(--warn-border);background:var(--warn-bg)}
.mat-tile.route{border-color:var(--info-border);background:var(--info-bg)}
.mat-tile.done{border-color:var(--ok-border);background:var(--ok-bg)}
.mat-filters{display:flex;gap:8px;flex-wrap:wrap}
.mat-filter{min-height:40px;padding:8px 14px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;cursor:pointer}
.mat-filter.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}
.mat-filter b{margin-left:4px;font-variant-numeric:tabular-nums}
.mat-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,420px),1fr));gap:14px;align-items:start}
.mat-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm)}
.mat-card.mine{border-color:var(--action)}
.mat-card.s-delivered{border-color:var(--ok-border);background:linear-gradient(180deg,var(--ok-bg),var(--panel) 60%)}
.mat-card.s-refused{border-color:var(--danger-border)}
.mat-card.s-cancelled{opacity:.7}
.mat-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.mat-card-title{margin:0;font-size:18px}
.mat-qty{color:var(--action);font-weight:700;font-variant-numeric:tabular-nums}
.mat-urgency{white-space:nowrap;padding:3px 10px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel-alt);font-size:13px}
.mat-urgency.u-high{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}
.mat-urgency.u-low{color:var(--ink-soft)}
.mat-meta{margin:0;color:var(--ink-soft);font-size:14px}
.mat-note{margin:0;padding:8px 12px;border-left:4px solid var(--rule-strong);border-radius:6px;background:var(--panel-alt);font-style:italic}
.mat-journey{display:flex;margin:2px 0;padding:0;list-style:none}
.mat-step{position:relative;flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0;color:var(--ink-faint);font-size:12px;text-align:center}
.mat-step::before{content:"";position:absolute;top:16px;left:-50%;z-index:0;width:100%;height:4px;border-radius:2px;background:var(--rule-strong)}
.mat-step:first-child::before{display:none}
.mat-step.done::before,.mat-step.current::before{background:var(--ok)}
.mat-step.skipped::before{background:repeating-linear-gradient(90deg,var(--ok) 0 6px,transparent 6px 10px)}
.mat-step-dot{position:relative;z-index:1;display:grid;place-items:center;width:34px;height:34px;border:3px solid var(--rule-strong);border-radius:50%;background:var(--field-bg);font-size:17px;filter:grayscale(1);opacity:.7}
.mat-step.done .mat-step-dot{border-color:var(--ok);background:var(--ok-bg);filter:none;opacity:1}
.mat-step.current .mat-step-dot{border-color:var(--action);background:var(--action-bg);filter:none;opacity:1;animation:mat-pulse 1.8s ease-out infinite}
.mat-step.done.current .mat-step-dot{border-color:var(--ok);background:var(--ok-bg);animation:mat-pop .6s ease-out 1}
.mat-step.done.skipped .mat-step-dot{opacity:.6}
.mat-step.end::before{background:var(--danger)}
.mat-step.end.refused .mat-step-dot{border-color:var(--danger);background:var(--danger-bg);filter:none;opacity:1;animation:none}
.mat-step.end.cancelled .mat-step-dot{filter:none;opacity:1;animation:none}
.mat-step.current{color:var(--ink);font-weight:700}
.mat-step.done{color:var(--ink-soft)}
@keyframes mat-pulse{0%{box-shadow:0 0 0 0 var(--action)}100%{box-shadow:0 0 0 12px transparent}}
@keyframes mat-pop{0%{transform:scale(.7)}60%{transform:scale(1.25)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.mat-step.current .mat-step-dot,.mat-step.done.current .mat-step-dot{animation:none}}
.mat-badges{display:flex;gap:6px;flex-wrap:wrap}
.mat-badge{padding:3px 10px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel-alt);font-size:13px}
.mat-badge.fast{border-color:var(--ok-border);background:var(--ok-bg);color:var(--ok);font-weight:600}
.mat-badge.slow,.mat-badge.wait{border-color:var(--warn-border);background:var(--warn-bg);color:var(--warn-ink)}
.mat-history summary{cursor:pointer;list-style:none;color:var(--ink-soft);font-size:14px}
.mat-history summary::-webkit-details-marker{display:none}
.mat-history summary::before{content:"▸ "}
.mat-history[open] summary::before{content:"▾ "}
.mat-timeline{display:flex;flex-direction:column;gap:10px;margin:8px 0 0;padding:0 0 0 14px;border-left:3px solid var(--rule-strong);list-style:none}
.mat-event{position:relative;padding-left:12px}
.mat-event::before{content:"";position:absolute;top:6px;left:-23px;width:12px;height:12px;border:3px solid var(--action);border-radius:50%;background:var(--panel)}
.mat-event p{margin:0}
.mat-event small{color:var(--ink-faint)}
.mat-actions{display:flex;gap:8px;flex-wrap:wrap}
.mat-empty{padding:28px 16px;border:2px dashed var(--rule-strong);border-radius:var(--radius-lg);color:var(--ink-soft);text-align:center}
.mat-empty-icon{margin:0 0 6px;font-size:44px}
.mat-form .field{margin-bottom:14px}
.mat-popular{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:-4px 0 14px}
.mat-chip{min-height:40px;padding:8px 14px;border:1px solid var(--action);border-radius:999px;background:var(--action-bg);color:var(--ink);font:inherit;cursor:pointer}
.mat-qty-box{display:flex;align-items:center;gap:10px}
.mat-qty-box input{width:90px;font-size:22px;font-weight:700;text-align:center}
.mat-qty-box .btn{min-width:52px;min-height:52px;padding:0;font-size:24px}
.mat-urgency-choice{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.mat-urgency-pick{min-height:56px;padding:12px 8px;border:2px solid var(--rule-strong);border-radius:14px;background:var(--field-bg);color:var(--ink);font:inherit;cursor:pointer}
.mat-urgency-pick.active{border-color:var(--action);background:var(--action-bg);font-weight:700}
.mat-urgency-pick.active.u-high{border-color:var(--danger);background:var(--danger-bg)}
.mat-form.kiosk .field label,.mat-form.kiosk input,.mat-form.kiosk textarea{font-size:18px}
.mat-form.kiosk .mat-urgency-pick{min-height:64px;font-size:17px}
.sheet.sheet-material{max-width:min(960px,96vw);max-height:94vh}
@media (max-width:560px){.mat-step-label{font-size:11px}.mat-urgency-choice,.mat-list{grid-template-columns:1fr}}
.mat-tile.time b{font-size:18px}

/* Lot 1.85.0 : état vide avec action ; légende de l'anneau « dossier » ; flèches de réordonnancement des cartes Salariés en cibles de 32 px */
.empty-state .btn{margin-top:4px}
.eq-ringbox{display:flex;flex-direction:column;align-items:center;gap:2px;flex:0 0 auto}
.eq-ringbox small{font-size:12px;line-height:1;color:var(--ink-soft)}
.eq-foot .reorder-btn{width:32px;height:32px;font-size:12px;border:1px solid var(--rule);background:var(--panel);color:var(--ink-soft)}

/* Équipements et maintenance (lot 1.86.0) : liste, fiche, contrôles périodiques, historique, bandeau de la badgeuse, pastille sur un ticket */
.eqp-page{display:flex;flex-direction:column;gap:14px}
.eqp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.eqp-head h1{margin:0}
.eqp-head-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.eqp-toggle{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--ink-soft)}
.eqp-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.eqp-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i v" "i l" "i h";column-gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.eqp-tile-icon{grid-area:i;font-size:28px}
.eqp-tile b{grid-area:v;font-size:22px;font-variant-numeric:tabular-nums}
.eqp-tile>span:not(.eqp-tile-icon){grid-area:l;color:var(--ink-soft);font-size:13px}
.eqp-tile small{grid-area:h;color:var(--ink-faint);font-size:12px}
.eqp-tile.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.eqp-tile.down{border-color:var(--danger-border);background:var(--danger-bg)}
.eqp-tile.late{border-color:var(--warn-border);background:var(--warn-bg)}
.eqp-filters{display:flex;gap:8px;flex-wrap:wrap}
.eqp-filter{min-height:40px;padding:8px 14px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;cursor:pointer}
.eqp-filter.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}
.eqp-filter b{margin-left:4px;font-variant-numeric:tabular-nums}
.eqp-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:14px;align-items:start}
.eqp-card{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);box-shadow:var(--shadow-sm)}
.eqp-card.s-down{border-color:var(--danger-border);background:linear-gradient(180deg,var(--danger-bg),var(--panel) 60%)}
.eqp-card.s-maint{border-color:var(--warn-border)}
.eqp-card.archived{opacity:.65}
.eqp-card-head{display:flex;align-items:center;gap:10px}
.eqp-card-title{flex:1;margin:0;font-size:18px;min-width:0}
.eqp-cat{font-size:24px;line-height:1}
.eqp-cat.big{font-size:32px;margin-right:8px;vertical-align:middle}
.eqp-status{white-space:nowrap;padding:3px 10px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel-alt);font-size:13px}
.eqp-status.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.eqp-status.down{border-color:var(--danger-border);background:var(--danger-bg);color:var(--danger)}
.eqp-status.maint{border-color:var(--warn-border);background:var(--warn-bg);color:var(--warn-ink)}
.eqp-lines{display:flex;flex-direction:column;gap:4px;color:var(--ink-soft);font-size:14px}
.eqp-due.late{color:var(--danger);font-weight:600}
.eqp-due.soon{color:var(--warn-ink);font-weight:600}
.eqp-due.off,.eqp-due.none{color:var(--ink-faint)}
.eqp-contract.expired{color:var(--danger);font-weight:600}
.eqp-contract.soon{color:var(--warn-ink)}
.eqp-note{margin:0;padding:8px 12px;border-left:4px solid var(--danger-border);border-radius:6px;background:var(--panel-alt);font-style:italic}
.eqp-note.soft{border-left-color:var(--rule-strong)}
.eqp-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.eqp-archived{color:var(--ink-faint);font-size:13px}
.eqp-back{align-self:flex-start}
.eqp-detail{display:flex;flex-direction:column;gap:16px}
.eqp-detail.archived{opacity:.75}
.eqp-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.eqp-detail-head h1{display:inline;margin:0;vertical-align:middle}
.eqp-detail-actions{display:flex;gap:8px;flex-wrap:wrap}
.eqp-status-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.eqp-status-line .eqp-note{flex-basis:100%}
.eqp-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.eqp-fact{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--rule);border-radius:10px;background:var(--panel)}
.eqp-fact span{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint)}
.eqp-section{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.eqp-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.eqp-section-head h2{margin:0;font-size:17px}
.eqp-checks{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.eqp-check{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--rule);border-radius:10px;background:var(--panel-alt)}
.eqp-check.late{border-color:var(--danger-border);background:var(--danger-bg)}
.eqp-check.soon{border-color:var(--warn-border);background:var(--warn-bg)}
.eqp-check.off{opacity:.6}
.eqp-check-main{display:flex;flex-direction:column;gap:2px;min-width:0}
.eqp-check-main span{color:var(--ink-soft);font-size:13px}
.eqp-check-actions{display:flex;gap:6px}
.eqp-events{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.eqp-event{display:flex;flex-direction:column;gap:2px;padding:8px 12px;border-left:3px solid var(--rule-strong);background:var(--panel-alt);border-radius:6px}
.eqp-event>div{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.eqp-event>span{color:var(--ink-soft);font-size:13px}
.eqp-event small{color:var(--ink);font-style:italic}
.eqp-event.a-status{border-left-color:var(--action)}
.eqp-event.a-incident{border-left-color:var(--danger)}
.eqp-event.a-check_done{border-left-color:var(--ok)}
.eqp-cost{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}
.eqp-incidents{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.eqp-incidents li{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.eqp-form .pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.eqp-presets{display:flex;gap:6px;flex-wrap:wrap;margin:-4px 0 10px}
.eqp-preset{min-height:36px;padding:6px 12px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel);color:var(--ink);font:inherit;cursor:pointer}
.eqp-preset.on{background:var(--action);border-color:var(--action);color:var(--action-ink)}
.eqp-picker{margin-top:4px}
.eqp-strip{margin:0 0 10px;padding:10px 14px;border:1px solid var(--danger-border);border-radius:10px;background:var(--danger-bg);color:var(--danger);font-size:15px}
.eqp-link{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel-alt);font-size:13px}
.stat.stat-alert{border-color:var(--danger-border)}
@media(max-width:560px){.eqp-check{grid-template-columns:1fr auto}.eqp-check-actions{grid-column:1/-1;justify-content:flex-end}.eqp-form .pair{grid-template-columns:1fr}}

/* Réception des livraisons (lot 1.87.0) : formulaire (en-tête, lignes, composeur), rubrique Inventaire › Livraisons (compteurs, filtres, cartes repliables) */
.vl-add+.vl-add{margin-left:0}
.dlv-form{display:flex;flex-direction:column;gap:14px}
.dlv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 14px}
.dlv-grid .field,.dlv-composer .field,.dlv-form>.field{margin-bottom:0}
.dlv-lines-box,.dlv-composer{border:1px solid var(--rule);border-radius:var(--radius-lg);padding:12px 14px;background:var(--panel-alt)}
.dlv-lines-box>header{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.dlv-lines-box h3,.dlv-composer h3{margin:0;font-size:15px}
.dlv-composer{display:flex;flex-direction:column;gap:10px}
.dlv-composer .qa2-sug{margin:6px 0 0}.dlv-composer .qa2-chips{margin:0}
.dlv-picked{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}.dlv-picked[hidden]{display:none}.dlv-picked small{color:var(--ink-soft)}
.dlv-scan-box{margin-top:8px}.dlv-scan-box video{width:100%;max-height:320px;object-fit:cover;border-radius:var(--radius);background:#000;display:block}.dlv-scan-box p{margin:6px 0}.dlv-scan-box[hidden]{display:none}
.dlv-empty{margin:0}
.dlv-table{width:100%;border-collapse:collapse;font-size:14px}
.dlv-table th,.dlv-table td{padding:6px 8px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}
.dlv-table th.num,.dlv-table td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.dlv-table tr.ko td{background:var(--danger-bg)}
.dlv-table td small{display:block;color:var(--ink-soft)}.dlv-table td.acts{text-align:right}
.dlv-ok{color:var(--ok);font-weight:600}.dlv-ko{color:var(--danger);font-weight:600}
.dlv-section{display:flex;flex-direction:column;gap:14px}
.dlv-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.dlv-head h2{margin:0}
.dlv-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.dlv-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i v" "i l" "i h";column-gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.dlv-tile-icon{grid-area:i;font-size:28px}.dlv-tile b{grid-area:v;font-size:22px;font-variant-numeric:tabular-nums}.dlv-tile>span:not(.dlv-tile-icon){grid-area:l;color:var(--ink-soft);font-size:13px}.dlv-tile small{grid-area:h;color:var(--ink-faint);font-size:12px}
.dlv-tile.danger{border-color:var(--danger-border);background:var(--danger-bg)}.dlv-tile.good{border-color:var(--ok-border)}
.dlv-filters{display:flex;align-items:end;gap:14px;flex-wrap:wrap}.dlv-filters .field{margin:0;min-width:220px}.dlv-toggle{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:14px;color:var(--ink-soft)}
.dlv-list{display:flex;flex-direction:column;gap:8px}
.dlv-card{border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);overflow:hidden}.dlv-card.ko{border-color:var(--danger-border)}
.dlv-card-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%;padding:12px 14px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;min-height:48px}
.dlv-card-head:hover{background:var(--panel-hover)}
.dlv-day{font-variant-numeric:tabular-nums;color:var(--ink-soft);min-width:110px}.dlv-supplier{font-size:16px}.dlv-counts{margin-left:auto;white-space:nowrap}.dlv-chevron{color:var(--ink-faint)}
.dlv-detail{padding:0 14px 14px;display:flex;flex-direction:column;gap:10px}
.dlv-facts{display:flex;gap:14px;flex-wrap:wrap;margin:0;color:var(--ink-soft);font-size:14px;align-items:center}
.dlv-foot{margin:0}.dlv-note{margin:0;padding:8px 12px;border-left:3px solid var(--rule-strong);background:var(--panel-alt);border-radius:var(--radius)}
@media(max-width:560px){.dlv-day{min-width:0}.dlv-counts{margin-left:0;width:100%}.dlv-grid{grid-template-columns:1fr}}

/* Caisse (lot 1.88.0) : page (compteurs, caisses, relevés repliables), formulaire de relevé (coupures ou total), résultat, revue d'un écart, bouton de la badgeuse */
.cash-page{display:flex;flex-direction:column;gap:16px}
.cash-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.cash-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i v" "i l" "i h";column-gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.cash-tile-icon{grid-area:i;font-size:28px}.cash-tile b{grid-area:v;font-size:20px;font-variant-numeric:tabular-nums}.cash-tile>span:not(.cash-tile-icon){grid-area:l;color:var(--ink-soft);font-size:13px}.cash-tile small{grid-area:h;color:var(--ink-faint);font-size:12px}
.cash-tile.danger{border-color:var(--danger-border);background:var(--danger-bg)}.cash-tile.good{border-color:var(--ok-border)}
.cash-section{display:flex;flex-direction:column;gap:12px}
.cash-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.cash-head h2{margin:0}.cash-head-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.cash-toggle{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:14px;color:var(--ink-soft)}
.cash-registers{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.cash-register{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}.cash-register.archived{opacity:.7}
.cash-register-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}.cash-register-head h3{margin:0;font-size:16px}
.cash-register-facts{display:flex;gap:14px;flex-wrap:wrap;margin:0;font-size:14px}.cash-last{margin:0;font-size:14px}
.cash-register-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.cash-filters{display:flex;align-items:end;gap:14px;flex-wrap:wrap}.cash-filters .field{margin:0;min-width:200px}
.cash-list{display:flex;flex-direction:column;gap:8px}
.cash-card{border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);overflow:hidden}.cash-card.review{border-color:var(--danger-border)}
.cash-card-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%;padding:12px 14px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;min-height:48px}
.cash-card-head:hover{background:var(--panel-hover)}
.cash-day{font-variant-numeric:tabular-nums;color:var(--ink-soft);min-width:120px}.cash-day small{color:var(--ink-faint)}.cash-register-name{font-size:16px}.cash-kind{color:var(--ink-soft)}
.cash-amount{margin-left:auto;font-variant-numeric:tabular-nums;font-weight:600}.cash-chevron{color:var(--ink-faint)}
.cash-gap{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;font-size:13px;font-weight:600;border:1px solid var(--rule-strong);background:var(--panel-alt);font-variant-numeric:tabular-nums}
.cash-gap.ok{color:var(--ok);border-color:var(--ok-border);background:var(--ok-bg)}.cash-gap.review{color:var(--danger);border-color:var(--danger-border);background:var(--danger-bg)}.cash-gap.reviewed{color:var(--ink-soft)}.cash-gap.unchecked{color:var(--ink-faint)}
.cash-detail{padding:0 14px 14px;display:flex;flex-direction:column;gap:10px}
.cash-result{padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel-alt)}.cash-result.review{border-color:var(--danger-border);background:var(--danger-bg)}.cash-result.ok{border-color:var(--ok-border);background:var(--ok-bg)}
.cash-result-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 8px}.cash-result-icon{font-size:24px}.cash-result-head b{font-size:18px}.cash-result-head small{color:var(--ink-soft)}
.cash-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:6px 14px;margin:0}.cash-facts div{display:flex;flex-direction:column}.cash-facts dt{font-size:12px;color:var(--ink-faint)}.cash-facts dd{margin:0;font-variant-numeric:tabular-nums;font-weight:600}
.cash-result-note{margin:8px 0 0;font-size:14px}
.cash-denom-chips{display:flex;gap:6px;flex-wrap:wrap;margin:0}.cash-denom-chip{padding:2px 8px;border:1px solid var(--rule-strong);border-radius:999px;background:var(--panel);font-size:13px;font-variant-numeric:tabular-nums}
.cash-facts-line{display:flex;gap:14px;flex-wrap:wrap;margin:0;color:var(--ink-soft);font-size:14px}
.cash-note{margin:0;padding:8px 12px;border-left:3px solid var(--rule-strong);background:var(--panel-alt);border-radius:var(--radius)}.cash-review-note{margin:0;font-size:14px}
.cash-detail-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.cash-form{display:flex;flex-direction:column;gap:12px}.cash-form[hidden]{display:none}.cash-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 14px}.cash-grid .field,.cash-form>.field,.cash-box .field,.cash-regform .field{margin-bottom:0}
.cash-regform{display:flex;flex-direction:column;gap:12px}
.cash-kinds{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.cash-kinds button{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:56px;padding:6px 8px;border-radius:10px;border:2px solid var(--rule-strong);background:var(--field-bg);color:inherit;font:inherit;cursor:pointer}
.cash-kinds button small{color:var(--ink-soft);font-size:12px}.cash-kinds button.on{border-color:var(--action);background:var(--action-bg);color:var(--action)}
.cash-box{border:1px solid var(--rule);border-radius:var(--radius-lg);padding:12px 14px;background:var(--panel-alt);display:flex;flex-direction:column;gap:10px}
.cash-box>header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.cash-box h3{margin:0;font-size:15px}.cash-mode{max-width:280px}
.cash-denoms{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}.cash-denoms[hidden]{display:none}
.cash-denom{display:flex;flex-direction:column;gap:4px;padding:6px 8px;border:1px solid var(--rule);border-radius:10px;background:var(--panel)}.cash-denom.bill{border-color:var(--rule-strong)}.cash-denom span{font-size:13px;color:var(--ink-soft);font-variant-numeric:tabular-nums}
.cash-denom input{width:100%;min-height:44px;text-align:center;font-size:18px;font-weight:700}
.cash-total{margin:0;font-size:16px}.cash-total b{font-size:20px;font-variant-numeric:tabular-nums}
.cash-form.kiosk input,.cash-form.kiosk select{font-size:18px;min-height:50px}
.cash-review{display:flex;flex-direction:column;gap:12px}.cash-review .field{margin-bottom:0}
@media(max-width:560px){.cash-day{min-width:0}.cash-amount{margin-left:0}.cash-kinds{grid-template-columns:1fr}.cash-kinds button{flex-direction:row;justify-content:space-between}}

/* Objets trouvés (lot 1.89.0) : page (compteurs, filtres, registre repliable, déclarations), formulaires (objet, déclaration, sort), recherche pour un client, boutons de la badgeuse */
.lf-page{display:flex;flex-direction:column;gap:14px}
.lf-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.lf-head .section-title{margin:0}.lf-head-actions{display:flex;gap:8px;flex-wrap:wrap}
.lf-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.lf-tile{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"i v" "i l" "i h";column-gap:10px;align-items:center;padding:12px 14px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.lf-tile-icon{grid-area:i;font-size:28px}.lf-tile b{grid-area:v;font-size:22px;font-variant-numeric:tabular-nums}.lf-tile>span:not(.lf-tile-icon){grid-area:l;color:var(--ink-soft);font-size:13px}.lf-tile small{grid-area:h;color:var(--ink-faint);font-size:12px}
.lf-tile.danger{border-color:var(--danger-border);background:var(--danger-bg)}.lf-tile.good{border-color:var(--ok-border)}
.lf-filters{display:flex;align-items:end;gap:14px;flex-wrap:wrap}.lf-filters .field{margin:0;min-width:180px}.lf-filters .rp-chips{margin:0}
.lf-list{display:flex;flex-direction:column;gap:8px}
.lf-card{border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel);overflow:hidden}.lf-card.late{border-color:var(--danger-border)}.lf-card.returned,.lf-card.transferred,.lf-card.disposed{opacity:.85}
.lf-card-head{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;min-height:48px}
.lf-card-head:not(.static):hover{background:var(--panel-hover)}.lf-card-head.static{cursor:default;flex-wrap:wrap}
.lf-card-icon{font-size:26px;flex:0 0 auto}.lf-card-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}.lf-card-main b{overflow-wrap:anywhere}.lf-card-main small{color:var(--ink-soft)}
.lf-status{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;font-size:13px;font-weight:600;border:1px solid var(--rule-strong);background:var(--panel-alt);white-space:nowrap}
.lf-status.returned{color:var(--ok);border-color:var(--ok-border);background:var(--ok-bg)}.lf-status.late{color:var(--danger);border-color:var(--danger-border);background:var(--danger-bg)}.lf-status.disposed,.lf-status.transferred{color:var(--ink-soft)}
.lf-chevron{color:var(--ink-faint)}
.lf-detail{padding:0 14px 14px;display:flex;flex-direction:column;gap:10px}
.lf-facts{display:flex;gap:14px;flex-wrap:wrap;margin:0;color:var(--ink-soft);font-size:14px}
.lf-note{margin:0;padding:8px 12px;border-left:3px solid var(--rule-strong);background:var(--panel-alt);border-radius:var(--radius)}
.lf-outcome{margin:0;padding:8px 12px;border-radius:var(--radius);background:var(--panel-alt);font-size:14px}.lf-outcome.ok{background:var(--ok-bg);border:1px solid var(--ok-border)}
.lf-actions{display:flex;gap:8px;flex-wrap:wrap}
.lf-events{margin:0;padding:0 0 0 18px;font-size:13px;color:var(--ink-soft)}.lf-events li{margin:2px 0}.lf-event-when{font-variant-numeric:tabular-nums;color:var(--ink-faint);margin-right:6px}
.lf-form{display:flex;flex-direction:column;gap:12px}.lf-form[hidden]{display:none}.lf-form .field,.lf-sort .field,.lf-search .field{margin-bottom:0}
.lf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 14px}
.lf-cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:6px}
.lf-cats button{display:flex;align-items:center;gap:6px;min-height:44px;padding:4px 10px;border-radius:10px;border:2px solid var(--rule-strong);background:var(--field-bg);color:inherit;font:inherit;font-size:14px;cursor:pointer;text-align:left}
.lf-cats button.on{border-color:var(--action);background:var(--action-bg);color:var(--action)}.lf-cats button span{font-size:20px}
.lf-check{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:15px}
.lf-hint{margin:0;font-size:13px}
.lf-form.kiosk input,.lf-form.kiosk textarea{font-size:18px}.lf-form.kiosk input{min-height:50px}
.lf-sort{display:flex;flex-direction:column;gap:12px}.lf-sort-head{margin:0;padding:10px 12px;border-radius:var(--radius);background:var(--panel-alt)}
.lf-search{display:flex;flex-direction:column;gap:12px}.lf-search input{font-size:18px;min-height:50px}
.lf-results{display:flex;flex-direction:column;gap:8px}.lf-result{display:flex;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}.lf-result-icon{font-size:26px}.lf-result small{display:block;color:var(--ink-soft)}
@media(max-width:560px){.lf-card-head{flex-wrap:wrap}.lf-grid{grid-template-columns:1fr}.lf-cats{grid-template-columns:repeat(2,1fr)}}
/* Lot 1.90.0 : habilitations et formations */
.cert-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.cert-head .section-title{margin-bottom:0}
.cert-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:12px 0}
.cert-tile{display:grid;grid-template-columns:auto 1fr;column-gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--panel)}
.cert-tile-icon{grid-row:span 3;font-size:22px}.cert-tile b{font-size:22px;font-variant-numeric:tabular-nums}.cert-tile small{color:var(--ink-soft)}
.cert-tile.cert-danger{border-color:var(--danger-border);background:var(--danger-bg)}.cert-tile.cert-danger b{color:var(--danger)}.cert-tile.cert-warn{border-color:var(--warn-border);background:var(--warn-bg)}.cert-tile.cert-warn b{color:var(--warn-ink)}.cert-tile.cert-good b{color:var(--ok)}
.cert-sections{margin:4px 0 10px}
.cert-filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:10px}.cert-filters .field{margin:0;min-width:180px}
.cert-list{display:grid;gap:10px}
.cert-card{border:1px solid var(--rule);border-radius:var(--radius-lg);padding:10px 12px;background:var(--panel)}.cert-card.cert-danger{border-left:4px solid var(--danger)}.cert-card.cert-warn{border-left:4px solid var(--warn-border)}
.cert-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.cert-card-head h3{margin:0;font-size:16px}.cert-card-acts{display:flex;gap:6px;flex-wrap:wrap}
.cert-rows,.cert-types,.cert-history{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}
.cert-row,.cert-type,.cert-history li{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;border-top:1px solid var(--rule)}
.cert-row:first-child,.cert-type:first-child,.cert-history li:first-child{border-top:0}
.cert-row-main{display:flex;flex-direction:column;flex:1 1 220px;min-width:0}.cert-row-main small{color:var(--ink-soft)}
.cert-status{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:13px;white-space:nowrap;background:var(--panel-alt)}
.cert-status.expired,.cert-status.missing{background:var(--danger-bg);color:var(--danger)}.cert-status.expiring{background:var(--warn-bg);color:var(--warn-ink)}
.cert-status.valid{background:var(--ok-bg);color:var(--ok)}.cert-status.off{color:var(--ink-soft)}
.cert-link{background:none;border:0;padding:2px 0;color:var(--action);cursor:pointer;font:inherit;text-decoration:underline}.cert-nofile{font-size:13px}
.cert-acts{display:flex;gap:6px;flex-wrap:wrap}.cert-type.off{opacity:.65}.cert-history li.past{opacity:.75}
.cert-cat-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.cert-cat-head p{margin:0;flex:1 1 300px}
.cert-form{display:grid;gap:10px}.cert-form .field{margin:0}.cert-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.cert-suggest{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.cert-fixed{margin:0}.cert-e-hint{margin:0;min-height:1.2em}.cert-hint{margin-top:10px}
/* Lot 1.91.1 : la fenêtre « Débadger / Valider des tâches » de la badgeuse — deux grands boutons tactiles */
.sheet.kiosk-ask .kiosk-ask-text{font-size:18px;margin:4px 0 0}.sheet.kiosk-ask .kiosk-ask-btn{min-height:64px;font-size:18px}

/* Lot 1.92.0 : accès par droit (Équipe › Comptes) et planning complet en lecture seule */
.acc-rights{display:grid;gap:12px}          /* lot 1.93.0 : une seule zone de défilement (la fenêtre), plus de liste qui défile dans la fenêtre */
.acc-group{border:1px solid var(--rule);border-radius:10px;padding:8px 12px 10px;margin:0;display:grid;gap:6px}
.acc-group legend{font-weight:700;padding:0 6px}
.acc-right{display:flex;align-items:flex-start;gap:10px;min-height:32px;padding:4px 0}
.acc-right>span:first-of-type{flex:1 1 auto;min-width:0;line-height:1.35;padding-top:1px}
.acc-right .dv-chip{flex:none;align-self:center}
.acc-right input{width:20px;height:20px;flex:none;margin:0}
.plan-readonly{display:flex;align-items:flex-start;gap:10px;margin:0 var(--gutter) 12px;padding:10px 14px;border-radius:10px;border:1px solid var(--info-border);background:var(--info-bg);color:var(--info-ink)}
.plan-readonly svg{flex:none;margin-top:2px}
/* lot 1.102.0 : les codes personnels tapés sur la badgeuse (lieu public) ne s'affichent plus en clair. Clavier numérique conservé (inputmode), chiffres masqués ; repli type=password dans app.js si le navigateur ne connaît pas -webkit-text-security. */
.pin-input{-webkit-text-security:disc;text-security:disc;letter-spacing:.18em}
.pin-input::placeholder{letter-spacing:.18em}
