/* ============================================================================
   Clomy · Admin — component layer
   ----------------------------------------------------------------------------
   Sorgente del brand: docs/brand-kit (kit iOS light, v1.0). I valori di colore,
   raggio, spazio e bordo arrivano tutti da /tokens.css, che è una copia
   vendored di docs/brand-kit/tokens.css: non modificare i valori qui, si
   modificano nel kit e si ricopia il file (vedi README di questa cartella).

   Scala: i token tipografici e geometrici del kit sono in pt per iPhone. Questa
   è una console dati desktop-first, quindi conserva i RUOLI del brand (Fraunces
   per la voce, Figtree per l'interfaccia, crema/cioccolato/albicocca) a una
   scala web più densa: 14px testo UI, 13px tabelle, 11px eyebrow, 44px minimo
   per i controlli (52px solo per la CTA di accesso, l'unica azione "hero").
   Niente ombre sui contenuti: l'unica eccezione è il pannello di accesso, che è
   un foglio flottante (foundations.md § Geometria).
   ========================================================================== */

@font-face{font-family:Figtree;src:url("/assets/fonts/Figtree-variable.ttf") format("truetype");font-weight:300 900;font-display:swap}
@font-face{font-family:Fraunces;src:url("/assets/fonts/Fraunces-variable.ttf") format("truetype");font-weight:100 900;font-display:swap}

:root{
  /* Ruoli del kit → nomi brevi usati qui sotto. */
  --cream:var(--color-background-page);
  --surface:var(--color-background-surface);
  --subtle:var(--color-background-subtle);
  --chocolate:var(--color-background-inverse);
  --moka:var(--color-text-secondary);
  --rust:var(--color-text-danger);
  --positive:var(--color-text-positive);
  --positive-tint:var(--color-status-positiveBackground);
  --danger-tint:var(--color-status-dangerBackground);
  --apricot:var(--color-selection-choice);
  --line:var(--color-border-decorative);
  --control:var(--color-border-control);
  --focus:var(--color-border-focus);

  /* Sul pannello cioccolato vale la regola del kit: usare crema. Queste tinte
     sono crema mescolata verso il pannello, non grigi. */
  --on-dark:var(--cream);
  --on-dark-muted:color-mix(in oklab, var(--cream) 76%, var(--chocolate)); /* 8.5:1 */
  --on-dark-line:color-mix(in oklab, var(--cream) 40%, var(--chocolate)); /* bordo 3.2:1 */
  --on-dark-fill:color-mix(in oklab, var(--cream) 14%, var(--chocolate));
  --on-dark-fill-hover:color-mix(in oklab, var(--cream) 22%, var(--chocolate));

  --row-hover:color-mix(in oklab, var(--apricot) 14%, var(--cream));
  --proximity:color-mix(in oklab, var(--apricot) 26%, var(--cream)); /* badge "in corso" */
  --chrome-hover:color-mix(in oklab, var(--chocolate) 8%, var(--subtle));
  --focus-apricot:var(--apricot); /* focus su pannello invertito: 7.5:1 sul cioccolato */

  /* Nomi storici ancora referenziati dai template delle viste in index.html. */
  --crema:var(--cream); --ink:var(--chocolate); --border:var(--line);
  --text2:var(--moka); --text3:var(--moka); --label:var(--moka);
  --faint:var(--moka); --chevron:var(--control); --track:var(--subtle);
  --r-sm:var(--radius-field); --r-fld:var(--radius-field); --r-card:var(--radius-card);

  --ease:cubic-bezier(.22,1,.36,1);
  --icon-alert:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 1.9 14.6 14H1.4z'/%3E%3Cpath d='M8 6.2v3.4'/%3E%3C/svg%3E");
}

