/* ALFORMA — Spectral Pharma. Socle visuel : officine claire, vert du logo, étiquettes de péremption. */
:root{
  --vert:#026321; --vert-fonce:#013D15; --vert-clair:#E3F1E6; --vert-vif:#0C8A3A;
  --fond:#F2F5F1; --surface:#FFFFFF; --surface-2:#F7FAF6; --ligne:#DCE5DD;
  --encre:#13221A; --encre-2:#4E5E54; --encre-3:#7C8B81;
  --ambre:#B26A00; --ambre-clair:#FFF1DA; --rouge:#B3261E; --rouge-clair:#FCE4E2;
  --bleu:#1F5F8B; --bleu-clair:#E2EEF7;
  --ombre:0 1px 2px rgba(2,40,15,.06),0 10px 28px -14px rgba(2,40,15,.22);
  --ombre-forte:0 2px 6px rgba(2,40,15,.08),0 24px 48px -20px rgba(2,40,15,.35);
  --r-panneau:16px; --r-ctrl:10px; --r-puce:999px;
  --police:"Manrope",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --barre:252px; color-scheme:light;
}
[data-theme="dark"]{
  --vert:#3FBF6E; --vert-fonce:#0B2414; --vert-clair:#173322; --vert-vif:#52D282;
  --fond:#0D1511; --surface:#15201A; --surface-2:#1B2821; --ligne:#2A3A31;
  --encre:#E3ECE5; --encre-2:#AAB8AE; --encre-3:#7E8D83;
  --ambre:#F0A63A; --ambre-clair:#3A2A10; --rouge:#F2786F; --rouge-clair:#3E1A18;
  --bleu:#7DB7E0; --bleu-clair:#15293A;
  --ombre:0 1px 2px rgba(0,0,0,.4),0 10px 28px -14px rgba(0,0,0,.6);
  --ombre-forte:0 24px 48px -20px rgba(0,0,0,.8); color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:var(--police);font-size:15px;line-height:1.5;color:var(--encre);background:var(--fond);
  font-feature-settings:"tnum" 1;-webkit-font-smoothing:antialiased}
