:root{
  /* Identita Acton: valori rilevati dal CSS pubblico di acton.forini.com. */
  --brand-primary:#e10712;
  --brand-primary-hover:#c80610;
  --brand-secondary:#7b8080;
  --brand-dark:#2c2c2c;
  --brand-accent:#eb2027;
  --brand-muted:#7b8080;
  --text-on-brand:#ffffff;
  --brand-on-primary:var(--text-on-brand);
  --brand-soft:#fff1f2;

  --surface-page:#f5f5f5;
  --surface-card:#ffffff;
  --surface-elevated:#ffffff;
  --surface-subtle:#f1f1f1;
  --surface-dark:#242424;
  --text-primary:#242424;
  /* Piu scuro del muted del sito per garantire contrasto AA su bianco. */
  --text-secondary:#5f6464;
  --border-default:#d5d5d5;
  --border-strong:#b9b9b9;

  /* Stati funzionali: indipendenti dalla palette di marca. */
  --status-success:#188447;
  --status-success-surface:#e9f6ee;
  --status-success-border:#9fcdb1;
  --status-warning:#9a6200;
  --status-warning-surface:#fff5dc;
  --status-warning-border:#e0bd70;
  --status-danger:#c62828;
  --status-danger-surface:#fff0f1;
  --status-danger-border:#e3a6aa;
  --status-info:#0b526f;
  --status-info-surface:#edf7fb;
  --status-info-border:#a9ccd9;
  --focus-ring:rgba(225,7,18,.28);
  --shadow-card:0 4px 16px rgba(36,36,36,.08);
  --shadow-elevated:0 10px 28px rgba(36,36,36,.14);
  --radius-card:10px;
  --radius-control:8px;
  --font-body:"Open Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --font-heading:Montserrat,"Segoe UI",sans-serif;

  /* Alias legacy: i componenti esistenti restano compatibili. */
  --brand:var(--brand-primary);
  --brand-light:var(--brand-soft);
  --accent:var(--status-warning);
  --ok:var(--status-success);
  --warn:var(--status-warning);
  --err:var(--status-danger);
  --color-unload-active:var(--status-success);
  --color-urgent:#a31621;
  --color-urgent-border:var(--status-danger);
  --color-urgent-background:var(--status-danger-surface);
  --color-own-station-line:var(--status-danger);
  --color-mimit-previous:var(--status-info);
  --color-mimit-previous-background:var(--status-info-surface);
  --station-brand-frame-width:48px;
  --station-brand-frame-height:28px;
  --bg:var(--surface-page);
  --card:var(--surface-card);
  --text:var(--text-primary);
  --muted:var(--text-secondary);
  --border:var(--border-default);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;font-family:var(--font-body);
  background:var(--bg);color:var(--text);font-size:15px;line-height:1.45}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,
summary:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}

header.topbar{background:var(--brand-dark);color:var(--brand-on-primary);padding:8px 18px;display:flex;
  align-items:center;gap:14px;border-bottom:3px solid var(--brand-primary);box-shadow:0 3px 10px rgba(0,0,0,.18);flex-wrap:wrap;
  position:sticky;top:0;z-index:100}
header.topbar img{height:34px;background:var(--surface-card);border-radius:var(--radius-control);padding:3px}
/* Logo ACTON SPECIAL FUEL (SVG per fondo scuro): niente riquadro bianco. */
header.topbar img.topbar-logo{height:34px;width:auto;background:transparent;border-radius:0;padding:0}
/* L'identita' JetTulio non si comprime MAI: se la riga e' piena devono
   andare a capo gli altri blocchi (freshness) o accorciarsi il saluto,
   altrimenti il wordmark trabocca sotto il nome utente (bug iPad 768px). */
.app-identity{display:flex;align-items:center;gap:12px;color:#fff;text-decoration:none;flex:0 0 auto}.app-identity:hover{text-decoration:none}
/* Blocco identita' JetTulio (proposta C, scelta di Andrea 2026-08-19): wordmark
   come nella pagina di accesso (corsivo 900, "Jet" rosso e "Tulio" bianco),
   barretta rossa tratteggiata, nome della suite in maiuscoletto. La topbar e'
   scura in ENTRAMBI i temi: bianco e rosso fissi, come il resto della barra. */
header.topbar .jt-lockup{display:grid;gap:3px;line-height:1}
header.topbar .jt-wordmark{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-style:italic;font-weight:900;font-size:20px;letter-spacing:.01em;color:#fff}
header.topbar .jt-wordmark .jt-red{color:var(--brand-primary);font-style:inherit}
header.topbar .jt-wordmark .jt-rest{font-style:inherit}
header.topbar .jt-stripe{height:3px;border-radius:2px;
  background:repeating-linear-gradient(90deg,var(--brand-primary) 0 14px,transparent 14px 20px)}
header.topbar .jt-lockup small{font-size:9.5px;font-weight:750;color:#fff;letter-spacing:1.2px;text-transform:uppercase}
.environment-label{display:inline-flex;align-items:center;border:1px solid var(--status-success-border);
  border-radius:5px;padding:3px 7px;font-size:10px;font-weight:900;letter-spacing:.5px;
  background:var(--status-success-surface);color:#126434}
header.topbar nav{min-width:0;max-width:100%;margin-left:auto;display:flex;flex:1 1 60rem;gap:7px;align-items:center;justify-content:flex-end;flex-wrap:wrap}
header.topbar nav a,.topbar-btn{display:inline-flex;align-items:center;min-height:34px;padding:5px 9px;border:1px solid var(--brand-primary);
  border-radius:var(--radius-control);background:#fff;color:var(--brand-primary);font-size:12px;font-weight:800;text-decoration:none;box-shadow:0 1px 2px rgba(0,0,0,.12)}
header.topbar nav a:hover,.topbar-btn:hover{background:var(--brand-soft);border-color:var(--brand-primary-hover);color:var(--brand-primary-hover);text-decoration:none}
header.topbar nav a.active{background:var(--brand-primary);border-color:#fff;color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.3)}
.topbar-form{margin:0}
.topbar-btn{cursor:pointer}

.wrap{max-width:1600px;margin:24px auto;padding:0 18px}
h1{font-family:var(--font-heading);font-size:22px;margin:0 0 4px;color:var(--brand-dark)}
.sub{color:var(--muted);margin:0 0 20px}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,780px),1fr));gap:16px}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);
  padding:16px;transition:.15s;display:block}
.card:hover{border-color:var(--brand);box-shadow:var(--shadow-card)}
.pv-card{cursor:pointer;scroll-margin-top:84px}
.pv-card.home-anchor-highlight,.pv-card:target{border-color:var(--brand-primary);box-shadow:0 0 0 4px var(--focus-ring),var(--shadow-card)}
.pv-card .manual-form,.pv-card input,.pv-card table,.pv-card canvas{cursor:auto}
.pv-title{display:flex;align-items:center;gap:8px}
.card .pv-name{font-weight:600;font-size:16px;color:var(--brand-dark)}
.card .pv-name:hover{color:var(--brand);text-decoration:none}
.card .meta{color:var(--muted);font-size:13px;margin-top:8px}
.badge{display:inline-block;background:var(--brand-light);color:var(--brand-dark);
  border-radius:20px;padding:2px 10px;font-size:12px;font-weight:600;margin-right:6px}

.unload-dashboard{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);
  padding:14px;margin-bottom:16px;scroll-margin-top:84px}
.unload-dashboard:focus{outline:none}
.unload-dashboard:target{border-color:var(--brand-primary);box-shadow:0 0 0 4px var(--focus-ring)}
.dashboard-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  margin-bottom:10px;flex-wrap:wrap}
.dashboard-heading h2{font-size:15px;margin:0;color:var(--brand-dark);text-transform:uppercase;
  letter-spacing:.5px}
.unload-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.unload-chip{display:flex;align-items:center;gap:8px;border:1px solid var(--border);
  border-radius:var(--radius-control);padding:8px 9px;background:var(--surface-card);color:var(--text);font-size:12px;
  font-weight:700;min-height:48px;overflow:hidden}
.unload-chip:hover{text-decoration:none;border-color:var(--brand)}
.unload-chip:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.daily-unload-truck{display:block;width:30px;height:22px;object-fit:contain;filter:none;
  flex:0 0 30px}
.daily-unload-brand-frame{width:var(--station-brand-frame-width);height:var(--station-brand-frame-height);
  display:inline-flex;align-items:center;justify-content:center;
  flex:0 0 var(--station-brand-frame-width);padding:1px;border-radius:4px;background:var(--surface-card);overflow:visible}
.daily-unload-brand-logo{display:block;width:auto;height:auto;max-width:100%;max-height:100%;
  object-fit:contain;object-position:center;flex-shrink:0}
.daily-unload-station-name{min-width:0;line-height:1.25;overflow-wrap:anywhere}

/* Homepage operativa: solo scarichi e formulazione, con card accessibili. */
.home-operations{display:flex;flex-direction:column;gap:18px}
.home-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.home-title-row p{margin:2px 0 0;color:var(--muted)}
.home-operational-tools{display:flex;gap:12px;align-items:start;flex-wrap:wrap}
.home-main-section{background:var(--card);border:1px solid var(--border);border-top:3px solid var(--brand-primary);
  border-radius:var(--radius-card);padding:18px;box-shadow:var(--shadow-card)}
.home-section-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.home-section-heading h2{margin:0;color:var(--brand-dark);font-family:var(--font-heading);text-transform:uppercase;font-size:16px;letter-spacing:.4px}
.home-section-heading p{margin:3px 0 0;color:var(--muted);font-size:13px}
.daily-unload-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:10px}
.daily-unload-card{display:flex;align-items:flex-start;gap:7px;padding:9px;border:1px solid var(--border);border-radius:var(--radius-card);color:var(--text);background:var(--surface-card);min-height:68px}
.daily-unload-card:hover,.daily-unload-card:focus-visible{border-color:var(--brand);box-shadow:var(--shadow-card);text-decoration:none}
.daily-unload-cards--active{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}
.daily-unload-card--active{border-left:5px solid var(--color-unload-active);background:var(--status-success-surface);box-shadow:var(--shadow-card)}
.daily-unload-card--active:hover,.daily-unload-card--active:focus-visible{border-color:var(--color-unload-active);
  box-shadow:0 4px 14px color-mix(in srgb,var(--color-unload-active) 20%,transparent)}
.unload-active-state{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto}
.unload-active-badge{display:inline-flex;align-items:center;border:1px solid var(--status-success-border);border-radius:999px;padding:2px 7px;
  background:var(--surface-card);color:#126434;font-size:10px;font-weight:900;letter-spacing:.25px;text-transform:uppercase}
.daily-unload-inactive{margin-top:12px;border-top:1px solid var(--border);padding-top:9px}
.daily-unload-inactive>summary{width:max-content;max-width:100%;color:var(--text-secondary,var(--muted));
  cursor:pointer;font-size:12px;font-weight:700;padding:5px 2px}
.daily-unload-inactive>summary:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px;border-radius:4px}
.daily-unload-inactive-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:6px;margin-top:7px}
.daily-unload-card--inactive{align-items:center;min-height:0;padding:6px 8px;background:var(--card);box-shadow:none}
.daily-unload-card--inactive .daily-unload-brand-frame{transform:scale(.88)}
.daily-unload-card--inactive .unload-card-content{gap:0}
/* Avviso "quadro della giornata precedente": prima dell'aggiornamento del
   mattino la home mostra l'ultima elaborazione completata, mai dati misti. */
.unload-previous-day{margin:6px 0 0;padding:8px 12px;max-width:640px;
  border:1px solid var(--status-warning-border);border-left-width:4px;border-radius:8px;
  background:var(--status-warning-surface);color:var(--status-warning);
  font-size:13px;font-weight:600;line-height:1.45}
html{scroll-behavior:smooth}
/* 40px = barra quicknav (46px, agganciata a topbar-11px) + 5px di respiro:
   con la topbar desktop da 68px equivale ai 108px precedenti. */
.formulation-station{scroll-margin-top:calc(var(--topbar-height,68px) + 40px)}
.formulation-station:target{animation:formulation-target-pulse 3s ease-out}
@keyframes formulation-target-pulse{0%{box-shadow:0 0 0 4px var(--focus-ring)}100%{box-shadow:none}}
.unload-card-content{min-width:0;display:flex;flex:1;flex-direction:column;gap:4px}
.unload-card-title{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--brand-dark)}
.unload-card-title strong{overflow-wrap:anywhere}
.unload-product-list{display:flex;flex-direction:column;gap:3px;font-size:12px}
.unload-product-item{display:grid;grid-template-columns:minmax(95px,1fr) minmax(110px,.8fr) minmax(135px,1fr);
  align-items:baseline;gap:4px 10px;padding:4px 6px;border-left:2px solid var(--color-unload-active);line-height:1.3}
.unload-product-item small{font-size:10px;color:var(--muted)}
.unload-card-meta{font-size:11px;color:var(--muted)}
/* --- Formulazione prezzi: cruscotto compatto per punto vendita -------------
   Ogni PV e' un cruscotto: intestazione con marchio e azioni, poi i prodotti
   affiancati in una griglia responsive. Ogni prodotto e' una mini-card densa:
   situazione attuale, chip operativi, righe di posizionamento, striscia del
   prezzo giacenza media. Ogni valore conserva la propria etichetta; il colore
   resta un segnale funzionale (livelli, marginalita', giacenza media). */

/* Navigazione rapida dei punti vendita: barra compatta sempre visibile con il
   PV in vista; il pannello mostra tutti i PV senza scorrimento orizzontale.
   L'aggancio sticky usa l'altezza reale della topbar (--topbar-height,
   misurata da formulation_nav.js): su mobile la topbar va a capo e diventa
   molto piu' alta dei 68px del desktop, un valore fisso lascerebbe la barra
   nascosta dietro la topbar (z-index 40 contro 100). Il -11px replica il
   leggero rientro sotto la topbar gia' usato su desktop (68-11=57). */
.formulation-quicknav{position:sticky;top:calc(var(--topbar-height,68px) - 11px);z-index:40;margin:0 0 10px}
.fq-current{display:flex;align-items:center;gap:10px;width:100%;min-height:46px;
  padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius-card);
  background:var(--surface-card);box-shadow:0 2px 8px rgba(36,36,36,.08);
  color:var(--brand-dark);font:inherit;font-weight:700;text-align:left;cursor:pointer}
.fq-current:hover{border-color:var(--brand-primary)}
.fq-marker{flex:0 0 auto;width:10px;height:10px;border-radius:50%;
  background:var(--brand-primary);box-shadow:0 0 0 3px rgba(198,24,38,.16)}
.fq-current-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-size:14px}
.fq-change{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;
  color:var(--brand-primary);font-size:12px;font-weight:700}
.fq-caret{width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid currentColor;transition:transform .15s ease}
.formulation-quicknav.is-open .fq-caret{transform:rotate(180deg)}
.fq-panel{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:41;
  padding:12px;border:1px solid var(--border);border-radius:var(--radius-card);
  background:var(--surface-card);box-shadow:0 12px 28px rgba(36,36,36,.18)}
.fq-search input{width:100%;min-height:44px;padding:8px 12px;border:1px solid var(--border);
  border-radius:10px;background:var(--surface-subtle);font:inherit;font-size:14px}