/* ── Base ─────────────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--cream);color:var(--chocolate);
  font:400 14px/1.55 Figtree,system-ui,-apple-system,"Segoe UI",sans-serif;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2{margin:0;font-family:Fraunces,Georgia,"Times New Roman",serif;font-weight:600;
  font-variation-settings:'SOFT' 0,'WONK' 1,'opsz' 32;letter-spacing:-.025em;line-height:1.15}
h2{font-size:28px}
h3{margin:0;font:600 20px/1.3 Figtree,sans-serif;letter-spacing:-.01em}
p{margin:0 0 8px}
a{color:var(--chocolate);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
a:hover{text-decoration-thickness:2px}
code,pre,kbd{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace}
/* inline code stays plain: a padded chip would push punctuation away from the word */
code{font-size:.92em;color:var(--moka)}
::placeholder{color:var(--moka);opacity:1}
::selection{background:var(--apricot);color:var(--chocolate)}
:focus-visible{outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px}
.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip-path:inset(50%);white-space:nowrap;border:0}
.num{font-variant-numeric:tabular-nums}
.muted,.faint{color:var(--moka)}
/* "stima" flags in Utilizzo: an annotation, not part of the label next to it */
.est{font:italic 11px/1.4 Figtree,sans-serif;color:var(--moka)}
.spacer{margin-left:auto}
.warn{color:var(--chocolate);font-weight:600}   /* guardrail, non errore */
.bad{color:var(--rust);font-weight:600}

/* ── Header: il dock marrone dell'app ────────────────────────────────────── */
/* La barra è a tutta larghezza, il suo contenuto usa lo stesso incolonnamento
   di main (max-width + inset): una sola griglia per tutta la pagina. */
header{position:sticky;top:0;z-index:10;background:var(--chocolate);color:var(--on-dark)}
header .bar{max-width:1120px;margin:0 auto;min-height:64px;display:flex;align-items:center;
  gap:var(--space-lg);padding:10px var(--layout-pageInset)}
header h1.brand{display:flex;flex:none;margin:0}
header h1.brand img{display:block;width:auto;height:26px}
.role{flex:none;font:600 11px/1 Figtree,sans-serif;letter-spacing:1.1px;text-transform:uppercase;
  color:var(--on-dark);border:1px solid var(--on-dark-line);border-radius:var(--radius-pill);
  padding:7px 12px}
nav{display:flex;align-items:center;gap:4px;scrollbar-width:none}
nav::-webkit-scrollbar{display:none}
nav a{display:inline-flex;align-items:center;height:40px;padding:0 14px;border-radius:var(--radius-pill);
  font:500 14px/1 Figtree,sans-serif;color:var(--on-dark-muted);text-decoration:none;white-space:nowrap;
  transition:background-color 120ms var(--ease),color 120ms var(--ease)}
nav a:hover{color:var(--on-dark);background:var(--on-dark-fill)}
nav a.on{background:var(--apricot);color:var(--chocolate);font-weight:600}
header .status{margin-left:auto;font:400 12px/1 Figtree,sans-serif;color:var(--on-dark-muted);
  font-variant-numeric:tabular-nums;white-space:nowrap}
/* La vista Salute marca la riga quando c'è qualcosa da guardare: albicocca sul cioccolato
   (7.5:1) invece di un colore di stato inventato. */
header .status.alert{color:var(--apricot);font-weight:600}
#logoutBtn{flex:none;font:600 13px Figtree,sans-serif;color:var(--on-dark);background:var(--on-dark-fill);
  border:1px solid var(--on-dark-line);border-radius:var(--radius-pill);height:36px;padding:0 16px;
  cursor:pointer;transition:background-color 120ms var(--ease)}
#logoutBtn:hover{background:var(--on-dark-fill-hover)}

/* ── Pagina ──────────────────────────────────────────────────────────────── */
main{max-width:1120px;margin:0 auto;padding:var(--space-xl) var(--layout-pageInset) var(--space-hero)}
.pagehead{display:flex;align-items:baseline;gap:var(--space-md);flex-wrap:wrap;margin:0 0 var(--space-lg)}
.pagehead .sub{color:var(--moka);font-variant-numeric:tabular-nums}
/* pills and buttons sit on the optical centre of the title, not on its baseline */
.pagehead .badge,.pagehead button,.pagehead .spacer{align-self:center}
.back{display:inline-flex;align-items:center;min-height:32px;margin-bottom:var(--space-sm);
  font:600 13px/1 Figtree,sans-serif;color:var(--moka);text-decoration:none}
.back:hover{color:var(--chocolate);text-decoration:underline}
.empty{color:var(--moka);text-align:center;padding:48px var(--space-xl)}

