:root{
  /* Charte La Cafet' de Bibi (logo) */
  --vert-nuit:#013624; --vert-fonce:#024B36; --vert:#0B6B4A; --vert-clair:#E6F0EA;
  --sable:#FDAD00; --sable-clair:#FFF3D6; --rouge:#E0341F; --rouge-clair:#FCE8E4;
  --creme:#F5ECCF; --encre:#2B1A0E; --gris:#6B6253;
  --ligne:#E8DFC9; --blanc:#fff; --fond:#FBF7EC;
  --r:14px; --ombre:0 1px 2px rgba(43,26,14,.05),0 8px 24px rgba(43,26,14,.06);
  --titre:Fredoka,Nunito,system-ui,sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--fond);color:var(--encre);
  font-family:Nunito,system-ui,sans-serif;font-size:16px;line-height:1.55}
h1,h2,h3,.brand,th,.btn,.kpi-val{font-family:var(--titre)}
h1{font-size:1.65rem;margin:0 0 4px;font-weight:700;color:var(--vert-fonce)}
h2{font-size:1.15rem;margin:0 0 14px;font-weight:600}
a{color:var(--vert-fonce)}
.wrap{max-width:1240px;margin:0 auto;padding:0 18px}

/* Signature : le jaune d'œuf du logo, repris comme marqueur */
.yolk{width:12px;height:12px;border-radius:50%;background:var(--sable);
  box-shadow:0 0 0 4px #fff;display:inline-block;vertical-align:middle;margin-right:8px}
.yolk.big{width:26px;height:26px;box-shadow:0 0 0 8px #fff}

.topbar{background:var(--vert-fonce);color:#fff}
.topbar-in{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;flex-wrap:wrap}
.brand{color:#fff;text-decoration:none;font-weight:700;font-size:1.15rem}
.brand-sub{font-weight:500;opacity:.7;font-size:.85rem;margin-left:6px}
.who{display:flex;align-items:center;gap:10px;font-size:.85rem;color:#cfe6cd;flex-wrap:wrap}
.nav{background:var(--vert)}
.nav-in{display:flex;gap:2px;overflow-x:auto;padding:0 12px}
.nav a{color:#e6f5e4;text-decoration:none;padding:11px 14px;font-size:.92rem;white-space:nowrap;
  border-bottom:3px solid transparent;font-weight:600}
.nav a.on{color:#fff;border-bottom-color:var(--sable)}
.nav a:hover{background:rgba(255,255,255,.08)}

main.wrap{padding-top:22px;padding-bottom:40px}
.foot{border-top:1px solid var(--ligne);padding:18px;color:var(--gris);font-size:.82rem;background:#fff}

.card{background:#fff;border:1px solid var(--ligne);border-radius:var(--r);padding:18px;margin-bottom:18px;box-shadow:var(--ombre)}
.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:1fr 1fr}
.grid-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:820px){.grid-2,.grid-4{grid-template-columns:1fr}}

label{display:block;font-size:.82rem;font-weight:700;color:var(--gris);margin-bottom:12px}
input,select,textarea{width:100%;margin-top:5px;padding:11px 12px;border:1px solid var(--ligne);
  border-radius:9px;font:inherit;font-weight:400;background:#fff;color:var(--encre)}
input:focus,select:focus,textarea:focus{outline:3px solid #cfe8cb;border-color:var(--vert)}
textarea{min-height:70px;resize:vertical}
.row{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.temp-input input{font-size:1.5rem;font-weight:700;text-align:center;font-family:var(--titre)}

.btn{display:inline-block;border:1px solid transparent;border-radius:9px;padding:11px 16px;
  font-size:.9rem;font-weight:600;cursor:pointer;text-decoration:none;background:#fff;color:var(--encre)}
.btn-primary{background:var(--vert);color:#fff}
.btn-primary:hover{background:var(--vert-fonce)}
.btn-ghost{background:transparent;border-color:rgba(255,255,255,.35);color:#fff;padding:7px 12px;font-size:.82rem}
.btn-line{border-color:var(--ligne);color:var(--vert-fonce)}
.btn-danger{background:var(--rouge-clair);color:var(--rouge);border-color:#f3c6c1}
.btn-full{width:100%}
.btn-sm{padding:6px 10px;font-size:.8rem}

table{width:100%;border-collapse:collapse;font-size:.9rem}
th{text-align:left;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gris);
  padding:8px 10px;border-bottom:2px solid var(--ligne)}
td{padding:10px;border-bottom:1px solid var(--ligne);vertical-align:top}
tr:hover td{background:var(--vert-clair)}
.table-scroll{overflow-x:auto}
.mono{font-variant-numeric:tabular-nums}

.tag{display:inline-block;padding:3px 9px;border-radius:999px;font-size:.75rem;font-weight:700}
.tag-ok{background:var(--vert-clair);color:var(--vert-fonce)}
.tag-ko{background:var(--rouge-clair);color:var(--rouge)}
.tag-warn{background:#fdf1dd;color:#8a5a06}
.tag-neutre{background:#eef1ed;color:var(--gris)}

.kpi{background:#fff;border:1px solid var(--ligne);border-left:4px solid var(--vert);border-radius:var(--r);padding:14px 16px}
.kpi.alerte{border-left-color:var(--rouge)}
.kpi.attente{border-left-color:var(--sable)}
.kpi-lbl{font-size:.76rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gris);font-weight:700}
.kpi-val{font-size:1.9rem;font-weight:700;line-height:1.1;margin-top:4px}
.kpi-note{font-size:.8rem;color:var(--gris)}

.flash{padding:11px 14px;border-radius:9px;margin-bottom:16px;font-weight:600;font-size:.9rem}
.flash.ok{background:var(--vert-clair);color:var(--vert-fonce)}
.flash.err{background:var(--rouge-clair);color:var(--rouge)}
.vide{color:var(--gris);font-style:italic;padding:14px 0}
.aide{font-size:.8rem;color:var(--gris);font-weight:400;margin-top:-6px}
.entete{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.filtres{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.filtres label{margin-bottom:0}
.pagination{display:flex;gap:6px;margin-top:14px}
.pagination a,.pagination span{padding:6px 11px;border:1px solid var(--ligne);border-radius:8px;
  text-decoration:none;font-size:.85rem;background:#fff}
.pagination .actuel{background:var(--vert);color:#fff;border-color:var(--vert)}

/* Bande de conformité du jour */
.bande{display:flex;flex-wrap:wrap;gap:8px}
.pastille{border:1px solid var(--ligne);border-radius:10px;padding:9px 12px;background:#fff;min-width:150px}
.pastille .nom{font-size:.8rem;font-weight:700}
.pastille .etat{font-size:.78rem;color:var(--gris)}
.pastille.ok{border-color:#b9dcb4;background:var(--vert-clair)}
.pastille.ko{border-color:#f0c2bc;background:var(--rouge-clair)}
.pastille.att{border-color:#f0d6a4;background:#fdf6e9}

.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;
  background:linear-gradient(160deg,var(--vert-fonce),#0a8f05 140%);padding:20px}
.login-card{background:#fff;border-radius:16px;padding:32px 28px;width:100%;max-width:390px;box-shadow:0 20px 50px rgba(0,0,0,.22)}
.login-card h1{font-size:1.7rem;margin:6px 0 2px}
.login-sub{color:var(--gris);font-size:.86rem;margin:0 0 20px}
.login-mark{margin-bottom:6px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
@media print{.topbar,.foot,.btn,.filtres{display:none}body{background:#fff}}

/* ===== v2 : modules Stock, Catalogue, Ventes ===== */
.subnav{background:#fff;border-bottom:1px solid var(--ligne)}
.subnav-in{display:flex;gap:2px;overflow-x:auto;padding:0 12px}
.subnav a{color:var(--gris);text-decoration:none;padding:9px 12px;font-size:.86rem;white-space:nowrap;font-weight:700;border-bottom:2px solid transparent}
.subnav a.on{color:var(--vert-fonce);border-bottom-color:var(--vert)}
.subnav a:hover{color:var(--vert-fonce)}
.grid-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:820px){.grid-3{grid-template-columns:1fr}}
.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
th.num{text-align:right}
.neg{color:var(--rouge);font-weight:700}
.muted{color:var(--gris)}
.small{font-size:.8rem}
.nowrap{white-space:nowrap}
tr.total td{font-weight:700;border-top:2px solid var(--ligne);background:#fafcf9}
tr.sous-titre td{background:var(--fond);font-family:var(--titre);font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gris);font-weight:600}
td.qte-cell{width:130px}
td.qte-cell input{margin:0;text-align:right;padding:8px 10px}
table.saisie td{vertical-align:middle}
table.saisie input,table.saisie select{margin-top:0}
.inline-form{display:inline}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.pill-sync{display:inline-flex;align-items:center;gap:6px;font-size:.75rem;font-weight:700;padding:3px 9px;border-radius:999px}
.pill-sync::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.pill-sync.synchronise{background:var(--vert-clair);color:var(--vert-fonce)}
.pill-sync.a_synchroniser{background:#fdf1dd;color:#8a5a06}
.pill-sync.erreur{background:var(--rouge-clair);color:var(--rouge)}
.pill-sync.non_lie{background:#eef1ed;color:var(--gris)}
.kpi-delta{font-size:.78rem;font-weight:700;margin-top:2px}
.kpi-delta.up{color:var(--vert-fonce)} .kpi-delta.down{color:var(--rouge)}
.barre{height:8px;border-radius:4px;background:var(--vert-clair);overflow:hidden;min-width:60px}
.barre span{display:block;height:100%;background:var(--vert);border-radius:4px}
details.bloc{border:1px solid var(--ligne);border-radius:10px;padding:10px 14px;margin:10px 0;background:#fff}
details.bloc summary{cursor:pointer;font-weight:700;font-family:var(--titre);font-size:.9rem}
.chart{position:relative}
.chart svg{display:block;width:100%;height:auto;overflow:visible}
.chart .bar{fill:var(--vert)}
.chart .bar:hover,.chart .bar.hl{fill:var(--vert-fonce)}
.chart .grid line{stroke:var(--ligne);stroke-width:1}
.chart .axis text{fill:var(--gris);font-size:11px;font-family:Nunito,system-ui,sans-serif}
.chart .tip{position:absolute;pointer-events:none;background:var(--encre);color:#fff;font-size:.8rem;padding:6px 9px;border-radius:7px;white-space:nowrap;transform:translate(-50%,-110%);opacity:0;transition:opacity .1s}
.chart .tip.on{opacity:1}
.code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem;background:#f1f5ef;padding:2px 6px;border-radius:5px;word-break:break-all}
.etapes{counter-reset:e;list-style:none;padding:0;margin:0}
.etapes li{counter-increment:e;position:relative;padding:0 0 12px 36px}
.etapes li::before{content:counter(e);position:absolute;left:0;top:0;width:24px;height:24px;border-radius:50%;background:var(--vert-clair);color:var(--vert-fonce);font-weight:700;font-size:.8rem;display:flex;align-items:center;justify-content:center}
.check{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--encre)}
.check input{width:auto;margin:0}
.recette-row td{padding:6px 8px}
.recette-row input,.recette-row select{padding:8px 9px}
@media print{.subnav,.no-print,form .btn{display:none!important}.card{box-shadow:none;border:0;padding:0}}
.wide td:first-child{min-width:200px}
.wide td:first-child{min-width:200px}
/* Fiches techniques (cuisine) */
.tuiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.tuile{display:flex;flex-direction:column;gap:4px;padding:16px;border:1px solid var(--ligne);border-left:4px solid var(--sable);border-radius:var(--r);background:#fff;text-decoration:none;color:var(--encre);box-shadow:var(--ombre);min-height:84px}
.tuile:hover{border-color:var(--vert);border-left-color:var(--vert)}
.tuile strong{font-family:var(--titre);font-size:1rem}
.fiche-titre{font-size:1.9rem}
.fiche-ingr td{font-size:1.08rem;padding:12px 10px}
.fiche-qte{font-family:var(--titre);font-weight:700;font-size:1.2rem;color:var(--vert-fonce);width:120px}
.fiche-etapes li{font-size:1.05rem;padding-bottom:14px}
@media print{.fiche .card{break-inside:avoid}.fiche-ingr td{padding:6px}.grid-2.fiche{grid-template-columns:1fr 1fr}}
/* Avis clients */
.etoiles{color:#E8A020;letter-spacing:1px;white-space:nowrap}
.etoiles .vides{color:#ddd5c4}
.avis{border-top:1px solid var(--ligne);padding:14px 0}
.avis-alerte{border-left:4px solid var(--rouge);padding-left:12px;background:linear-gradient(90deg,var(--rouge-clair),transparent 40%)}
.avis-tete{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.avis blockquote{margin:6px 0;padding:10px 14px;background:var(--fond);border-radius:10px;font-size:.95rem}

/* ===== Thème logo (v6) ===== */
.topbar{background:var(--vert-nuit)}
.nav{background:var(--vert-fonce);position:relative}
.nav::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:6px;
  background:linear-gradient(var(--sable) 0 50%,var(--rouge) 50% 100%)}
.nav a{color:#E9F2EC}
.nav a.on{border-bottom-color:var(--sable);color:#fff}
.subnav{margin-top:6px;background:#fff}
.subnav a.on{color:var(--vert-fonce);border-bottom-color:var(--rouge)}
.brand{display:flex;align-items:center;gap:10px;font-weight:600}
.brand img{width:44px;height:44px;border-radius:50%;background:var(--creme);display:block}
.brand-sub{color:var(--sable);opacity:1}
.btn-primary{background:var(--vert-fonce)}
.btn-primary:hover{background:var(--vert-nuit)}
.btn-line{color:var(--vert-fonce)}
.kpi{border-left-color:var(--vert)}
.kpi.attente{border-left-color:var(--sable)}
.kpi.alerte{border-left-color:var(--rouge)}
.tag-warn{background:var(--sable-clair);color:#7a5200}
.tag-ok{background:var(--vert-clair);color:var(--vert-fonce)}
.pagination .actuel{background:var(--vert-fonce);border-color:var(--vert-fonce)}
input:focus,select:focus,textarea:focus{outline:3px solid var(--sable-clair);border-color:var(--sable)}
tr:hover td{background:#FDF8EC}
.flash.ok{background:var(--vert-clair);color:var(--vert-fonce)}
.chart .bar{fill:var(--vert)}
.chart .bar:hover,.chart .bar.hl{fill:var(--vert-fonce)}
.barre span{background:var(--vert)}
.tuile{border-left-color:var(--sable)}
.tuile:hover{border-left-color:var(--rouge);border-color:var(--sable)}
.foot{background:var(--creme);color:var(--gris)}
.login-body{background:radial-gradient(circle at 50% 30%,var(--vert-fonce),var(--vert-nuit) 70%)}
.login-mark img{width:120px;height:120px;display:block;margin:-80px auto 6px;border-radius:50%;
  box-shadow:0 10px 30px rgba(0,0,0,.25);background:var(--creme)}
.login-card{text-align:left;padding-top:20px;margin-top:60px}
.login-card h1{text-align:center}
.login-sub{text-align:center}
@media print{.nav::after{display:none}}