.fq-search input:focus{outline:2px solid var(--brand-primary);outline-offset:1px}
.fq-grid{display:grid;gap:6px;margin-top:10px;max-height:min(52vh,420px);overflow-y:auto;
  grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
.fq-item{display:flex;align-items:center;min-height:44px;padding:8px 12px;
  border:1px solid var(--border);border-radius:10px;background:var(--surface-card);
  color:var(--brand-dark);font-size:13px;font-weight:600;line-height:1.25;text-decoration:none}
.fq-item:hover{border-color:var(--brand-primary);background:var(--surface-subtle);text-decoration:none}
.fq-item.is-current{border-color:var(--brand-primary);background:var(--brand-soft);
  color:var(--brand-primary);font-weight:700}
.fq-item[hidden]{display:none}
.fq-empty{margin:10px 2px 0;color:var(--muted);font-size:13px}
@media (max-width:700px){
  .fq-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));max-height:56vh}
  .fq-item{font-size:12.5px}
}
.formulation-stations{display:flex;flex-direction:column;gap:16px}
/* Niente content-visibility/virtualizzazione: misurato con 18 PV, lo scroll
   resta a 60fps e il layout completo costa <200ms, mentre content-visibility
   faceva atterrare corti i salti d'ancora (ricerca PV, indice, scarichi). */
.formulation-station{border:1px solid var(--border);border-left:5px solid var(--brand-primary);border-radius:var(--radius-card);padding:8px 10px 9px;background:var(--surface-card);box-shadow:0 2px 8px rgba(36,36,36,.07)}
.formulation-station:nth-child(even){background:#fcfcfc}
/* Banda di identificazione impianto: ingloba il padding superiore della card
   (margini negativi compensati dal padding interno) cosi' da riempire tutta la
   testata senza aggiungere altezza. Fondo grigio pieno + filo rosso Acton in
   basso: il confine tra un impianto e il successivo resta leggibile anche
   scorrendo velocemente. */
.formulation-station-heading{display:flex;align-items:center;gap:9px;
  margin:-8px -10px 7px;padding:8px 10px 5px;
  background:linear-gradient(180deg,#f7f7f8,#ededef);
  border-bottom:2px solid var(--brand-primary);
  border-radius:8px 8px 0 0;
  box-shadow:0 1px 3px rgba(36,36,36,.07)}
.formulation-station-heading h3{margin:0;color:var(--brand-dark);font-size:15px;font-family:var(--font-heading)}
.formulation-station-heading span{font-size:11px;color:var(--muted)}
.formulation-station-heading .btn{margin-left:auto}
.formulation-station-heading .btn+ .btn,.formulation-station-heading .btn+button{margin-left:0}

/* Indice dei punti vendita: sempre accessibile sotto la barra superiore. */





/* Griglia dei prodotti: mini-card affiancate finche' lo spazio lo consente. */
.formulation-product-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:8px;align-items:stretch}
/* Card affiancate SEMPRE uniformi (bug iPad 2026-08-20): con piu' colonne
   tutte le righe della griglia hanno la stessa altezza (quella della card
   piu' alta dell'impianto), cosi' scarico/giacenza/giacenza media assenti
   non producono card piu' corte. In colonna singola (mobile) resta l'altezza
   naturale: card impilate, l'uniformita' non serve e sprecherebbe schermo. */
@media (min-width:701px){.formulation-product-list{grid-auto-rows:1fr}}
.formulation-product{display:flex;flex-direction:column;gap:6px;min-width:0;padding:7px 8px;
  border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card)}
.formulation-station:nth-child(even) .formulation-product{background:var(--surface-card)}
.formulation-product-summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}
.formulation-product-summary strong{min-width:130px;color:var(--brand-dark)}

/* Riga 1: nome prodotto a sinistra, situazione attuale a destra. */
.fp-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap;
  padding-bottom:5px;border-bottom:1px solid var(--border)}
.fp-product-name{margin:0;font-size:13.5px;font-weight:800;color:var(--brand-dark)}
/* Struttura FISSA a due righe (etichetta+prezzo sopra, badge margine sotto):
   prima il badge andava a capo solo quando non entrava ("Intermedio" e' piu'
   largo di "Positivo") e le card diventavano piu' alte delle vicine (bug
   iPad). Uniforme per costruzione, per tutte le card. */
.fp-current{display:grid;grid-template-columns:auto auto;justify-content:end;
  align-items:baseline;column-gap:7px;row-gap:3px;min-width:0;text-align:right}
.fp-current .margin-state{grid-column:1/-1;justify-self:end}
.fp-current-label{font-size:10.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
.fp-block-title{margin:0;font-size:10.5px;font-weight:800;text-transform:uppercase;
  letter-spacing:.5px;color:var(--muted)}
.fp-block-head-row{display:flex;align-items:baseline;justify-content:space-between;
  gap:10px;flex-wrap:wrap}
.fp-block-hint{font-size:10.5px;color:var(--muted)}
/* Prezzo "fissato" nella formulazione: lucchetto e stato persistente. */
.pin-toggle{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);
  border-radius:6px;background:var(--surface-card);color:var(--text);font-size:11px;
  font-weight:800;padding:3px 8px;cursor:pointer;min-height:28px}