/* ── Bottoni: 44px di area minima ovunque ────────────────────────────────── */
button{font:600 13px/1 Figtree,sans-serif;color:var(--chocolate);background:var(--surface);
  border:1px solid var(--control);border-radius:var(--radius-field);min-height:40px;padding:0 16px;
  cursor:pointer;transition:background-color 120ms var(--ease),border-color 120ms var(--ease)}
button:hover:not(:disabled){background:var(--cream);border-color:var(--chocolate)}
button.primary{background:var(--chocolate);border-color:var(--chocolate);color:var(--cream)}
button.primary:hover:not(:disabled){background:var(--color-action-primaryPressed);border-color:var(--color-action-primaryPressed)}
button.danger{background:var(--danger-tint);border-color:color-mix(in oklab,var(--rust) 40%,var(--danger-tint));color:var(--rust)}
button.danger:hover:not(:disabled){background:color-mix(in oklab,var(--rust) 12%,var(--danger-tint));border-color:color-mix(in oklab,var(--rust) 52%,var(--danger-tint))}
/* variante "text": resta un controllo riconoscibile, con contorno a 3.8:1 */
button.ghost{background:transparent;border-color:var(--control);color:var(--moka)}
button.ghost:hover:not(:disabled){background:var(--subtle);border-color:var(--chocolate);color:var(--chocolate)}
button:disabled{background:var(--color-action-disabled);border-color:var(--color-action-disabled);
  color:var(--color-action-onDisabled);cursor:default}

