/* ============================================================
   La Gelateria — Redesign estetico
   Sistema: artigianale italiano · editoriale · sartoriale
   Re-skin del prototipo: stessi ID, stesso flusso, stessi dati.
   Font caricati via <link> nei <head> di index.html / admin.html.
   ============================================================ */

:root{
  /* —— superfici / inchiostro (avorio caldo + espresso) —— */
  --cream:     #fffdf8;
  --paper:     oklch(0.993 0.006 84);
  --paper-2:   oklch(0.960 0.013 82);
  --ink:       oklch(0.265 0.014 58);
  --ink-2:     oklch(0.405 0.014 60);
  --muted:     oklch(0.545 0.013 62);
  --faint:     oklch(0.660 0.011 70);
  --line:      oklch(0.902 0.012 78);
  --line-2:    oklch(0.845 0.015 76);

  /* —— accento: terracotta (fisso in produzione) —— */
  --accent:      oklch(0.560 0.105 42);
  --accent-ink:  oklch(0.470 0.100 42);
  --accent-soft: oklch(0.932 0.034 50);
  --accent-line: oklch(0.860 0.050 50);

  /* —— secondari di sistema (stati) —— */
  --pistachio:      oklch(0.560 0.085 142);
  --pistachio-soft: oklch(0.935 0.034 132);
  --pistachio-line: oklch(0.870 0.048 134);
  --ochre:          oklch(0.560 0.090 70);
  --ochre-soft:     oklch(0.940 0.040 80);
  --ochre-ink:      oklch(0.420 0.070 66);
  --blu:            oklch(0.520 0.070 238);
  --blu-soft:       oklch(0.930 0.028 236);
  --teal:           oklch(0.540 0.055 198);
  --teal-soft:      oklch(0.930 0.026 198);
  --teal-line:      oklch(0.865 0.038 198);
  --rosso:          oklch(0.540 0.130 27);
  --rosso-soft:     oklch(0.935 0.040 30);
  --green-ink:      oklch(0.46 0.08 142);

  --serif: "Cormorant Garamond", "Cormorant", Georgia, "Times New Roman", serif;
  --sans:  "Hanken Grotesk", ui-sans-serif, system-ui, -apple-system, sans-serif;

  --r-lg: 18px;
  --r-md: 13px;
  --r-sm: 9px;
  --shadow-card: 0 1px 2px rgba(60,40,30,.04), 0 14px 34px -20px rgba(70,45,30,.28);
  --shadow-bar:  0 -2px 6px rgba(60,40,30,.05), 0 -18px 40px -30px rgba(60,40,30,.30);
}

*{ box-sizing:border-box; }
html,body{ margin:0; }
body{
  font-family:var(--sans);
  background:var(--cream);
  color:var(--ink);
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

/* ---------- layout column ---------- */
.wrap{ max-width:560px; margin:0 auto; padding:16px 16px 132px; }
.admin .wrap{ max-width:1040px; padding:16px 26px 48px; }

/* ---------- compat utilities (classi ancora emesse dal JS/markup) ---------- */
.row{ display:flex; align-items:center; gap:10px; }
.row.between{ justify-content:space-between; }
.grow{ flex:1; min-width:0; }
.stack>*+*{ margin-top:12px; }
.flexwrap{ display:flex; flex-wrap:wrap; gap:8px; }
.muted{ color:var(--muted); }
.small{ font-size:13px; }
.hidden{ display:none !important; }
.center{ text-align:center; padding:40px 16px; }
.field{ margin-bottom:14px; }
.field:last-child{ margin-bottom:0; }
.line{ display:flex; gap:10px; align-items:flex-start; padding:11px 0; border-bottom:1px solid var(--line); }
.line:last-child{ border-bottom:0; }
.price{ font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink); white-space:nowrap; }

/* ---------- tipografia di sezione ---------- */
.eyebrow{
  font-size:10.5px; font-weight:600; letter-spacing:.2em; text-transform:uppercase;
  color:var(--accent-ink); margin:0 0 9px;
}
.eyebrow.muted{ color:var(--muted); }
h3.s-title{
  font-family:var(--serif); font-weight:500; font-size:26px; line-height:1.1;
  margin:0 0 4px; color:var(--ink); letter-spacing:-.01em;
}
.hint{ font-size:13px; color:var(--muted); margin:0 0 16px; }
.muted.small{ color:var(--muted); font-size:13px; }
.group{ margin-bottom:30px; }
.group:last-child{ margin-bottom:0; }

/* Pagina ordina — blocchi separati dalla stessa riga della home */
body.order #shop .group{ margin-bottom:0; }
body.order #shop .group + .group{ margin-top:16px; padding-top:16px; border-top:1px solid var(--line-2); }
/* la lista prodotti proietta un'ombra: un po' d'aria sotto, così la 1ª riga ha lo stesso stacco visivo delle altre */
body.order #shop .group:first-child{ padding-bottom:12px; }

/* ============================================================
   HEADER (app: crema · back office: scuro)
   ============================================================ */
.appbar, .adminbar{
  position:sticky; top:0; z-index:30;
}
.appbar{ background:var(--cream); border-bottom:1px solid var(--line); }
/* ordina: la barra logo mostra il bordino solo quando si è scrollati (in cima niente bordo) */
body.order .appbar{ border-bottom-color:transparent; transition:border-color .2s; }
body.order .appbar.scrolled{ border-bottom-color:var(--line); }
.adminbar{ background:var(--ink); color:var(--cream); border-bottom:1px solid rgba(255,255,255,.08); }
.bar-in{
  max-width:560px; margin:0 auto; padding:16px;
  display:flex; align-items:center; gap:13px;
}
.admin .bar-in{ max-width:1040px; padding:16px 26px; }

.mark{
  width:38px; height:38px; flex:none; border-radius:50%; overflow:hidden;
  border:1.5px solid var(--accent-line); background:var(--cream);
  display:grid; place-items:center; color:var(--accent);
}
.mark svg{ width:24px; height:24px; }
.mark img{ width:30px; height:30px; object-fit:contain; display:block; }
/* logo marrone leggibile anche sulla barra admin scura: placca crema */
.adminbar .mark{ background:var(--cream); border-color:var(--accent-line); }
/* ordina: logo barra un po' più grande e a quadrato arrotondato (stessa forma del logo in home) */
body.order .mark{ width:44px; height:44px; border-radius:12px; }
body.order .mark img{ width:36px; height:36px; }

.brand{ display:flex; flex-direction:column; line-height:1; }
.brand b{ font-family:var(--serif); font-weight:600; font-size:23px; letter-spacing:.01em; color:var(--ink); white-space:nowrap; }
.brand span{ font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); margin-top:5px; }
.adminbar .brand b{ color:var(--cream); }
.adminbar .brand span{ color:rgba(255,255,255,.6); }