a{color:var(--vert);text-decoration:none} a:hover{text-decoration:underline}
img{max-width:100%;display:block}
h1,h2,h3{line-height:1.2;margin:0 0 .5rem;letter-spacing:-.01em}
h1{font-size:1.6rem;font-weight:800} h2{font-size:1.15rem;font-weight:700} h3{font-size:1rem;font-weight:700}
p{margin:0 0 .75rem}
.ic{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ic-sm{width:16px;height:16px}
:focus-visible{outline:3px solid color-mix(in srgb,var(--vert) 55%,transparent);outline-offset:2px;border-radius:6px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.muet{color:var(--encre-2)} .petit{font-size:.85rem} .gras{font-weight:700} .droite{text-align:right}
.nombre{font-variant-numeric:tabular-nums;white-space:nowrap}
.ligne-flex{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap}
.espace{flex:1}
.cache,[hidden]{display:none!important}

/* ---------- Structure gestion ---------- */
.app{display:grid;grid-template-columns:var(--barre) 1fr;min-height:100vh}
.barre{background:var(--vert-fonce);color:#E8F3EA;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;
  padding:18px 12px;overflow-y:auto}
[data-theme="dark"] .barre{background:#08170E;border-right:1px solid var(--ligne)}
.marque{display:flex;align-items:center;gap:.7rem;padding:4px 8px 18px}
.marque img{width:44px;height:44px;border-radius:50%;background:#fff;padding:3px}
.marque b{display:block;font-size:1.05rem;letter-spacing:.02em} .marque small{opacity:.7;font-size:.75rem}
.nav{display:flex;flex-direction:column;gap:2px}
.nav .titre{font-size:.72rem;opacity:.55;margin:14px 10px 4px}
.nav a{display:flex;align-items:center;gap:.75rem;color:inherit;padding:.6rem .75rem;border-radius:var(--r-ctrl);font-weight:600;
  font-size:.92rem;opacity:.86;text-decoration:none;position:relative}
.nav a:hover{background:rgba(255,255,255,.07);opacity:1}
.nav a.actif{background:#E3F1E6;color:var(--vert-fonce);opacity:1}
[data-theme="dark"] .nav a.actif{background:var(--vert-clair);color:var(--vert-vif)}
.nav .pastille{margin-left:auto;background:#F0A63A;color:#2B1A00;font-size:.72rem;border-radius:var(--r-puce);padding:0 .45rem;font-weight:800}
.carte-user{margin-top:auto;display:flex;align-items:center;gap:.6rem;padding:10px;border-radius:var(--r-ctrl);background:rgba(255,255,255,.06)}
.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#E3F1E6;color:var(--vert-fonce);font-weight:800;font-size:.85rem;flex:none}
.carte-user .nom{font-weight:700;font-size:.88rem;line-height:1.2} .carte-user .role{font-size:.75rem;opacity:.7}
.carte-user button{margin-left:auto;background:none;border:0;color:inherit;opacity:.8;cursor:pointer;padding:6px;border-radius:8px}
.carte-user button:hover{background:rgba(255,255,255,.1)}
.principal{min-width:0;display:flex;flex-direction:column}
.entete{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:.75rem;padding:12px 28px;
  background:color-mix(in srgb,var(--fond) 82%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--ligne)}
.entete h1{font-size:1.2rem;margin:0}
.entete .burger{display:none}
.etat-reseau{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:700;padding:.3rem .7rem;border-radius:var(--r-puce);
  background:var(--vert-clair);color:var(--vert)}
.etat-reseau.hors{background:var(--ambre-clair);color:var(--ambre)}
.contenu{padding:24px 28px 96px;max-width:1400px;width:100%}
.bouton-icone{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:12px;border:1px solid var(--ligne);
  background:var(--surface);color:var(--encre);cursor:pointer;position:relative}
.bouton-icone:hover{border-color:var(--vert)}
.bouton-icone .point{position:absolute;top:6px;right:6px;width:9px;height:9px;border-radius:50%;background:var(--rouge);border:2px solid var(--surface)}
.voile{position:fixed;inset:0;background:rgba(5,20,10,.45);z-index:39;opacity:0;pointer-events:none;transition:opacity .2s}
.voile.ouvert{opacity:1;pointer-events:auto}
.nav-bas{display:none}

/* ---------- Composants ---------- */
.panneau{background:var(--surface);border-radius:var(--r-panneau);box-shadow:var(--ombre);padding:20px;border:1px solid color-mix(in srgb,var(--ligne) 60%,transparent)}
.panneau+.panneau{margin-top:16px}
.panneau-titre{display:flex;align-items:center;gap:.6rem;margin-bottom:14px}
.panneau-titre h2{margin:0}
.grille{display:grid;gap:16px}
.g-2{grid-template-columns:repeat(2,minmax(0,1fr))} .g-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g-4{grid-template-columns:repeat(4,minmax(0,1fr))} .g-12{grid-template-columns:2fr 1fr}
.kpi{display:flex;flex-direction:column;gap:6px;padding:18px}
.kpi .tete{display:flex;align-items:center;gap:.6rem;color:var(--encre-2);font-weight:600;font-size:.88rem}
.kpi .pic{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:var(--vert-clair);color:var(--vert)}
.kpi .pic.ambre{background:var(--ambre-clair);color:var(--ambre)} .kpi .pic.rouge{background:var(--rouge-clair);color:var(--rouge)}
.kpi .pic.bleu{background:var(--bleu-clair);color:var(--bleu)}
.kpi .valeur{font-size:1.65rem;font-weight:800;letter-spacing:-.02em}
.kpi .valeur small{font-size:.8rem;font-weight:700;color:var(--encre-3);margin-left:.2rem}
.variation{font-size:.8rem;font-weight:700;display:inline-flex;align-items:center;gap:.2rem}
.variation.hausse{color:var(--vert)} .variation.baisse{color:var(--rouge)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.62rem 1.05rem;border-radius:var(--r-ctrl);
  font:inherit;font-weight:700;font-size:.92rem;border:1px solid transparent;cursor:pointer;text-decoration:none!important;
  background:var(--vert);color:#fff;transition:transform .08s,box-shadow .15s,background .15s;white-space:nowrap}
[data-theme="dark"] .btn{color:#06210F}
.btn:hover{box-shadow:0 6px 16px -6px color-mix(in srgb,var(--vert) 70%,transparent)}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.5;cursor:not-allowed;box-shadow:none}
.btn.second{background:var(--surface);color:var(--encre);border-color:var(--ligne)}
.btn.second:hover{border-color:var(--vert);box-shadow:none}
.btn.danger{background:var(--rouge);color:#fff} .btn.ambre{background:var(--ambre);color:#fff}
.btn.fantome{background:transparent;color:var(--vert);border-color:transparent}
.btn.grand{padding:.95rem 1.4rem;font-size:1.05rem;border-radius:14px}
.btn.plein{width:100%}
.btn.petit{padding:.35rem .65rem;font-size:.82rem}
.champ{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.champ label,.etiquette-champ{font-weight:700;font-size:.85rem;color:var(--encre-2)}
.champ .aide{font-size:.78rem;color:var(--encre-3)} .champ .erreur,.erreurs{font-size:.8rem;color:var(--rouge);font-weight:600}
input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=tel],input[type=date],
input[type=url],input:not([type]),select,textarea{font:inherit;color:var(--encre);background:var(--surface-2);border:1px solid var(--ligne);
  border-radius:var(--r-ctrl);padding:.65rem .8rem;width:100%;min-width:0}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--vert);box-shadow:0 0 0 3px color-mix(in srgb,var(--vert) 18%,transparent);background:var(--surface)}
input[type=color]{width:64px;height:42px;border:1px solid var(--ligne);border-radius:var(--r-ctrl);background:var(--surface);padding:3px}
.case{display:flex;gap:.6rem;align-items:flex-start;font-weight:600;cursor:pointer;margin-bottom:10px}
.case input{width:20px;height:20px;accent-color:var(--vert);margin-top:2px;flex:none}
.form-grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}
.form-grille .large{grid-column:1/-1}
fieldset{border:0;padding:0;margin:0 0 6px} legend{font-weight:800;font-size:1rem;margin-bottom:10px;padding:0}
.puce{display:inline-flex;align-items:center;gap:.3rem;padding:.18rem .6rem;border-radius:var(--r-puce);font-size:.76rem;font-weight:800;
  background:var(--surface-2);color:var(--encre-2);border:1px solid var(--ligne);white-space:nowrap}
.puce.vert{background:var(--vert-clair);color:var(--vert);border-color:transparent}
.puce.ambre{background:var(--ambre-clair);color:var(--ambre);border-color:transparent}
.puce.rouge{background:var(--rouge-clair);color:var(--rouge);border-color:transparent}
.puce.bleu{background:var(--bleu-clair);color:var(--bleu);border-color:transparent}
/* Signature : étiquette de péremption façon vignette de boîte */
.etiquette{display:inline-flex;align-items:stretch;border-radius:6px;overflow:hidden;font-size:.76rem;font-weight:800;
  border:1px solid var(--ligne);background:var(--surface);white-space:nowrap}
.etiquette::before{content:"EXP";padding:.12rem .4rem;background:var(--encre-3);color:#fff;font-size:.66rem;letter-spacing:.06em;display:flex;align-items:center}
.etiquette span{padding:.12rem .5rem}
.etiquette.ok::before{background:var(--vert)} .etiquette.moyen::before{background:#8A8F2A}
.etiquette.proche::before{background:var(--ambre)} .etiquette.proche span{color:var(--ambre)}
.etiquette.perime::before{background:var(--rouge)} .etiquette.perime span{color:var(--rouge);text-decoration:line-through}
.jauge{height:6px;border-radius:99px;background:var(--surface-2);border:1px solid var(--ligne);overflow:hidden;min-width:60px}
.jauge i{display:block;height:100%;background:var(--vert);border-radius:99px}
.jauge.bas i{background:var(--ambre)} .jauge.rupture i,.jauge.negatif i{background:var(--rouge)}
.table-zone{overflow-x:auto;margin:0 -20px;padding:0 20px}
table.tableau{width:100%;border-collapse:collapse;font-size:.92rem}
.tableau th{text-align:left;font-size:.76rem;color:var(--encre-3);font-weight:700;padding:.55rem .6rem;border-bottom:1px solid var(--ligne);white-space:nowrap}
.tableau td{padding:.7rem .6rem;border-bottom:1px solid color-mix(in srgb,var(--ligne) 65%,transparent);vertical-align:middle}
.tableau tr:last-child td{border-bottom:0}
.tableau tbody tr:hover{background:var(--surface-2)}
.tableau .titre-ligne{font-weight:700;color:var(--encre)} .tableau .sous{font-size:.8rem;color:var(--encre-3)}
.tableau tr.annulee td{opacity:.55;text-decoration:line-through}
.vide{text-align:center;padding:36px 16px;color:var(--encre-2)}
.vide .ic{width:40px;height:40px;color:var(--encre-3);margin:0 auto 10px}
.filtres{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.filtres input[type=search]{max-width:340px}
.filtres select{width:auto}
.onglets{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}
.onglets a{padding:.45rem .9rem;border-radius:var(--r-puce);background:var(--surface);border:1px solid var(--ligne);color:var(--encre-2);
  font-weight:700;font-size:.85rem;text-decoration:none}
.onglets a.actif{background:var(--vert);border-color:var(--vert);color:#fff}
[data-theme="dark"] .onglets a.actif{color:#06210F}
.periode{display:inline-flex;align-items:center;gap:4px;background:var(--surface);border:1px solid var(--ligne);border-radius:var(--r-puce);padding:3px}
.periode a{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;color:var(--encre)}
.periode a:hover{background:var(--surface-2)} .periode b{padding:0 .5rem;font-size:.9rem;min-width:130px;text-align:center}
.pagination{display:flex;gap:6px;justify-content:center;align-items:center;margin-top:16px;font-size:.88rem}
.pagination a,.pagination span{padding:.4rem .75rem;border-radius:var(--r-ctrl);border:1px solid var(--ligne);background:var(--surface)}
.messages{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.message{padding:.75rem 1rem;border-radius:var(--r-ctrl);font-weight:600;display:flex;gap:.6rem;align-items:center;
  background:var(--vert-clair);color:var(--vert)}
.message.error{background:var(--rouge-clair);color:var(--rouge)} .message.warning{background:var(--ambre-clair);color:var(--ambre)}
.liste-simple{list-style:none;margin:0;padding:0}
.liste-simple li{display:flex;align-items:center;gap:.75rem;padding:.65rem 0;border-bottom:1px solid color-mix(in srgb,var(--ligne) 65%,transparent)}
.liste-simple li:last-child{border-bottom:0}
.liste-simple .info{min-width:0;flex:1} .liste-simple .info b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cle-affichee{font-family:ui-monospace,Consolas,monospace;font-size:1rem;padding:.8rem 1rem;background:var(--surface-2);border:2px dashed var(--vert);
  border-radius:var(--r-ctrl);word-break:break-all;user-select:all}
.bandeau-licence{display:flex;align-items:center;gap:.6rem;padding:.6rem 1rem;border-radius:var(--r-ctrl);background:var(--ambre-clair);
  color:var(--ambre);font-weight:700;font-size:.88rem;margin-bottom:16px}

/* Graphique en barres (rendu serveur, pas de bibliothèque externe) */
.graphe{display:flex;align-items:flex-end;gap:3px;height:190px;padding-top:10px;border-bottom:1px solid var(--ligne)}
.graphe .col{flex:1;display:flex;align-items:flex-end;justify-content:center;height:100%;position:relative;min-width:0}
.graphe .col .ca{width:100%;max-width:22px;background:color-mix(in srgb,var(--vert) 28%,transparent);border-radius:5px 5px 0 0;position:relative}
.graphe .col .ben{position:absolute;bottom:0;left:0;right:0;background:var(--vert);border-radius:5px 5px 0 0}
.graphe .col.auj .ca{outline:2px solid var(--vert);outline-offset:1px}
.graphe .col .bulle{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:var(--encre);color:var(--surface);
  font-size:.75rem;padding:.35rem .55rem;border-radius:8px;white-space:nowrap;z-index:2;font-weight:600}
.graphe .col:hover .bulle{display:block}
.graphe-axe{display:flex;justify-content:space-between;font-size:.72rem;color:var(--encre-3);margin-top:6px}
.legende{display:flex;gap:1rem;font-size:.8rem;color:var(--encre-2)}
.legende i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:.35rem;vertical-align:-1px}

/* Fenêtres modales sur fond flouté */
dialog.modale{border:0;padding:0;border-radius:20px;background:var(--surface);color:var(--encre);box-shadow:var(--ombre-forte);
  width:min(520px,calc(100vw - 24px));max-height:calc(100vh - 32px)}
dialog.modale[open]{display:flex;flex-direction:column;animation:apparaitre .18s ease-out}
dialog.modale::backdrop{background:rgba(4,20,10,.42);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.modale .tete{display:flex;align-items:center;gap:.6rem;padding:18px 20px 6px}
.modale .tete h2{margin:0;flex:1}
.modale .corps{padding:10px 20px;overflow-y:auto}
.modale .pied{display:flex;gap:10px;justify-content:flex-end;padding:12px 20px 18px;flex-wrap:wrap}
@keyframes apparaitre{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.toasts{position:fixed;bottom:22px;right:22px;display:flex;flex-direction:column;gap:8px;z-index:100;max-width:calc(100vw - 32px)}
.toast{background:var(--encre);color:var(--surface);padding:.75rem 1rem;border-radius:12px;box-shadow:var(--ombre-forte);font-weight:600;
  font-size:.9rem;display:flex;gap:.6rem;align-items:center;animation:apparaitre .2s ease-out}
.toast.erreur{background:var(--rouge);color:#fff} .toast.succes{background:var(--vert);color:#fff}
[data-theme="dark"] .toast.succes{color:#06210F}

/* ---------- Connexion immersive ---------- */
.ecran-connexion{min-height:100vh;display:grid;place-items:center;padding:24px;background-color:#026321;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='56'%3E%3Cpath d='M24 18h8v6h6v8h-6v6h-8v-6h-6v-8h6z' fill='%23ffffff' fill-opacity='.05'/%3E%3C/svg%3E"),
  radial-gradient(1200px 600px at 50% -10%,#0C8A3A 0%,transparent 60%);color:#fff}
.boite-connexion{width:min(380px,100%);text-align:center}
.sceau{width:132px;height:132px;margin:0 auto 18px;border-radius:50%;background:#fff;padding:8px;box-shadow:0 0 0 8px rgba(255,255,255,.12),0 20px 40px -12px rgba(0,0,0,.45)}
.boite-connexion h1{font-size:1.5rem;margin-bottom:.2rem}
.boite-connexion .sous{opacity:.8;margin-bottom:26px;font-size:.95rem}
.boite-connexion form{text-align:left}
.boite-connexion input{background:rgba(255,255,255,.96);border:0;padding:.9rem 1rem;border-radius:14px;color:#13221A;font-size:1rem}
.boite-connexion input:focus{box-shadow:0 0 0 4px rgba(255,255,255,.35)}
.boite-connexion label{color:rgba(255,255,255,.85)}
.boite-connexion .btn{background:#0B1F12;color:#fff;margin-top:6px}
.boite-connexion .btn:hover{box-shadow:0 10px 24px -10px rgba(0,0,0,.6)}
.boite-connexion .message{background:rgba(255,255,255,.95)}
.boite-connexion .signature{margin-top:28px;font-size:.78rem;opacity:.65;text-align:center}

/* ---------- Caisse (écran vendeur, hors ligne) ---------- */
.caisse{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:16px;align-items:start}
.caisse .recherche{position:relative}
.caisse .recherche .ic{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--encre-3)}
.caisse .recherche input{padding:.95rem 1rem .95rem 44px;font-size:1.05rem;border-radius:14px;background:var(--surface)}
.resultats{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin-top:12px}
.tuile{background:var(--surface);border:1px solid var(--ligne);border-radius:14px;padding:12px;text-align:left;cursor:pointer;font:inherit;color:inherit;
  display:flex;flex-direction:column;gap:6px;min-height:112px;position:relative}
.tuile:hover{border-color:var(--vert);box-shadow:var(--ombre)}
.tuile .nom{font-weight:800;font-size:.92rem;line-height:1.25}
.tuile .dci{font-size:.76rem;color:var(--encre-3)}
.tuile .bas{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:6px}
.tuile .prix{font-weight:800;color:var(--vert)}
.tuile.epuise{opacity:.6} .tuile .rx{position:absolute;top:10px;right:10px}
.ticket{position:sticky;top:76px;display:flex;flex-direction:column;max-height:calc(100vh - 100px)}
.ticket .lignes{overflow-y:auto;flex:1;min-height:120px;margin:0 -20px;padding:0 20px}
.ligne-panier{display:grid;grid-template-columns:1fr auto;gap:4px 10px;padding:10px 0;border-bottom:1px dashed var(--ligne)}
.ligne-panier .lib{font-weight:700;font-size:.9rem}
.ligne-panier .qte{display:flex;align-items:center;gap:4px}
.ligne-panier .qte button{width:30px;height:30px;border-radius:9px;border:1px solid var(--ligne);background:var(--surface-2);color:var(--encre);cursor:pointer;display:grid;place-items:center}
.ligne-panier .qte input{width:52px;text-align:center;padding:.3rem}
.ligne-panier .montant{font-weight:800;text-align:right}
.total-ticket{display:flex;align-items:baseline;justify-content:space-between;padding:14px 0 10px;border-top:2px solid var(--encre);margin-top:6px}
.total-ticket b{font-size:1.9rem;letter-spacing:-.02em}
.paiement{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px}
.paiement label{text-align:center;padding:.55rem .3rem;border:1px solid var(--ligne);border-radius:10px;cursor:pointer;font-weight:700;font-size:.82rem}
.paiement input{display:none} .paiement input:checked+span{color:var(--vert)}
.paiement label:has(input:checked){border-color:var(--vert);background:var(--vert-clair)}
.file-attente{font-size:.8rem;font-weight:700;color:var(--ambre)}
.ventes-jour{max-height:340px;overflow:auto}
.choix-caisse{display:grid;gap:10px}
.choix-caisse button{justify-content:flex-start}

/* ---------- Impression ticket 80 mm (secours navigateur) ---------- */
.ticket-80{width:72mm;font-family:ui-monospace,Consolas,monospace;font-size:11px;color:#000;background:#fff}
.ticket-80 .c{text-align:center} .ticket-80 hr{border:0;border-top:1px dashed #000}
.ticket-80 table{width:100%;border-collapse:collapse} .ticket-80 td{padding:1px 0;vertical-align:top}

/* ---------- Rapport imprimable ---------- */
.rapport-entete{display:flex;align-items:center;gap:16px;margin-bottom:16px}
.rapport-entete img{width:64px;height:64px}
@media print{
  @page{size:A4;margin:14mm}
  body{background:#fff;color:#000;font-size:12px}
  .barre,.entete,.nav-bas,.no-print,.toasts,.filtres,.pagination,.onglets{display:none!important}
  .app{display:block} .contenu{padding:0;max-width:none}
  .panneau{box-shadow:none;border:1px solid #ccc;break-inside:avoid}
}

/* ---------- Mobile ---------- */
@media (max-width:1100px){.g-4{grid-template-columns:repeat(2,minmax(0,1fr))}.g-12{grid-template-columns:1fr}.caisse{grid-template-columns:1fr}
  .ticket{position:static;max-height:none}}
@media (max-width:860px){
  .app{grid-template-columns:1fr}
  .barre{position:fixed;left:0;top:0;bottom:0;width:280px;z-index:40;transform:translateX(-100%);transition:transform .22s ease;height:100%}
  .barre.ouvert{transform:none;box-shadow:var(--ombre-forte)}
  .entete{padding:10px 14px} .entete .burger{display:inline-grid}
  .contenu{padding:16px 14px 104px}
  .g-2,.g-3{grid-template-columns:1fr} .form-grille{grid-template-columns:1fr}
  .nav-bas{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;bottom:0;left:0;right:0;z-index:30;background:var(--surface);
    border-top:1px solid var(--ligne);padding:6px 4px calc(6px + env(safe-area-inset-bottom))}
  .nav-bas a{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:.68rem;font-weight:700;color:var(--encre-3);padding:4px;text-decoration:none;position:relative}
  .nav-bas a.actif{color:var(--vert)}
  .nav-bas a.actif .ic{background:var(--vert-clair);border-radius:99px;width:52px;padding:2px 14px;height:26px}
  .nav-bas .pastille{position:absolute;top:0;right:22%;background:var(--rouge);color:#fff;font-size:.62rem;border-radius:99px;padding:0 .35rem}
  .toasts{bottom:84px;right:12px;left:12px}
  .tableau.empile thead{display:none}
  .tableau.empile tr{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:10px 0;border-bottom:1px solid var(--ligne)}
  .tableau.empile td{border:0;padding:2px 0} .tableau.empile td.masque-mobile{display:none}
  .tableau .masque-mobile{display:none}
  .resultats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kpi .valeur{font-size:1.35rem}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* Impression du ticket depuis le navigateur : seule la zone ticket sort, au format 80 mm */
#zone-ticket{display:none}
@media print{
  @page ticket{size:80mm auto;margin:3mm 4mm}
  body.impression-ticket>*:not(#zone-ticket){display:none!important}
  body.impression-ticket #zone-ticket{display:block;page:ticket}
}
.grille>.panneau+.panneau{margin-top:0}
.g-12{align-items:start}