/* ── Card ────────────────────────────────────────────────────────────────── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);
  padding:var(--space-lg);margin-bottom:var(--space-md)}
.grp{font:600 11px/1.4 Figtree,sans-serif;letter-spacing:1.1px;text-transform:uppercase;
  color:var(--moka);margin:var(--space-section) 0 var(--space-sm)}

/* ── Tabelle: righe editoriali su crema, senza card annidate ─────────────── */
table{width:100%;border-collapse:collapse;font-size:13px;border-top:1px solid var(--control)}
thead th{text-align:left;font:600 11px/1.4 Figtree,sans-serif;letter-spacing:1.1px;text-transform:uppercase;
  color:var(--moka);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
tbody td{padding:12px;border-bottom:1px solid var(--line);color:var(--moka);vertical-align:middle}
/* l'ultima riga tiene la sua linea: la tabella si chiude, non resta sospesa */
tbody tr.clk{cursor:pointer}
tbody tr.clk:hover td{background:var(--row-hover)}
td .strong{color:var(--chocolate);font-weight:600}
.thumb{width:44px;height:55px;border-radius:12px;object-fit:cover;background:var(--subtle);
  border:1px solid var(--line);display:block}
.thumb.empty{display:flex;align-items:center;justify-content:center;color:var(--control);font-size:16px}

/* ── Badge di stato ──────────────────────────────────────────────────────── */
.badge{display:inline-flex;align-items:center;font:600 11px/1 Figtree,sans-serif;padding:5px 9px;
  border-radius:var(--radius-pill);background:var(--subtle);color:var(--moka);white-space:nowrap}
.badge.pos{background:var(--positive-tint);color:var(--positive)}
.badge.warn{background:var(--proximity);color:var(--chocolate)}
.badge.neg{background:var(--danger-tint);color:var(--rust)}
.dot{display:inline-block;width:14px;height:14px;border-radius:var(--radius-pill);
  border:1px solid var(--control);vertical-align:-2px;margin-right:8px}

/* ── Dettaglio ───────────────────────────────────────────────────────────── */
.cols{display:grid;grid-template-columns:300px 1fr;gap:var(--space-lg);align-items:start}
@media(max-width:820px){.cols{grid-template-columns:1fr}}
.photo{border:1px solid var(--line);border-radius:var(--radius-field);overflow:hidden;background:var(--subtle)}
.photo img{display:block;width:100%;height:auto}
.photo .cap{font:600 11px/1.4 Figtree,sans-serif;letter-spacing:1.1px;text-transform:uppercase;
  color:var(--moka);padding:8px 10px;border-top:1px solid var(--line)}
.bigimg{width:100%;border-radius:var(--radius-field);border:1px solid var(--line);background:var(--subtle);display:block}

/* ── Form ────────────────────────────────────────────────────────────────── */
.form{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}
.fld{display:flex;flex-direction:column;gap:8px}
.fld.wide{grid-column:1/-1}
.fld.chk{flex-direction:row;align-items:center;gap:10px;grid-column:1/-1}
.fld input,.fld select,.fld textarea{font:400 14px/1.4 Figtree,sans-serif;color:var(--chocolate);
  background:var(--cream);border:1px solid var(--control);border-radius:var(--radius-field);
  padding:11px 13px;width:100%;min-height:40px}
.fld input:focus-visible,.fld select:focus-visible,.fld textarea:focus-visible{
  outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px;border-color:var(--chocolate)}
.fld textarea{min-height:88px;resize:vertical}
.fld textarea[data-kind="json"]{font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}
.fld.chk input{width:18px;height:18px;min-height:0;accent-color:var(--chocolate);flex:none}
.fld.chk span{font-weight:600;color:var(--chocolate)}
.flabel{font:600 11px/1.4 Figtree,sans-serif;letter-spacing:1.1px;text-transform:uppercase;color:var(--moka)}
.strong{color:var(--chocolate);font-weight:600}
.ro{display:flex;flex-direction:column;gap:4px;padding:10px 0;border-bottom:1px solid var(--line)}
.ro:last-child{border-bottom:none}
.roval{color:var(--chocolate);word-break:break-word}
.actions{display:flex;gap:var(--space-md);margin-top:var(--space-lg);padding-top:var(--space-lg);
  border-top:1px solid var(--line);flex-wrap:wrap}
/* summary resta list-item: il triangolo nativo è l'affordance di apertura, quindi
   niente `display:flex` qui (lo cancellerebbe). Padding per un target comodo. */
details summary{cursor:pointer;font:600 13px/1.4 Figtree,sans-serif;color:var(--moka);
  padding:6px 0}
details summary:hover{color:var(--chocolate)}
details[open] summary{margin-bottom:var(--space-sm)}
pre{background:var(--subtle);border:1px solid var(--line);border-radius:var(--radius-field);
  padding:14px;overflow:auto;font-size:12px;line-height:1.55;color:var(--chocolate);
  white-space:pre-wrap;word-break:break-word;margin:8px 0 0}
pre.snap{background:var(--cream);border-radius:10px;padding:10px;font-size:11px;max-height:280px}

/* ── Editor prompt ───────────────────────────────────────────────────────── */
.p-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.p-head .strong{color:var(--chocolate);font-weight:600}
.p-head .k{font:12px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--moka)}
.p-row{display:flex;gap:10px;align-items:center;margin-top:var(--space-md);flex-wrap:wrap}
.p-row .when{margin-left:auto;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--moka)}
.ta{width:100%;min-height:120px;padding:12px;resize:vertical;
  font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--chocolate);
  background:var(--cream);border:1px solid var(--control);border-radius:var(--radius-field)}
.ta:focus-visible{outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px;border-color:var(--chocolate)}
.coach-head{font:600 16px/1.3 Figtree,sans-serif;color:var(--chocolate);margin-bottom:6px}
.coach-sum{margin:0 0 12px;color:var(--moka);line-height:1.55}

/* ── Sparkline (Utilizzo) ────────────────────────────────────────────────── */
.spark{display:block}
.spark rect{fill:var(--moka)}

/* ── Salute (controlli automatici) ───────────────────────────────────────── */
.finding{display:flex;align-items:baseline;gap:var(--space-md);padding:11px 0;
  border-bottom:1px solid var(--line)}
.finding:last-child{border-bottom:none}
.finding .msg{color:var(--chocolate)}
.finding .nums{margin-left:auto;color:var(--moka);font-variant-numeric:tabular-nums;white-space:nowrap}
/* Storico: una cella per controllo, dal più vecchio al più recente. Il colore è ridondante:
   sotto c'è il conteggio in chiaro, quindi la striscia non è l'unica fonte dell'informazione. */
.hstrip{display:flex;gap:3px;flex-wrap:wrap}
.hcell{width:14px;height:14px;border-radius:4px;background:var(--subtle);border:1px solid var(--line)}
.hcell.ok{background:var(--positive-tint);border-color:color-mix(in oklab,var(--positive) 40%,var(--positive-tint))}
.hcell.warn{background:var(--proximity);border-color:color-mix(in oklab,var(--chocolate) 30%,var(--proximity))}
.hcell.critical{background:var(--danger-tint);border-color:color-mix(in oklab,var(--rust) 45%,var(--danger-tint))}