.appbar .right{ margin-left:auto; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); text-align:right; line-height:1.35; }
/* logo+brand cliccabile -> home (mantiene il layout flex della bar) */
.brand-link{ display:flex; align-items:center; gap:13px; text-decoration:none; color:inherit; -webkit-tap-highlight-color:transparent; }
.brand-link:hover .brand b{ color:#63819f; }
/* switcher lingua IT/EN nell'appbar */
.lang-switch{ display:flex; gap:2px; flex:none; margin-left:10px; background:var(--paper-2); border:1px solid var(--line); border-radius:999px; padding:3px; }
.lang-switch button{ appearance:none; border:0; background:transparent; cursor:pointer; font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.05em; color:var(--muted); padding:4px 9px; border-radius:999px; transition:background .15s, color .15s; }
.lang-switch button.on{ background:#63819f; color:#fff; border:1px solid #d3cdc4; }
@media (max-width:560px){ .appbar .right{ display:none; } }   /* su mobile lascio spazio allo switcher */
/* skeleton caricamento menù (mostra subito, sostituito da renderFormats) */
.skel-card{ height:62px; border-radius:var(--r-md); border:1px solid var(--line); background:var(--paper); position:relative; overflow:hidden; }
.skel-card::after{ content:""; position:absolute; inset:0; transform:translateX(-100%);
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.55), transparent); animation:skelshimmer 1.15s infinite; }
@keyframes skelshimmer{ to{ transform:translateX(100%); } }
@media (prefers-reduced-motion:reduce){ .skel-card::after{ animation:none; } }

.adminbar .conn{ margin-left:auto; display:flex; align-items:center; gap:8px; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:rgba(255,255,255,.7); }
.led{ width:8px; height:8px; border-radius:50%; background:currentColor;
  box-shadow:0 0 0 3px color-mix(in oklch, currentColor 28%, transparent); }
#conn{ color:var(--pistachio); }

/* ============================================================
   BOTTONI
   ============================================================ */
button{ font-family:var(--sans); cursor:pointer; }
.btn{
  font-family:var(--sans); font-weight:600; cursor:pointer; border:0;
  border-radius:11px; font-size:14px; letter-spacing:.01em; padding:12px 18px;
  background:var(--accent); color:var(--cream); transition:filter .18s, background .18s, border-color .18s; line-height:1;
}
.btn:hover{ filter:brightness(1.06); }
.btn.block{ width:100%; padding:15px; }
.btn.ghost{ background:transparent; color:var(--accent-ink); border:1.4px solid var(--accent-line); }
.btn.ghost:hover{ background:var(--accent-soft); filter:none; }
.btn.sm{ padding:9px 15px; font-size:12.5px; border-radius:9px; }
.btn.icon{ background:transparent; color:var(--faint); padding:8px 11px; font-size:15px; border:1px solid var(--line); border-radius:9px; line-height:1; }
.btn.icon:hover{ color:var(--rosso); border-color:var(--rosso-soft); filter:none; }
.btn.ok{ background:var(--pistachio); color:var(--cream); }
.btn.danger{ background:transparent; color:var(--rosso); border:1.4px solid color-mix(in oklch,var(--rosso) 34%,transparent); }
.btn.danger:hover{ background:var(--rosso-soft); filter:none; }
.btn:disabled{ background:var(--paper-2); color:var(--faint); cursor:not-allowed; border:1px solid var(--line); filter:none; }

/* Pagina ordina — bottoni azione (Scegli / Aggiungi / Trova / Applica): azzurro tenue con bordo, scuriscono leggermente in hover */
body.order .btn.sm:not(:disabled){ background:#d5edfc; color:#446c94; border:1px solid #d3cdc4; }
body.order .btn.sm:not(:disabled):hover{ filter:brightness(.95); }

/* CTA primari ordina (Vai al pagamento / Aggiungi al carrello): blu pieno, scurisce in hover; lo stato :disabled resta grigio */
#submit:not(:disabled), #m-add:not(:disabled){ background:#63819f; color:#fff; }
#submit:not(:disabled):hover, #m-add:not(:disabled):hover{ background:#446c94; filter:none; }

/* ordina — "Chiudi/Annulla" dei popup: neutro chiaro (sfondo come il selettore lingua), bordo+testo #d3cdc4, hover leggermente più scuro */
#m-close, #pay-close{ background:var(--paper-2); color:var(--faint); border:1px solid #d3cdc4; border-radius:999px; }
#m-close:hover, #pay-close:hover{ filter:brightness(.95); }

/* ============================================================
   FORM · input / select / label
   ============================================================ */
label{
  display:block; font-size:11px; font-weight:600; letter-spacing:.1em;
  text-transform:uppercase; color:var(--muted); margin:0 0 7px 1px;
}
input:not([type=radio]):not([type=checkbox]), select, textarea, .control{
  width:100%; font-family:var(--sans); font-size:15px; color:var(--ink);
  background:var(--paper); border:1px solid var(--line-2); border-radius:11px;
  padding:13px 14px; line-height:1.2; transition:border-color .16s;
}
textarea{ resize:vertical; min-height:62px; }
input::placeholder, textarea::placeholder, .control::placeholder{ color:var(--faint); }
input:not([type=radio]):focus, select:focus, textarea:focus, .control:focus{ outline:none; border-color:var(--accent); }

/* select con freccia disegnata */
select{ -webkit-appearance:none; appearance:none; padding-right:38px; cursor:pointer; }
.select-wrap{ position:relative; }
.select-wrap::after{
  content:""; position:absolute; right:16px; top:50%; width:8px; height:8px;
  border-right:1.5px solid var(--muted); border-bottom:1.5px solid var(--muted);
  transform:translateY(-65%) rotate(45deg); pointer-events:none;
}
.select-wrap select{ width:100%; }
/* ordina — fascia oraria/ritiro: opzione selezionata in clay invece del rosso (accent di sistema). Reso nativo: ok Chrome/Firefox, Safari può ignorarlo. */
body.order select{ accent-color:#cb8d73; }
body.order select option:checked{ background:#cb8d73; color:#fff; }

.panel{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-card); padding:18px 16px;
}

/* ============================================================
   APP — menù / formati
   ============================================================ */
.list{ display:flex; flex-direction:column; gap:10px; }
.fmt{
  display:flex; align-items:center; gap:12px;
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  padding:15px 16px; box-shadow:0 1px 2px rgba(60,40,30,.03), 0 14px 34px -20px rgba(70,45,30,.16); transition:transform .18s, box-shadow .18s;
}
.fmt .meta{ flex:1 1 auto; min-width:0; }
.fmt .name{ font-size:15px; font-weight:600; color:var(--ink); }
.fmt .desc{ font-size:12px; color:var(--muted); letter-spacing:.02em; margin-top:3px; }
.fmt .price{ flex:none; font-family:var(--serif); font-size:21px; font-weight:600; color:var(--ink); letter-spacing:.01em; white-space:nowrap; }
.fmt .btn{ flex:none; }

/* ---------- carrello ---------- */
.cart{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-card); overflow:hidden;
}
.cart-line{ display:flex; gap:12px; align-items:flex-start; padding:15px 16px; border-bottom:1px solid var(--line); }
.cart-line:last-child{ border-bottom:0; }
.cart-line .q{ font-family:var(--serif); font-size:19px; font-weight:600; color:var(--accent-ink); min-width:30px; }
.cart-line .body{ flex:1; min-width:0; }
.cart-line .t{ font-size:14.5px; font-weight:600; color:var(--ink); }
.cart-line .g{ font-size:12.5px; color:var(--muted); margin-top:3px; line-height:1.4; }
.cart-line .lp{ font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink); white-space:nowrap; }
.cart-line .rm{ flex:none; }
.cart-line.editable{ cursor:pointer; -webkit-tap-highlight-color:transparent; transition:background .12s; }
.cart-line.editable:active{ background:var(--paper-2); }
.cart-line .ed{ font-size:11.5px; opacity:.45; margin-left:2px; }
.cart-line.editable:hover .ed{ opacity:.85; }
.cart-foot{ display:flex; flex-direction:column; gap:8px; padding:15px 16px; background:var(--paper-2); }
.cart-foot .r{ display:flex; justify-content:space-between; font-size:13.5px; color:var(--ink-2); }
.cart-foot .r.tot{ font-size:15px; color:var(--ink); align-items:baseline; padding-top:8px; border-top:1px solid var(--line); margin-top:2px; }
.cart-foot .r.tot b{ font-weight:600; }
.cart-foot .r.tot .v{ font-family:var(--serif); font-size:24px; font-weight:600; }

