/* Thème d'administration inspiré d'Angulr (flatfull.com) : barre latérale sombre avec bloc de marque et profil,
   en-tête clair, panneaux plats à bord fin, étiquettes colorées, palette violet / cyan / vert / jaune / rouge.
   Les valeurs de couleur viennent de la mémoire de la palette du thème (la page de démonstration n'exposait pas son CSS) : à ajuster ici.
   Polices système uniquement (la CSP interdit les polices externes) ; icônes SVG intégrées (voir icon() dans app/Core/ui.php).
   Le nom et le logo de l'application se règlent dans .env : APP_NAME et APP_LOGO (chemin relatif, ex. assets/brand/logo.svg). */
:root{
  --primary:#7266ba;--primary-hover:#5d51a8;--primary-ink:#fff;--primary-soft:#ece9f7;
  --info:#23b7e5;--success:#27c24c;--warning:#fad733;--danger:#f05050;
  --success-text:#1a8a36;--danger-text:#c93a3a;--warning-text:#8a6d00;
  --dark:#3a3f51;--dark-deep:#2e323f;--dark-hover:#333848;--dark-line:#4a5066;--dark-ink:#c3c7d4;--dark-muted:#8c91a6;
  --bg:#edf1f2;--card:#fff;--card-head:#f6f8f8;--ink:#58666e;--ink-strong:#2f3a42;--muted:#7a8a93;--line:#dee5e7;--line-soft:#eaeff0;
  --link:#6254b2;--radius:2px;
  --sans:"Source Sans 3","Source Sans Pro","Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;
  --ok:var(--success-text);--danger-t:var(--danger-text);--warn:var(--warning-text);
}
@media (prefers-color-scheme:dark){:root[data-theme=auto]{
  --primary:#8d82d6;--primary-hover:#a59be0;--primary-ink:#1b1830;--primary-soft:#2d2a45;
  --success-text:#5cc47a;--danger-text:#ff8a8a;--warning-text:#f0cf55;
  --bg:#1e2128;--card:#282c37;--card-head:#2f3340;--ink:#bcc3cf;--ink-strong:#e8ecf2;--muted:#8f99a8;--line:#3b4152;--line-soft:#333847;
  --link:#a79ee6;--dark:#1b1e26;--dark-deep:#15171d;--dark-hover:#232731;--dark-line:#303544}}
:root[data-theme=dark]{
  --primary:#8d82d6;--primary-hover:#a59be0;--primary-ink:#1b1830;--primary-soft:#2d2a45;
  --success-text:#5cc47a;--danger-text:#ff8a8a;--warning-text:#f0cf55;
  --bg:#1e2128;--card:#282c37;--card-head:#2f3340;--ink:#bcc3cf;--ink-strong:#e8ecf2;--muted:#8f99a8;--line:#3b4152;--line-soft:#333847;
  --link:#a79ee6;--dark:#1b1e26;--dark-deep:#15171d;--dark-hover:#232731;--dark-line:#303544}

/* thème : data-theme="light" (défaut, comme le gabarit), "dark" ou "auto" (suit l'appareil) — choix dans le menu utilisateur */
:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}:root[data-theme=auto]{color-scheme:light dark}
*{box-sizing:border-box}html{font-size:15px}
body{margin:0;font-family:var(--sans);font-size:1rem;background:var(--bg);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:var(--link)}a:hover{text-decoration-thickness:2px}
h1,h2,h3{font-family:var(--sans);font-weight:600;color:var(--ink-strong);line-height:1.25}
h1{font-size:1.7rem;font-weight:300;margin:.1rem 0 1rem}h2{font-size:1.1rem;margin:1.2rem 0 .6rem}h3{font-size:1rem}
:focus-visible{outline:2px solid var(--info);outline-offset:2px}
.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}

/* ---------- ossature : aside sombre + zone principale ---------- */
.shell{display:flex;min-height:100vh}
.side{width:224px;flex-shrink:0;background:var(--dark);color:var(--dark-ink);display:flex;flex-direction:column}
.side .brand{display:flex;align-items:center;gap:.6rem;height:52px;padding:0 1rem;background:var(--dark-deep);color:#fff;text-decoration:none;font-weight:600;font-size:1.15rem}
.brand-mark{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:var(--radius);background:var(--primary);color:var(--primary-ink);font-weight:700}
.brand-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand-logo{max-height:34px;max-width:170px;display:block}
.profile{display:flex;align-items:center;gap:.7rem;padding:1rem;border-bottom:1px solid var(--dark-line)}
.avatar{flex:0 0 40px;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--info);color:#fff;font-weight:600;font-size:1.1rem}
.who-block{display:flex;flex-direction:column;min-width:0;line-height:1.25}.who-block b{color:#fff;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.who-block small{color:var(--dark-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side nav{padding:.4rem 0 1rem;overflow-y:auto;flex:1}
/* menu en blocs dépliants (un seul ouvert : <details name="nav-grp">, repli JS pour les anciens navigateurs) */
.nav-grp{border-bottom:1px solid rgba(255,255,255,.03)}
.nav-head{display:flex;align-items:center;gap:.75rem;padding:.8rem 1rem;color:var(--dark-ink);cursor:pointer;list-style:none;font-weight:600;font-size:.97rem;user-select:none;border-left:3px solid transparent}
.nav-head::-webkit-details-marker{display:none}.nav-head::marker{content:""}
.nav-head .ic{flex:0 0 20px;width:20px;height:20px;opacity:.9}
.nav-head:hover{background:var(--dark-hover);color:#fff}
.nav-head .chev{display:inline-flex;margin-left:auto;transition:transform .18s;opacity:.6}.nav-head .chev .ic{width:14px;height:14px;flex-basis:14px}
.nav-grp[open]{background:var(--dark-deep)}
.nav-grp[open]>.nav-head{color:#fff}.nav-grp[open]>.nav-head .chev{transform:rotate(90deg);opacity:.9}
.nav-head.cur{border-left-color:var(--info)}.nav-head.cur>.ic{color:var(--info);opacity:1}
.nav-grp[open] .grp-count{display:none}
.nav-grp[open] .nav-items{animation:navIn .16s ease-out}
@keyframes navIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.nav-items{padding:.15rem 0 .45rem}
.side a.nav{display:flex;align-items:center;gap:.7rem;padding:.5rem 1rem .5rem 2.85rem;color:var(--dark-ink);text-decoration:none;border-left:3px solid transparent;font-size:.93rem}
.side a.nav .ic{flex:0 0 16px;width:16px;height:16px;opacity:.7}.nav-label{flex:1;min-width:0}
.side a.nav:hover{color:#fff;background:rgba(255,255,255,.04)}.side a.nav:hover .ic{opacity:1}
.side a.nav.on{color:#fff;font-weight:600;border-left-color:var(--info);background:rgba(35,183,229,.1)}.side a.nav.on .ic{color:var(--info);opacity:1}
.side a:focus-visible{outline-color:#fff;outline-offset:-2px}
.count{display:inline-block;min-width:20px;padding:0 .4rem;border-radius:10px;background:var(--danger);color:#fff;font-size:.75rem;font-weight:700;line-height:20px;text-align:center}
.count.warn{background:var(--danger);margin-left:.2rem}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.top{display:flex;gap:.6rem;align-items:center;justify-content:space-between;height:52px;padding:0 1.25rem;background:var(--card);border-bottom:1px solid var(--line)}
.top .who{display:flex;gap:1rem;align-items:center;flex-wrap:wrap;font-size:.92rem}
.top .bell{position:relative;display:inline-flex;align-items:center;color:var(--ink)}
.top.dark{background:var(--dark);border-bottom:0;color:var(--dark-ink)}.top.dark a{color:#fff}.top.dark b{color:#fff}
.content{padding:1.25rem 1.25rem 2rem;max-width:1280px;width:100%}
.menu-btn{display:none;padding:.3rem .45rem}
.fold-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:0;background:none;box-shadow:none;color:var(--ink)}.fold-btn:hover{background:var(--card-head)}
.fold-btn .ic{width:20px;height:20px}
.top-search{display:flex;align-items:center;flex:0 1 340px;margin-right:auto;background:var(--bg);border-radius:20px;padding:0 .3rem 0 .9rem}
.top-search input[type=search]{border:0;background:none;padding:.45rem 0;min-height:0;box-shadow:none}.top-search input:focus{box-shadow:none}
.top-search button{border:0;background:none;box-shadow:none;padding:.3rem .5rem;color:var(--muted)}
.top-scan{display:inline-flex;align-items:center;gap:.35rem;color:var(--ink);text-decoration:none;font-weight:600;font-size:.92rem;padding:.35rem .7rem;border:1px solid var(--line);border-radius:20px}
.top-scan:hover{border-color:var(--info);color:var(--info)}
/* menu réduit en colonne d'icônes (ordinateur ; choix mémorisé dans un cookie) */
@media (min-width:861px){
  body.folded .side{width:64px}
  body.folded .side .brand{padding:0;justify-content:center}body.folded .side .brand-logo{width:34px;height:34px;max-width:none;object-fit:cover;object-position:left center}
  body.folded .brand-name,body.folded .who-block,body.folded .nav-label,body.folded .chev,body.folded .nav-items{display:none}
  body.folded .profile{justify-content:center;padding:.8rem 0}
  body.folded .nav-head{justify-content:center;padding:.9rem 0;position:relative}
  body.folded .nav-head .ic{flex-basis:22px;width:22px;height:22px}
  body.folded .grp-count{position:absolute;top:6px;right:8px;min-width:16px;line-height:16px;font-size:.65rem;padding:0 .25rem;display:inline-block!important}
  body.folded .nav-grp[open]{background:none}
}

/* ---------- panneaux ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1rem 1.15rem;margin-bottom:1rem;box-shadow:0 1px 1px rgba(0,0,0,.04)}
.card>h2:first-child,.card>.between:first-child h2{margin-top:0}
.grid{display:grid;gap:1rem}.grid>.card{margin-bottom:0}.g2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.g4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.kpi{position:relative;padding-left:1.25rem;border-left:4px solid var(--primary)}
.grid>.kpi:nth-child(5n+2){border-left-color:var(--info)}.grid>.kpi:nth-child(5n+3){border-left-color:var(--success)}.grid>.kpi:nth-child(5n+4){border-left-color:var(--warning)}.grid>.kpi:nth-child(5n+5){border-left-color:var(--danger)}
.kpi .v{font-size:clamp(1.15rem,1.6vw,1.5rem);font-weight:300;line-height:1.2;color:var(--ink-strong);font-variant-numeric:tabular-nums;white-space:nowrap}
.kpi .l{color:var(--muted);font-size:.9rem;margin-top:.15rem}
.delta{display:block;font-size:.82rem;margin-top:.3rem}.delta.up{color:var(--success-text)}.delta.down{color:var(--danger-text)}.delta.flat{color:var(--muted)}
.delta .muted{color:var(--muted)}

/* ---------- tableaux ---------- */
table{width:100%;border-collapse:collapse;background:var(--card)}
th,td{padding:.55rem .75rem;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:top;font-size:.93rem}
th{font-size:.85rem;font-weight:600;color:var(--ink-strong);background:var(--card-head);border-bottom:1px solid var(--line);white-space:nowrap}
tbody tr:hover td{background:var(--card-head)}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}.tablewrap table tr:last-child td{border-bottom:0}

/* ---------- boutons (à plat, bord fin) ---------- */
.btn,button{display:inline-block;padding:.45rem .95rem;border:1px solid #cfdadd;border-radius:var(--radius);background:var(--card);color:var(--ink-strong);cursor:pointer;font:inherit;font-weight:500;text-decoration:none;box-shadow:0 1px 1px rgba(0,0,0,.05);transition:background-color .12s,border-color .12s}
.btn:hover,button:hover{background:var(--card-head);border-color:#b7c6ca}
@media (prefers-color-scheme:dark){:where(:root[data-theme=auto]) .btn,:where(:root[data-theme=auto]) button{border-color:var(--line)}:where(:root[data-theme=auto]) .btn:hover,:where(:root[data-theme=auto]) button:hover{border-color:var(--muted)}}
:where(:root[data-theme=dark]) .btn,:where(:root[data-theme=dark]) button{border-color:var(--line)}:where(:root[data-theme=dark]) .btn:hover,:where(:root[data-theme=dark]) button:hover{border-color:var(--muted)}
.btn.primary,button.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.btn.primary:hover,button.primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.danger:hover{background:#d84343;border-color:#d84343}
.btn.small,button.small{padding:.2rem .6rem;font-size:.85rem}
.btn[disabled],button[disabled]{opacity:.55;cursor:not-allowed}
form.inline{display:inline}.actions{display:flex;gap:.5rem;flex-wrap:wrap;margin:.8rem 0}

/* ---------- formulaires ---------- */
.field{margin-bottom:.9rem}.field label{display:block;font-size:.9rem;font-weight:600;color:var(--ink-strong);margin-bottom:.25rem}
input[type=text],input[type=number],input[type=date],input[type=email],input[type=password],input[type=tel],input[type=search],select,textarea{width:100%;padding:.5rem .65rem;border:1px solid #cfdadd;border-radius:var(--radius);background:var(--card);color:var(--ink-strong);font:inherit}
@media (prefers-color-scheme:dark){:where(:root[data-theme=auto]) input[type=text],:where(:root[data-theme=auto]) input[type=number],:where(:root[data-theme=auto]) input[type=date],:where(:root[data-theme=auto]) input[type=email],:where(:root[data-theme=auto]) input[type=password],:where(:root[data-theme=auto]) input[type=tel],:where(:root[data-theme=auto]) input[type=search],:where(:root[data-theme=auto]) select,:where(:root[data-theme=auto]) textarea{border-color:var(--line)}}
:where(:root[data-theme=dark]) input[type=text],:where(:root[data-theme=dark]) input[type=number],:where(:root[data-theme=dark]) input[type=date],:where(:root[data-theme=dark]) input[type=email],:where(:root[data-theme=dark]) input[type=password],:where(:root[data-theme=dark]) input[type=tel],:where(:root[data-theme=dark]) input[type=search],:where(:root[data-theme=dark]) select,:where(:root[data-theme=dark]) textarea{border-color:var(--line)}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--info);box-shadow:0 0 0 2px rgba(35,183,229,.25)}
.has-err input,.has-err select{border-color:var(--danger)}.err{color:var(--danger-text);display:block;font-size:.88rem}.hint{color:var(--muted);display:block;font-size:.88rem}
.check{display:flex;gap:.4rem;align-items:center;margin:.4rem 0}.check input{width:auto}

/* ---------- messages et étiquettes ---------- */
.flash{padding:.65rem .9rem;border-radius:var(--radius);margin-bottom:.8rem;border:1px solid;border-left-width:4px;background:var(--card)}
.flash.success{border-color:var(--success);color:var(--success-text)}.flash.error{border-color:var(--danger);color:var(--danger-text)}.flash.warning{border-color:var(--warning);color:var(--warning-text)}
.flash a{color:inherit;font-weight:600}
.badge{display:inline-block;padding:.1rem .5rem;border-radius:var(--radius);font-size:.78rem;font-weight:700;line-height:1.4;background:#a0aeb4;color:#fff}
.b-posted,.b-paid,.b-active,.b-received,.b-completed{background:var(--success)}
.b-cancelled,.b-failed,.b-suspended,.b-closed-with-discrepancy{background:var(--danger)}
.b-draft{background:#a0aeb4}
.b-pending,.b-in-transit,.b-counting,.b-partially-paid,.b-partially-received,.b-past-due,.b-trial{background:var(--warning);color:#4b3e00}
.abc-a{background:var(--success)}.abc-b{background:var(--info)}.abc-c{background:#a0aeb4}
@media (prefers-color-scheme:dark){:where(:root[data-theme=auto]) .b-posted,:where(:root[data-theme=auto]) .b-paid,:where(:root[data-theme=auto]) .b-active,:where(:root[data-theme=auto]) .b-received,:where(:root[data-theme=auto]) .b-completed,:where(:root[data-theme=auto]) .abc-a{color:#0d2415}:where(:root[data-theme=auto]) .b-cancelled,:where(:root[data-theme=auto]) .b-failed,:where(:root[data-theme=auto]) .b-suspended,:where(:root[data-theme=auto]) .b-closed-with-discrepancy{color:#2b0b0b}:where(:root[data-theme=auto]) .abc-b{color:#052630}}
:where(:root[data-theme=dark]) .b-posted,:where(:root[data-theme=dark]) .b-paid,:where(:root[data-theme=dark]) .b-active,:where(:root[data-theme=dark]) .b-received,:where(:root[data-theme=dark]) .b-completed,:where(:root[data-theme=dark]) .abc-a{color:#0d2415}:where(:root[data-theme=dark]) .b-cancelled,:where(:root[data-theme=dark]) .b-failed,:where(:root[data-theme=dark]) .b-suspended,:where(:root[data-theme=dark]) .b-closed-with-discrepancy{color:#2b0b0b}:where(:root[data-theme=dark]) .abc-b{color:#052630}
.muted{color:var(--muted)}.pager{display:flex;gap:1rem;align-items:center;justify-content:center;margin:1rem 0}
.filters{display:flex;gap:.6rem;flex-wrap:wrap;align-items:end;margin-bottom:.9rem}.filters .field{margin:0;min-width:160px}
.lines td input,.lines td select{min-width:70px}.lines .prod{min-width:200px}.is-read{opacity:.7}

/* ---------- connexion : fond sombre, panneau centré ---------- */
body.auth{background:var(--dark);min-height:100vh}
.guest{max-width:430px;margin:0 auto;padding:9vh 1rem 2rem}
.guest>h1{text-align:center;color:#fff;font-size:2rem;font-weight:300;margin-bottom:1.2rem}.brand-title .brand-logo{margin:0 auto;max-height:56px}
.guest .card{padding:1.5rem;border:0;border-radius:var(--radius);box-shadow:0 2px 6px rgba(0,0,0,.25)}
.guest .flash{background:var(--card)}

/* ---------- saisie rapide, caisse, scan ---------- */
.suggest{position:relative}.suggest ul{position:absolute;z-index:20;left:0;right:0;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);list-style:none;margin:2px 0 0;padding:0;max-height:240px;overflow:auto;box-shadow:0 4px 10px rgba(0,0,0,.12)}
.suggest li{padding:.45rem .65rem;cursor:pointer}.suggest li:hover,.suggest li.on{background:var(--primary-soft)}
.pos{display:grid;grid-template-columns:1fr 380px;gap:1rem}.pos .total{font-size:2rem;font-weight:300;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-strong)}
.scanmsg{padding:.55rem .75rem;border-radius:var(--radius);margin:.4rem 0;border:1px solid var(--line);border-left-width:4px;background:var(--card)}
.scanmsg.ok{border-left-color:var(--success)}.scanmsg.bad{border-left-color:var(--danger);color:var(--danger-text)}.scanmsg.warn{border-left-color:var(--warning)}
video.cam{width:100%;max-height:260px;background:#000;border-radius:var(--radius)}

/* ---------- lecture de codes dans les formulaires ---------- */
.scanbar{border:1px dashed var(--info);border-radius:var(--radius);padding:.7rem .9rem;margin-bottom:.9rem;background:var(--card-head)}.scanbar .field{margin-bottom:.4rem}.scanbar .actions{margin:.3rem 0}.scanbar .cands{display:flex;gap:.4rem;flex-wrap:wrap;margin:.3rem 0}
video.cam{margin:.4rem 0}

/* ---------- statistiques ---------- */
.tabs{display:flex;gap:.2rem;flex-wrap:wrap;border-bottom:1px solid var(--line);margin-bottom:1rem}
.tab{padding:.55rem 1rem;margin-bottom:-1px;border:1px solid transparent;border-radius:var(--radius) var(--radius) 0 0;color:var(--ink);text-decoration:none;font-weight:500}
.tab:hover{background:var(--card-head);border-color:var(--line) var(--line) transparent}
.tab.on{background:var(--card);border-color:var(--line) var(--line) var(--card);color:var(--ink-strong);font-weight:600;box-shadow:inset 0 2px 0 var(--primary)}
.insights ul{list-style:none;margin:0;padding:0}.insights li{padding:.5rem .8rem;margin:.35rem 0;border-left:4px solid var(--info);background:var(--card-head)}
.insights .in-warn{border-left-color:var(--warning)}.insights .in-good{border-left-color:var(--success)}
details.defs{padding:.6rem 1.15rem}details.defs summary{cursor:pointer;font-weight:600;color:var(--ink-strong)}details.defs p{margin:.6rem 0 0}
svg.chart{display:block;width:100%;height:auto;max-height:300px}
.ch-grid{stroke:var(--line-soft);stroke-width:1}.ch-base{stroke:var(--muted);stroke-width:1}.ch-axis{fill:var(--muted);font:11px var(--sans)}
.ch-bar{fill:var(--primary)}.ch-bar.neg{fill:var(--danger)}.ch-bar:hover{fill:var(--primary-hover)}
.hbars{list-style:none;margin:.4rem 0 0;padding:0}.hbars li{display:grid;grid-template-columns:minmax(120px,34%) 1fr auto;gap:.7rem;align-items:center;padding:.3rem 0}
.hb{width:100%;height:10px}.hb-track{fill:var(--line-soft)}.hb-fill{fill:var(--info)}.hb-fill.neg{fill:var(--danger)}.hb-val{font-variant-numeric:tabular-nums;color:var(--ink-strong);text-align:right;font-size:.9rem}.hb-label{overflow-wrap:anywhere}
table.heat{table-layout:fixed;min-width:640px}table.heat th,table.heat td{padding:.3rem .2rem;text-align:center;font-size:.78rem}
table.heat th[scope=row]{text-align:left;width:46px;padding-left:.5rem}
.hm{background:var(--card-head)}.hm-1{background:#e4e0f4;color:#3e3568}.hm-2{background:#c4bce8;color:#2e2655}.hm-3{background:#9d92d6;color:#fff}.hm-4{background:#6a5cb8;color:#fff;font-weight:700}
@media (prefers-color-scheme:dark){:where(:root[data-theme=auto]) .hm-1{background:#34305a;color:#d6d1f5}:where(:root[data-theme=auto]) .hm-2{background:#4a4380;color:#fff}:where(:root[data-theme=auto]) .hm-3{background:#6a5cb8;color:#fff}:where(:root[data-theme=auto]) .hm-4{background:#8d82d6;color:#1b1830}}
:where(:root[data-theme=dark]) .hm-1{background:#34305a;color:#d6d1f5}:where(:root[data-theme=dark]) .hm-2{background:#4a4380;color:#fff}:where(:root[data-theme=dark]) .hm-3{background:#6a5cb8;color:#fff}:where(:root[data-theme=dark]) .hm-4{background:#8d82d6;color:#1b1830}

/* ---------- utilitaires (remplacent les attributs style, interdits par la CSP) ---------- */
.between{display:flex;justify-content:space-between;align-items:center;gap:.6rem;flex-wrap:wrap}
.flush{margin:0}.mt{margin-top:1rem}.mt-s{margin-top:.5rem}.mb-s{margin-bottom:.5rem}
.tc{text-align:center}.tr{text-align:right}.tl{text-align:left}
.w100{width:100%}.big{font-size:1.1rem}.self-end{align-self:end}.nodeco{text-decoration:none}
.w720{max-width:720px}.secret{font-size:1.2rem;letter-spacing:.1em;font-family:ui-monospace,Menlo,monospace}
.flash-top{margin:1rem 1.25rem 0}.invoice-wrap{max-width:800px;margin:auto}.print-body{background:#fff;color:#000}

/* ---------- impression et reçus ---------- */
.print-only{display:none}
@media print{
  @page{size:A4;margin:12mm}
  .side,.top,.actions>*:not(h1),.no-print,.menu-btn,.tabs,.tabbar,.scrim,.quick,.filters,.pager,.flash,.btn,button,form.inline,.sp-top,.sp-nav{display:none!important}
  .shell{display:block}.main{margin:0;display:block}.content{padding:0;max-width:none}
  .card{border:0;box-shadow:none;padding:0 0 .6rem;break-inside:avoid-page}.grid{display:block}.grid>.card{margin-bottom:.6rem}.kpi{border-left:0;padding-left:0}
  .print-only{display:block}.print-head{border-bottom:2px solid #000;margin-bottom:.8rem;padding-bottom:.3rem;font-size:1.1rem}.print-head .print-meta{display:block;font-size:.75rem;font-weight:400;color:#444}
  body,.print-body{background:#fff;color:#000;font-size:10.5pt}h1,h2,h3{color:#000;break-after:avoid}h1{font-size:15pt}h2{font-size:12pt}
  .tablewrap{overflow:visible;border:0}table{width:100%;border-collapse:collapse}th,td{border-bottom:1px solid #bbb;padding:.2rem .35rem;font-size:9.5pt}th{background:#eee!important;color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  thead{display:table-header-group}tr{break-inside:avoid}tfoot{display:table-footer-group}
  a{color:#000;text-decoration:none}.badge{border:1px solid #666;background:none!important;color:#000!important}
  svg.chart{max-width:100%;height:auto}.ch-bar{fill:#444!important}.ch-bar.neg{fill:#999!important}
  .hm-1,.hm-2,.hm-3,.hm-4,.bar-fill,.ch-bar{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  body.supplier{background:#fff}.sp-main{max-width:none;padding:0}
}
.top .top-btn{background:none;border:0;color:var(--ink);width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border-radius:8px}.top .top-btn:hover{background:rgba(0,0,0,.06)}
@media (max-width:860px){.top .top-btn{color:#fff;width:44px;height:44px}}
/* documents imprimés dédiés */
body.print-ticket .content{max-width:80mm;margin:0 auto;padding:0}
.doc-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;margin-bottom:.8rem}
.sign-row{display:grid;grid-template-columns:1fr 1fr;gap:3rem;margin-top:2.5rem}.sign-row div{border-top:1px solid #000;padding-top:.3rem;text-align:center;font-size:.85rem}
.count-col{width:5rem;border-left:1px solid #000!important}
.labels{display:grid;grid-template-columns:repeat(3,1fr);gap:3mm}
.label{border:1px dashed #999;padding:2mm 3mm;text-align:center;break-inside:avoid;overflow:hidden;font-size:9pt}
.label .l-name{font-weight:600;line-height:1.2;max-height:2.4em;overflow:hidden}.label .l-price{font-size:12pt;font-weight:700}.label .l-sku{font-size:7.5pt;color:#444}
svg.barcode{display:block;width:100%;height:12mm;margin:1mm auto}
.receipt{max-width:340px;margin:auto;font-family:ui-monospace,Menlo,monospace;font-size:.85rem}.receipt table td,.receipt table th{border:0;padding:.1rem 0;font-size:.85rem;background:none}

/* ---------- éléments ajoutés pour le mobile (masqués sur grand écran) ---------- */
.tabbar,.scrim,.top-brand,.show-sm,.avatar-sm{display:none}
.hero{display:flex;flex-direction:column;gap:.15rem;background:var(--dark);color:#fff;border-radius:var(--radius);padding:1.1rem 1.25rem;margin-bottom:1rem}
.hero-l{color:var(--dark-ink);font-size:.95rem}.hero-v{font-size:clamp(1.9rem,4vw,2.6rem);font-weight:700;line-height:1.15;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.hero-s{color:var(--dark-ink);font-size:.9rem}
.quick{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:1rem}
.quick .q{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;min-width:110px;min-height:76px;padding:.6rem .9rem;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink-strong);text-decoration:none;font-size:.88rem;font-weight:600}
.quick .q .ic{width:24px;height:24px;color:var(--primary)}
.quick .q.q-main{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}.quick .q.q-main .ic{color:var(--primary-ink)}
.quick .q:hover{border-color:var(--primary)}

/* ---------- mobile d'abord : téléphones et petites tablettes ---------- */
@media (max-width:860px){
  html{font-size:16px}
  .hide-sm{display:none!important}.show-sm{display:flex!important}
  /* barre du haut sombre avec la marque */
  .top{background:var(--dark);color:#fff;border-bottom:0;height:56px;padding:0 .9rem;position:sticky;top:0;z-index:15}
  .top-brand{display:flex;align-items:center}.top-brand .brand-logo{max-height:30px;max-width:150px}.top-brand b{color:#fff;font-size:1.15rem}
  .top-cur,.menu-btn{display:none}
  .top .who{gap:.2rem}.top .bell{color:#fff;width:44px;height:44px;justify-content:center}
  .top .bell .count{position:absolute;top:4px;right:2px}
  .avatar-sm{width:38px;height:38px;border-radius:50%;background:var(--info);color:#10303b;align-items:center;justify-content:center;font-weight:700;text-decoration:none}
  .content{padding:1rem .9rem calc(88px + env(safe-area-inset-bottom))}
  h1{font-size:1.4rem;margin-bottom:.8rem}
  /* menu complet : tiroir au-dessus de la barre d'onglets */
  .side{position:fixed;inset:0 auto 0 0;z-index:40;transform:translateX(-100%);transition:transform .18s;width:min(300px,86vw)}
  .side.open{transform:none;box-shadow:6px 0 24px rgba(0,0,0,.35)}
  .side a.nav{min-height:46px}.nav-head{min-height:52px}
  .scrim{position:fixed;inset:0;z-index:35;background:rgba(15,18,28,.5);opacity:0;pointer-events:none;transition:opacity .18s}
  .scrim.open{display:block;opacity:1;pointer-events:auto}
  /* barre d'onglets en bas, à portée du pouce */
  .tabbar{display:flex;align-items:center;position:fixed;left:0;right:0;bottom:0;z-index:20;height:calc(66px + env(safe-area-inset-bottom));padding:0 .3rem env(safe-area-inset-bottom);background:var(--card);border-top:1px solid var(--line)}
  .tab-i{flex:1;min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:var(--muted);font-size:.75rem;font-weight:600;text-decoration:none}
  .tab-i:hover{background:none;border:0}.tab-i .ic{width:24px;height:24px}
  .tab-i.on{color:var(--primary);font-weight:700}.tab-i.on .ic{stroke-width:2.1}
  .fab{flex:0 0 64px;display:flex;align-items:center;justify-content:center;width:56px;height:56px;margin:-24px .2rem 0;border-radius:50%;background:var(--primary);color:var(--primary-ink);border:3px solid var(--card);box-shadow:0 0 0 2px var(--info),0 4px 10px rgba(0,0,0,.2)}
  .fab .ic{width:26px;height:26px;stroke-width:2.2}
  /* cartes, grilles, formulaires */
  .card,.hero,.quick .q{border-radius:12px}
  .card{padding:.9rem 1rem;overflow-x:auto}
  .g4{grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem}.g2{grid-template-columns:1fr}
  .kpi{padding-left:.9rem}.kpi .v{font-size:1.25rem}.kpi .l{font-size:.85rem}
  .quick{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem}.quick .q{min-width:0;padding:.5rem .2rem;font-size:.78rem;text-align:center}
  input[type=text],input[type=number],input[type=date],input[type=email],input[type=password],input[type=tel],input[type=search],select,textarea{min-height:48px;font-size:1rem;border-radius:10px}
  .btn,button{min-height:44px;border-radius:10px;padding:.55rem 1rem}
  .actions .btn,.actions button{flex:1 1 auto}
  .filters .field{flex:1 1 150px}
  .pos{grid-template-columns:1fr}.pos .total{font-size:1.8rem}
  .hbars li{grid-template-columns:1fr auto}.hbars .hb{grid-column:1 / -1;order:3}
  .tab{padding:.55rem .8rem;font-size:.9rem;min-height:44px}.tabs{overflow-x:auto;flex-wrap:nowrap}.tab{white-space:nowrap}
  th,td{padding:.55rem .6rem}
  .flash-top{margin:.8rem .9rem 0}
}
/* connexion : feuille ancrée en bas sur téléphone */
@media (max-width:600px){
  body.auth .guest{display:flex;flex-direction:column;min-height:100vh;max-width:none;padding:0}
  body.auth .guest>h1{flex:1;display:flex;align-items:center;justify-content:center;margin:0;padding:2rem 1rem}
  body.auth .guest .card{border-radius:24px 24px 0 0;padding:1.5rem 1.25rem 2rem;margin:0}
  body.auth .guest .flash{margin:0 1rem 1rem}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* ---- espace fournisseur (lecture seule, mobile d'abord) ---- */
body.supplier{background:var(--bg)}
.sp-top{background:var(--dark);color:#fff;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem 1rem;flex-wrap:wrap}
.sp-top .brand-logo{max-height:34px}.sp-brand{color:#fff}
.sp-nav{display:flex;align-items:center;gap:.9rem;flex-wrap:wrap}.sp-nav a{color:#fff;min-height:44px;display:inline-flex;align-items:center}
.sp-main{max-width:1000px;margin:0 auto;padding:1rem 1rem 3rem}
.sp-card{display:block;color:inherit;text-decoration:none}.sp-card:hover{border-color:var(--primary)}
.sp-card .v{font-size:1.6rem;font-weight:300;font-variant-numeric:tabular-nums}.sp-card .v small{font-size:.8rem;color:var(--muted)}
.pb-preview{max-width:100%;max-height:120px;border:1px dashed #bbb;padding:4px;background:#fff}
.suggest li.empty{color:var(--muted,#888);cursor:default;font-style:italic}

/* ===================== 1.9 : en-tête, scan et numéros de série, saisie sur téléphone ===================== */
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.02em}
.linkish{border:0;background:none;box-shadow:none;padding:0;color:var(--link);text-decoration:underline;cursor:pointer;font:inherit}
.in-qty{width:5.5rem}.in-price{width:7rem}
/* menu utilisateur de l'en-tête (comme le gabarit : avatar + nom ▾) */
.user-menu{position:relative}.user-menu>summary{display:flex;align-items:center;gap:.5rem;cursor:pointer;list-style:none;padding:.25rem .4rem;border-radius:20px}
.user-menu>summary::-webkit-details-marker{display:none}.user-menu>summary:hover{background:var(--card-head)}
.avatar-xs{width:30px;height:30px;flex:0 0 30px;font-size:.9rem}.um-name{font-weight:600;color:var(--ink-strong)}.caret{font-size:.7rem;color:var(--muted)}
.user-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:230px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 6px 18px rgba(0,0,0,.12);padding:.35rem 0}
.user-pop a,.user-pop .um-out{display:block;width:100%;text-align:left;padding:.5rem 1rem;color:var(--ink-strong);text-decoration:none;border:0;background:none;box-shadow:none;border-radius:0;font-size:.93rem}
.user-pop a:hover,.user-pop .um-out:hover{background:var(--card-head)}.user-pop form{margin:0;border-top:1px solid var(--line-soft);margin-top:.3rem;padding-top:.3rem}
.um-head{padding:.4rem 1rem .6rem;border-bottom:1px solid var(--line-soft);margin-bottom:.3rem;display:flex;flex-direction:column}.um-head small{color:var(--muted)}

/* barre de scan des formulaires */
.scanbar-row{display:flex;gap:.6rem;align-items:flex-end}.scanbar-row .field{flex:1;margin:0}
.scan-cam{display:inline-flex;align-items:center;gap:.4rem;white-space:nowrap}.scan-cam .ic{width:20px;height:20px}
.scanbar input[type=text]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}

/* lignes : seuls les champs utiles au mode de suivi du produit (quantité / lots / numéros de série) */
tr[data-tracking=quantity] .c-lot_number>*,tr[data-tracking=quantity] .c-expiration_date>*,tr[data-tracking=quantity] .c-serials>*,tr[data-tracking=quantity] .c-serial_raw>*,
tr[data-tracking=lot] .c-serials>*,tr[data-tracking=lot] .c-serial_raw>*,
tr[data-tracking=serial] .c-lot_number>*,tr[data-tracking=serial] .c-expiration_date>*{visibility:hidden}
.sn-btn{display:none;align-items:center;gap:.3rem;margin-top:.35rem}.sn-btn .ic{width:16px;height:16px}
tr[data-tracking=serial] .sn-btn{display:inline-flex}
tr[data-tracking=serial] .c-quantity input[readonly]{background:var(--card-head);font-weight:700}
.tablewrap:has(table.lines),.card:has(table.lines){overflow:visible}

/* panneau « numéros de série » : feuille en bas sur téléphone, panneau centré sur ordinateur */
.sheet-wrap{position:fixed;inset:0;z-index:60;display:flex;align-items:flex-end;justify-content:center}.sheet-wrap[hidden]{display:none}
.sheet-scrim{position:absolute;inset:0;background:rgba(15,18,28,.55)}
.sheet{position:relative;width:100%;max-width:560px;max-height:90vh;display:flex;flex-direction:column;background:var(--card);color:var(--ink);border-radius:18px 18px 0 0;padding:.5rem 1rem calc(1rem + env(safe-area-inset-bottom));box-shadow:0 -8px 30px rgba(0,0,0,.3);animation:sheetUp .2s ease-out}
@keyframes sheetUp{from{transform:translateY(30px);opacity:.4}to{transform:none;opacity:1}}
.sheet-grip{width:44px;height:5px;border-radius:3px;background:var(--line);margin:0 auto .7rem}
.sheet-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.7rem}.sheet-head h2{font-size:1.1rem}
.sheet-count{background:var(--primary);font-size:1rem;padding:.25rem .7rem;border-radius:20px}
.sheet-scan{display:flex;gap:.5rem}.sheet-scan input{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:1.05rem}
.sheet-scan .sheet-cam{font-size:1.2rem;min-width:52px}
.sheet .cam{max-height:34vh}
.sheet-list-wrap{overflow-y:auto;flex:1;min-height:110px;margin:.5rem 0}.sheet-filter{margin-bottom:.5rem}
.sheet-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.5rem}
.sn{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:.1rem;padding:.6rem .8rem;min-height:52px;border:1.5px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink-strong);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:600;text-align:left;box-shadow:none}
.sn small{font-family:var(--sans);font-weight:400;color:var(--muted)}
.sn:hover{border-color:var(--info);background:var(--card)}
.sn.on{border-color:var(--success);background:rgba(39,194,76,.12)}.sn.on::after{content:"✓";position:absolute;right:.6rem;top:50%;transform:translateY(-50%);color:var(--success-text);font-family:var(--sans);font-size:1.1rem}
.sheet-foot{padding-top:.4rem}.sheet-foot .btn{min-height:50px;font-size:1.05rem}
body.sheet-open{overflow:hidden}
@media (min-width:861px){.sheet-wrap{align-items:center}.sheet{border-radius:6px;max-height:82vh;padding-bottom:1rem}.sheet-grip{display:none}}

/* scanner universel */
.scanner-cam{display:flex;flex-direction:column;gap:.6rem}
.scanner-go{display:flex;align-items:center;justify-content:center;gap:.6rem;min-height:64px;font-size:1.1rem;width:100%;max-width:420px}
.scanner-go .ic{width:26px;height:26px}
.sc-card.bad{border-left:4px solid var(--danger)}
.sc-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;flex-wrap:wrap}.sc-head h2{margin:.1rem 0 .4rem}
.sc-price{font-size:1.6rem;font-weight:300;color:var(--ink-strong);text-align:right;font-variant-numeric:tabular-nums}.sc-price small{display:block;font-size:.8rem;color:var(--muted)}
.sc-unit{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.8rem;margin:.9rem 0;padding:.8rem;background:var(--card-head);border-radius:var(--radius)}
.sc-unit small{display:block}.sc-unit b{font-size:1.05rem;color:var(--ink-strong)}
.sc-actions .btn{flex:0 1 auto}
.timeline{list-style:none;margin:0;padding:0 0 0 1.1rem;border-left:2px solid var(--line)}
.timeline li{position:relative;padding:0 0 .9rem .6rem}.timeline li::before{content:"";position:absolute;left:-1.55rem;top:.35rem;width:12px;height:12px;border-radius:50%;background:var(--info);border:2px solid var(--card)}
.timeline li.out::before{background:var(--warning)}
.sc-recent{list-style:none;margin:0;padding:0}.sc-recent li{padding:.4rem 0;border-bottom:1px solid var(--line-soft)}

/* ---------- téléphone : lignes en cartes, scan en grand ---------- */
@media (max-width:860px){
  table.lines thead{display:none}
  table.lines,table.lines tbody{display:block;background:none}
  .tablewrap:has(table.lines){border:0;background:none}
  table.lines tr{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:.55rem .75rem;padding:.85rem .85rem .9rem;margin-bottom:.75rem;border:1px solid var(--line);border-radius:12px;background:var(--card)}
  table.lines td{display:block;border:0;padding:0;min-width:0}
  table.lines td[data-label]::before{content:attr(data-label);display:block;font-size:.78rem;font-weight:600;color:var(--muted);margin-bottom:.15rem}
  table.lines td.n{text-align:left}
  table.lines td.prod,table.lines td.c-serials,table.lines td.c-serial_raw,table.lines td.c-justification{grid-column:1 / -1}
  table.lines td.prod{padding-right:3rem}table.lines .prod{min-width:0}
  table.lines td.c-del{position:absolute;top:.6rem;right:.6rem}
  table.lines td input,table.lines td select{min-width:0}
  tbody tr:hover td{background:none}
  tr[data-tracking=quantity] .c-lot_number,tr[data-tracking=quantity] .c-expiration_date,tr[data-tracking=quantity] .c-serials,tr[data-tracking=quantity] .c-serial_raw,
  tr[data-tracking=lot] .c-serials,tr[data-tracking=lot] .c-serial_raw,
  tr[data-tracking=serial] .c-lot_number,tr[data-tracking=serial] .c-expiration_date{display:none!important}
  .sn-btn{width:100%;justify-content:center;min-height:46px;font-size:.95rem}
  .scanbar{padding:.75rem;border-radius:12px}
  .scanbar-row{flex-direction:column;align-items:stretch}
  .scan-cam{justify-content:center;min-height:52px;font-size:1rem;background:var(--info);border-color:var(--info);color:#fff}
  .scanner-go{max-width:none}
  .sc-price{text-align:left}
  .fab.on{box-shadow:0 0 0 3px var(--info),0 4px 10px rgba(0,0,0,.2)}
}
.b-in-stock{background:var(--success)}.b-sold{background:var(--info)}.b-in-transit,.b-reserved{background:var(--warning);color:#4b3e00}.b-quarantine,.b-written-off,.b-scrapped{background:var(--danger)}
.linkish{text-align:left}.sc-price .cur{font-size:1rem;color:var(--muted)}
.sheet-list>p{grid-column:1 / -1;margin:.3rem 0}
/* sélecteur de thème */
.theme-pick{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin:0 0 .6rem}
.user-pop .theme-pick{padding:.45rem 1rem;margin:0;border-top:1px solid var(--line-soft);margin-top:.3rem}
.tp-label{font-size:.9rem;color:var(--ink-strong);font-weight:600}
.tp-seg{display:inline-flex;border:1px solid var(--line);border-radius:20px;overflow:hidden}
.tp-b{border:0;border-radius:0;box-shadow:none;background:var(--card);color:var(--ink);padding:.3rem .75rem;font-size:.85rem;min-height:0}
.tp-b+.tp-b{border-left:1px solid var(--line)}
.tp-b.on{background:var(--primary);color:var(--primary-ink);font-weight:600}
.user-pop form.theme-pick{border-top:1px solid var(--line-soft)}
/* caméra gérée par la bibliothèque de lecture (html5-qrcode) : elle insère sa propre vidéo dans .cam-box */
.cam-wrap{width:100%;max-width:560px;margin:.4rem 0;border-radius:var(--radius);overflow:hidden;background:#000;position:relative}
.cam-box{position:absolute!important;left:0;top:0}.pos>div{min-width:0}
.cam-box video{width:100%!important;height:auto!important;display:block}
.sheet .cam-wrap{max-width:none;max-height:36vh}
/* application installable */
.pwa-banner{display:flex;justify-content:space-between;align-items:center;gap:.8rem;flex-wrap:wrap;border-left:4px solid var(--info)}
.pwa-banner[hidden],[data-pwa-install][hidden]{display:none!important}
.user-pop .um-install{display:block;width:100%;text-align:left;padding:.5rem 1rem;border:0;background:none;box-shadow:none;border-radius:0;color:var(--ink-strong);font-size:.93rem}.user-pop .um-install:hover{background:var(--card-head)}
/* plein écran installé : la barre du haut tient compte de l'encoche */
html.standalone .top{padding-top:env(safe-area-inset-top);height:calc(56px + env(safe-area-inset-top))}

/* ===== crédit client / tranches (1.10) ===== */
.g3{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.credit-box{border:1px dashed var(--line);border-radius:6px;padding:.5rem .7rem;margin:.6rem 0}
.credit-box .grid{gap:.5rem}
.credit-plan{margin:.4rem 0 0;padding:0;list-style:none;max-height:14rem;overflow:auto;counter-reset:cp}
.credit-plan li{display:flex;justify-content:space-between;gap:.5rem;padding:.25rem 0;border-bottom:1px solid var(--line-soft);font-variant-numeric:tabular-nums;counter-increment:cp}
.credit-plan li span::before{content:counter(cp) ". ";color:var(--muted)}
.credit-plan li.muted span::before,.credit-plan li.muted::before{content:none}
.inst-paid{color:var(--ok)}.inst-overdue,.inst-due{color:var(--danger-t);font-weight:600}.inst-partial{color:var(--warn)}
.grid>.kpi.kpi-bad,.kpi.kpi-bad{border-left-color:var(--danger)}.kpi-bad .v{color:var(--danger-t)}a.kpi{display:block;text-decoration:none;color:inherit}
.serial-warn{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
@media (max-width:860px){
  table.cards-sm thead{display:none}
  table.cards-sm,table.cards-sm tbody{display:block;background:none}
  .tablewrap:has(table.cards-sm){border:0;background:none;overflow:visible}
  table.cards-sm tr{display:grid;grid-template-columns:1fr 1fr;gap:.45rem .75rem;padding:.8rem .85rem;margin-bottom:.7rem;border:1px solid var(--line);border-radius:12px;background:var(--card)}
  table.cards-sm td{display:block;border:0;padding:0;min-width:0;text-align:left}
  table.cards-sm td[data-label]::before{content:attr(data-label);display:block;font-size:.78rem;font-weight:600;color:var(--muted);margin-bottom:.1rem}
  table.cards-sm td:first-child{grid-column:1 / -1}
  table.cards-sm td:empty{display:none}
  table.schedule{font-size:.9rem}
}
.kpi small.muted{display:block;margin-top:.2rem}
@media (max-width:860px){table.schedule th,table.schedule td{padding:.35rem .4rem}}
.grid>*{min-width:0}

/* ===== détail / gros, prix négociés (1.11) ===== */
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg .btn{border:0;border-radius:0;box-shadow:none;min-width:5.5rem}
.seg .btn+.btn{border-left:1px solid var(--line)}
.seg .btn[aria-pressed="true"]{background:var(--primary);color:var(--primary-ink);font-weight:600}
.seg .btn[disabled]{opacity:.5}
.tag-gros{display:inline-block;font-size:.72rem;font-weight:600;padding:.05rem .35rem;border-radius:4px;background:var(--card-head);border:1px solid var(--line);color:var(--ink-strong);vertical-align:middle}
fieldset.fs{border:1px solid var(--line);border-radius:8px;padding:.6rem .8rem;margin:.8rem 0}
fieldset.fs legend{font-weight:600;padding:0 .3rem}
@media (max-width:860px){#pos-items .in-price{width:6.2rem;min-width:6.2rem;padding-left:.4rem;padding-right:.4rem}#pos-items .in-qty{width:3.8rem;min-width:3.8rem;padding-left:.4rem;padding-right:.4rem}}
.sys-form{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.6rem}
.sys-form label{font-weight:600}.sys-form input{max-width:16rem}
.sys-update code{font-size:.9em}
/* produits « ensemble » (kit) */
.tag-kit{display:inline-block;font-size:.72rem;font-weight:600;padding:.05rem .35rem;border-radius:4px;background:var(--primary);color:var(--primary-ink);vertical-align:middle}
.kit-parts{display:block;margin-top:.15rem;font-size:.82rem;color:var(--muted);line-height:1.35}
.kit-parts b{font-weight:600;color:var(--ink)}
.newcust{border:1px solid var(--line);border-radius:var(--radius);padding:.8rem;margin:.6rem 0;background:var(--card-head)}.newcust h3{margin-bottom:.6rem}#pos-nc-open{margin-bottom:.6rem}
.suggest li.create{font-weight:700;color:var(--link);border-top:1px solid var(--line-soft)}

/* ---------- application installée : bords d'écran (encoche, barre d'état, barre d'accueil) — 1.14.0 ---------- */
/* viewport-fit=cover : l'application occupe tout l'écran ; on décale ce qui touche les bords des zones de sécurité */
@media (max-width:860px){
  .top{padding-left:max(.9rem, env(safe-area-inset-left));padding-right:max(.9rem, env(safe-area-inset-right))}
  .content{padding-left:max(.9rem, env(safe-area-inset-left));padding-right:max(.9rem, env(safe-area-inset-right))}
  .tabbar{padding-left:max(.3rem, env(safe-area-inset-left));padding-right:max(.3rem, env(safe-area-inset-right))}
  .side{padding-top:env(safe-area-inset-top);padding-left:env(safe-area-inset-left)}
}
.sheet-foot{padding-bottom:max(.8rem, env(safe-area-inset-bottom))}
body.auth{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}
/* iPhone / iPad : un champ en dessous de 16 px fait zoomer Safari à la saisie (gênant sur iPad, où le texte est à 15 px) */
@media (pointer:coarse){input[type=text],input[type=number],input[type=date],input[type=email],input[type=password],input[type=tel],input[type=search],select,textarea{font-size:max(16px,1em)}}

/* ---------- page « Installer l'application » ---------- */
.install .steps{padding-left:1.3rem;margin:.6rem 0}.install .steps li{margin:.45rem 0;line-height:1.45}
.install .ios-ic{display:inline-flex;vertical-align:middle;width:28px;height:28px;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:7px;color:#0a84ff;background:var(--card)}
.install .ios-ic .ic{width:18px;height:18px}
.install .inst-ok{font-size:1.1rem;font-weight:600}
.install h3{margin-top:.8rem}

/* ---------- caisse sur téléphone : chaque article en carte (nom, puis qté · prix · ✕, puis total) — 1.14.0 ---------- */
@media (max-width:600px){
  .pos .tablewrap{overflow-x:visible}
  .pos .tablewrap thead{display:none}
  #pos-items tr{display:grid;grid-template-columns:5rem minmax(0,1fr) auto;gap:.35rem .45rem;align-items:center;padding:.55rem .55rem;border-bottom:1px solid var(--line)}
  #pos-items tr:last-child{border-bottom:0}
  #pos-items td{border:0;padding:0;background:none}
  #pos-items td:first-child,#pos-items td[colspan]{grid-column:1 / -1;grid-row:1;font-weight:600;color:var(--ink-strong)}
  #pos-items td:nth-child(2){grid-column:1;grid-row:2}
  #pos-items td:nth-child(3){grid-column:2;grid-row:2}
  #pos-items td:nth-child(5){grid-column:3;grid-row:2}
  #pos-items td:nth-child(4){grid-column:1 / -1;grid-row:3;text-align:right;font-weight:700;font-size:1.1rem;white-space:nowrap}
  #pos-items td:nth-child(2),#pos-items td:nth-child(3){text-align:left}
  #pos-items td input,#pos-items td select,#pos-items .in-qty,#pos-items .in-price{width:100%;min-width:0}
  #pos-items [data-rm]{min-width:44px}
  .pos [data-scan-target] .actions{flex-wrap:nowrap;gap:.4rem}
  .pos [data-scan-target] .actions .btn{flex:1 1 0;white-space:normal;font-size:.9rem;padding:.3rem .4rem}
}

/* indicateurs de l'accueil sur téléphone : montant entier visible (taille adaptée, retour à la ligne avant la devise) */
@media (max-width:600px){.kpi .v{font-size:clamp(1rem,4.6vw,1.25rem);white-space:normal}}
.hint[hidden],.inst[hidden],[data-pwa-hide-installed][hidden],[data-pwa-howto][hidden]{display:none!important}
@media (max-width:860px){.top .top-btn{background:none;border:0;box-shadow:none;padding:0;display:inline-flex;align-items:center;justify-content:center}.top .top-btn .ic{width:22px;height:22px}}

/* ---------- cartons (colis d'articles à numéro de série) — 1.15.0 ---------- */
.badge.ctn-full{background:#dff3e4;color:#1a6b31}.badge.ctn-opened{background:#fff3cd;color:#7a5b00}.badge.ctn-empty{background:#eceff1;color:#5b6770}
:root[data-theme=dark] .badge.ctn-full{background:#1f3a29;color:#8fe0a6}:root[data-theme=dark] .badge.ctn-opened{background:#3d3418;color:#f0cf55}:root[data-theme=dark] .badge.ctn-empty{background:#333847;color:#aab3c0}
.ctn-chips .btn{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.ctn-chips .btn[disabled]{opacity:.4}
.ctn-count{font-size:1.1rem}
.ctn-labels{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(95mm,100%),1fr));gap:4mm}
.ctn-label{border:1px dashed #999;padding:3mm 4mm;break-inside:avoid;font-size:9pt;color:#000;background:#fff}
.ctn-label svg.barcode{height:16mm}.ctn-l-head{font-size:10pt;margin-bottom:1mm}.ctn-l-code{text-align:center;font:700 13pt ui-monospace,Menlo,Consolas,monospace;letter-spacing:.04em}
.ctn-l-qty{text-align:center;font-weight:700;margin:1mm 0}.ctn-l-sn{display:flex;flex-wrap:wrap;gap:1mm 3mm;font:7.5pt ui-monospace,Menlo,Consolas,monospace}
/* réception de cartons scellés */
.rc-chips{flex-wrap:wrap;gap:.35rem;margin:.3rem 0}
.rc-chips .btn{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.rc-sum{margin:.4rem 0 .6rem;font-size:1.05rem}
.rc-line{margin-top:.3rem}
/* 1.16.1 : déconnexion visible sur téléphone (barre du haut + bas du menu) */
.top-out{margin:0;display:none}
.side-out{margin:auto 0 0;border-top:1px solid rgba(255,255,255,.08);padding-bottom:env(safe-area-inset-bottom)}
.side-out .nav-head{width:100%;background:none;border:0;border-left:3px solid transparent;box-shadow:none;border-radius:0;text-align:left;font:inherit;font-weight:600}
@media (max-width:860px){.side-out{margin-bottom:.5rem}}
/* 1.17.0 : notifications push (Mon compte) */
.push-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.2rem 1rem;margin:.4rem 0 .6rem}
.push-types label{display:flex;gap:.5rem;align-items:center;font-weight:400}
/* 1.17.0 : connexion « en tant que » (assistance plateforme) */
.imp-bar{display:flex;flex-wrap:wrap;gap:.5rem 1rem;align-items:center;justify-content:space-between;padding:.6rem 1rem;background:#b42318;color:#fff;font-size:.93rem;position:sticky;top:0;z-index:16}
.imp-bar b{color:#fff}.imp-bar form{margin:0}.imp-bar .btn{background:#fff;color:#b42318;border-color:#fff}
@media (max-width:860px){.imp-bar{top:56px}}
.imp-form>summary{list-style:none;display:inline-flex}.imp-form>summary::-webkit-details-marker{display:none}
.imp-form form{margin-top:.5rem;min-width:240px}

/* ---------- emplacement de travail (barre du haut) ---------- */
.top-loc{display:inline-flex;align-items:center;gap:.3rem;max-width:16rem;color:var(--ink);text-decoration:none;font-weight:600;font-size:.88rem;padding:.3rem .65rem;border:1px solid var(--line);border-radius:20px;margin-right:.35rem;white-space:nowrap}
.top-loc span{overflow:hidden;text-overflow:ellipsis}.top-loc .ic{width:16px;height:16px;flex:none;color:var(--primary)}
.top-loc.locked{border-color:var(--primary)}.top-loc:hover{border-color:var(--info);color:var(--info)}
@media (max-width:860px){.top-loc{max-width:34vw;color:#fff;border-color:rgba(255,255,255,.35);font-size:.8rem;padding:.25rem .5rem;margin-right:.1rem}.top-loc .ic{color:#fff}.top-loc.locked{border-color:rgba(255,255,255,.7)}}
.loc-pick{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.8rem}
.loc-card{display:flex;justify-content:space-between;align-items:center;gap:.8rem;margin:0}.loc-card.cur{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary) inset}

/* ---------- ventes payées / prêts ---------- */
.badge.b-cash{background:var(--success);color:#fff}
.badge.b-loan{background:#b45309;color:#fff}
.badge.b-loan-done{background:transparent;color:var(--ink);border:1px solid #b45309}
.badge.b-delivered{background:var(--success);color:#fff}
.hero-split{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;margin-top:.45rem;font-size:.9rem}
.hero-split a{color:var(--dark-ink);text-decoration:none;border-bottom:1px dotted rgba(255,255,255,.4)}.hero-split a b{color:#fff}
.kpi.kpi-warn{border-left-color:#b45309}
.seg-tabs{display:flex;flex-wrap:wrap;gap:.35rem;margin:.2rem 0 .8rem}
.seg-tabs a{padding:.4rem .85rem;border:1px solid var(--line);border-radius:20px;text-decoration:none;color:var(--ink);font-weight:600;font-size:.9rem;background:var(--card)}
.seg-tabs a.on{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.sum-line{display:flex;flex-wrap:wrap;gap:.3rem 1.4rem;margin:-.2rem 0 .8rem;color:var(--muted)}.sum-line b{color:var(--ink-strong)}
.delivery-box{border-left:4px solid var(--success)}.delivery-box.warn{border-left-color:#b45309}
#pos-pay.loan{background:#b45309;border-color:#b45309}
.seg-kind{margin-bottom:.6rem;display:flex}.seg-kind .btn{flex:1}
.seg-kind .btn[aria-pressed=true][data-kind=credit]{background:#b45309;border-color:#b45309;color:#fff}
.pos-dlv{margin-top:.4rem}
.loc-strip{display:none;align-items:center;gap:.4rem;padding:.45rem 16px;background:var(--card);border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none;font-size:.9rem}
.loc-strip .ic{width:16px;height:16px;color:var(--primary);flex:none}.loc-strip span:first-of-type{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.loc-strip .loc-change{color:var(--primary);font-weight:600}.loc-strip.locked{border-left:4px solid var(--primary)}
.shops-box{border:1px solid var(--line);border-radius:6px;padding:.5rem .8rem;margin:.6rem 0}.shops-box legend{font-weight:600;padding:0 .3rem}