/* ── Store ───────────────────────────────────────────────────────────────── */
/* Recensioni: testo scritto da altri, quindi righe lunghe e leggibili, senza riquadri dentro
   riquadri. La risposta del team è su fondo tenue invece che con una barra laterale: il
   marchio non usa bordi a striscia. */
.review{padding:14px 0;border-bottom:1px solid var(--line)}
.review:last-child{border-bottom:none}
.rhead{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.rdate{margin-left:auto;font:400 12px Figtree,sans-serif;color:var(--moka);white-space:nowrap}
.rbody{margin:8px 0 0;color:var(--chocolate);white-space:pre-wrap}
.rcap{margin:6px 0 0;font:400 12px Figtree,sans-serif;color:var(--moka)}
.rreply{margin:10px 0 0;padding:10px 14px;background:var(--subtle);border-radius:var(--radius-field);
  color:var(--chocolate)}
/* Elenco di variabili d'ambiente: monospaziato, una per riga, senza pallini decorativi. */
.hints{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.hints li{font:400 13px/1.5 Figtree,sans-serif;color:var(--moka)}
.hints code{color:var(--chocolate)}
/* Nota a fondo pagina: si legge dopo i dati, quindi non compete con loro. */
.foot{margin-top:var(--space-lg);font:400 12px/1.6 Figtree,sans-serif;color:var(--moka)}
.foot.tight{margin-top:10px}

/* ── Ricerca, filtri, pager ──────────────────────────────────────────────── */
.regen{display:flex;gap:var(--space-md);align-items:center;flex-wrap:wrap;margin-bottom:12px}
.regen .muted{font-size:13px;line-height:1.4}
.searchbar,.filters{display:flex;gap:10px;align-items:center;margin-bottom:var(--space-lg)}
.searchbar input,.filters input{font:400 14px/1.4 Figtree,sans-serif;color:var(--chocolate);
  background:var(--cream);border:1px solid var(--control);border-radius:var(--radius-field);
  padding:11px 15px;min-height:40px;width:360px;max-width:56vw}
.searchbar input:focus-visible,.filters input:focus-visible{outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px}
/* Select dei filtri (utenti test, intervallo): stessa geometria degli input, o la barra
   sembra montata con due sistemi diversi. */
.searchbar select,.filters select{font:400 14px/1.4 Figtree,sans-serif;color:var(--chocolate);
  background:var(--cream);border:1px solid var(--control);border-radius:var(--radius-field);
  padding:11px 15px;min-height:40px}
.searchbar select:focus-visible,.filters select:focus-visible{outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px}
.pick{display:inline-flex;align-items:center}
/* L'export chiude la barra a destra, senza spostare ricerca e filtro. */
.searchbar .spacer,.filters .spacer{margin-left:auto}
.pager{display:flex;align-items:center;gap:var(--space-md);margin-top:var(--space-lg);flex-wrap:wrap}
.pager span{color:var(--moka)}
/* Avviso in linea (es. filtro test non ancora attivo sul database): si legge prima dei dati,
   ma non e' un errore bloccante, quindi niente rosso. */
.notice{margin:0 0 var(--space-lg);padding:12px 14px;border:1px solid var(--control);
  border-radius:var(--radius-field);background:var(--subtle);color:var(--chocolate);font-size:13px;line-height:1.5}
.notice code{color:var(--chocolate)}

/* ── Intestazioni ordinabili ─────────────────────────────────────────────── */
/* Il bottone e' invisibile come controllo: resta il testo della th. L'affordance e' la
   freccia tenue a due punte, che si accende sulla colonna attiva. */
thead th .thbtn{display:inline-flex;align-items:center;gap:6px;background:none;border:0;
  border-radius:0;min-height:0;padding:0;margin:0;font:inherit;color:inherit;
  letter-spacing:inherit;text-transform:inherit;cursor:pointer}
thead th .thbtn:hover:not(:disabled){background:none;border-color:transparent;color:var(--chocolate)}
.sort-ind{opacity:.35;font-size:9px;line-height:1}
th[aria-sort] .thbtn{color:var(--chocolate)}
th[aria-sort] .sort-ind{opacity:1}

/* ── Funnel (scala dell'attivazione, campi numerici) ─────────────────────── */
/* Tre campi numerici nella barra dei filtri: stessa geometria degli altri controlli, ma il
   valore e' stretto, non largo come una ricerca. */
.numfld{display:flex;flex-direction:column;gap:4px}
.numfld input{font:400 14px/1.4 Figtree,sans-serif;color:var(--chocolate);background:var(--cream);
  border:1px solid var(--control);border-radius:var(--radius-field);padding:11px 13px;min-height:40px;width:140px}
.numfld input:focus-visible{outline:var(--borderWidth-focus) solid var(--focus);outline-offset:2px}
/* La scala del funnel: una riga per gradino, la barra proporzionale alla base. Il gradino con
   la perdita maggiore e' l'unico albicocca, cosi' l'occhio cade li' senza decorazioni. */
.funnel{display:flex;flex-direction:column;gap:2px;margin-bottom:var(--space-md)}
.fstep{display:grid;grid-template-columns:26px minmax(180px,240px) 1fr auto;gap:var(--space-md);
  align-items:center;padding:11px 0;border-bottom:1px solid var(--line)}
.fstep:last-child{border-bottom:none}
.ford{font:600 11px/1 Figtree,sans-serif;color:var(--moka);font-variant-numeric:tabular-nums}
.fname{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600;color:var(--chocolate)}
.ftrack{height:14px;background:var(--subtle);border-radius:var(--radius-pill);overflow:hidden;min-width:80px}
.fbar{display:block;height:100%;background:var(--chocolate);border-radius:var(--radius-pill);transition:width 240ms var(--ease)}
.fstep.is-drop .fbar{background:var(--apricot)}
.fmeta{color:var(--moka);white-space:nowrap}
.fmeta strong{color:var(--chocolate)}
/* Colonna della finestra scelta nella tabella di attivazione: albicocca tenue, come le
   selezioni altrove. */
.sel-col{background:color-mix(in oklab,var(--apricot) 14%,var(--cream))}
@media(prefers-reduced-motion:reduce){.fbar{transition:none}}
@media(max-width:820px){
  .fstep{grid-template-columns:22px 1fr;row-gap:6px}
  .ftrack{grid-column:2}
  .fmeta{grid-column:2;white-space:normal}
}

/* ── Segmented (filtri di vista) ─────────────────────────────────────────── */
.seggroup{display:inline-flex;gap:2px;background:var(--subtle);border-radius:var(--radius-pill);
  padding:3px;margin-bottom:var(--space-lg)}
.seg{font:500 14px/1 Figtree,sans-serif;color:var(--moka);background:transparent;border:none;
  border-radius:var(--radius-pill);min-height:40px;padding:0 18px;cursor:pointer;
  transition:background-color 120ms var(--ease),color 120ms var(--ease)}
.seg:hover:not(:disabled){background:var(--chrome-hover);color:var(--chocolate);border-color:transparent}
.seg.on{background:var(--chocolate);color:var(--cream);font-weight:600}

/* ── Toast ───────────────────────────────────────────────────────────────── */
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,8px);z-index:50;
  background:var(--chocolate);color:var(--on-dark);font:600 13px/1 Figtree,sans-serif;
  padding:12px 20px;border-radius:var(--radius-pill);opacity:0;pointer-events:none;
  transition:opacity 120ms var(--ease),transform 120ms var(--ease)}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ── Gate di accesso (pannello invertito) ────────────────────────────────── */