/* ---------- chips gusti ---------- */
.chips{ display:flex; flex-wrap:wrap; gap:9px; }
.chip{
  font-family:var(--sans); font-size:13.5px; font-weight:500; cursor:pointer;
  padding:10px 15px; border-radius:999px; border:1.3px solid var(--line-2);
  background:var(--paper); color:var(--ink-2); transition:.16s; line-height:1;
}
.chip.sel{ border-color:var(--accent); background:var(--accent-soft); color:var(--accent-ink); font-weight:600; }
.chip.off,.chip:disabled{ opacity:.4; cursor:not-allowed; }
/* gusti del giorno nel modale: tinta dorata distinta (☀) + nota esplicativa */
.chip.daily{ border-color:#e3c98a; background:#fdf6e6; color:#8a6d2e; }
.chip.daily.sel{ border-color:#cf9f33; background:#e9c75a; color:#5e4a18; font-weight:600; }
/* modale gusti — schema colori chip (scoped a #m-flavors; l'admin usa .chip altrove) */
#m-flavors .chip.sel{ background:#fce3d5; border-color:#d3cdc4; color:var(--ink-2); } /* normale attivo: peach, bordo #d3cdc4, testo come i chip inattivi (--ink-2) */
#m-flavors .chip.daily{ background:#faf6ee; border-color:#cb8d73; color:#cb8d73; }  /* speciale inattivo: sfondo #faf6ee, bordo+testo clay */
#m-flavors .chip.daily.sel{ background:#cb8d73; color:#fff; border-color:#cb8d73; } /* speciale attivo: clay pieno, testo bianco */
.daily-note{ font-size:12px; line-height:1.45; font-style:italic; color:#cb8d73; margin:12px 0 0; }

/* ---------- calendario giorno (app + fasce) ---------- */
.cal{ display:flex; gap:8px; overflow-x:auto; padding-bottom:4px; -webkit-overflow-scrolling:touch; }
.cal .day{ flex:0 0 auto; min-width:52px; display:flex; flex-direction:column; align-items:center; gap:3px;
  padding:9px 8px 8px; border-radius:12px; border:1px solid var(--line-2); background:var(--paper); cursor:pointer; transition:.16s; }
.cal .day .dwd{ font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); }
.cal .day .dnum{ font-family:var(--serif); font-size:20px; font-weight:600; color:var(--ink); line-height:1; }
.cal .day.today{ box-shadow:inset 0 0 0 1.5px var(--accent-line); }
.cal .day.sel{ border-color:var(--accent); background:var(--accent-soft); }
.cal .day.sel .dwd, .cal .day.sel .dnum{ color:var(--accent-ink); }
body.order .cal .day.sel{ background:#fce3d5; border-color:#d3cdc4; }   /* ordina: giorno attivo peach (admin invariato) */
body.order .cal .day.sel .dwd{ color:var(--muted); } body.order .cal .day.sel .dnum{ color:var(--ink); }   /* ordina: testo giorno attivo come l'inattivo */

/* ---------- banner ordine minimo / avviso ---------- */
.banner{
  padding:13px 15px; border-radius:var(--r-md); margin:14px 0 0;
  background:var(--ochre-soft); border:1px solid color-mix(in oklch, var(--ochre) 30%, transparent);
  font-size:12.5px; color:var(--ochre-ink); line-height:1.45;
}
/* ordina — "Ordine minimo": solo testo (niente box/sfondo), #cb8d73 bold centrato */
#min-banner{ background:none; border:0; padding:0; color:#cb8d73; font-weight:700; text-align:center; }
#min-banner::before{ content:""; display:inline-block; width:1em; height:1em; margin-right:6px; vertical-align:-.15em; background:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23cb8d73%22%20stroke-width%3D%222.2%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M10.29%203.86%201.82%2018a2%202%200%200%200%201.71%203h16.94a2%202%200%200%200%201.71-3L13.71%203.86a2%202%200%200%200-3.42%200z%22/%3E%3Cline%20x1%3D%2212%22%20y1%3D%229%22%20x2%3D%2212%22%20y2%3D%2213%22/%3E%3Cline%20x1%3D%2212%22%20y1%3D%2217%22%20x2%3D%2212.01%22%20y2%3D%2217%22/%3E%3C/svg%3E") center/contain no-repeat; }

/* ---------- checkout bar (fissa in basso) ---------- */
.bar{
  position:fixed; left:0; right:0; bottom:0; z-index:25;
  background:var(--paper); border-top:1px solid var(--line); box-shadow:var(--shadow-bar);
}
.bar .bar-in{ display:flex; align-items:center; gap:16px; padding:14px 16px; }
.bar .lab{ font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); }
.bar .amt{ font-family:var(--serif); font-size:28px; font-weight:600; color:var(--ink); line-height:1; margin-top:3px; }

/* ---------- conferma ordine ---------- */
.confirm{ text-align:center; padding:48px 22px 30px; }
.seal{
  width:74px; height:74px; border-radius:50%; margin:0 auto 22px;
  border:1.5px solid var(--accent-line); background:var(--accent-soft);
  display:grid; place-items:center; color:var(--accent);
}
.seal svg{ width:30px; height:30px; }
.confirm h2,.confirm h3{ font-family:var(--serif); font-weight:500; font-size:30px; margin:0 0 8px; color:var(--ink); }
.confirm p{ font-size:14px; color:var(--muted); margin:0 auto 26px; max-width:320px; }
.confirm .summary{ text-align:left; }
.grazie-quote{ margin:30px auto 2px; max-width:340px; padding-top:24px; border-top:1px solid var(--line); }
.grazie-quote[hidden]{ display:none; }
.grazie-quote .quote-text{
  margin:0; font-family:var(--serif); font-style:italic; font-weight:500;
  font-size:19px; line-height:1.36; color:var(--ink-2);
}
.grazie-quote .quote-text::before{ content:"\201C"; }
.grazie-quote .quote-text::after{ content:"\201D"; }
.grazie-quote .quote-by{
  margin-top:11px; font-family:var(--sans); font-size:11px; font-weight:600;
  letter-spacing:.07em; text-transform:uppercase; color:var(--faint);
}

/* ---------- mappa consegna + geofence (app cliente) ---------- */
.addr-row{ display:flex; gap:8px; align-items:center; }
.addr-row .grow{ flex:1; min-width:0; }
.addr-row .btn{ flex:none; }
.addr-input-wrap{ position:relative; }
.addr-input-wrap input{ padding-right:40px; }
.addr-clear{
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  width:27px; height:27px; padding:0; display:flex; align-items:center; justify-content:center;
  background:transparent; border:0; border-radius:50%; cursor:pointer;
  color:var(--faint); font-size:14px; line-height:1; transition:color .14s, background .14s;
}
.addr-clear:hover{ color:var(--rosso); background:var(--rosso-soft); }
.addr-clear[hidden]{ display:none; }
.map-note{ font-size:12px; color:var(--muted); line-height:1.45; margin:9px 1px; }
#map{ position:relative; z-index:0; height:230px; border-radius:var(--r-md); border:1px solid var(--line-2); overflow:hidden; }
.leaflet-container{ font-family:var(--sans); background:var(--paper-2); }
.zone-status{ font-size:12.5px; font-weight:600; margin:9px 1px 0; min-height:1.1em; }
.zone-status.ok{ color:var(--green-ink); }
.zone-status.ko{ color:var(--rosso); }
.maplink{ color:var(--accent-ink); font-weight:600; text-decoration:underline; white-space:nowrap; }
.route-info{ color:var(--ink-2); font-weight:600; white-space:nowrap; }
.btn.wa{ background:#25d366; color:#fff; }
.btn.wa:hover{ filter:brightness(1.06); }
.wa-row{ display:flex; }
#area-map{ position:relative; z-index:0; height:340px; border-radius:var(--r-md); border:1px solid var(--line-2); overflow:hidden; margin-top:4px; }
.locate-btn{ color:var(--ink); cursor:pointer; }
.locate-btn:hover{ color:var(--accent-ink); background:var(--paper-2); }
.locate-btn svg{ display:block; margin:6px; }

/* modalità consegna / ritiro (cliente) */
.mode-toggle{ display:flex; gap:8px; }
.mode-opt{
  flex:1; padding:13px 14px; border-radius:var(--r-md); border:1.3px solid var(--line-2);
  background:var(--paper); color:var(--ink-2); font-family:var(--sans); font-size:14px;
  font-weight:600; line-height:1.2; text-align:center; cursor:pointer; transition:.16s;
}
.mode-opt:hover{ border-color:var(--accent-line); }
.mode-opt.sel{ border-color:var(--accent); background:var(--accent-soft); color:var(--accent-ink); }
body.order .mode-opt.sel{ background:#fce3d5; border-color:#d3cdc4; color:var(--ink-2); }   /* ordina: modalità attiva peach, testo come l'inattivo */

/* orari di apertura — vista cliente (#opening-hours) */
.opening-hours{ margin-top:12px; border:1px solid var(--line); border-radius:var(--r-md); overflow:hidden; }
.oh-row{ display:flex; justify-content:space-between; gap:12px; padding:8px 13px; font-size:13px; color:var(--ink-2); border-bottom:1px solid var(--line); }
.oh-row:last-child{ border-bottom:none; }
.oh-row span:first-child{ font-weight:600; color:var(--ink); }

/* orari di apertura — editor (Parametri, #oh-editor) */
.oh-erow{ display:flex; align-items:center; gap:10px; }
.oh-erow .oh-day{ flex:0 0 40px; font-size:14px; font-weight:600; color:var(--ink); }
.oh-erow .oh-closed{ flex:0 0 auto; display:flex; align-items:center; gap:6px; margin:0;
  font-size:13px; font-weight:500; letter-spacing:0; text-transform:none; color:var(--ink-2); cursor:pointer; }
.oh-erow .oh-closed input{ width:auto; cursor:pointer; }
.oh-erow select{ flex:1; min-width:0; -webkit-appearance:menulist; appearance:menulist; padding:10px 12px; cursor:pointer; }
.oh-erow .oh-sep{ flex:0 0 auto; color:var(--muted); }
.oh-erow select:disabled{ opacity:.45; }

/* ============================================================
   BACK OFFICE
   ============================================================ */
.tabs{
  position:sticky; top:71px; z-index:20; background:var(--cream);
  display:flex; gap:8px; flex-wrap:wrap; margin:0 -26px 18px; padding:14px 26px 12px;
}
.tab{
  font-family:var(--sans); font-size:13px; font-weight:600; cursor:pointer;
  padding:10px 16px; border-radius:999px; border:1px solid var(--line-2);
  background:transparent; color:var(--muted); letter-spacing:.01em; white-space:nowrap; transition:.16s;
}
.tab:hover{ color:var(--ink); border-color:var(--ink-2); }
.tab.active{ background:var(--ink); color:var(--cream); border-color:var(--ink); }

.admin-head{ display:flex; flex-wrap:wrap; align-items:baseline; gap:10px 14px; margin-bottom:20px; }
.admin h2, .admin-head h3{
  font-family:var(--serif); font-weight:500; font-size:27px; line-height:1.1;
  margin:0; color:var(--ink); letter-spacing:-.01em;
}
.admin .tabpane > .muted.small{ display:block; margin:-12px 0 18px; color:var(--muted); }

.count, .tag{
  font-family:var(--serif); font-size:15px; font-weight:600; color:var(--accent-ink); white-space:nowrap;
  background:var(--accent-soft); border:1px solid var(--accent-line); border-radius:999px; padding:3px 12px;
}

/* ---------- griglia ordini ---------- */
.orders{ display:grid; grid-template-columns:repeat(2,1fr); gap:16px; }
.order{
  background:var(--paper); border:1px solid var(--line); border-left:3px solid var(--line-2);
  border-radius:var(--r-md); box-shadow:var(--shadow-card); padding:17px 18px;
  display:flex; flex-direction:column; gap:11px;
}
.order .top{ display:flex; align-items:flex-start; justify-content:space-between; gap:10px; }
.order .who{ font-size:16px; font-weight:600; color:var(--ink); }
.order .meta{ font-size:12.5px; color:var(--muted); line-height:1.55; }
.order .meta .k{ color:var(--faint); }
.order .items{ border-top:1px solid var(--line); border-bottom:1px solid var(--line); padding:11px 0; display:flex; flex-direction:column; gap:9px; }
.order .it{ display:flex; justify-content:space-between; gap:10px; align-items:flex-start; }
.order .it .t{ font-size:13.5px; color:var(--ink); font-weight:500; }
.order .it .t small{ display:block; font-weight:400; color:var(--muted); font-size:12px; margin-top:2px; }
.order .it .p{ font-family:var(--serif); font-size:16px; font-weight:600; color:var(--ink); white-space:nowrap; }
.order .foot{ display:flex; align-items:center; justify-content:space-between; }
.order .foot .del{ font-size:12px; color:var(--muted); }
.order .foot .tot{ font-family:var(--serif); font-size:22px; font-weight:600; color:var(--ink); }

/* bordo sinistro per stato */
.order[data-s="ricevuto"]{ border-left-color:var(--ochre); }
.order[data-s="accettato"]{ border-left-color:var(--blu); }
.order[data-s="in preparazione"]{ border-left-color:var(--accent); }
.order[data-s="in consegna"]{ border-left-color:var(--teal); }
.order[data-s="consegnato"]{ border-left-color:var(--pistachio); }
.order[data-s="rifiutato"]{ border-left-color:var(--rosso); }
.order[data-s="annullato"]{ border-left-color:var(--muted); }

/* status pill */
.status{
  display:inline-flex; align-items:center; gap:7px; font-size:11px; font-weight:600;
  letter-spacing:.1em; text-transform:uppercase; padding:6px 12px; border-radius:999px;
  border:1px solid var(--line-2); background:var(--paper-2); color:var(--muted); white-space:nowrap;
}
.status .led{ width:6px; height:6px; box-shadow:none; }
.status[data-s="ricevuto"]{ color:var(--ochre); background:var(--ochre-soft); border-color:color-mix(in oklch,var(--ochre) 28%,transparent); }
.status[data-s="accettato"]{ color:var(--pistachio); background:var(--pistachio-soft); border-color:var(--pistachio-line); }
.status[data-s="in preparazione"]{ color:var(--accent-ink); background:var(--accent-soft); border-color:var(--accent-line); }
.status[data-s="in consegna"]{ color:var(--teal); background:var(--teal-soft); border-color:var(--teal-line); }
.status[data-s="consegnato"]{ color:var(--green-ink); background:var(--pistachio-soft); border-color:var(--pistachio-line); }
.status[data-s="rifiutato"]{ color:var(--rosso); background:var(--rosso-soft); border-color:color-mix(in oklch,var(--rosso) 28%,transparent); }
.status[data-s="annullato"]{ color:var(--muted); background:var(--paper-2); border-color:var(--line-2); }

/* azioni ordine */
.actions{ margin-top:2px; padding-top:13px; border-top:1px solid var(--line); display:flex; flex-direction:column; gap:10px; }
.actions:empty{ display:none; }
.orders > p{ grid-column:1 / -1; }
.actrow{ display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.actrow.steps .chip{ font-size:12px; padding:8px 12px; }

/* ---------- filtri stato ---------- */
.filters{ display:flex; flex-wrap:wrap; gap:8px; margin-bottom:16px; }
.fchip{ display:inline-flex; align-items:center; gap:8px; font-family:var(--sans); font-size:12.5px; font-weight:600;
  padding:8px 14px; border-radius:999px; border:1px solid var(--line-2); background:var(--paper); color:var(--ink-2); cursor:pointer; transition:.16s; }
.fchip:hover{ border-color:var(--ink-2); }
.fchip .fcount{ font-size:11px; font-weight:700; min-width:18px; text-align:center; padding:1px 6px; border-radius:999px;
  background:var(--paper-2); color:var(--muted); }
.fchip.sel{ background:var(--ink); color:var(--cream); border-color:var(--ink); }
.fchip.sel .fcount{ background:rgba(255,255,255,.2); color:var(--cream); }

/* ---------- barra 7 giorni ---------- */
.daybar{ display:flex; gap:8px; overflow-x:auto; padding-bottom:6px; margin-bottom:20px; -webkit-overflow-scrolling:touch; }
.dchip{ flex:0 0 auto; min-width:58px; display:flex; flex-direction:column; align-items:center; gap:3px;
  padding:9px 10px; border-radius:13px; border:1px solid var(--line-2); background:var(--paper); cursor:pointer; transition:.16s; }
.dchip .dwd{ font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); }
.dchip .dnum{ font-family:var(--serif); font-size:19px; font-weight:600; color:var(--ink); line-height:1; }
.dchip .dcount{ margin-top:2px; font-size:11px; font-weight:700; min-width:20px; text-align:center; padding:1px 6px;
  border-radius:999px; background:var(--paper-2); color:var(--muted); }
.dchip .dcount.has{ background:var(--accent); color:var(--cream); }
.dchip.today{ box-shadow:inset 0 0 0 1.5px var(--accent-line); }
.dchip.sel{ border-color:var(--accent); background:var(--accent-soft); }
.dchip.sel .dwd, .dchip.sel .dnum{ color:var(--accent-ink); }

/* ---------- fasce del giorno: ordini attivi per fascia ---------- */
.slotstats-wrap:empty{ display:none; }
.slotstats-wrap{ margin-bottom:22px; }
.slotstats-head{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:10px; }
.slotstats-tot{ font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--muted); white-space:nowrap; }
.slotstats{ display:flex; flex-wrap:wrap; gap:10px; }
.slotstat{ position:relative; flex:0 0 auto; min-width:138px; background:var(--paper); border:1px solid var(--line);
  border-left:3px solid var(--line-2); border-radius:var(--r-md); box-shadow:var(--shadow-card); padding:11px 14px; }
.slotstat-time{ font-size:12px; font-weight:600; color:var(--ink-2); font-variant-numeric:tabular-nums; white-space:nowrap; }
.slotstat.full{ border-left-color:var(--rosso); }
.slotstat{ cursor:pointer; transition:border-color .14s, background .14s, box-shadow .14s; }
.slotstat:hover{ border-color:var(--accent-line); }
.slotstat.sel{ border-color:var(--accent); background:var(--accent-soft); box-shadow:inset 0 0 0 1px var(--accent); }
.slotstat:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }
#orders-togglex.on{ background:var(--accent-soft); border-color:var(--accent-line); color:var(--accent-ink); }

/* badge metodo di pagamento (testo + iconcina) */
.paybadge{ display:inline-flex; align-items:center; gap:5px; padding:2px 9px 2px 7px; border-radius:999px;
  font-size:11px; font-weight:700; letter-spacing:.02em; line-height:1.7; vertical-align:middle; }
.paybadge .payi{ width:14px; height:14px; flex:none; display:block; }
.paybadge.pay-card{ background:var(--accent-soft); color:var(--accent-ink); }
.paybadge.pay-paypal{ background:#e8f0fb; color:#13386e; }
.paybadge.pay-satispay{ background:#fde9e6; color:#c0341f; }
.paybadge.pay-other{ background:var(--paper-2); color:var(--muted); }
/* termometro: barra = max consegne, riempimento verde = ordini in lavorazione */
.thermo{ height:8px; border-radius:999px; background:var(--line); overflow:hidden; margin:9px 0 7px; }
.thermo-fill{ height:100%; background:var(--pistachio); border-radius:999px; transition:width .25s; }
.thermo-fill.full{ background:var(--rosso); }
.thermo-legend{ font-size:11px; color:var(--muted); }
.thermo-legend b{ font-family:var(--serif); font-size:16px; font-weight:600; color:var(--green-ink); margin-right:1px; }
.thermo-legend.full b{ color:var(--rosso); }

/* ---------- gestione (gusti / formati / fasce) ---------- */
.mrow{
  display:flex; align-items:center; gap:12px;
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-card); padding:13px 15px;
}
.mrow .grow{ flex:1; }
.mrow input{ width:auto; flex:1; }
.addrow{
  display:flex; align-items:center; gap:11px; padding:14px 15px;
  background:var(--paper-2); border:1px dashed var(--line-2); border-radius:var(--r-md); margin-bottom:14px;
}
.addrow .grow{ flex:1; }
.addrow .btn{ flex:none; }

/* capienza fascia (Max consegne/giorno) */
.slotmax{ display:inline-flex; align-items:center; gap:7px; flex:none; min-width:0; margin:0; cursor:default;
  text-transform:none; letter-spacing:normal; }
.slotmax-lbl{ font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); }
.slotmax input{ flex:0 0 64px; width:64px; max-width:64px; text-align:center; padding:9px 6px; -moz-appearance:textfield; }
.slotmax input::-webkit-outer-spin-button, .slotmax input::-webkit-inner-spin-button,
#ns-max::-webkit-outer-spin-button, #ns-max::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
#ns-max{ -moz-appearance:textfield; }
.fmt-card{
  background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-card); padding:16px; display:flex; flex-direction:column; gap:13px;
}
.fmt-card .grid2{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.fmt-card .foot{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.setrow{ display:flex; flex-direction:column; gap:16px; max-width:420px; }

/* ---- riordino drag (maniglia ⠿) ---- */
.drag-handle{
  flex:none; cursor:grab; color:var(--faint); font-size:18px; line-height:1;
  padding:6px 3px; -webkit-user-select:none; user-select:none; touch-action:none;
  letter-spacing:-3px; -webkit-touch-callout:none; -webkit-tap-highlight-color:transparent;
}
.drag-handle:active{ cursor:grabbing; }
.mrow.dragging, .fmt-card.dragging, .frow.dragging{ box-shadow:0 12px 30px rgba(60,40,30,.22); opacity:.97; }
.drag-ph{ border:1px dashed var(--line-2); border-radius:var(--r-md); background:var(--paper-2); }

/* ---- stellina gusto speciale (solo back office) ---- */
.star-btn{
  flex:none; width:34px; height:34px; padding:0; border:1px solid var(--line);
  border-radius:9px; background:transparent; color:var(--line-2); font-size:17px;
  line-height:1; cursor:pointer; transition:color .15s, border-color .15s, background .15s;
}
.star-btn:hover{ border-color:var(--accent); }
.star-btn.on{ color:#e0a82e; border-color:#edcf86; background:#fcf4df; }

/* ---- gusto del giorno (☀) + microdescrizione home ---- */
.frow{ display:flex; flex-direction:column; gap:7px; }
.daily-btn{ flex:none; width:34px; height:34px; padding:0; border:1px solid var(--line); border-radius:9px;
  background:transparent; color:var(--line-2); font-size:16px; line-height:1; cursor:pointer;
  transition:color .15s, border-color .15s, background .15s; }
.daily-btn:hover{ border-color:var(--accent); }
.daily-btn.on{ color:var(--accent); border-color:var(--accent-line); background:var(--accent-soft); }
.g-desc{ width:100%; font-size:13.5px; padding:10px 12px; background:var(--paper-2); }
/* barra filtri gusti (★ speciali / ☀ del giorno) */
.flavor-filters{ display:flex; align-items:center; gap:9px; margin:0 0 12px; }
.ff-lbl{ font-size:12px; font-weight:600; color:var(--muted); letter-spacing:.02em; }
#flavors-list.filtering .drag-handle{ display:none; }   /* riordino disattivato col filtro */

/* ---- prodotti: categorie + maniglia in cima alla card (back office) ---- */
.fmt-group + .fmt-group{ margin-top:26px; }
.fmt-cat-head{
  font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink);
  margin:0 0 12px; padding-bottom:6px; border-bottom:1px solid var(--line);
}
.fmt-card-top{ display:flex; align-items:center; gap:10px; }
.fmt-card-top .f-name{ flex:1; min-width:0; }
.fmt-card-top .f-title{ flex:1; min-width:0; font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink); padding:6px 0; }

/* ---- cliente: intestazione gruppo nel menù ---- */
.fmt-group-head{
  font-family:var(--serif); font-size:17px; font-weight:600; color:var(--ink);
  margin:8px 0 2px; letter-spacing:.01em;
}
.list .fmt-group-head:first-child{ margin-top:0; }

/* toggle switch (Disponibile/Non disponibile · Accesa/Spenta) — un solo controllo */
.switch{ display:inline-flex; align-items:center; gap:10px; margin:0; cursor:pointer;
  text-transform:none; letter-spacing:normal; -webkit-tap-highlight-color:transparent; }
.switch input{ position:absolute; opacity:0; width:0; height:0; }
.switch .track{ position:relative; flex:none; width:44px; height:24px; border-radius:999px; background:var(--line-2); transition:background .18s; }
.switch .thumb{ position:absolute; top:3px; left:3px; width:18px; height:18px; border-radius:50%; background:#fff; box-shadow:0 1px 2px rgba(60,40,30,.28); transition:transform .18s; }
.switch input:checked + .track{ background:var(--pistachio); }
.switch input:checked + .track .thumb{ transform:translateX(20px); }
.switch input:focus-visible + .track{ box-shadow:0 0 0 3px var(--pistachio-soft); }
.switch-lbl{ font-size:12.5px; font-weight:600; }
.switch-lbl .on-t{ color:var(--green-ink); }
.switch-lbl .off-t{ color:var(--muted); }
.switch input:not(:checked) ~ .switch-lbl .on-t{ display:none; }
.switch input:checked ~ .switch-lbl .off-t{ display:none; }

/* scope giorno (Solo X / Tutti e 7) — resta radio a 2 scelte (non on/off) */
.scope input[type=radio]{
  -webkit-appearance:none; appearance:none; margin:0; flex:none; cursor:pointer;
  width:14px; height:14px; border-radius:50%; border:1.5px solid var(--line-2); background:var(--paper); position:relative;
}
.scope input[type=radio]:checked{ border-color:var(--ink); }
.scope input[type=radio]:checked::after{ content:""; position:absolute; inset:3px; border-radius:50%; background:var(--ink); }
.scope{ display:flex; flex-wrap:wrap; gap:10px 20px; margin-top:9px; }
.scope label, .scope-opt{
  display:inline-flex; align-items:center; gap:8px; margin:0; cursor:pointer;
  font-size:13.5px; font-weight:500; letter-spacing:normal; text-transform:none; color:var(--muted);
}
.scope label:has(input:checked){ color:var(--ink); font-weight:600; }

/* ---------- Laboratorio ---------- */
.labgrid{ display:grid; grid-template-columns:1fr; gap:22px; }
/* giorno = contenitore leggero (header) + 3 blocchi distinti (sx · dx · sotto) */
.labcard{ background:transparent; border:0; box-shadow:none; padding:0; }
.labbody{ display:grid; grid-template-columns:1fr 1fr; gap:14px; align-items:start; margin-top:6px; }
.labblock{ background:var(--paper); border:1px solid var(--line); border-radius:var(--r-md); box-shadow:var(--shadow-card); padding:14px 16px; min-width:0; }
.labblock.full{ grid-column:1 / -1; }
.labblock .labsub{ margin-bottom:8px; }
/* vaschette per cliente (blocco destro) */
.labclient{ padding:8px 0; border-bottom:1px solid var(--line); }
.labclient:last-child{ border-bottom:0; }
.labclient-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:2px; }
.lc-name{ font-weight:600; color:var(--ink); font-size:14px; }
.labful{ font-size:.64rem; font-weight:700; padding:1px 7px; border-radius:6px; white-space:nowrap; }
.labful-pk{ background:#f3e7da; color:#a8552f; }
.labful-del{ background:#e7f0e7; color:#2f6f3f; }
.labhead{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:12px; }
.labday{ font-family:var(--serif); font-size:18px; font-weight:600; color:var(--ink); white-space:nowrap; }
.kglist{ display:flex; flex-direction:column; }
.kgline{ display:flex; justify-content:space-between; align-items:baseline; gap:10px; padding:8px 0; border-bottom:1px solid var(--line); }
.kgline:last-child{ border-bottom:0; }
.kn{ font-size:13.5px; color:var(--ink-2); }
.kv{ font-family:var(--serif); font-size:16px; font-weight:600; color:var(--ink); font-variant-numeric:tabular-nums; white-space:nowrap; }
.kgtot{ display:flex; justify-content:space-between; align-items:baseline; gap:10px; margin-top:12px; padding-top:11px;
  border-top:1px solid var(--line-2); font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--muted); }
.kgtot b{ font-family:var(--serif); font-size:19px; color:var(--accent-ink); text-transform:none; letter-spacing:0; }

/* ---------- Storico ---------- */
.ecocard{ display:flex; flex-direction:column; padding:4px 18px; }
.eco-row{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; padding:13px 0;
  border-bottom:1px solid var(--line); font-size:14px; color:var(--ink-2); }
.eco-row:last-child{ border-bottom:0; }
.eco-row b{ font-family:var(--serif); font-size:18px; color:var(--ink); font-weight:600; }
.eco-row.big b{ font-size:28px; }
.eco-row.sep{ border-top:1px solid var(--line-2); }
.brk{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; padding:11px 0; border-bottom:1px solid var(--line); }
.brk:last-child{ border-bottom:0; }
.brk:first-child{ padding-top:2px; }
.bn{ font-size:14px; font-weight:600; color:var(--ink); }
.bn small{ display:block; font-weight:400; color:var(--muted); font-size:12px; margin-top:2px; }
.bv{ font-family:var(--serif); font-size:17px; font-weight:600; color:var(--ink); white-space:nowrap; }
.brk-title{ margin-bottom:6px; }

.subgrid{ display:grid; grid-template-columns:1fr 1fr; gap:24px; }

/* ============================================================
   LOGIN back office
   ============================================================ */
.gate{ padding:54px 26px; display:grid; place-items:center; }
.gate .box{ width:340px; max-width:100%; text-align:center; }
.gate .seal{ margin-bottom:20px; }
.gate h2{ font-family:var(--serif); font-weight:500; font-size:28px; margin:0 0 6px; color:var(--ink); }
.gate p:not(.eyebrow){ font-size:13px; color:var(--muted); margin:0 0 22px; text-transform:none; letter-spacing:normal; font-weight:400; }
.gate .field input{ text-align:center; letter-spacing:.18em; }

/* ============================================================
   MODALE gusti (bottom sheet)
   ============================================================ */
.modal-bg{
  position:fixed; top:0; left:0; right:0; z-index:60; display:none;
  height:100vh; height:100dvh;   /* iOS: viewport DINAMICO -> il fondo non resta dietro la toolbar */
  align-items:flex-start; justify-content:center; background:rgba(40,30,24,.42);   /* ancorata in ALTO, posizione uniforme a prescindere dall'altezza del contenuto */
}
.modal-bg.show{ display:flex; }
.modal{
  position:relative; background:var(--paper); width:100%; max-width:560px;
  border-bottom:1px solid var(--line); border-radius:0 0 24px 24px;
  /* padding: safe-area in alto (status bar/notch) e in basso (home indicator) -> il bottone in fondo resta tappabile */
  padding:calc(22px + env(safe-area-inset-top)) 22px calc(24px + env(safe-area-inset-bottom));
  max-height:92vh; max-height:92dvh; overflow:auto;
  box-shadow:0 18px 40px -18px rgba(40,30,24,.45);
}
@media (min-width:600px){
  .modal-bg{ padding-top:6vh; }   /* su desktop: card staccata dal bordo alto */
  .modal{ border-radius:18px; }
}
#checkout{ min-height:320px; }
.sheet-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; }
.sheet-head > div{ flex:1; min-width:0; }
.sheet-head .btn{ flex:none; }
.sheet-head h2{ font-family:var(--serif); font-weight:500; font-size:26px; line-height:1.1; margin:0; color:var(--ink); letter-spacing:-.01em; }
.qty{ margin:18px 0; display:flex; align-items:center; justify-content:space-between; }
.qty label{ margin:0; }
.qty-stepper{ display:flex; align-items:center; border:1px solid var(--line-2); border-radius:11px; overflow:hidden; }
.qty-stepper button{ font-family:var(--sans); width:42px; height:44px; background:var(--paper); color:var(--ink-2); font-size:20px; border:0; cursor:pointer; transition:background .16s; }
.qty-stepper button:hover{ background:var(--paper-2); }
.qty-stepper input{
  font-family:var(--serif); font-size:19px; font-weight:600; width:54px; text-align:center;
  border:0; border-left:1px solid var(--line); border-right:1px solid var(--line); border-radius:0;
  padding:9px 0; background:var(--paper); color:var(--ink); -moz-appearance:textfield;
}
.qty-stepper input::-webkit-outer-spin-button, .qty-stepper input::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }

/* ============================================================
   TOAST
   ============================================================ */
.toast{
  position:fixed; left:50%; bottom:104px; transform:translateX(-50%) translateY(8px);
  background:var(--ink); color:var(--cream); padding:12px 20px; border-radius:999px;
  font-size:13.5px; font-weight:500; box-shadow:var(--shadow-card);
  opacity:0; transition:opacity .2s, transform .2s; z-index:100; pointer-events:none; white-space:nowrap;
}
.toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }
.admin .toast{ bottom:34px; }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width:980px){ .labbody{ grid-template-columns:1fr; } }   /* blocchi sx/dx/sotto impilati */
@media (max-width:760px){
  .orders{ grid-template-columns:1fr; }
  .subgrid{ grid-template-columns:1fr; }
  .labgrid{ grid-template-columns:1fr; }
  .fmt-card .grid2{ grid-template-columns:1fr; }
  .tabs{ top:67px; }
}