.pin-toggle[aria-pressed="true"]{background:#fff4d6;border-color:#e7c25d;color:#805500}
.pin-note{margin:4px 0 0;padding:6px 8px;background:#fff5dc;border-left:3px solid var(--accent);
  font-size:11px}
.formulation-product.is-pinned .price-choice.is-selected .price-choice-selected::after{content:" · 🔒 Fissato"}

/* Coppie etichetta/valore. */
.fp-fact{display:flex;align-items:baseline;gap:5px;margin:0}
.fp-fact dt{font-size:10.5px;font-weight:700;color:var(--muted)}
.fp-fact dd{margin:0;display:flex;align-items:baseline;gap:6px}
.fp-value{font-size:13.5px;font-weight:800;color:var(--brand-dark);font-variant-numeric:tabular-nums}
.fp-value-sm{font-size:12.5px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.fp-value-sm.is-negative{color:var(--err)}
.fp-note{font-style:normal;font-size:10.5px;color:var(--muted)}

/* Riga 2: micro-etichette operative (scarico del giorno, giacenza). */
/* Il contenitore dei chip e' sempre presente nel markup: min-height per
   riservare la riga anche senza scarico/giacenza (allineamento tra card). */
.fp-chips{display:flex;flex-wrap:wrap;gap:4px;min-height:22px}
.fp-chip{display:inline-flex;align-items:baseline;gap:4px;padding:2px 8px;border-radius:999px;
  font-size:11px;font-weight:650;background:var(--surface-subtle);color:var(--text)}
.fp-chip b{font-weight:800}
.fp-chip-stock{border:1px solid var(--border)}

/* Riga 3: prezzi di posizionamento come righe compatte di un unico gruppo.
   Colonne fisse per radio, livello e prezzo: i valori restano incolonnati e
   confrontabili a colpo d'occhio. Il radio resta visibile: e' l'indizio che
   la riga e' selezionabile. */
.fp-positioning{display:flex;flex-direction:column;gap:3px}
/* Ogni elemento della riga ha una colonna propria: etichetta e prezzo non
   possono mai sovrapporsi. Un'etichetta piu' lunga della colonna va a capo
   dentro la propria colonna (overflow-wrap) e la riga cresce in altezza; un
   prezzo piu' largo allarga la colonna (max-content) invece di uscirne. */
.price-choice{display:grid;grid-template-columns:auto 52px minmax(64px,max-content) minmax(0,1fr) auto;
  align-items:center;column-gap:8px;padding:3px 7px;border:1px solid var(--border);
  border-left:3px solid var(--border);border-radius:var(--radius-control);font-size:11px;
  min-width:0;min-height:30px;cursor:pointer;touch-action:manipulation;
  transition:border-color .12s ease,background .12s ease}
.price-choice>input[type="radio"]{margin:0;accent-color:var(--brand-primary)}
.pc-label{font-size:11px;font-weight:700;color:var(--muted);min-width:0;overflow-wrap:anywhere}
.pc-price{font-size:13.5px;font-weight:800;color:var(--brand-dark);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
/* Margine e spread SEMPRE impilati su due righe, con l'altezza delle due
   righe riservata anche quando lo spread manca (es. spread zero): il
   wrapping condizionale rendeva alcune righe piu' alte di altre e le card
   risultavano disallineate (bug iPad). */
.pc-meta{display:grid;justify-items:end;row-gap:1px;min-width:0;text-align:right;
  min-height:30px;align-content:center}
.pc-spread{font-size:10px;color:var(--muted)}
/* Scala ordinale neutra: segnala i tre livelli senza usare i colori del
   margine, che restano riservati al segnale di marginalita'. */
.price-choice.pos-high{border-left-color:#4a5563}
.price-choice.pos-medium{border-left-color:#8a93a1}
.price-choice.pos-low{border-left-color:#b9c1cb}
/* Outlet (2026-09-21): quarta riga, bordo tratteggiato nel rosso Acton per
   distinguerla dalla scala ordinale dei tre livelli storici. */
.price-choice.pos-outlet{border-left-color:var(--brand-primary);border-left-style:dashed}
/* Striscia "1° margine" (2026-09-21): sopra le righe di posizionamento. */
.fp-first-margin{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;
  padding:5px 9px;margin:2px 0 3px;border:1px dashed var(--border);border-radius:var(--radius-control);
  background:var(--surface-subtle);font-size:11px;min-width:0}
.fp-first-margin .fm-label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;
  color:var(--muted);cursor:help;white-space:nowrap}
.fp-first-margin .fm-ref{color:var(--muted);min-width:0;overflow-wrap:anywhere}
.fp-first-margin .fm-value{font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto}
.fp-first-margin .fm-value.positive{color:var(--ok)}
.fp-first-margin .fm-value.negative{color:var(--err)}
.fp-first-margin .fm-value.unavailable{color:var(--muted);font-weight:700}
.fp-first-margin.is-live{border-style:solid;border-color:var(--brand-primary)}
.price-choice:hover{background:var(--surface-subtle)}
.price-choice:has(input:checked),.price-choice.is-selected{border-color:var(--brand-primary);
  border-left-color:var(--brand-primary);background:var(--brand-soft)}
.price-choice:focus-within{outline:3px solid var(--focus-ring);outline-offset:2px}
.price-choice.disabled{opacity:.55;cursor:not-allowed}
.price-choice-selected{display:none;font-size:10px;font-weight:800;color:var(--brand-primary);white-space:nowrap;
  /* Ancorato alla PRIMA riga della griglia: da auto-posizionato finiva su
     una seconda riga implicita e la selezione alzava la riga di 15px,
     disallineando le card (bug iPad). */
  grid-row:1;grid-column:5;justify-self:end;align-self:center}
.price-choice.is-selected .price-choice-selected{display:inline-flex}
/* Prezzo manuale: stessa griglia delle righe di posizionamento, con il campo
   di inserimento al posto del prezzo calcolato. */
.manual-choice .pc-label{color:var(--brand-dark)}
.manual-choice .field-error{grid-column:1/-1;text-align:left}
.manual-choice .field-error:empty{display:none}

/* Riga 4: prezzo giacenza media, individuabile senza dominare. */
.fp-stock{margin-top:auto;display:flex;align-items:baseline;gap:6px 12px;flex-wrap:wrap;
  padding:5px 8px;border-radius:var(--radius-control);background:var(--surface-subtle);
  border-left:3px solid var(--border-strong);cursor:help}
/* Tooltip esplicativo: mai un ostacolo. pointer-events:none garantisce che,
   anche quando visibile, non copra funzionalmente pulsanti o campi. */
.fp-tooltip{position:absolute;z-index:200;max-width:320px;padding:8px 10px;
  border-radius:var(--radius-control);background:var(--surface-dark);color:#fff;
  font-size:12px;line-height:1.4;box-shadow:var(--shadow-elevated);pointer-events:none}
.fp-tooltip[hidden]{display:none}
.fp-stock-values{display:flex;flex-wrap:wrap;gap:3px 14px;margin:0}
/* Ancorato in basso: i pulsanti "Invia prezzo selezionato" delle card
   affiancate stanno sulla stessa linea anche con contenuti diversi. */
.product-send{align-self:flex-end;margin-top:auto}
/* Con la giacenza media presente e' LEI il blocco ancorato (margin-top:auto
   suo): il pulsante le resta attaccato, senza dividere lo spazio libero. */
.fp-stock~.product-send{margin-top:0}

/* Adattamento a schermi stretti e alla navigazione touch. Deve stare DOPO le
   regole di base: hanno la stessa specificita', quindi vince l'ultima. */
@media(max-width:700px){
  .formulation-product-list{grid-template-columns:1fr}
  
  .price-choice{grid-template-columns:auto 52px minmax(64px,max-content) minmax(0,1fr)}
  .price-choice .pc-meta{grid-column:2/-1;justify-items:start;text-align:left}
  .price-choice .price-choice-selected{grid-row:1;grid-column:4;justify-self:end}
  .manual-choice .manual-price-input{width:64px}
  .product-send{align-self:stretch}
}
@media(pointer:coarse){.price-choice{min-height:44px}}
.selection-count{align-self:center;font-size:12px;font-weight:800;color:var(--brand-dark);white-space:nowrap}
.manual-price-input{width:64px;padding:3px 5px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);color:var(--text-primary);font-variant-numeric:tabular-nums}
.stock-inline{font-size:11px;color:var(--muted)}
.unload-quantity-inline{display:inline-flex;gap:4px;align-items:center;padding:2px 7px;border-radius:999px;background:var(--status-success-surface);color:#126434;font-size:11px;font-weight:750}.is-hidden{display:none!important}
.formulation-station.station-search-highlight{border-color:var(--brand-primary);animation:station-search-pulse 3.2s ease-out}
@keyframes station-search-pulse{0%,35%{box-shadow:0 0 0 5px var(--focus-ring),0 4px 16px rgba(36,36,36,.14)}100%{box-shadow:0 3px 10px rgba(36,36,36,.08)}}
/* z-index 60: la tendina dei risultati deve stare sopra le barre sticky delle
   sezioni (station-anchors, analysis-controlbar, quicknav: z 40/41) e sotto
   la topbar (100). Con 20 la barra copriva i risultati (bug 11/09/2026). */
.station-search{position:relative;flex:1 1 360px;max-width:620px;z-index:60}.station-search label{display:grid;gap:5px;color:var(--brand-dark);font-size:12px;font-weight:900}
.station-search input{width:100%;min-height:42px;padding:8px 11px;border:1px solid var(--border);border-radius:var(--radius-control);background:#fff;color:var(--text)}
.station-search-results{position:absolute;top:100%;left:0;right:0;z-index:61;max-height:310px;overflow:auto;margin-top:4px;padding:4px;border:1px solid var(--border);border-radius:var(--radius-control);background:#fff;box-shadow:var(--shadow-elevated)}
.station-search-results button{display:grid;width:100%;gap:1px;padding:8px 9px;border:0;border-radius:4px;background:#fff;color:var(--text);text-align:left;cursor:pointer}.station-search-results button:hover,.station-search-results button[aria-selected="true"]{background:var(--brand-soft);color:var(--brand-dark)}
.station-search-results button span{font-size:11px;color:var(--muted)}.station-search-empty{margin:0;padding:9px;color:var(--muted);font-weight:700}
.bulk-export-status{padding:10px 12px;border:1px solid var(--border);border-left:5px solid var(--brand-primary);border-radius:var(--radius-card);background:#fff}.bulk-export-status>div:first-child{display:flex;justify-content:space-between}.bulk-export-status progress{width:100%;height:13px}.bulk-export-status p{margin:4px 0}.bulk-export-status [data-bulk-export-report]{font-size:11px;color:var(--muted);overflow-wrap:anywhere}
.bulk-export-dialog{width:min(680px,94vw);border:1px solid var(--border);border-radius:var(--radius-card);padding:18px;background:#fff}.bulk-export-dialog::backdrop{background:rgba(36,36,36,.55)}.bulk-export-dialog h2{margin-top:0}.bulk-export-dialog dl{display:grid;gap:7px}.bulk-export-dialog dl>div{display:grid;grid-template-columns:150px 1fr;gap:10px}.bulk-export-dialog dt{font-weight:900}.bulk-export-dialog dd{margin:0;overflow-wrap:anywhere}
.detail-page-top{scroll-margin-top:88px}.toprow+.station-search{margin-bottom:16px}
.margin-state{font-size:11px;font-weight:700;white-space:nowrap}.margin-state.positive{color:var(--ok)}.margin-state.intermediate{color:var(--warn)}.margin-state.negative{color:var(--err)}.margin-state.unavailable{color:var(--muted)}
@media(max-width:700px){.home-main-section{padding:12px}.home-section-heading{align-items:flex-start;flex-direction:column}.formulation-station-heading{align-items:flex-start;flex-wrap:wrap;margin:-8px -8px 7px;padding:8px 8px 5px}.formulation-station-heading .btn{margin-left:0}.daily-unload-cards{grid-template-columns:1fr}.unload-product-item{grid-template-columns:1fr 1fr}.unload-product-item>b{grid-column:1/-1}.unload-active-badge{font-size:9px}.daily-unload-card--active{padding:8px 7px}.bulk-export-dialog dl>div{grid-template-columns:1fr;gap:1px}.formulation-station{padding:8px}.home-title-row>.btn{width:100%}}

@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.card{transition:none}}

.rec-table{margin-top:14px;border-top:1px solid var(--border);padding-top:10px;
  color:var(--text);font-size:12px;overflow-x:auto}
.pv-upper-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.metric-block{border:1px solid var(--border);border-radius:var(--radius-control);padding:8px;background:var(--surface-card)}
.metric-title{font-size:10px;font-weight:800;text-transform:uppercase;color:var(--brand-dark);letter-spacing:.4px;margin-bottom:5px}
.metric-products{display:flex;flex-wrap:wrap;gap:5px 8px}
.metric-products span{font-variant-numeric:tabular-nums;white-space:nowrap}
.metric-products b{color:var(--text);font-weight:700}
.home-section-title{padding:8px 10px;font-size:11px;font-weight:800;text-transform:uppercase;
  color:var(--brand-dark);letter-spacing:.4px;border-bottom:1px solid var(--border)}
.competitor-matrix-wrap{overflow:auto;max-height:230px}
.competitor-matrix{min-width:520px}
.competitor-matrix th,.competitor-matrix td{padding:6px 8px;font-size:12px}
.competitor-matrix th{font-size:10px;text-transform:uppercase;letter-spacing:.35px}
.competitor-matrix td:first-child{min-width:190px;max-width:260px}
.competitor-matrix td small{display:block;color:var(--muted);font-weight:700;margin-top:1px}
.competitor-matrix .num{font-weight:800;color:var(--brand-dark);white-space:nowrap}
.competitor-configured{background:#f8fbff}
.competitor-nearby{background:#fffaf0}
.competitor-type{display:inline-flex;align-items:center;white-space:nowrap;border:1px solid;
  border-radius:5px;padding:2px 6px;font-size:10px;font-weight:900;text-transform:uppercase}
.competitor-type.configured{color:var(--brand-dark);background:var(--brand-light);border-color:#b8cce0}
.competitor-type.nearby{color:#805500;background:#fff4d6;border-color:#e7c25d}
.price-delta{font-size:10px;font-weight:800;color:var(--muted)}
.price-data-status{display:block;color:var(--warn);font-size:9px;font-weight:700;line-height:1.2}

.rec-head,.rec-row{display:grid;grid-template-columns:minmax(72px,.68fr) minmax(82px,.6fr) minmax(140px,.78fr) minmax(210px,1fr) repeat(3,minmax(190px,1fr));
  gap:6px;align-items:center}
.rec-head,.rec-row{min-width:1270px}
.rec-head{color:var(--muted);font-weight:700;text-transform:uppercase;font-size:10px;
  letter-spacing:.4px;margin-bottom:5px}
.rec-row{min-height:34px;border-top:1px solid var(--surface-subtle)}
.rec-row:first-of-type{border-top:none}
.rec-product{font-weight:700;color:var(--brand-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.current-price{font-variant-numeric:tabular-nums;text-align:center;font-weight:700;color:var(--brand-dark)}
.manual-cell{display:flex;justify-content:center;align-items:center;flex-direction:column;gap:3px}
input.manual-price{width:96px;padding:5px 7px;border:1px solid var(--border);border-radius:var(--radius-control);
  text-align:right;font-size:12px;font-variant-numeric:tabular-nums;background:var(--surface-card);color:var(--text-primary)}
input.manual-price:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus-ring)}
.manual-margin{min-height:14px;font-size:10px;font-weight:800;font-variant-numeric:tabular-nums;text-align:center;white-space:nowrap}
.manual-margin.positive{color:var(--ok)}
.manual-margin.negative{color:var(--err)}
.manual-margin.unavailable{color:var(--muted)}
.send-btn{border:1px solid var(--brand);background:var(--surface-card);color:var(--brand-primary);
  border-radius:var(--radius-control);padding:3px 8px;font-size:10px;font-weight:800;line-height:1.1;
  min-height:24px;cursor:default}
.send-btn:hover{background:var(--brand-light)}
.orientation-cell{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap}
.orientation-option{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);
  border-radius:var(--radius-control);padding:4px 6px;background:var(--surface-card);font-size:11px;font-weight:800;
  color:var(--brand-dark);cursor:pointer;min-height:28px}
.orientation-option input{accent-color:var(--brand);cursor:pointer}
.orientation-option:has(input:checked){border-color:var(--brand);background:var(--brand-light)}
.orientation-option:has(input[value="high"]:checked){border-color:var(--err);background:#fbe9e7;color:var(--err)}
.orientation-option:has(input[value="medium"]:checked){border-color:var(--warn);background:#fff6e5;color:#8a5900}
.orientation-option:has(input[value="low"]:checked){border-color:var(--ok);background:#e6f5ec;color:var(--ok)}
.rec-price{display:inline-flex;align-items:flex-end;gap:4px;justify-content:center;
  flex-direction:column;font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}
.rec-level-label{display:inline-flex;align-items:center;gap:4px;font-size:9px;
  font-weight:700;color:currentColor;text-transform:uppercase}
.rec-number{font-size:12px;text-align:right}
.rec-margin{margin-left:4px;font-size:10px;font-weight:800;color:inherit}
.rec-margin.unavailable{color:var(--muted)}
.rec-margin.negative-margin{color:var(--err);background:var(--surface-card);border:1px solid var(--err);
  border-radius:4px;padding:1px 3px}
.rec-price .dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:0 0 auto}
.rec-price.green{color:var(--ok)}
.rec-price.green .dot{background:var(--ok)}
.rec-price.orange{color:var(--warn)}
.rec-price.orange .dot{background:var(--warn)}
.rec-price.red{color:var(--err)}
.rec-price.red .dot{background:var(--err)}
.rec-price.red .send-btn{border-color:var(--err);color:var(--err)}
.rec-price.orange .send-btn{border-color:var(--warn);color:#8a5900}
.rec-price.green .send-btn{border-color:var(--ok);color:var(--ok)}
.rec-price.outlet{color:var(--brand-primary)}
.rec-price.outlet .dot{background:var(--brand-primary)}
.rec-head span:nth-child(5),.detail-positioning-head span:nth-child(3){color:var(--err)}
.rec-head span:nth-child(6),.detail-positioning-head span:nth-child(4){color:#8a5900}
.rec-head span:nth-child(7),.detail-positioning-head span:nth-child(5){color:var(--ok)}
.detail-positioning-head span:nth-child(6){color:var(--brand-primary)}
.rec-price.empty{color:var(--muted);align-items:center}
.rec-empty{margin-top:14px;padding-top:10px;border-top:1px solid var(--border);
  color:var(--muted);font-size:12px;font-weight:600}
.manual-actions{display:flex;justify-content:flex-end;margin-top:10px}
.btn.mini-save{padding:6px 10px;font-size:12px;border-radius:6px}

.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);
  padding:18px;margin-bottom:18px;overflow-x:auto;box-shadow:var(--shadow-card)}
.panel h2{font-size:15px;margin:0 0 12px;color:var(--brand-dark);
  font-family:var(--font-heading);text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid var(--brand-primary);
  padding-bottom:8px}

table{border-collapse:collapse;width:100%}
.panel table{min-width:760px}
th,td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--border)}
th:first-child,td:first-child{text-align:left}
thead th{background:var(--surface-subtle);color:var(--brand-dark);font-size:13px;border-top:2px solid var(--brand-primary)}
tbody tr:hover{background:var(--brand-soft)}
td.num{font-variant-numeric:tabular-nums}
.current-sale-price{font-weight:700;color:var(--brand-dark)}
.pos{color:var(--ok);font-weight:600}
.neg{color:var(--err);font-weight:600}

input.price{width:110px;padding:7px 8px;border:2px solid var(--border);border-radius:var(--radius-control);
  text-align:right;font-size:15px;font-variant-numeric:tabular-nums}
input.price:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus-ring)}

.btn,.btn-primary{display:inline-flex;align-items:center;justify-content:center;background:var(--brand-primary);
  color:var(--brand-on-primary);border:2px solid var(--brand-primary);border-radius:var(--radius-control);
  padding:8px 17px;font-size:14px;font-weight:700;cursor:pointer;min-height:42px;line-height:1.2}
.btn:hover,.btn-primary:hover{background:var(--brand-primary-hover);border-color:var(--brand-primary-hover);color:var(--brand-on-primary);text-decoration:none}
.btn.secondary,.btn-secondary,.btn.home-back{background:var(--surface-card);color:var(--brand-primary);border:2px solid var(--brand-primary)}
.btn.secondary:hover,.btn-secondary:hover,.btn.home-back:hover{background:var(--brand-soft);color:var(--brand-primary-hover);border-color:var(--brand-primary-hover);text-decoration:none}
.btn.danger,.btn-danger{background:var(--status-danger);color:#fff;border-color:var(--status-danger)}
.btn.danger:hover,.btn-danger:hover{background:#9f1f1f;border-color:#9f1f1f;color:#fff}
.btn:focus-visible,.btn-primary:focus-visible,.btn-secondary:focus-visible,.btn-danger:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}
.actions{display:flex;gap:12px;align-items:center;margin-top:6px;flex-wrap:wrap}
.actions form{margin:0}
.btn:disabled,.btn-primary:disabled,.btn-secondary:disabled,.btn-danger:disabled{opacity:.55;cursor:not-allowed;filter:saturate(.55)}
.btn.compact{min-height:36px;padding:6px 11px;font-size:12px}
input[type="text"],input[type="email"],input[type="password"],input[type="number"],
input[type="date"],input[type="search"],select,textarea{color:var(--text-primary);background:var(--surface-card)}
input[type="text"]:focus-visible,input[type="email"]:focus-visible,input[type="password"]:focus-visible,
input[type="number"]:focus-visible,input[type="date"]:focus-visible,input[type="search"]:focus-visible,
select:focus-visible,textarea:focus-visible{border-color:var(--brand-primary);outline:3px solid var(--focus-ring);outline-offset:1px}
progress{accent-color:var(--brand-primary)}
.read-only-badge{display:inline-flex;align-items:center;min-height:32px;padding:4px 9px;border:1px solid var(--border-strong);
  border-radius:999px;background:var(--surface-subtle);color:var(--text-secondary);font-size:11px;font-weight:800}
.price-confirm-dialog{box-sizing:border-box;width:min(760px,94vw);max-height:90vh;overflow:auto;border:1px solid var(--border-default);
  border-top:4px solid var(--brand-primary);border-radius:var(--radius-card);padding:20px;background:var(--surface-elevated);
  color:var(--text-primary);box-shadow:var(--shadow-elevated)}
.price-confirm-dialog::backdrop{background:rgba(36,36,36,.58)}
.price-confirm-dialog h2{margin-top:0;color:var(--brand-dark);font-family:var(--font-heading)}
.dialog-actions{display:flex;justify-content:flex-end;gap:9px;flex-wrap:wrap;margin-top:16px}
.field-error{color:var(--status-danger);font-weight:700}
.bulk-status{margin:-10px 0 14px;font-size:13px;font-weight:700}

.telegram-not-active{max-width:18rem;white-space:normal}
.telegram-price-dialog{width:min(46rem,calc(100vw - 2rem));max-width:calc(100vw - 1rem)}
.telegram-price-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem 1rem;margin:1rem 0}
.telegram-price-summary div{display:grid;grid-template-columns:minmax(8rem,1fr) 1.2fr;gap:.5rem;padding:.4rem .55rem;border-bottom:1px solid var(--border-default)}
.telegram-price-summary dt{font-weight:800}
.telegram-price-summary dd{margin:0;text-align:right}
.telegram-product-preview{display:grid;gap:.55rem;margin:1rem 0}
.telegram-product-preview-row{display:grid;grid-template-columns:minmax(8rem,1.25fr) repeat(3,minmax(7rem,1fr));gap:.65rem;align-items:center;padding:.7rem .8rem;border:1px solid var(--border-default);border-radius:.55rem;background:var(--surface-card)}
.telegram-product-preview-row>*{min-width:0}
.telegram-product-preview-name{color:var(--brand-dark)}
.telegram-product-preview-cell{display:grid;gap:.15rem;font-variant-numeric:tabular-nums}
.telegram-product-preview-cell small{color:var(--muted);font-weight:700}
.telegram-message-preview{max-height:22rem;overflow:auto;padding:1rem;border:1px solid var(--border-strong);border-radius:.55rem;background:var(--surface-subtle);color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.45}
.telegram-same-price-warning{display:grid;gap:.5rem;margin-top:.8rem;padding:.75rem;border:1px solid var(--status-warning);border-radius:.5rem;background:#fff7df;color:var(--text-primary)}
.telegram-same-price-warning[hidden]{display:none}
.telegram-price-notice{position:fixed;right:1rem;bottom:1rem;z-index:50;padding:.8rem 1rem;border:1px solid var(--status-success);border-radius:.55rem;background:#e9f8ef;color:#135f36;box-shadow:var(--shadow-elevated)}
.telegram-sent-badge{display:inline-flex;margin-left:.5rem;padding:.25rem .5rem;border-radius:999px;background:#e9f8ef;color:#135f36;font-size:.8rem;font-weight:800}
.telegram-recipient-field select{width:100%;min-height:40px;border:1px solid var(--border-strong);border-radius:var(--radius-control);padding:.45rem .6rem;background:var(--surface-card);color:var(--text-primary)}
.telegram-contacts-link{margin:-.35rem 0 .8rem;text-align:right}
.telegram-recipient-list{display:flex;flex-wrap:wrap;gap:.35rem;margin:.3rem 0 .75rem;padding:0;list-style:none}.telegram-recipient-list li{padding:.28rem .5rem;border:1px solid var(--border);border-radius:999px;background:var(--surface-muted);font-size:.76rem;font-weight:750}

/* Amministrazione Telegram: stesse superfici e controlli dell'area admin. */
.telegram-admin-page{display:grid;grid-template-columns:minmax(0,1fr);gap:1rem}
/* Senza minmax(0,...) la traccia si dimensiona sul contenuto: le tabelle
   larghe spingono la colonna oltre lo schermo invece di scorrere dentro
   il proprio contenitore. */
.telegram-admin-page>*{min-width:0}
.heading-actions,.form-actions,.filter-actions{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center}
.telegram-admin-page .eyebrow{margin:0;color:var(--brand-dark);font-size:.75rem;font-weight:900;letter-spacing:.08em;text-transform:uppercase}
.admin-editor{border:1px solid var(--border-default);border-radius:var(--radius-card);background:var(--surface-card);box-shadow:var(--shadow-soft)}
.admin-editor summary{padding:1rem;cursor:pointer;color:var(--brand-dark);font-weight:900}.admin-editor[open] summary{border-bottom:1px solid var(--border-default)}
.telegram-contact-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem;padding:1rem}
.telegram-contact-form label,.telegram-history-filters label{display:grid;gap:.3rem;font-size:.78rem;font-weight:800}
.telegram-contact-form input,.telegram-contact-form select,.telegram-contact-form textarea,.telegram-history-filters input,.telegram-history-filters select{box-sizing:border-box;width:100%;min-height:40px;padding:.48rem .6rem;border:1px solid var(--border-default);border-radius:var(--radius-control);background:var(--surface-card);color:var(--text-primary);font:inherit}
.telegram-contact-form textarea{min-height:5rem;resize:vertical}.telegram-contact-form small{color:var(--muted);font-weight:500}.telegram-contact-form .check-line{display:flex;align-items:center;gap:.45rem}.telegram-contact-form .check-line input{width:auto;min-height:auto}.telegram-contact-form .form-actions,.telegram-contact-form .field-error{grid-column:1/-1}
.telegram-station-selector{grid-column:1/-1;margin:0;padding:.85rem;border:1px solid var(--border);border-radius:var(--radius-control)}.telegram-station-selector legend{padding:0 .35rem;font-size:.82rem;font-weight:900}.telegram-station-selector-tools{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:.65rem;align-items:end}.telegram-station-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.4rem;margin-top:.7rem;max-height:18rem;overflow:auto}.telegram-station-options label{display:flex;align-items:center;gap:.45rem;min-height:42px;padding:.4rem .55rem;border:1px solid var(--border);border-radius:var(--radius-control);cursor:pointer}.telegram-station-options label[hidden]{display:none}.telegram-station-options label:has(input:checked){border:2px solid var(--brand-primary);padding:.35rem .5rem;background:var(--brand-soft)}.telegram-station-options input{width:auto;min-height:auto}.telegram-station-chips{display:flex;flex-wrap:wrap;gap:.25rem}.telegram-station-chips span{display:inline-flex;padding:.18rem .42rem;border:1px solid var(--border);border-radius:999px;background:var(--surface-muted);font-size:.72rem;font-weight:750}
.panel-heading-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem}.panel-heading-row h2{margin:0}.station-contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.55rem;margin-top:.7rem}.station-contact-grid article{display:flex;align-items:flex-start;flex-direction:column;gap:.3rem;padding:.65rem;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card)}.station-contact-grid article>span:not(.status-pill){color:var(--muted);font-size:.78rem}
.responsive-table{max-width:100%;overflow:auto;border:1px solid var(--border-default);border-radius:var(--radius-card);background:var(--surface-card)}.responsive-table table{width:100%;border-collapse:collapse}.responsive-table th{white-space:nowrap}.responsive-table td{vertical-align:top}.responsive-table td small{display:block;margin-top:.25rem;color:var(--muted)}
.table-actions{display:flex;min-width:15rem;gap:.35rem;flex-wrap:wrap}.table-actions form{margin:0}.status-pill.status-ok{background:#e6f5ec;color:var(--ok)}.status-pill.status-muted{background:#edf1f5;color:#6b7785}.status-pill.status-info{background:#eaf2ff;color:var(--brand-dark)}
.telegram-verification-note{margin:0}.telegram-history-filters{display:grid;min-width:0;grid-template-columns:repeat(5,minmax(0,1fr));gap:.65rem;padding:.8rem;border:1px solid var(--border-default);border-radius:var(--radius-card);background:var(--surface-subtle)}.telegram-history-filters>*{min-width:0}
/* I select con opzioni lunghe hanno un min-content ampio: senza min-width:0
   sui controlli la griglia si allarga oltre lo schermo dei telefoni. */
.telegram-history-filters label{min-width:0}
.telegram-history-filters input,.telegram-history-filters select{
  min-width:0;max-width:100%;box-sizing:border-box}.history-free-search{grid-column:span 2}.telegram-history-filters .filter-actions{align-self:end}
.telegram-history-table table{min-width:68rem}.telegram-history-table tr:hover td{background:var(--surface-subtle)}
.telegram-status-sent,.telegram-status-test_sent{background:#e6f5ec;color:var(--ok)}.telegram-status-pending{background:#eaf2ff;color:var(--brand-dark)}.telegram-status-failed,.telegram-status-validation_failed{background:var(--status-danger-surface);color:var(--status-danger)}.telegram-status-validation_failed.telegram-status-warning,.telegram-status-duplicate_blocked,.telegram-status-cancelled{background:#fff3d8;color:#825900}
.pagination{display:flex;justify-content:center;align-items:center;gap:1rem}.empty-state{padding:2rem!important;text-align:center;color:var(--muted)}
.history-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:0}.history-detail-grid div{padding:.75rem;border:1px solid var(--border-default);border-radius:var(--radius-control);background:var(--surface-card)}.history-detail-grid dt{font-size:.75rem;font-weight:900;color:var(--muted);text-transform:uppercase}.history-detail-grid dd{margin:.25rem 0 0;overflow-wrap:anywhere}.history-technical-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.history-technical-grid section{min-width:0}.history-technical-grid pre{max-height:14rem;overflow:auto;padding:.8rem;border:1px solid var(--border-default);border-radius:var(--radius-control);white-space:pre-wrap;overflow-wrap:anywhere}

.flash{padding:11px 16px;border-radius:8px;margin-bottom:14px;font-weight:500}
.flash.ok{background:#e6f5ec;color:var(--ok);border:1px solid #b6e0c6}
.flash.error{background:#fbe9e7;color:var(--err);border:1px solid #f1c2bc}

.auth-shell{min-height:calc(100vh - 140px);display:grid;place-items:center;padding:20px 0}
.auth-panel{width:min(100%,430px);background:var(--card);border:1px solid var(--border);border-top:4px solid var(--brand-primary);
  border-radius:var(--radius-card);padding:24px;box-shadow:var(--shadow-elevated)}
.auth-panel h1{font-size:22px;margin-bottom:6px;color:var(--brand-dark)}
.auth-form{display:grid;gap:12px;margin-top:16px}
.auth-form label{display:grid;gap:5px;font-size:13px;font-weight:800;color:var(--brand-dark)}
.auth-form input{width:100%;min-height:42px;border:1px solid var(--border);border-radius:var(--radius-control);
  padding:9px 10px;font-size:15px;background:var(--surface-card);color:var(--text)}
.auth-form input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus-ring)}
.auth-links{display:flex;justify-content:space-between;gap:12px;margin:4px 0 0;flex-wrap:wrap}
.auth-inline-form{margin-top:12px;text-align:center}
.link-button{border:none;background:transparent;color:var(--brand);font:inherit;font-weight:700;
  cursor:pointer;padding:6px}
.link-button:hover{text-decoration:underline}
.fortech-overview{background:var(--surface-card);border:1px solid var(--border);border-radius:var(--radius-card);padding:12px 14px;
  display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}
.fortech-overview div{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.fortech-overview span{color:var(--muted);font-size:13px}
.status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.status-grid div{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);padding:10px}
.status-grid b{display:block;color:var(--brand-dark);font-size:12px;text-transform:uppercase;
  letter-spacing:.35px;margin-bottom:3px}
.status-grid span{font-weight:700}

.home-sales,.station-sales{margin-top:10px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);
  min-height:150px;overflow:hidden}
.home-return-row{display:flex;justify-content:flex-end;margin-top:14px}
.home-return-unloads{min-height:40px;padding:8px 14px;font-size:13px}
.home-return-unloads:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}
.station-sales{margin-top:18px}
.sales-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:10px 12px 4px}
.sales-heading .home-section-title{padding:0}
.sales-heading-actions{display:flex;gap:8px;flex-wrap:wrap}
.sales-subtitle{padding:2px 12px 8px;color:var(--muted);font-size:12px;font-weight:700}
.chart-caption{margin:0;padding:2px 12px 6px;color:var(--muted);font-size:12px;font-weight:500;line-height:1.35}
.period-selector{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:4px 12px 8px}
.period-quick{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.period-selector .sales-period-btn{min-width:44px;min-height:34px}
.period-month-select{min-height:34px;padding:6px 8px;border:1px solid var(--border);
  border-radius:var(--radius-control);background:var(--surface-card);color:var(--brand-dark);
  font-weight:700;font-size:12px;max-width:210px}
.sales-loading,.sales-empty{padding:18px;color:var(--muted);font-size:13px;font-weight:700}
.sales-meta{padding:8px 10px;color:var(--muted);font-size:12px;border-bottom:1px solid var(--border)}
.sales-state{padding:8px 10px;font-size:12px;font-weight:700;background:#fff8e8;color:#73510b;border-bottom:1px solid var(--border)}
.sales-state.complete{background:#eef8f1;color:#24613b}
.sales-state.error{background:#fbe9e7;color:#8d2a20}
.sales-controls{display:grid;grid-template-columns:auto 1fr;gap:9px 14px;padding:10px;border-bottom:1px solid var(--border)}
.sales-period-total{display:flex;align-items:center;gap:10px;flex-wrap:wrap;grid-column:1/-1;
  padding:8px 10px;background:var(--surface-subtle);border:1px solid var(--border);border-radius:var(--radius-control);font-size:12px}
.sales-period-total b{color:var(--brand-dark);text-transform:uppercase;font-size:10px;letter-spacing:.35px}
.sales-period-total span{white-space:nowrap}
.startup-loading{max-width:980px;margin:24px auto;padding:20px}
.overall-progress{padding:14px;background:var(--surface-subtle);border:1px solid var(--border);border-radius:var(--radius-card);margin:14px 0}
.progress-title{display:flex;justify-content:space-between;gap:12px;align-items:center}
.startup-loading progress{width:100%;height:16px;accent-color:var(--brand);margin:8px 0}
.startup-task-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.startup-task{border:1px solid var(--border);border-radius:var(--radius-control);padding:11px;background:var(--surface-card)}
.startup-task[data-status="error"],.startup-task[data-status="interrupted"]{border-color:#c0392b;background:#fff7f6}
.startup-task[data-status="completed_warning"]{border-color:#c47f00;background:#fffaf0}
.task-meta{display:flex;justify-content:space-between;color:var(--muted);font-size:12px}
.startup-task p{font-size:12px;margin:6px 0 0;min-height:16px}
.startup-task p.error{color:#a1241b}
.startup-details{margin-top:14px}.startup-details pre{white-space:pre-wrap;font-size:11px}
.startup-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.admin-station-list tr.inactive{opacity:.62}.table-wrap{overflow:auto}
.admin-heading{align-items:flex-end}.eyebrow{margin:0 0 4px;color:var(--brand);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.7px}
.admin-tabs{display:flex;gap:7px;margin:0 0 14px;border-bottom:1px solid var(--border);overflow:auto}
.admin-tabs button{border:0;border-bottom:3px solid transparent;background:transparent;color:var(--muted);padding:11px 15px;font:inherit;font-weight:800;cursor:pointer;white-space:nowrap}
.admin-tabs button.active{color:var(--brand-dark);border-bottom-color:var(--brand)}
.admin-tabs button:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.admin-filters{display:grid;grid-template-columns:2fr repeat(4,minmax(130px,1fr));gap:9px;margin:0 0 12px}
.admin-filters label{display:grid;gap:4px;font-size:11px;font-weight:800;color:var(--brand-dark)}
.admin-filters input,.admin-filters select,.admin-form-grid select,.competitor-flags input,.competitor-admin>label input{min-height:40px;width:100%;border:1px solid var(--border);border-radius:var(--radius-control);padding:7px 9px;background:var(--surface-card);color:var(--text)}
.admin-data-table{font-size:12px}.admin-data-table th,.admin-data-table td{vertical-align:top;text-align:left}.action-cell{display:flex;gap:5px;flex-wrap:wrap}.action-cell .btn{padding:6px 9px;min-height:34px;font-size:11px}
.status-pill{display:inline-flex;align-items:center;border-radius:999px;background:#edf1f5;color:#53606e;padding:4px 8px;font-size:10px;font-weight:900;text-transform:uppercase;white-space:nowrap}
.status-pill.ok{background:#e6f5ec;color:var(--ok)}.status-pill.warning{background:#fff3d8;color:#825900}.status-pill.muted{background:#edf1f5;color:#6b7785}
.section-heading.compact{margin-bottom:10px}.section-heading.compact h2{margin-bottom:3px}.section-heading.compact p{margin:0}
.station-wizard fieldset{border:1px solid var(--border);border-radius:8px;padding:14px;margin:12px 0}
.station-wizard legend{font-weight:800;color:var(--brand-dark);padding:0 6px}
.wizard-steps{display:flex;gap:6px;overflow:auto;list-style:none;padding:0 0 8px;margin:0}
.wizard-steps li{flex:0 0 auto;padding:6px 8px;border:1px solid var(--border);border-radius:5px;font-size:11px;color:var(--muted)}
.wizard-steps li.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.admin-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.admin-form-grid label,.station-wizard>form>fieldset>label{display:grid;gap:5px;font-weight:700;font-size:12px}
.admin-form-grid input,.admin-form-grid textarea,.station-wizard textarea,.admin-inline-actions input,.admin-form-grid select{width:100%;padding:8px;border:1px solid var(--border);border-radius:5px}
.admin-form-grid textarea,.station-wizard textarea{min-height:86px;font-family:inherit}
.admin-form-grid label.check,.station-wizard label.check{display:flex;align-items:center;gap:7px}.check input{width:auto}
.align-end{align-self:end}.product-config-table{min-width:1080px}.product-config-table th,.product-config-table td{text-align:left;vertical-align:middle;padding:6px}.product-config-table input:not([type="checkbox"]){width:130px;min-height:36px;border:1px solid var(--border);border-radius:5px;padding:6px}
.wizard-actions,.admin-inline-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.wizard-actions{justify-content:space-between}.validation-result{padding:10px;margin-top:10px;border-radius:var(--radius-control);background:var(--surface-subtle)}
.validation-result.ok{background:#eef8f1;color:#24613b}.validation-result.error{background:#fff1ef;color:#8d2a20}
.competitor-preview{border:1px solid var(--border);border-radius:var(--radius-control);padding:12px;margin:10px 0;background:var(--surface-subtle)}
.competitor-preview dl,.station-wizard dl{display:grid;grid-template-columns:minmax(130px,220px) 1fr;gap:5px 12px}.competitor-preview dt,.station-wizard dt{font-weight:900;color:var(--brand-dark)}.competitor-preview dd,.station-wizard dd{margin:0}
.configured-competitors{padding:0;list-style:none}.configured-competitors li{padding:13px;border:1px solid var(--border);border-radius:var(--radius-card);margin:9px 0;background:var(--surface-card)}.configured-competitors li.dragging{opacity:.55;border-color:var(--brand)}
.competitor-card-heading{display:flex;align-items:flex-start;gap:8px}.competitor-card-heading>div{flex:1}.competitor-meta{display:flex;gap:8px 16px;flex-wrap:wrap;color:var(--muted);font-size:11px;margin:8px 0}.competitor-flags{display:grid;grid-template-columns:minmax(210px,1fr) repeat(3,auto) auto;gap:8px;align-items:end;margin:8px 0}.competitor-flags label{font-size:11px;font-weight:800}.competitor-flags label.check{display:flex;align-items:center;gap:5px;min-height:40px}.competitor-flags label.check input{width:auto;min-height:auto}
.drag-handle{cursor:grab;margin-right:4px;font-size:20px}.loading-state,.saving-state{color:var(--brand-dark);font-size:12px;font-weight:800}.critical-confirmation{padding:9px;border-radius:var(--radius-control);background:var(--status-warning-surface);color:var(--status-warning);font-weight:800}.empty-state{color:var(--muted);font-weight:700;text-align:center;padding:14px}
.sales-periods{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;grid-column:1/-1}
.sales-periods b,.sales-filter b{color:var(--brand-dark);text-transform:uppercase;font-size:10px;letter-spacing:.35px}
.sales-period-btn{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);color:var(--brand-dark);
  padding:5px 8px;font-weight:800;cursor:pointer}
.sales-period-btn.active,.sales-period-btn:hover{background:var(--brand);border-color:var(--brand);color:#fff}
.sales-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.sales-month-filter{max-height:94px;overflow:auto;align-content:flex-start}
.sales-filter label{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);
  border-radius:var(--radius-control);padding:4px 6px;background:var(--surface-card);font-weight:700}
.sales-filter input{accent-color:var(--brand)}
.sales-legend-option span{width:11px;height:4px;border-radius:2px;background:var(--series-color);display:inline-block}
.sales-chart-toolbar{display:flex;justify-content:flex-end;padding:8px 10px 0}
.sales-chart-shell{position:relative;width:100%;display:block;border:0;background:var(--surface-card);padding:10px;
  text-align:left;min-height:300px;overflow:hidden}
.sales-canvas{width:100%;height:280px;min-height:250px;display:block}
.sales-tooltip{position:absolute;z-index:3;max-width:180px;background:var(--surface-dark);color:var(--text-on-brand);
  border-radius:6px;padding:5px 7px;font-size:11px;font-weight:700;pointer-events:none}
.modal-sales-chart{min-height:580px}
.modal-sales-chart .sales-chart-shell{min-height:520px}
.modal-sales-chart .sales-canvas{height:520px;min-height:420px}

/* Correlazione prezzo / venduto */
.correlation-filters{display:grid;grid-template-columns:2fr 1.2fr 1.2fr;gap:10px;padding:10px 14px 4px}
.correlation-filters label{display:grid;gap:4px;font-size:12px;font-weight:700;color:var(--muted)}
.correlation-filters select{padding:7px 8px;border:1px solid var(--border);border-radius:var(--radius-control);
  background:var(--surface-card);font-weight:700;color:var(--text)}
.correlation-legend{display:flex;flex-wrap:wrap;gap:14px;padding:6px 14px 0}
.correlation-legend-item{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--muted)}
.correlation-swatch{width:18px;height:0;display:inline-block;border-top:3px solid var(--series-color)}
.correlation-swatch.dashed{border-top-style:dashed}
.correlation-swatch.bold{border-top-width:5px}
.history-series-option.own i,.history-legend button.own i{height:6px}
/* Checkbox dei concorrenti trade area sovrapponibili al grafico correlazione. */
.correlation-competitors{padding:8px 14px 0}
.correlation-competitors .history-series-head h3{margin:0;font-size:12px;font-weight:800;
  text-transform:uppercase;letter-spacing:.4px;color:var(--muted)}
.correlation-competitor-boxes{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:6px}
/* Chip "Mostra vendite" nel pannello taavg: fuori dal blocco concorrenti,
   serve il padding orizzontale del pannello. */
.taavg-toggles{padding:0 14px 4px}
/* Medie del periodo (proposta C, 19/08): badge nei colori delle serie sopra
   il grafico, allineati a destra; lo scarto usa i colori semantici. */
.taavg-period-kpi{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;
  padding:0 14px 6px;font-variant-numeric:tabular-nums}
.taavg-period-kpi span{display:inline-flex;align-items:center;gap:7px;padding:4px 10px;
  border-radius:8px;font-size:12px;font-weight:750;border:1px solid;color:var(--series-color);
  border-color:color-mix(in srgb,var(--series-color) 35%,transparent);
  background:color-mix(in srgb,var(--series-color) 8%,transparent)}
.taavg-period-kpi i{width:14px;height:0;border-top:3px solid var(--series-color);display:inline-block}
.taavg-period-kpi span.own i{border-top-width:5px}
.taavg-period-kpi .taavg-kpi-delta{--series-color:var(--muted)}
.taavg-period-kpi .taavg-kpi-delta.is-below{--series-color:var(--status-success)}
.taavg-period-kpi .taavg-kpi-delta.is-above{--series-color:var(--status-danger)}
@media (max-width:700px){.taavg-period-kpi{justify-content:flex-start}}
.correlation-competitor-option{display:inline-flex;align-items:center;gap:6px;font-size:12px;
  font-weight:700;color:var(--text);cursor:pointer}
.correlation-competitor-option input:disabled~*{opacity:.55}
.correlation-competitor-chip{width:14px;height:4px;display:inline-block;border-radius:2px;
  background:var(--series-color)}
.correlation-chart-shell{position:relative;width:100%;padding:10px;overflow:hidden;min-height:320px}
.correlation-chart-shell canvas{width:100%;display:block}
/* Legenda dell'area scarto nel grafico "Prezzo medio trade area vs nostro prezzo". */
.taavg-delta-legend{gap:5px}
.taavg-delta-chip{width:14px;height:10px;display:inline-block;border-radius:2px}
.taavg-delta-chip.below{background:rgba(24,132,71,.35)}
.taavg-delta-chip.above{background:rgba(198,40,40,.35);margin-left:8px}
.correlation-chart-shell .sales-tooltip{opacity:0;transition:opacity .12s ease}
.station-correlation.is-loading{opacity:.6}

/* Spread da applicare ai posizionamenti */
.rec-spread{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:11px;
  font-weight:700;color:var(--muted)}
.rec-spread select{padding:3px 5px;border:1px solid var(--border);border-radius:var(--radius-control);
  background:var(--surface-card);font-size:11px;font-weight:700;color:var(--text)}
.rec-spread select:disabled{opacity:.6;cursor:not-allowed}
.price-choice-spread{display:block;font-size:11px;font-weight:700;color:var(--muted);margin-top:2px}
.price-choice-spread b{color:var(--brand-dark)}

/* Seleziona tutto / Deseleziona tutto */
.bulk-toggle{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}
.history-month-selector .bulk-toggle{margin:8px 0}
.history-series-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}
.history-series-head h2{margin:0}
.sales-product-boxes{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}

/* Torna a inizio pagina */
/* Ritorno a inizio pagina: unico comando della suite, flottante da base.html. */
.back-to-top{position:fixed;right:18px;bottom:18px;z-index:40;width:44px;height:44px;
  border:0;border-radius:50%;background:var(--brand);color:var(--text-on-brand);
  font-size:20px;font-weight:800;line-height:1;cursor:pointer;box-shadow:var(--shadow-elevated)}
.back-to-top:hover{background:var(--brand-dark)}
.back-to-top[hidden]{display:none}
@media print{.back-to-top{display:none}}

/* Gestione utenti */
.badge-ok{background:var(--status-ok-surface,#e8f5e9);color:#1b5e20}
.badge-warn{background:var(--status-danger-surface);color:var(--status-danger)}
.role-badge{display:inline-block;border-radius:20px;padding:2px 10px;font-size:12px;font-weight:800}
.role-badge.role-admin{background:var(--status-danger-surface);color:var(--status-danger);
  border:1px solid var(--status-danger-border)}
.role-badge.role-user{background:var(--surface-subtle);color:var(--muted);border:1px solid var(--border)}
.role-badge.role-viewer{background:var(--status-warning-surface);color:var(--status-warning);
  border:1px solid var(--status-warning-border)}
.user-create-form{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:12px 0}
.user-create-form label{display:grid;gap:4px;font-size:12px;font-weight:700;color:var(--muted)}
.user-create-form input,.user-create-form select{padding:8px;border:1px solid var(--border);
  border-radius:var(--radius-control);background:var(--surface-card);font-weight:600;color:var(--text)}
.user-create-actions{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.user-table{width:100%;border-collapse:collapse}
.user-table th,.user-table td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}
.user-table th{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.user-table tr.is-disabled{opacity:.55}
.user-actions{display:flex;flex-wrap:wrap;gap:6px}
.user-actions form{display:inline}
.user-actions .role-change-form{display:inline-flex;gap:4px;align-items:center}
.user-actions .role-change-form select{padding:4px 6px;border:1px solid var(--border);
  border-radius:8px;font-size:12px}
@media (max-width:900px){
  .user-create-form{grid-template-columns:1fr}
  .user-table thead{display:none}
  .user-table tr{display:grid;gap:4px;padding:10px 0;border-bottom:1px solid var(--border)}
  .user-table td{border:0;padding:2px 0}
}

.issue{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border-radius:7px;
  margin-bottom:8px;border:1px solid;border-left-width:5px;overflow-wrap:anywhere}
.issue.urgent{background:var(--color-urgent-background);border-color:var(--color-urgent-border);
  color:var(--color-urgent)}
.issue.error{background:#fbe9e7;border-color:var(--err)}
.issue.warn{background:#fff6e5;border-color:var(--warn)}
.issue.info{background:var(--brand-light);border-color:var(--brand)}
.issue-icon{display:inline-grid;place-items:center;flex:0 0 20px;width:20px;height:20px;
  border:2px solid currentColor;border-radius:50%;font-size:12px;font-weight:900;line-height:1}
.sev{flex:0 0 auto;font-weight:900;text-transform:none;font-size:12px;line-height:20px}
.issue.urgent .sev{color:var(--color-urgent);letter-spacing:.15px}
.issue-message{min-width:0;line-height:20px}

.mimit-previous-price{display:inline-block;width:max-content;max-width:100%;margin-top:3px;
  padding:2px 6px;border:1px solid rgba(11,82,111,.28);border-radius:4px;
  background:var(--color-mimit-previous-background);color:var(--color-mimit-previous);
  font-size:.8em;font-weight:650;line-height:1.35;white-space:normal}
.competitor-matrix td small.mimit-previous-price{color:var(--color-mimit-previous)}
.mimit-previous-price>span{font-weight:850}

.muted{color:var(--muted)}
.right{margin-left:auto}
.toprow{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}
small.hint{color:var(--muted);font-size:12px}
.detail-positioning{overflow-x:auto}
.detail-positioning-head,.detail-positioning-row{display:grid;
  grid-template-columns:minmax(100px,.8fr) minmax(210px,1fr) repeat(4,minmax(170px,1fr));
  gap:8px;align-items:center;min-width:1110px}
.detail-positioning-head{font-size:11px;font-weight:800;text-transform:uppercase;
  color:var(--muted);letter-spacing:.4px;margin-bottom:6px}
.detail-positioning-row{border-top:1px solid var(--surface-subtle);min-height:42px;padding:6px 0}
.detail-positioning-row:first-of-type{border-top:none}
.map-panel{overflow:visible}
.map-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.map-heading h2{flex:1 1 260px}
.map-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;font-weight:800;color:var(--muted)}
.map-legend span{display:inline-flex;align-items:center;gap:5px}
.map-key{width:12px;height:12px;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px #9aa7b4}
.map-key.own{background:var(--brand)}
.map-key.configured{background:var(--err)}
.map-key.configured-outside{background:#7b1f5b}
.map-key.nearby{background:var(--accent)}
.station-map{position:relative;width:100%;min-height:360px}
.station-map-canvas{width:100%;height:clamp(360px,52vh,620px);background:var(--surface-subtle)}
.map-status{position:absolute;inset:0;display:grid;place-items:center;padding:20px;color:var(--muted);
  font-size:13px;font-weight:800;text-align:center;background:var(--surface-subtle)}
.map-status[hidden]{display:none}
.map-info{max-width:300px;color:var(--text-primary);font-size:12px}
.map-info h3{margin:0 0 5px;font-size:15px;color:var(--brand-dark)}
.map-info p{margin:4px 0}
.map-info-prices{margin:7px 0;border-top:1px solid var(--border-default)}
.map-info-prices div{display:flex;justify-content:space-between;gap:14px;padding:4px 0;border-bottom:1px solid var(--surface-subtle)}
.map-info-prices dt{font-weight:800}.map-info-prices dd{margin:0;text-align:right;font-weight:800}
.map-info-prices small{display:block;color:#6b7785;font-weight:600}
.map-info-update{color:#6b7785}
/* .trend-modal e .trend-close restano: usati dal dialog "Quantita' vendute"
   della pagina Analisi prezzi. Le classi della vecchia sezione trend mensili
   del Controllo dettagliato sono state rimosse insieme alla sezione. */
.trend-modal{border:1px solid var(--border);border-radius:8px;padding:16px;width:min(1100px,94vw);
  background:var(--surface-card);color:var(--text)}
.trend-modal::backdrop{background:rgba(31,39,48,.42)}
.trend-modal-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:10px}
.trend-modal h2{font-size:16px;margin:0;color:var(--brand-dark);text-transform:uppercase;letter-spacing:.4px}
.trend-modal p{margin:4px 0 0}
.trend-close{min-height:36px;padding:6px 12px}
/* Finestra Trade Area della home: overlay sopra la Formulazione prezzi. */
/* Finestra compatta e minimal (2026-08-20): ~65% dello schermo su desktop,
   scroll interno, backdrop leggero che lascia leggibile la pagina sotto;
   trascinabile dalla barra del titolo (trade_area.js) e espandibile a
   schermo quasi intero con il pulsante dedicato. */
.trade-area-dialog{border:1px solid var(--border);border-radius:12px;padding:0;
  width:min(780px,65vw);max-height:min(72vh,760px);overflow:hidden;
  display:none;flex-direction:column;
  background:var(--surface-card);color:var(--text);
  box-shadow:0 18px 50px rgba(0,0,0,.28)}
/* Il display va dichiarato SOLO da aperto (regola gemella dei dialog).
   Niente position:fixed qui: il centraggio resta quello nativo del dialog
   (il drag lo imposta via JS quando serve). */
.trade-area-dialog[open]{display:flex}
.trade-area-dialog.is-expanded{width:min(1200px,96vw);max-height:92vh}
.trade-area-dialog::backdrop{background:rgba(31,39,48,.18)}
/* flex-basis AUTO + min-height:0, mai flex:1 (basis 0): su Safari/iPad il
   contenitore ad altezza automatica collassava il corpo a ~20px e la
   finestra si apriva alta 118px (bug segnalato da Andrea il 20/08). */
.trade-area-body{overflow:auto;padding:4px 16px 16px;flex:1 1 auto;min-height:0}
/* Tablet: il 65% del viewport e' troppo stretto per la tabella — quasi
   tutta la larghezza, restando una finestra. */
@media (min-width:641px) and (max-width:1024px){
  .trade-area-dialog{width:min(720px,92vw)}
}
.trade-area-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;
  margin-bottom:0;padding:12px 16px 10px;border-bottom:1px solid var(--border);
  cursor:move;touch-action:none;user-select:none;-webkit-user-select:none}
.trade-area-dialog.is-dragging{opacity:.94}
.trade-area-head .trade-area-actions{display:flex;gap:8px;flex:0 0 auto}
.trade-area-head h2{font-size:16px;margin:0;color:var(--brand-dark);text-transform:uppercase;letter-spacing:.4px}
.trade-area-head p{margin:4px 0 0}
.trade-area-table th,.trade-area-table td{padding:8px 10px;border-bottom:1px solid var(--border)}
.trade-area-table .num{font-weight:800;color:var(--brand-dark);white-space:nowrap}
.trade-area-own td{background:var(--brand-light)}
.trade-area-observed{display:block;font-size:.8em;font-weight:400}
.trade-area-loading,.trade-area-empty{padding:28px 8px;text-align:center}
/* Smartphone: pannello a schermo quasi intero, niente drag ne' espansione
   (lo spazio non lo consente); chiusura in tutti i modi previsti. */
@media (max-width:640px){
  .trade-area-dialog,.trade-area-dialog.is-expanded{width:100vw;max-width:100vw;
    max-height:100dvh;height:100dvh;border:none;border-radius:0;margin:0;
    left:0 !important;top:0 !important}
  .trade-area-head{cursor:default;touch-action:auto}
  [data-trade-area-expand]{display:none}
}

.history-page{display:grid;gap:14px}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.page-heading h1{margin-bottom:4px}.page-heading p{margin:0;color:var(--muted)}
.history-sync-summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 13px;background:var(--surface-subtle);border:1px solid var(--border);border-radius:var(--radius-card);font-size:12px}
.history-sync-summary progress{width:min(260px,100%);height:14px}.history-sync-summary small{flex:1 1 220px;color:var(--muted)}
.history-filters{display:grid;grid-template-columns:2fr 1.2fr 1fr 1fr 1fr;gap:10px;padding:14px;background:var(--surface-card);border:1px solid var(--border);border-radius:var(--radius-card)}
.history-filters label{display:grid;gap:5px;font-size:11px;font-weight:900;color:var(--brand-dark);text-transform:uppercase;letter-spacing:.35px}
.history-filters select,.history-filters input{min-height:42px;width:100%;padding:7px 9px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);color:var(--text)}
.history-quick-filters{display:flex;gap:7px;flex-wrap:wrap}.history-quick-filters button,.history-chart-actions button,.history-legend button{min-height:36px;padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius-control);background:var(--surface-card);color:var(--brand-dark);font-weight:800;cursor:pointer}
.history-quick-filters button.active{background:var(--brand);border-color:var(--brand);color:#fff}
.history-month-selector,.history-series-filter{padding:11px 13px;background:var(--surface-card);border:1px solid var(--border);border-radius:var(--radius-card)}.history-month-selector summary{cursor:pointer;font-weight:900;color:var(--brand-dark)}
.history-month-selector>div,.history-series-filter>div{display:flex;gap:8px 14px;flex-wrap:wrap;margin-top:9px}.history-month-selector label,.history-series-option{font-size:12px;font-weight:700}
.history-series-filter h2{margin:0;font-size:13px;text-transform:uppercase;color:var(--brand-dark)}.history-series-option{display:inline-flex;align-items:center;gap:5px}.history-series-option i{display:inline-block;width:16px;height:4px;border-radius:2px}.history-series-option.own{font-weight:900}
.history-chart-card{padding:14px;background:var(--surface-card);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card)}.history-chart-heading{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}.history-chart-heading h2{margin:0;color:var(--brand-dark)}.history-chart-heading p{margin:3px 0;color:var(--muted)}.history-chart-actions{display:flex;gap:7px;flex-wrap:wrap}
.history-legend{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}.history-legend button{display:inline-flex;align-items:center;gap:6px;font-size:11px;min-height:30px}.history-legend button i{width:15px;height:4px;border-radius:2px}.history-legend button.muted{opacity:.45;text-decoration:line-through}
.history-canvas-wrap{position:relative;width:100%;min-height:380px;overflow:hidden}.history-canvas-wrap canvas{display:block;width:100%;touch-action:pan-y}.history-canvas-wrap.expanded{height:min(72vh,760px)}
.history-tooltip{position:absolute;z-index:5;width:200px;padding:7px 9px;border:1px solid var(--border);border-left:4px solid var(--brand);border-radius:var(--radius-control);background:var(--surface-elevated);box-shadow:var(--shadow-elevated);font-size:11px;line-height:1.4;pointer-events:none}
.history-warnings p{margin:6px 0;padding:7px 9px;background:#fff5dc;border-left:3px solid var(--accent);font-size:12px}.history-source{margin:10px 0 0;color:var(--muted);font-size:11px}
.history-dialog{width:min(1200px,96vw);padding:16px;border:1px solid var(--border);border-radius:var(--radius-card);background:var(--surface-elevated);box-shadow:var(--shadow-elevated)}.history-dialog::backdrop{background:rgba(36,36,36,.58)}.history-dialog-close{float:right;border:0;background:transparent;font-size:28px;cursor:pointer}.history-dialog h2{margin:0 40px 8px 0;color:var(--brand-dark)}

@media (max-width:760px){
  .history-filters{grid-template-columns:1fr 1fr}.history-filters label:first-child{grid-column:1/-1}.history-canvas-wrap{min-height:340px}.history-chart-actions{width:100%}.history-chart-actions button{flex:1}.history-sync-summary{align-items:stretch}.history-sync-summary progress{width:100%}
  .startup-task-list{grid-template-columns:1fr}
  .admin-form-grid{grid-template-columns:1fr}
  .admin-filters{grid-template-columns:1fr 1fr}.admin-filters label:first-child{grid-column:1/-1}
  .competitor-flags{grid-template-columns:1fr}.competitor-preview dl,.station-wizard dl{grid-template-columns:1fr}.competitor-preview dd,.station-wizard dd{margin-bottom:5px}
  header.topbar{padding:10px 14px;gap:10px}
  header.topbar img{height:30px}
  header.topbar .jt-lockup{flex:1 1 180px}
  header.topbar nav{margin-left:0;width:100%;gap:8px}
  header.topbar nav a,.topbar-btn{min-height:40px;display:inline-flex;align-items:center}
  .wrap{margin:14px auto;padding:0 10px}
  h1{font-size:19px;line-height:1.25}
  .sub{margin-bottom:10px}
  .toprow{align-items:stretch;gap:10px}
  .toprow>div:first-child{width:100%}
  .right{margin-left:0}
  .toprow .actions{width:100%;align-items:stretch}
  .toprow .actions form,.toprow .actions .btn{width:100%}
  .toprow .actions .btn{text-align:center}
  .card{padding:12px}
  .panel{padding:12px;border-radius:8px;margin-bottom:12px}
  .panel h2{font-size:13px}
  .panel table{min-width:700px}
  th,td{padding:8px}
  input.price{min-height:42px;width:96px}
  input.manual-price{min-height:40px;width:82px}
  .send-btn{min-height:30px}
  .pv-upper-metrics{grid-template-columns:1fr}
  .unload-grid{grid-template-columns:1fr}
  .unload-chip{min-height:52px}
  .daily-unload-brand-frame{width:var(--station-brand-frame-width);flex-basis:var(--station-brand-frame-width)}
  .issue{padding:10px;gap:7px}
  .mimit-previous-price{width:auto}
  .competitor-matrix-wrap{max-height:190px}
  .station-map{min-height:320px}
  .station-map-canvas{height:380px}
  .sales-controls{grid-template-columns:1fr}
  .sales-canvas{height:250px}
  .sales-controls{grid-template-columns:1fr}
  .sales-periods{grid-column:1}
  .sales-heading{display:grid}
  .sales-heading-actions{justify-content:flex-start}
  .trend-modal{width:96vw;padding:12px}
  .trend-modal-head{display:grid}
  .trend-modal-canvas{height:420px}
}

@media (min-width:761px) and (max-width:1100px){
  .grid{grid-template-columns:1fr}
  .toprow .actions{justify-content:flex-start}
}

@media (max-width:430px){
  .telegram-price-dialog{width:calc(100vw - 1rem);max-width:calc(100vw - 1rem);padding:12px}
  .telegram-price-summary{grid-template-columns:1fr}
  .telegram-price-summary div{grid-template-columns:1fr}
  .telegram-price-summary dd{text-align:left}
  .telegram-product-preview-row{grid-template-columns:1fr 1fr;padding:.65rem}
  .telegram-product-preview-name{grid-column:1/-1}
  .telegram-message-preview{box-sizing:border-box;width:100%;padding:.75rem}
  .telegram-price-dialog .dialog-actions .btn{flex:1 1 9rem}
  .telegram-contact-form,.history-detail-grid,.history-technical-grid{grid-template-columns:1fr}.telegram-contact-form .form-actions,.telegram-contact-form .field-error{grid-column:auto}.telegram-station-selector{grid-column:auto}.telegram-station-selector-tools{grid-template-columns:1fr}.telegram-station-options{grid-template-columns:1fr}.telegram-history-filters{grid-template-columns:1fr}.history-free-search{grid-column:auto}.heading-actions{width:100%}.heading-actions .btn{flex:1}.table-actions{min-width:12rem}.telegram-admin-page .page-heading>.btn{width:100%;text-align:center}
  .history-filters{grid-template-columns:1fr}.history-filters label:first-child{grid-column:auto}.history-quick-filters button{flex:1 1 44%}.history-dialog{padding:9px}.history-canvas-wrap.expanded{height:68vh}
  body{font-size:14px}
  header.topbar nav{align-items:stretch}
  header.topbar nav a,.topbar-form,.topbar-btn{width:100%}
  header.topbar nav a,.topbar-btn{justify-content:center}
  .rec-head,.rec-row{min-width:1230px}
  .panel table{min-width:640px}
  .metric-products{display:grid;grid-template-columns:1fr}
  .detail-positioning-head,.detail-positioning-row{min-width:1030px}
  .station-map-canvas{height:330px}
  .trend-modal-canvas{height:340px}
  .modal-sales-chart .sales-canvas{height:360px}
  .modal-sales-chart,.modal-sales-chart .sales-chart-shell{min-height:390px}
  .sales-chart-shell{min-height:280px;padding:6px}
  .sales-month-filter{max-height:120px}
  .correlation-filters{grid-template-columns:1fr}
  .correlation-chart-shell{min-height:280px;padding:6px}
  .period-selector{padding:4px 10px 8px}
  .period-quick{flex:1 1 100%}
  .period-quick .sales-period-btn{flex:1 1 20%}
  .period-month-select{flex:1 1 100%;max-width:none}
}

@media (max-width:760px){
  .telegram-contact-form{grid-template-columns:1fr}
  .telegram-contact-form .form-actions,.telegram-contact-form .field-error{grid-column:auto}
  .telegram-history-filters{grid-template-columns:1fr 1fr}
  .history-free-search{grid-column:1/-1}
  .history-detail-grid,.history-technical-grid{grid-template-columns:1fr}
}

@media (min-width:761px) and (max-width:1100px){
  .telegram-history-filters{grid-template-columns:repeat(3,minmax(0,1fr))}
}

@media (max-width:430px){
  .telegram-history-filters{grid-template-columns:1fr}
  .history-free-search{grid-column:auto}
}

/* Release UX 2026-07-19: header, controlli, profilo e operazioni uniformi. */
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.app-icon{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
/* Niente flex-wrap:nowrap qui: era la causa del bug iPad (768-1100px) — con
   la riga piena gli elementi si schiacciavano invece di andare a capo e il
   wordmark finiva sotto il nome utente. Il wrap di base (riga ~77) resta:
   sopra i 1280px la riga ci sta comunque tutta e non cambia nulla. */
header.topbar{min-height:68px;padding:10px clamp(14px,2vw,28px);gap:18px}
header.topbar .app-identity{flex:0 0 auto}
header.topbar .app-identity img{width:46px;height:42px;object-fit:contain;border-radius:9px;padding:4px}
header.topbar .app-identity img.topbar-logo{width:auto;height:36px;border-radius:0;padding:0}
/* min-width:0 + overflow:hidden: quando la barra e' stretta (761-1000px) il
   titolo si tronca con l'ellissi dentro il proprio riquadro; senza, il testo
   traboccava e finiva DIPINTO sotto saluto e icone della nav (sovrapposti). */
header.topbar .jt-lockup{min-width:0;overflow:hidden}
header.topbar .jt-wordmark{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
header.topbar .jt-lockup small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Freschezza dei dati nella barra superiore: gli aggiornamenti sono
   schedulati (10, 14 e 18) e l'apertura della suite non ne innesca. */
.data-freshness{display:flex;align-items:center;gap:8px;margin-left:auto;padding:5px 10px;
  border:1px solid rgba(255,255,255,.22);border-radius:10px;background:rgba(255,255,255,.08);
  color:#e6e6e6;font-size:11px;line-height:1.2;min-width:0}
.data-freshness .df-label{color:#b9b9b9;white-space:nowrap}
.data-freshness [data-freshness-value]{color:#fff;font-size:12px;white-space:nowrap}
.data-freshness .df-running{display:inline-flex;align-items:center;gap:6px;color:#ffd9d9;white-space:nowrap}
/* display esplicito batte il [hidden] del browser: va riaffermato, o lo
   stato "in corso" resterebbe visibile insieme alla data. */
.data-freshness [hidden]{display:none}
.data-freshness .df-spinner{width:11px;height:11px;border:2px solid rgba(255,255,255,.35);
  border-top-color:var(--brand-primary);border-radius:50%;animation:df-spin .9s linear infinite}
@keyframes df-spin{to{transform:rotate(360deg)}}
.data-freshness .df-button{padding:5px 10px;border:1px solid rgba(255,255,255,.28);border-radius:8px;
  background:rgba(255,255,255,.12);color:#fff;font:inherit;font-weight:700;cursor:pointer;white-space:nowrap;
  min-height:32px}
.data-freshness .df-button:hover:not(:disabled){background:rgba(255,255,255,.2)}
.data-freshness .df-button:disabled{opacity:.55;cursor:default}
.data-freshness+.header-greeting{margin-left:0}
/* Fino ai laptop stretti la freshness va su una riga propria: flex-basis
   100% con shrink 0 (width:100% + shrink 1 le permetteva invece di
   comprimersi e restare in riga, schiacciando l'identita' JetTulio). */
@media (max-width:1279px){
  .data-freshness{order:3;flex:0 0 100%;width:auto;margin-left:0;justify-content:flex-start;flex-wrap:wrap}
  .data-freshness .df-button{margin-left:auto}
  /* Con la freshness sulla propria riga, il saluto torna a tirarsi a destra
     accanto alle icone (layout unico: loghi a sinistra, utente a destra). */
  .data-freshness+.header-greeting{margin-left:auto}
}
@media (prefers-reduced-motion:reduce){.data-freshness .df-spinner{animation:none}}
/* Il saluto e' l'unico blocco comprimibile della riga: alle larghezze
   intermedie il nome si accorcia con l'ellissi invece di sovrapporsi
   (min-width:max-content creava la spinta che schiacciava l'identita'). */
.header-greeting{display:grid;margin-left:auto;min-width:0;overflow:hidden;line-height:1.15;text-align:right;color:#d4d4d4;font-size:11px}
.header-greeting span{white-space:nowrap}
.header-greeting strong{color:#fff;font-family:var(--font-heading);font-size:15px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
header.topbar nav.header-actions{flex:0 0 auto;max-width:none;margin:0;gap:8px;flex-wrap:nowrap}
header.topbar nav.header-actions .topbar-form{display:flex;width:auto;margin:0}
header.topbar nav.header-actions a.header-icon-button,.header-icon-button{position:relative;display:inline-grid;place-items:center;width:42px;height:42px;min-width:42px;min-height:42px;padding:0;border:1px solid rgba(255,255,255,.22);border-radius:10px;background:rgba(255,255,255,.08);color:#fff;box-shadow:none;cursor:pointer;transition:background .18s ease,border-color .18s ease,transform .18s ease}
header.topbar nav.header-actions a.header-icon-button:hover,.header-icon-button:hover{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.5);color:#fff;text-decoration:none;transform:translateY(-1px)}
header.topbar nav.header-actions a.header-icon-button.active{background:var(--brand-primary);border-color:var(--brand-accent);box-shadow:0 0 0 2px rgba(255,255,255,.16)}
.notification-badge{position:absolute;top:-5px;right:-5px;display:grid;place-items:center;min-width:19px;height:19px;padding:0 4px;border:2px solid var(--brand-dark);border-radius:999px;background:var(--brand-primary);color:#fff;font-size:9px;font-weight:900}
.header-menu{position:relative}.header-menu>summary{list-style:none}.header-menu>summary::-webkit-details-marker{display:none}
.header-menu-panel{position:absolute;right:0;top:calc(100% + 10px);z-index:110;display:grid;width:245px;padding:8px;border:1px solid var(--border);border-radius:12px;background:var(--surface-elevated);box-shadow:var(--shadow-elevated)}
header.topbar .header-menu-panel a,header.topbar .header-menu-panel button{display:flex;width:100%;min-height:40px;align-items:center;padding:8px 10px;border:0;border-radius:7px;background:transparent;color:var(--text-primary);font:inherit;font-size:12px;font-weight:750;text-align:left;box-shadow:none;cursor:pointer}
header.topbar .header-menu-panel a:hover,header.topbar .header-menu-panel button:hover{background:var(--brand-soft);color:var(--brand-primary);text-decoration:none;transform:none}

.controls-metrics{display:grid;grid-template-columns:repeat(3,minmax(100px,1fr));gap:10px}.control-metric{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:2px 10px;min-height:70px;padding:12px 14px;border:1px solid;border-radius:10px}.control-metric strong{grid-row:1/3;font:800 26px/1 var(--font-heading)}.control-metric span{font-size:11px;font-weight:850}.control-metric.warning{color:var(--status-warning);background:var(--status-warning-surface);border-color:var(--status-warning-border)}.control-metric.error{color:var(--status-danger);background:var(--status-danger-surface);border-color:var(--status-danger-border)}.control-metric.info{color:var(--status-info);background:var(--status-info-surface);border-color:var(--status-info-border)}.control-metric.passed{color:var(--status-success);background:var(--status-success-surface);border-color:var(--status-success-border)}
.controls-open-button{white-space:nowrap}.formulation-global-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.formulation-product.has-selected-price{box-shadow:inset 3px 0 0 var(--brand-primary)}

.profile-page{display:grid;gap:18px}.profile-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.profile-card{display:grid;gap:5px;padding:17px;border:1px solid var(--border);border-radius:var(--radius-card);background:var(--surface-card);box-shadow:var(--shadow-card)}.profile-card span{color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase}.profile-card strong{font-size:16px;overflow-wrap:anywhere}.profile-security-card{max-width:900px}.profile-email-form{display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,1fr) auto;align-items:end;gap:12px}.profile-email-form label{display:grid;gap:5px;font-size:12px;font-weight:800}.profile-email-form input{min-height:42px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-control)}.email-change-pending{margin:12px 0;padding:12px 14px;border:1px solid var(--status-info-border);border-radius:9px;background:var(--status-info-surface);color:var(--status-info)}.email-change-pending p{margin:3px 0 0}.inline-form{display:inline-flex;margin-top:10px}

.manual-stock-form{display:grid;grid-template-columns:minmax(110px,1fr) auto;gap:6px;align-items:center;min-width:245px}.manual-stock-form input[type=text]{width:100%;min-height:36px;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-control)}.manual-stock-form small{grid-column:1/-1;min-height:15px;color:var(--muted);font-size:10px}.stock-source-badge{display:inline-flex;padding:4px 8px;border:1px solid;border-radius:999px;font-size:10px;font-weight:900}.stock-source-badge.automatic{color:var(--status-success);background:var(--status-success-surface);border-color:var(--status-success-border)}.stock-source-badge.manual{color:var(--status-info);background:var(--status-info-surface);border-color:var(--status-info-border)}.stock-source-badge.unavailable{color:var(--muted);background:var(--surface-subtle);border-color:var(--border)}.stock-source-badge.calculated{color:var(--status-warning);background:var(--status-warning-surface);border-color:var(--status-warning-border)}
.manual-stock-form input[type=datetime-local]{grid-column:1/-1;min-height:34px;padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius-control);font-size:12px}
.stock-reading-note{display:block;font-size:10px}

.telegram-bulk-dialog{width:min(820px,calc(100vw - 2rem));max-height:90vh}.telegram-bulk-stations{display:grid;gap:7px;max-height:330px;overflow:auto;margin:12px 0;padding-right:3px}.telegram-bulk-station-row{display:grid;grid-template-columns:minmax(150px,1fr) minmax(220px,2fr) auto;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:9px;background:var(--surface-subtle);font-size:12px}.telegram-bulk-station-row.warning{border-color:var(--status-warning-border);background:var(--status-warning-surface)}.telegram-bulk-station-row.error{border-color:var(--status-danger-border);background:var(--status-danger-surface)}.telegram-bulk-station-status{font-size:10px;font-weight:900;text-align:right}.telegram-bulk-progress{margin:14px 0}.telegram-bulk-progress>div{display:flex;justify-content:space-between}.telegram-bulk-progress progress{width:100%;height:15px}.telegram-bulk-result{margin:12px 0;padding:12px 14px;border:1px solid var(--status-success-border);border-radius:9px;background:var(--status-success-surface);color:var(--status-success)}.telegram-bulk-result p{margin:4px 0 0}

.panel,.home-main-section,.formulation-station,.profile-card{transition:box-shadow .18s ease,border-color .18s ease,transform .18s ease}.btn{transition:background .18s ease,border-color .18s ease,box-shadow .18s ease,transform .18s ease}.btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 5px 12px rgba(36,36,36,.12)}

@media (prefers-reduced-motion:reduce){.panel,.home-main-section,.formulation-station,.profile-card,.btn,.header-icon-button{transition:none!important}.btn:hover:not(:disabled),.header-icon-button:hover{transform:none!important}}
@media (max-width:980px){.header-greeting span{display:none}.profile-email-form{grid-template-columns:1fr 1fr}.profile-email-form .btn{grid-column:1/-1;justify-self:start}}
@media (max-width:760px){header.topbar{position:sticky;flex-wrap:wrap;gap:9px}.header-greeting{margin-left:auto;text-align:right}header.topbar nav.header-actions{order:2;flex:0 0 100%;margin-left:0;justify-content:flex-end;gap:5px}header.topbar nav.header-actions a.header-icon-button,.header-icon-button{width:40px;min-width:40px;height:40px;min-height:40px}.header-menu-panel{position:fixed;top:68px;right:10px;left:10px;width:auto}.controls-metrics{grid-template-columns:1fr}.formulation-global-actions{width:100%;justify-content:stretch}.formulation-global-actions .btn{flex:1}.profile-grid{grid-template-columns:1fr}.profile-email-form{grid-template-columns:1fr}.profile-email-form .btn{grid-column:auto}.telegram-bulk-station-row{grid-template-columns:1fr}.telegram-bulk-station-status{text-align:left}}
@media (max-width:430px){header.topbar .jt-lockup small{display:none}header.topbar .app-identity img{width:38px;height:36px}header.topbar .app-identity img.topbar-logo{width:auto;height:30px}header.topbar .jt-wordmark{font-size:17px}header.topbar nav.header-actions{align-items:center;flex-wrap:wrap;justify-content:flex-end}header.topbar nav.header-actions a.header-icon-button,.topbar-form,.header-icon-button{width:38px;min-width:38px}.telegram-bulk-dialog{width:calc(100vw - 1rem);padding:12px}}

/* --- Import trimestrale "Altri Costi Pro Litro" (pagina admin) ------------ */
.other-costs-form{display:flex;align-items:end;gap:14px;flex-wrap:wrap}
.other-costs-form label{display:grid;gap:4px;font-size:12px;font-weight:700;color:var(--muted)}
.other-costs-form input,.other-costs-form select{padding:7px 8px;border:1px solid var(--border);
  border-radius:var(--radius-control);background:var(--surface-card);font:inherit}
.other-costs-form input[type="number"]{width:100px}
.other-costs-table-wrap{overflow-x:auto;margin:8px 0}
.other-costs-table-wrap select{max-width:280px;padding:5px 6px;border:1px solid var(--border);
  border-radius:var(--radius-control);font:inherit;font-size:12px}
.other-costs-row-anomalous td{background:var(--status-warning-surface,#fff7e6)}
.other-costs-row-unmapped td{background:var(--surface-subtle);color:var(--muted)}
.other-costs-anomaly{display:inline-block;padding:2px 7px;border-radius:999px;font-size:11px;
  font-weight:800;color:var(--status-warning,#9a6200);border:1px solid currentColor}
.other-costs-unmapped{font-weight:800;color:var(--muted)}
.other-costs-history-item{border:1px solid var(--border);border-radius:var(--radius-control);
  padding:8px 10px;margin-bottom:8px}
.other-costs-history-item>summary{cursor:pointer;font-size:13px}
.other-costs-history-item.is-superseded>summary{color:var(--muted)}
.other-costs-superseded{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;
  font-size:10.5px;font-weight:800;color:var(--muted);border:1px solid var(--border)}
.other-costs-history-item table{margin-top:8px}
.other-costs-history-item small{display:block;font-weight:400}
@media(max-width:700px){.other-costs-form{align-items:stretch;flex-direction:column}}

/* =========================================================================
   PWA — esperienza da app installata (2026-08-06)
   Safe area dei dispositivi con notch/Dynamic Island, footer con versione,
   comportamenti tattili da app (senza compromettere zoom e accessibilita').
   ========================================================================= */

/* La barra superiore non deve mai finire sotto le aree di sistema:
   status bar in alto (standalone con status bar traslucida) e bordi
   arrotondati/notch in orizzontale. */
header.topbar{
  padding-top:calc(8px + env(safe-area-inset-top, 0px));
  padding-left:calc(18px + env(safe-area-inset-left, 0px));
  padding-right:calc(18px + env(safe-area-inset-right, 0px));
}
.wrap{
  padding-left:calc(18px + env(safe-area-inset-left, 0px));
  padding-right:calc(18px + env(safe-area-inset-right, 0px));
}
.back-to-top{
  right:calc(18px + env(safe-area-inset-right, 0px));
  bottom:calc(18px + env(safe-area-inset-bottom, 0px));
}
@media(max-width:900px){
  header.topbar{
    padding-top:calc(10px + env(safe-area-inset-top, 0px));
    padding-left:calc(14px + env(safe-area-inset-left, 0px));
    padding-right:calc(14px + env(safe-area-inset-right, 0px));
  }
  .wrap{
    padding-left:calc(10px + env(safe-area-inset-left, 0px));
    padding-right:calc(10px + env(safe-area-inset-right, 0px));
  }
}

/* Tocco da app: niente alone blu al tap e niente zoom da doppio tap sui
   controlli. Lo zoom volontario (pizzico) e le dimensioni testo restano
   disponibili: nessun user-scalable=no. */
body{-webkit-tap-highlight-color:transparent}
a,button,summary,label,input,select,textarea{touch-action:manipulation}

/* Solo da app installata: niente effetto rimbalzo/aggancio scroll del
   browser ai bordi della pagina. Nel browser resta tutto come prima. */
@media (display-mode: standalone){
  html,body{overscroll-behavior-y:none}
}

/* Footer discreto con la versione della build (hash commit + data deploy). */
.app-footer{
  margin:34px 0 10px;
  padding-bottom:env(safe-area-inset-bottom, 0px);
  text-align:center;font-size:11px;color:var(--muted);
}
.app-footer-version{margin-left:8px;opacity:.8}

/* =========================================================================
   2FA — Sicurezza e accesso (profilo), invito e log di sicurezza (2026-08-06)
   ========================================================================= */
.tfa-methods{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr))}
.tfa-method{border:1px solid var(--border);border-radius:var(--radius-control);
  padding:14px 16px;background:var(--surface-card)}
.tfa-method header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.tfa-method h3{margin:0;font-size:15px}
.tfa-method p{font-size:13px;line-height:1.5;margin:6px 0}
.tfa-tag{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;
  font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;
  color:var(--brand-primary);border:1px solid currentColor;vertical-align:2px}
.tfa-code{display:inline-block;padding:3px 9px;border-radius:7px;
  background:var(--surface-subtle);border:1px solid var(--border);
  font-size:14px;font-weight:700;letter-spacing:.08em;user-select:all}
.tfa-link-box{border:1px dashed var(--border);border-radius:var(--radius-control);
  padding:10px 12px;margin-top:8px}
.tfa-waiting{color:var(--muted);font-style:italic}
.tfa-waiting::after{content:"";display:inline-block;width:10px;height:10px;margin-left:8px;
  border:2px solid var(--brand-primary);border-top-color:transparent;border-radius:50%;
  animation:tfa-spin 1s linear infinite;vertical-align:-1px}
@keyframes tfa-spin{to{transform:rotate(360deg)}}
.tfa-qr{display:block;margin:8px 0;border:1px solid var(--border);border-radius:10px;
  background:#fff;padding:6px;max-width:100%}
.tfa-inline-form{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-top:8px}
.tfa-inline-form label{display:grid;gap:4px;font-size:12px;font-weight:700}
.tfa-inline-form input{width:110px;padding:7px 9px;border:1px solid var(--border);
  border-radius:var(--radius-control);font:inherit;font-size:15px;letter-spacing:.15em}
.tfa-preferred-form{display:grid;gap:8px;margin-top:8px}
.tfa-radio{display:flex;align-items:center;gap:8px;font-size:13.5px}
.tfa-radio input{accent-color:var(--brand-primary);width:16px;height:16px}
.tfa-radio.is-disabled{color:var(--muted)}
.tfa-radio small{color:var(--muted)}

/* Invito una tantum post-accesso */
.tfa-invite{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  border:1px solid var(--border);border-left:4px solid var(--brand-primary);
  border-radius:var(--radius-control);background:var(--surface-card);
  padding:12px 42px 12px 14px;margin:0 0 14px;position:relative}
.tfa-invite-text{display:grid;gap:2px;flex:1;min-width:220px}
.tfa-invite-text strong{font-size:14px}
.tfa-invite-text span{font-size:12.5px;color:var(--muted);line-height:1.45}
/* Area di tocco >= 40px (audit mobile 2026-08-20). */
.tfa-invite-close{position:absolute;top:4px;right:4px;width:40px;height:40px;
  min-width:40px;min-height:40px;display:inline-grid;place-items:center;
  border:0;background:transparent;color:var(--muted);font-size:18px;cursor:pointer;
  border-radius:8px}
.tfa-invite-close:hover{background:var(--surface-subtle);color:inherit}

/* Log di sicurezza (admin) */
.seclog-filters{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;margin:0 0 12px}
.seclog-filters label{display:grid;gap:4px;font-size:12px;font-weight:700}
.seclog-filters input{padding:7px 9px;border:1px solid var(--border);
  border-radius:var(--radius-control);font:inherit}
.seclog-table-wrap{overflow-x:auto}
.seclog-ok{color:var(--status-success,#1d7a46);font-weight:700}
.seclog-fail{color:var(--brand-primary);font-weight:700}

/* Acquisizione MEGA (admin, 2026-08-06) */
.mega-state-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin:14px 0 22px}
.mega-state-card{border:1px solid var(--border);border-radius:var(--radius-control);
  padding:14px 16px;background:var(--surface-card)}
.mega-state-card h2{margin:0 0 8px;font-size:15px}
.mega-state-card dl{display:grid;gap:6px;margin:8px 0 0}
.mega-state-card dl div{display:flex;justify-content:space-between;gap:10px;font-size:12.5px}
.mega-state-card dt{color:var(--muted)}
.mega-next-runs{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:13px}
.mega-history-title{font-size:16px;margin:10px 0 8px}
.mega-file-cell small{display:block;margin-top:3px}
.mega-error-cell{max-width:260px;font-size:12px}
[data-bulk-export-download]{margin-top:10px;justify-self:start;align-self:flex-start}

/* --- Sezione Platt's ------------------------------------------------------ */
.platts-page{display:grid;gap:14px}
.panel .platts-table{min-width:520px}
/* La tabella del giorno ha Platt's, accisa e prezzo finito con i due Δ:
   gruppi visivi in intestazione (11/09/2026) e piu' respiro. */
.panel .platts-daily-table{min-width:860px}
.platts-daily-table thead th{vertical-align:bottom}
.platts-daily-table th.platts-group{text-align:center;border-bottom:1px solid var(--border)}
.platts-daily-table th.platts-group small{font-weight:600;text-transform:none;letter-spacing:0}
.platts-daily-table td.platts-cell-platts,.platts-daily-table td.platts-cell-excise,
.platts-daily-table td.platts-cell-finished{border-left:1px solid var(--border)}
.platts-delta{font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.platts-delta.is-up{color:var(--status-danger)}
.platts-delta.is-down{color:var(--status-success)}
.platts-delta.is-flat{color:var(--muted)}
.platts-delta small{font-weight:600}
.platts-state{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.platts-nd{color:var(--muted);font-weight:700;letter-spacing:.5px}
.platts-pdf-errors{color:var(--status-danger)}
.platts-legend{margin-bottom:8px}
.platts-mode-filters{grid-template-columns:minmax(220px,360px);padding-left:0}
.platts-carried-legend{color:var(--muted);font-weight:600}
.platts-carried-chip{width:11px;height:11px;border-radius:50%;
  border:2px solid #9aa7b4;background:var(--surface-card);display:inline-block}
@media (max-width:640px){.panel .platts-table{min-width:460px}
  /* Tabella del giorno come schede: una per prodotto, righe
     Platt's | Accisa | Prezzo finito, senza scorrimento orizzontale. */
  .panel .platts-daily-table{min-width:0;width:100%;display:block}
  .platts-daily-table thead{display:none}
  .platts-daily-table tbody{display:grid;gap:10px}
  .platts-daily-table tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 8px;
    padding:10px;border:1px solid var(--border);border-radius:var(--radius-card);background:var(--surface-card)}
  .platts-daily-table td{display:block;padding:0;border:0 !important;text-align:left}
  .platts-daily-table td[data-label]::before{content:attr(data-label);display:block;font-size:11px;
    font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px;margin-bottom:2px}
  .platts-daily-table td.platts-product{grid-column:1/-1;font-weight:800;font-size:15px}
  .platts-daily-table td.platts-cell-platts{grid-column:1/3}
  .platts-daily-table td.platts-cell-platts-delta{grid-column:3}
  .platts-daily-table td.platts-cell-excise{grid-column:1}
  .platts-daily-table td.platts-cell-finished{grid-column:2}
  .platts-daily-table td.platts-cell-finished-delta{grid-column:3}
  .platts-daily-table td.platts-day{grid-column:1/-1;color:var(--muted);font-size:12px}
  .platts-daily-table td.platts-state{grid-column:1/-1;justify-content:flex-start}}

/* --- Trade Area per prodotto (componente unico: finestra home + Controllo Dettagliato) --- */
.ta-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.ta-tab{display:inline-flex;align-items:center;gap:7px;padding:7px 12px;border:1px solid var(--border);
  border-radius:999px;background:var(--surface-card);font-weight:700;font-size:13px;cursor:pointer;color:var(--text)}
.ta-tab i{width:10px;height:10px;border-radius:50%;background:var(--product-color,#888);display:inline-block}
.ta-tab.active{border-color:var(--product-color,#888);box-shadow:inset 0 0 0 1px var(--product-color,#888);
  color:var(--brand-dark)}
.ta-tab:disabled{opacity:.45;cursor:default}
.ta-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:8px 16px;margin:0 0 10px}
.ta-toolbar label{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;
  color:var(--muted)}
.ta-legend-hint{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px;
  font-size:12px;color:var(--muted)}
.ta-list{display:flex;flex-direction:column;gap:0;border:1px solid var(--border);
  border-radius:var(--radius-card);overflow:hidden;background:var(--surface-card)}
.ta-list-head{padding:8px 12px;font-size:11px;font-weight:800;text-transform:uppercase;
  letter-spacing:.4px;color:var(--brand-dark);background:var(--surface-subtle);
  border-bottom:2px solid var(--brand-primary)}
.ta-list > .muted{padding:12px}
.ta-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:
  "who price flags" "details details details";align-items:center;gap:2px 12px;
  padding:8px 12px;border-bottom:1px solid var(--border)}
.ta-row:last-child{border-bottom:0}
.ta-row-own{background:var(--brand-light);border-left:4px solid var(--brand-primary)}
.ta-row-nearby{background:var(--surface-subtle)}
.ta-row-who{grid-area:who;display:flex;flex-direction:column;min-width:0}
.ta-row-who b{overflow-wrap:anywhere;line-height:1.25}
.ta-row-sub{color:var(--muted);font-size:12px}
.ta-row-price{grid-area:price;font-variant-numeric:tabular-nums;font-size:15px;color:var(--brand-dark)}
.ta-row-price.ta-price-stale b{color:var(--ds-warning,#8f5b00);text-decoration:line-through;opacity:.8}
.ta-stale-badge{display:inline-block;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.04em;
  color:var(--ds-warning,#8f5b00);background:var(--ds-warning-surface,#fdf3dc);border:1px solid var(--ds-warning-border,#e6c98a)}
.ta-stale-text{color:var(--ds-warning,#8f5b00)}
.ta-row-flags{grid-area:flags;display:flex;align-items:center;gap:6px;justify-content:flex-end;
  flex-wrap:wrap;min-width:96px}
.ta-own-badge{font-size:10px;font-weight:900;letter-spacing:.5px;padding:2px 8px;border-radius:999px;
  background:var(--brand-primary);color:var(--text-on-brand,#fff)}
.ta-row-details{grid-area:details;font-size:12px;color:var(--muted)}
.ta-row-details summary{cursor:pointer;font-weight:700;color:var(--brand-dark);font-size:11px}
.ta-row-details span{overflow-wrap:anywhere}
.ta-nearby-block{margin-top:10px;border:1px dashed var(--border);border-radius:var(--radius-card);
  padding:0;background:var(--surface-card)}
.ta-nearby-block summary{cursor:pointer;font-weight:700;color:var(--brand-dark);padding:10px 12px}
.ta-nearby-block .ta-row{border-top:1px solid var(--border);border-bottom:0}
.ta-delta{font-size:12px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.ta-delta.ta-higher{color:#188447}
.ta-delta.ta-cheaper{color:var(--status-danger,#c62828)}
.ta-delta.ta-equal{color:var(--muted)}
.ta-extreme{font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.5px;
  padding:1px 6px;border-radius:999px}
.ta-extreme.ta-max{background:#fde8e8;color:#b71c1c}
.ta-extreme.ta-min{background:#e6f4ea;color:#1b5e20}
/* Base del Prezzo Outlet (2026-09-21): evidenza discreta, tratteggiata. */
.ta-outlet-base{font-size:10px;font-weight:800;letter-spacing:.3px;padding:1px 6px;border-radius:999px;
  border:1px dashed var(--brand-primary);color:var(--brand-primary);white-space:nowrap}
@media (max-width:640px){
  .ta-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:
    "who price" "who flags" "details details"}
  .ta-row-flags{justify-content:flex-end;min-width:0}
}

/* --- Mobile 2026-08-18: menu admin chiudibile + header centrato ----------- */
/* Intestazione del pannello Strumenti amministrativi: titolo + pulsante X
   sempre visibile, con area di tocco da 40px (dentro la safe area perche' il
   pannello parte sotto la topbar reale, vedi sotto). */
.header-menu-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  margin-bottom:6px;padding:2px 2px 8px 10px;border-bottom:1px solid var(--border)}
.header-menu-head span{color:var(--muted);font-size:11px;font-weight:900;
  letter-spacing:.5px;text-transform:uppercase}
header.topbar .header-menu-panel button.header-menu-close{display:grid;place-items:center;
  width:40px;min-width:40px;height:40px;min-height:40px;padding:0;
  border:1px solid var(--border);border-radius:9px;background:var(--surface-subtle);
  color:var(--text-primary);font-size:15px;font-weight:900}
header.topbar .header-menu-panel button.header-menu-close:hover{background:var(--brand-soft);
  color:var(--brand-primary)}
@media (max-width:760px){
  /* Il pannello era fisso a top:68px, ma su iPhone (safe area del notch +
     righe extra della topbar) la barra reale supera i 110px: il pannello
     copriva l'ingranaggio rendendo impossibile richiudere il menu. Ancorato
     all'altezza reale misurata (--topbar-height, header_menu.js) e limitato
     in altezza cosi' resta sempre scrollabile e dentro lo schermo. */
  .header-menu-panel{position:fixed;top:calc(var(--topbar-height,68px) + 8px);
    right:10px;left:10px;width:auto;
    max-height:calc(100dvh - var(--topbar-height,68px) - 18px - env(safe-area-inset-bottom,0px));
    overflow-y:auto;-webkit-overflow-scrolling:touch}
  /* Header unico su tutti i dispositivi (2026-08-20, richiesta di Andrea):
     loghi a sinistra, nome utente e icone allineati a DESTRA come sul
     computer — sostituisce la variante mobile centrata del 2026-08-18. */
  header.topbar nav.header-actions{order:2;flex:0 0 100%;margin-left:0;justify-content:flex-end}
  header.topbar .header-greeting{margin-left:auto;justify-content:flex-end;text-align:right}
  header.topbar .data-freshness{justify-content:flex-start}
}

/* --- Selettore periodo: intervallo personalizzato "dal - al" (2026-08-20) --- */
.period-selector .period-custom-range{display:inline-flex;gap:8px;align-items:center;flex-wrap:wrap;margin-left:6px}
/* Regola gemella [hidden]: senza, il display sopra vincerebbe sul nascosto. */
.period-selector .period-custom-range[hidden]{display:none}
.period-selector .period-custom-range label{display:inline-flex;gap:5px;align-items:center;font-size:12px;font-weight:700;color:var(--muted)}
.period-selector .period-custom-range input[type=date]{min-height:36px;padding:4px 8px;border:1px solid var(--border);border-radius:8px;background:var(--surface-card);color:var(--text);font-size:13px}
.history-filters label[hidden]{display:none}

/* --- Pulsante "Ingrandisci" dei pannelli grafico (chart_zoom.js) --- */
.chart-zoom-open{float:right;margin-left:12px}
/* Dentro la vista ingrandita ogni pulsante di ingrandimento sparisce. */
.chart-zoom-active [data-chart-zoom]{display:none}

/* --- Stato posizionamenti senza trade area configurata (2026-08-20) --- */
.fp-positioning-empty{margin:2px 0 4px;padding:8px 10px;border:1px dashed var(--border);
  border-radius:var(--radius-control);color:var(--muted);font-size:11.5px;line-height:1.4}
.rec-empty-note{grid-column:1/-1;color:var(--muted);font-size:11px}

/* Storico rilevazioni manuali (Controllo dettagliato, 2026-08-25) */
.reading-history{grid-column:1/-1;margin-top:4px;font-size:11px;color:var(--muted)}
.reading-history summary{cursor:pointer;user-select:none}
.reading-history ul{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:3px}
.reading-history li{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center}
.reading-history li.voided{text-decoration:line-through;opacity:.6}
.reading-history .rh-qty{font-weight:700;color:var(--text)}
.reading-history .rh-void{text-decoration:none;font-style:italic}
.reading-history .rh-cancel{border:0;background:none;padding:0;font:inherit;color:var(--status-danger,#b3261e);cursor:pointer;text-decoration:underline}
.reading-history .rh-cancel:focus-visible{outline:2px solid var(--status-danger,#b3261e);outline-offset:2px}
.stock-reading-note.aging{color:var(--status-warning)}
.fp-note-aging{color:var(--status-warning)}