#app{visibility:hidden}
header{visibility:hidden}
body.authed #app,body.authed header{visibility:visible}
#login{position:fixed;inset:0;z-index:100;background:var(--cream);display:flex;align-items:center;
  justify-content:center;padding:var(--space-xl);overflow:auto}
body.authed #login{display:none}
#login .boot{position:absolute;inset:0;display:grid;place-items:center;margin:0;
  color:var(--moka);font-size:13px}
body.needs-login #login .boot{display:none}
#loginForm{width:100%;max-width:420px;background:var(--chocolate);color:var(--on-dark);
  border-radius:var(--radius-panel);padding:40px 36px;display:flex;flex-direction:column;
  align-items:center;gap:var(--space-md);visibility:hidden;
  box-shadow:0 32px 64px -32px rgba(51,32,25,.45)}
body.needs-login #loginForm{visibility:visible}
#loginForm .wordmark{display:flex;margin:0}
#loginForm .wordmark img{display:block;width:152px;height:auto}
#login h2{font-size:26px;color:var(--on-dark);letter-spacing:-.02em}
#login p{color:var(--on-dark-muted);font-size:14px;line-height:1.55;text-align:center;max-width:34ch;margin:0}
#login .box{display:flex;flex-direction:column;gap:10px;width:100%;margin-top:var(--space-sm)}
#login input{font:400 16px/1.2 Figtree,sans-serif;padding:14px 16px;min-height:52px;width:100%;
  background:var(--cream);color:var(--chocolate);border:1px solid transparent;border-radius:var(--radius-field)}