/* ---- mobile: gestione compatta su UNA riga (orario sempre leggibile) ---- */
@media (max-width:560px){
  /* nessuno shift orizzontale (clip non rompe lo sticky come overflow:hidden) */
  body.admin{ overflow-x:clip; }
  /* meno padding laterale → ~28px di spazio in più ovunque (assorbe differenze iOS) */
  .admin .wrap{ padding:14px 13px 40px; }
  .admin .bar-in{ padding:14px 14px; }
  .tabs{ margin:0 -13px 16px; padding:12px 13px 10px; }
  /* riga di gestione: tutto su una sola riga */
  .mrow{ gap:7px; padding:13px 12px; }
  .mrow .switch{ gap:0; flex:none; }
  .mrow .switch-lbl{ display:none; }           /* toggle senza testo: lo stato è il colore */
  /* campo FASCIA (orario): larghezza FISSA piccola, non cresce/non collassa */
  .mrow .s-label{ flex:0 0 124px; width:124px; min-width:0; font-size:14px; padding:11px 8px; }
  /* nome gusto: flessibile (i nomi variano di lunghezza) */
  .mrow .g-name{ flex:1 1 0; min-width:96px; font-size:14px; padding:12px 10px; }
  .slotmax{ gap:4px; flex:none; }
  .slotmax-lbl{ font-size:9px; letter-spacing:.03em; }
  .slotmax input{ -webkit-appearance:none; appearance:none; flex:0 0 44px; width:44px; max-width:44px; min-width:0; padding:9px 2px; }
  .mrow .btn.icon{ flex:none; padding:8px 8px; }
  /* riordino + stellina compatti: la riga gusto resta su una sola linea */
  .mrow .drag-handle{ padding:4px 1px; font-size:16px; }
  .mrow .star-btn, .mrow .daily-btn{ width:29px; height:29px; font-size:14px; }
  .mrow{ gap:6px; }
  .mrow .g-name{ min-width:52px; }
  /* add-row: i select prendono larghezza utile, va a capo */
  .addrow{ flex-wrap:wrap; }
  .addrow .select-wrap.grow{ flex:1 1 40%; min-width:118px; }
  /* statistiche fasce: due card piene per riga */
  .slotstat{ flex:1 1 calc(50% - 5px); min-width:0; }
}