#login input::placeholder{color:var(--moka)}
#login button{font:600 16px/1 Figtree,sans-serif;min-height:52px;padding:0 16px;border:none;
  border-radius:var(--radius-field);background:var(--cream);color:var(--chocolate);cursor:pointer;
  transition:background-color 120ms var(--ease)}
#login button:hover:not(:disabled){background:var(--color-background-subtle)}
#login button:disabled{background:var(--on-dark-fill);color:var(--on-dark-muted);cursor:default}
#login button#loginBack{min-height:36px;background:transparent;color:var(--on-dark-muted);
  font:500 13px/1 Figtree,sans-serif;padding:0}
#login button#loginBack:hover{background:transparent;color:var(--on-dark);text-decoration:underline}
#login #loginCode{text-align:center;letter-spacing:6px;font-variant-numeric:tabular-nums;font-size:18px}
#login :focus-visible{outline-color:var(--focus-apricot)}
#loginMsg{font-size:13px;line-height:1.45;color:var(--on-dark-muted);min-height:18px;max-width:40ch}
#loginMsg.err{color:var(--on-dark);font-weight:600}
#loginMsg.err::before{content:"";display:inline-block;width:14px;height:14px;margin-right:7px;
  vertical-align:-2px;background:currentColor;mask:var(--icon-alert) center/contain no-repeat;
  -webkit-mask:var(--icon-alert) center/contain no-repeat}

/* ── Movimento ───────────────────────────────────────────────────────────── */
@keyframes rise{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
#app>*{animation:rise 200ms var(--ease) both}
@media(prefers-reduced-motion:reduce){
  #app>*{animation:none}
  .toast{transition:opacity 120ms linear;transform:translate(-50%,0)}
  .toast.show{transform:translate(-50%,0)}
}

/* ── Adattamenti ─────────────────────────────────────────────────────────── */
@media(pointer:coarse){
  button,.seg,nav a,.searchbar input,.filters input,.searchbar select,.filters select,.fld input,.fld select{min-height:44px}
}
/* Con l'ottava voce (Store) la barra non ci sta piu a larghezze da portatile: prima di
   mandare la navigazione a capo, che raddoppia l'altezza del dock, lo stato si toglie di
   mezzo e le voci scorrono. Lo stesso vale per il resto della barra a 820px. */
@media(max-width:1180px){
  header .status{display:none}
  header nav{overflow-x:auto}
}
@media(max-width:820px){
  header .bar{flex-wrap:wrap;row-gap:6px;padding:10px 20px}
  header nav{order:3;width:100%;overflow-x:auto;gap:6px;padding-bottom:2px}
  header .status{display:none}
  #logoutBtn{margin-left:auto}
  thead th{white-space:normal}
}
@media(max-width:600px){
  main{padding:var(--space-lg) 20px var(--space-section)}
  h2{font-size:24px}
  .form{grid-template-columns:1fr}
  .searchbar input,.filters input{width:100%;max-width:none}
  .searchbar,.filters{flex-wrap:wrap}
  .seggroup{display:flex;overflow-x:auto;width:100%}
  .seg{padding:0 14px}
  #login{padding:20px}
  #loginForm{padding:32px 24px}
  #loginForm .wordmark img{width:132px}
}