@media (prefers-reduced-motion:reduce){
  *{ transition:none !important; animation:none !important; }
}

/* ---- autocomplete indirizzo (Photon) ---- */
.addr-wrap { position: relative; }
.addr-suggest {
  display: none; position: absolute; top: 100%; left: 0; right: 0; z-index: 1200;
  margin-top: 4px; background: #fff; border: 1px solid #e6e0d6; border-radius: 10px;
  box-shadow: 0 8px 24px rgba(43, 38, 32, .14); overflow-y: auto; max-height: 280px;
}
.addr-item { padding: 9px 12px; cursor: pointer; display: flex; flex-direction: column; gap: 1px; border-bottom: 1px solid #f0ece3; }
.addr-item:last-child { border-bottom: 0; }
.addr-item:hover, .addr-item.sel { background: #f7f2e9; }
.addr-item .ai-1 { font-weight: 600; font-size: .92rem; color: #2b2620; }
.addr-item .ai-2 { font-size: .78rem; color: #8a8174; }

/* ---- badge conteggio ordini attivi sui tab ---- */
.tabbadge {
  display: none; min-width: 18px; height: 18px; padding: 0 5px; margin-left: 6px;
  border-radius: 9px; background: #a8552f; color: #fff; font-size: .72rem; font-weight: 700;
  line-height: 18px; text-align: center; vertical-align: middle;
}
.tabbadge.show { display: inline-block; }

/* ---- Laboratorio: dettaglio vaschette ---- */
.labsub { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: #8a8174; font-weight: 700; margin-bottom: 6px; }
.vline { display: flex; gap: 8px; align-items: baseline; padding: 3px 0; }
.vline .vq { font-weight: 700; color: #a8552f; min-width: 26px; }
.vline .vn { font-size: .9rem; }
.vline .vn small { display: block; color: #8a8174; font-size: .76rem; }

/* ---- codice sconto (cliente) ---- */
.coupon-msg { margin-top: 6px; font-size: .85rem; font-weight: 600; }
.coupon-msg.ok { color: #2f6f3f; }
.coupon-msg.ko { color: #b00020; }
#coupon:disabled{ background:var(--paper-2); color:var(--faint); cursor:not-allowed; }
#coupon-gate{ margin:7px 1px 0; }

/* editor Homepage (Parametri) */
#home-editor .he-grp{ margin-bottom:20px; }
#home-editor .he-grp:last-child{ margin-bottom:0; }
.he-h{ font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); margin-bottom:12px; }
.he-img{ display:flex; gap:12px; align-items:center; padding:9px 0; border-bottom:1px solid var(--line); }
.he-img:last-child{ border-bottom:0; }
.he-thumb{ width:64px; height:64px; flex:none; border-radius:9px; border:1px solid var(--line-2); background:var(--paper-2) center/cover no-repeat; }
.he-imeta{ flex:1; min-width:0; }
.he-imeta label{ margin:0 0 5px 1px; }
.he-file{ font-size:12px; width:100%; }
.he-state{ font-size:12px; color:var(--muted); margin-top:4px; }

/* ---- codici sconto (admin) ---- */
.dc-form { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }
.dc-form .field { margin: 0; }
.dc-form .dc-code { flex: 2 1 170px; }
.dc-form .dc-mid  { flex: 1 1 150px; }
.dc-form .dc-val  { flex: 0 1 110px; }
.dc-form .btn { flex: none; }
.dc-row { display: flex; align-items: center; gap: 12px; padding: 9px 0; border-bottom: 1px solid #f0ece3; }
.dc-row:last-child { border-bottom: 0; }
.dc-row.off { opacity: .55; }
.dc-main { flex: 1; min-width: 0; }
.dc-main small { display: block; color: #8a8174; font-size: .76rem; margin-top: 2px; }
.dc-val { color: #a8552f; font-weight: 700; }
.dc-tag { font-size: .64rem; font-weight: 700; padding: 1px 6px; border-radius: 6px; margin-left: 4px; }
.dc-tag.always { background: #e7f0e7; color: #2f6f3f; }
.dc-tag.oneoff { background: #f3e7da; color: #a8552f; }
.dc-actions { display: flex; gap: 6px; flex: none; }
