/* =============================================================================
   AllTax v2 — DESIGN SYSTEM (prototipo navigabile)
   Base CONFORME AGID/Bootstrap Italia (palette istituzionale + font) +
   linguaggio "innovativo" v2. Contrasto AA (WCAG 2.1). Token --bi-* = base.
   Ogni fragment di vista DEVE usare SOLO queste classi/variabili.
   ========================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Titillium+Web:wght@300;400;600;700&family=Lora:wght@400;500;600&family=Roboto+Mono:wght@400;500&display=swap');

:root{
  /* Palette istituzionale Bootstrap Italia (NON modificare) */
  --bi-primary:#0066CC; --bi-primary-dark:#004080; --bi-primary-darker:#002B5C;
  --bi-secondary:#5C6F82; --bi-success:#008758; --bi-danger:#D9364F;
  --bi-warning:#A66300; --bi-info:#5A768A;
  --bi-text:#17324D; --bi-text-muted:#5B6E80; --bi-bg:#FFFFFF; --bi-bg-light:#F2F7FC;
  --bi-border:#D6E0EA;
  /* Font */
  --font-sans:'Titillium Web',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  --font-serif:'Lora',Georgia,serif; --font-mono:'Roboto Mono',ui-monospace,Menlo,monospace;
  /* Innovazione v2 */
  --grad-primary:linear-gradient(135deg,#004C99 0%,#0066CC 55%,#0A5E92 100%);
  --grad-warm:linear-gradient(135deg,#0A4D8C 0%,#0066CC 100%);
  --surface:#FFFFFF; --surface-2:#F6F9FD;
  --shadow-sm:0 1px 3px rgba(23,50,77,.08),0 1px 2px rgba(23,50,77,.06);
  --shadow-md:0 6px 18px rgba(23,50,77,.10),0 2px 6px rgba(23,50,77,.06);
  --shadow-lg:0 18px 48px rgba(23,50,77,.16);
  --radius-sm:8px; --radius:16px; --radius-lg:24px;
  --ring:0 0 0 3px rgba(0,102,204,.35);
  --sidebar-w:264px; --topbar-h:60px;
}
[data-theme="dark"]{
  --bi-text:#E6EEF6; --bi-text-muted:#A9BACB; --bi-bg:#0D1B2A; --bi-bg-light:#10243A;
  --bi-border:#284A6B; --surface:#12273D; --surface-2:#0F2235;
}
[data-contrast="high"]{
  --bi-primary:#0033A0; --bi-text:#000; --bi-bg:#FFF; --bi-border:#000;
  --surface:#FFF; --shadow-md:none; --shadow-lg:none; --grad-primary:#0033A0;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:var(--font-sans);color:var(--bi-text);background:var(--bi-bg-light);
  line-height:1.55;-webkit-font-smoothing:antialiased;font-size:16px}
h1,h2,h3,h4{line-height:1.2;color:var(--bi-text);margin:.2em 0 .4em}
h1{font-size:1.8rem;font-weight:700} h2{font-size:1.35rem;font-weight:700}
h3{font-size:1.1rem;font-weight:600}
a{color:var(--bi-primary)}
.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.lead-serif{font-family:var(--font-serif)}
:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--radius-sm)}
.skip-link{position:absolute;left:-999px;top:0;background:var(--bi-primary);color:#fff;padding:10px 16px;z-index:2000;border-radius:0 0 8px 0}
.skip-link:focus{left:0}

/* ---------- LAYOUT SHELL (menu in alto / top nav) ---------- */
.app{min-height:100vh;display:flex;flex-direction:column}
/* header istituzionale */
.topbar{background:var(--surface);border-bottom:1px solid var(--bi-border);
  display:flex;align-items:center;gap:14px;padding:8px 20px;position:sticky;top:0;z-index:40}
.topbar .brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--bi-text)}
.topbar .brand .logo{width:42px;height:42px;border-radius:12px;background:var(--grad-primary);display:grid;place-items:center;font-weight:700;color:#fff}
.topbar .crumb{font-weight:600;color:var(--bi-text-muted)}
.topbar .spacer{flex:1}
.topbar .pill{display:inline-flex;align-items:center;gap:6px;background:var(--bi-bg-light);
  border:1px solid var(--bi-border);border-radius:999px;padding:5px 12px;font-size:.85rem;cursor:pointer;color:var(--bi-text)}
/* barra di navigazione orizzontale */
.topnav{background:var(--bi-primary-darker);position:sticky;top:58px;z-index:35;box-shadow:var(--shadow-sm)}
.topnav .wrap{max-width:1320px;margin:auto;display:flex;flex-wrap:wrap;align-items:stretch;gap:0;padding:0 8px}
.topnav .nav-item,.topnav .dd>button{display:inline-flex;align-items:center;gap:7px;padding:13px 15px;color:#cfe0f0;
  background:none;border:none;font-family:var(--font-sans);font-size:.92rem;font-weight:600;cursor:pointer;border-bottom:3px solid transparent;text-decoration:none}
.topnav .nav-item:hover,.topnav .dd>button:hover{color:#fff;background:rgba(255,255,255,.08)}
.topnav .nav-item.active,.topnav .dd.has-active>button{color:#fff;border-bottom-color:#1E8FE0}
.topnav .ico{opacity:.9}
.topnav .dd{position:relative}
.topnav .dd>button .caret{font-size:.7rem;opacity:.7}
.topnav .dd-menu{position:absolute;top:100%;left:0;min-width:248px;max-height:70vh;overflow:auto;background:var(--surface);
  border:1px solid var(--bi-border);border-top:none;border-radius:0 0 14px 14px;box-shadow:var(--shadow-lg);padding:6px;display:none;z-index:50}
.topnav .dd.open .dd-menu{display:block}
.topnav .dd-menu a{display:flex;align-items:center;gap:10px;padding:9px 12px;color:var(--bi-text);text-decoration:none;border-radius:8px;font-size:.9rem}
.topnav .dd-menu a:hover{background:var(--bi-bg-light);color:var(--bi-primary)}
.topnav .dd-menu a.active{background:var(--bi-bg-light);color:var(--bi-primary);font-weight:700}
.topnav .dd-menu .ico{width:18px;text-align:center;color:var(--bi-primary)}
/* S114 #243 — min-width:0 affinché .main si restringa sotto la larghezza dei contenuti
   (default flex/grid item min-width:auto). overflow-x:auto mostra la scrollbar invece
   di tagliare la parte eccedente. Stesso fix di V1 #content. */
.main{padding:24px;max-width:1320px;margin:0 auto;width:100%;min-width:0;overflow-x:auto}
@media(max-width:900px){.topnav .wrap{flex-wrap:nowrap;overflow-x:auto}.topnav .dd-menu{position:fixed;left:8px;right:8px;min-width:0}}

/* ---------- COMPONENTI ---------- */
.card{background:var(--surface);border:1px solid var(--bi-border);border-radius:var(--radius);
  box-shadow:var(--shadow-md);padding:22px;transition:transform .18s,box-shadow .18s}
.card.hover:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.grid{display:grid;gap:18px}
.grid.cols-2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.cols-3{grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.grid.cols-4{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.kpi{background:var(--surface);border:1px solid var(--bi-border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow-sm)}
.kpi .label{color:var(--bi-text-muted);font-size:.85rem}
.kpi .value{font-family:var(--font-mono);font-size:1.7rem;font-weight:700;margin-top:4px}
.kpi.accent{background:var(--grad-primary);color:#fff;border:none}
.kpi.accent .label{color:rgba(255,255,255,.85)}
.btn{font-family:var(--font-sans);font-weight:600;border:none;cursor:pointer;background:var(--grad-primary);
  color:#fff;padding:11px 20px;border-radius:999px;font-size:.95rem;box-shadow:var(--shadow-sm);
  transition:filter .15s,transform .15s;display:inline-flex;align-items:center;gap:8px}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}
.btn.ghost{background:transparent;border:2px solid var(--bi-primary);color:var(--bi-primary);box-shadow:none}
.btn.sm{padding:7px 14px;font-size:.85rem}
.btn.danger{background:var(--bi-danger)}
/* Accessibilità: contenuto solo per screen-reader (caption tabelle, hint) — WCAG. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.badge{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;padding:3px 10px;border-radius:999px;border:1px solid var(--bi-border);background:var(--bi-bg-light);color:var(--bi-text)}
.badge.ok{background:#e6f5ee;color:#08603e;border-color:#bfe6d3}
.badge.warn{background:#fdf3e2;color:#7a4a00;border-color:#f0d8a8}
.badge.bad{background:#fce8eb;color:#a31329;border-color:#f3c2cb}
.tag-spid{background:#06c;color:#fff}.tag-cie{background:#0a7d3e;color:#fff}.tag-pagopa{background:#1a3e6e;color:#fff}
.tag-spid,.tag-cie,.tag-pagopa{font-size:.7rem;font-weight:700;padding:3px 8px;border-radius:6px}
table.tbl{width:100%;border-collapse:collapse;background:var(--surface);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}
table.tbl caption{text-align:left;font-weight:700;padding:0 0 10px}
table.tbl th,table.tbl td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--bi-border);font-size:.92rem}
table.tbl thead th{background:var(--bi-bg-light);color:var(--bi-primary);font-size:.8rem;text-transform:uppercase;letter-spacing:.03em}
table.tbl tbody tr:hover{background:var(--surface-2)}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}
.field label{font-weight:600;font-size:.88rem}
.field input,.field select,.field textarea{font-family:var(--font-sans);font-size:.95rem;padding:10px 12px;
  border:1px solid var(--bi-border);border-radius:var(--radius-sm);background:var(--surface);color:var(--bi-text)}
.tabs{display:flex;gap:4px;border-bottom:2px solid var(--bi-border);margin-bottom:18px;flex-wrap:wrap}
.tab{padding:10px 16px;cursor:pointer;border:none;background:none;color:var(--bi-text-muted);font-weight:600;font-family:var(--font-sans);border-bottom:3px solid transparent;margin-bottom:-2px}
.tab.active{color:var(--bi-primary);border-bottom-color:var(--bi-primary)}
.timeline{list-style:none;padding:0;margin:0;position:relative}
.timeline li{padding:0 0 18px 26px;position:relative;border-left:2px solid var(--bi-border)}
.timeline li::before{content:"";position:absolute;left:-7px;top:2px;width:12px;height:12px;border-radius:50%;background:var(--bi-primary);box-shadow:0 0 0 3px var(--surface)}
.empty{text-align:center;color:var(--bi-text-muted);padding:40px;border:2px dashed var(--bi-border);border-radius:var(--radius)}
.page-head{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.page-head .spacer{flex:1}
.muted{color:var(--bi-text-muted)}
.no-print{}
/* ---------- Tooltip (data-tooltip) — oltre al title nativo del browser ---------- */
[data-tooltip]{position:relative}
[data-tooltip]:hover::after,[data-tooltip]:focus-visible::after{
  content:attr(data-tooltip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:var(--bi-primary-darker);color:#fff;padding:6px 10px;border-radius:8px;font-size:.78rem;font-weight:400;
  white-space:nowrap;max-width:280px;box-shadow:var(--shadow-md);z-index:1200;pointer-events:none}
[data-tooltip]:hover::before,[data-tooltip]:focus-visible::before{
  content:"";position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);
  border:6px solid transparent;border-top-color:var(--bi-primary-darker);z-index:1200;pointer-events:none}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* ---- Compat classi usate da viste v2 (skill-matrix, kb-aree, ai-profilo-preview) ---- */
table.table{width:100%;border-collapse:collapse;background:var(--surface);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}
table.table caption{text-align:left;font-weight:700;padding:0 0 10px}
table.table th,table.table td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--bi-border);font-size:.92rem}
table.table thead th{background:var(--bi-bg-light);color:var(--bi-primary);font-size:.8rem;text-transform:uppercase;letter-spacing:.03em}
table.table tbody tr:hover{background:var(--surface-2)}
.input{font-family:var(--font-sans);font-size:.95rem;padding:10px 12px;border:1px solid var(--bi-border);border-radius:var(--radius-sm);background:var(--surface);color:var(--bi-text);width:100%}
.kpi .kpi-ico{font-size:1.4rem;color:var(--bi-primary);margin-bottom:6px}
.kpi .kpi-val{font-family:var(--font-mono);font-size:1.7rem;font-weight:700;margin-top:2px}
.kpi .kpi-lbl{color:var(--bi-text-muted);font-size:.85rem;margin-top:4px}

/* ---- Responsive topbar: evita overflow orizzontale su mobile ---- */
@media(max-width:600px){
  .topbar{flex-wrap:wrap;gap:8px;padding:8px 12px}
  .topbar .tag-spid,.topbar .tag-cie,.topbar .tag-pagopa{display:none}
  .topbar .pill .lbl{display:none}
}

/* =============================================================================
   TABLET PWA FRAMEWORK — ADDITIVO (FONDAMENTA, 2026-06-05)
   ---------------------------------------------------------------------------
   Obiettivo: rendere /v2/ pienamente usabile dagli operatori/admin su TABLET,
   senza regressioni su desktop (>=1200px), phone (<768px) o cittadino.
   Tutte le regole vivono in:
     - banda tablet:  @media (min-width:768px) and (max-width:1199px)
     - input grossolano: @media (pointer:coarse)   (tablet/touch, qualsiasi width)
   Le utility (.v2-md, .v2-tbl-cards, .v2-prio-*) sono inerti finché una vista
   non le applica → zero impatto sull'esistente.
   Convenzione classi: prefisso  v2-  per evitare collisioni col design system.
   ========================================================================== */

/* ---------- Variabili tablet ---------- */
:root{ --v2-touch:44px; --v2-md-list-w:340px; --v2-gap:16px; }

/* ---------- 1) TOUCH TARGET >=44px (solo tablet + input grossolano) ----------
   Si applica SOLO con (pointer:coarse): mouse/desktop non vengono ingrossati.
   Non tocca la palette/desktop: alza padding/min-size dei controlli interattivi. */
@media (pointer:coarse){
  .btn{min-height:var(--v2-touch);padding:12px 22px}
  .btn.sm{min-height:var(--v2-touch);padding:10px 16px}
  .pill{min-height:var(--v2-touch);padding:9px 14px}
  .tab{min-height:var(--v2-touch);display:inline-flex;align-items:center}
  .field input,.field select,.field textarea,.input{min-height:var(--v2-touch);padding:12px 14px;font-size:1rem}
  /* le righe-azione delle tabelle e i link di navigazione restano comodi */
  table.tbl td a,table.table td a,.btn-icon{min-height:var(--v2-touch);min-width:var(--v2-touch)}
  .btn-icon{display:inline-flex;align-items:center;justify-content:center}
  /* voci del menu in alto + dropdown: bersagli generosi */
  .topnav .nav-item,.topnav .dd>button{min-height:var(--v2-touch);padding:14px 16px}
  .topnav .dd-menu a{min-height:var(--v2-touch);padding:12px 14px}
  /* chip-suggerimento interattivi (es. vista AI): bersaglio touch pieno, senza toccare i badge-stato statici */
  button.badge,.badge[role="button"],.chip-suggest,.ai-suggest button{min-height:var(--v2-touch);display:inline-flex;align-items:center}
}

/* ---------- 2) MASTER-DETAIL riutilizzabile (.v2-md) ----------
   USO (per gli agenti per-vista):
     <div class="v2-md">
       <div class="v2-md-list"> … lista/ricerca/tabella selezionabile … </div>
       <div class="v2-md-detail"> … scheda di dettaglio … </div>
     </div>
   - DESKTOP & TABLET LANDSCAPE: lista a sinistra (larghezza fissa) + dettaglio a destra.
   - TABLET PORTRAIT & PHONE: impilate (lista sopra, dettaglio sotto).
   - .v2-md-detail può avere [hidden] finché non si seleziona una riga.
   Base (mobile-first): impilato; lo split parte da >=768px landscape. */
.v2-md{display:grid;grid-template-columns:1fr;gap:var(--v2-gap);align-items:start}
.v2-md-list{min-width:0}
.v2-md-detail{min-width:0}
/* Split a 2 colonne: da tablet landscape in su (>=768 e orientamento landscape)
   e su tutto il desktop (>=1200). In portrait tablet resta impilato. */
@media (min-width:768px) and (orientation:landscape){
  .v2-md{grid-template-columns:var(--v2-md-list-w) minmax(0,1fr)}
  .v2-md-list{position:sticky;top:calc(var(--topbar-h) + 12px);max-height:calc(100vh - var(--topbar-h) - 24px);overflow:auto}
}
@media (min-width:1200px){
  .v2-md{grid-template-columns:var(--v2-md-list-w) minmax(0,1fr)}
  .v2-md-list{position:sticky;top:calc(var(--topbar-h) + 12px);max-height:calc(100vh - var(--topbar-h) - 24px);overflow:auto}
}
/* Utility opzionale: forza impilamento anche in landscape (vista che lo richiede) */
.v2-md.v2-md-stacked{grid-template-columns:1fr}
.v2-md.v2-md-stacked .v2-md-list{position:static;max-height:none;overflow:visible}

/* ---------- 3) TABELLE LARGHE — pattern responsive ----------
   Due strategie, scelte dall'agente per-vista:
   (A) SCROLL con colonne prioritarie: avvolgi la <table class="tbl"> in
       <div class="v2-tbl-scroll">. Marca le colonne secondarie con .v2-col-lo
       (th+td): vengono nascoste su tablet portrait/phone, restano su landscape/desktop.
   (B) CARD su portrait: aggiungi class="v2-tbl-cards" alla <table class="tbl">
       e su OGNI <td> metti data-label="Intestazione colonna". In portrait/phone
       la tabella diventa una pila di card leggibili; su desktop resta tabella. */

/* (A) contenitore con scroll orizzontale morbido (no rottura layout) */
.v2-tbl-scroll{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius)}
.v2-tbl-scroll>table.tbl,.v2-tbl-scroll>table.table{min-width:640px}

/* colonne a bassa priorità: nascoste su tablet portrait e phone, visibili altrove */
@media (max-width:1199px) and (orientation:portrait){ .v2-col-lo{display:none!important} }
@media (max-width:767px){ .v2-col-lo{display:none!important} }

/* (B) table -> cards: rendering a card nelle bande tablet portrait + phone */
@media (max-width:1199px) and (orientation:portrait){
  table.tbl.v2-tbl-cards,table.table.v2-tbl-cards{box-shadow:none;background:none}
  table.tbl.v2-tbl-cards thead,table.table.v2-tbl-cards thead{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
  table.tbl.v2-tbl-cards tbody tr,table.table.v2-tbl-cards tbody tr{display:block;background:var(--surface);border:1px solid var(--bi-border);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:12px;padding:8px 4px}
  table.tbl.v2-tbl-cards tbody tr:hover,table.table.v2-tbl-cards tbody tr:hover{background:var(--surface)}
  table.tbl.v2-tbl-cards td,table.table.v2-tbl-cards td{display:flex;justify-content:space-between;gap:14px;border:none;padding:8px 14px;font-size:.95rem;text-align:right}
  table.tbl.v2-tbl-cards td::before,table.table.v2-tbl-cards td::before{content:attr(data-label);font-weight:600;color:var(--bi-text-muted);text-align:left;flex:0 0 auto;text-transform:none;letter-spacing:0}
  table.tbl.v2-tbl-cards td:empty,table.table.v2-tbl-cards td:empty{display:none}
}
@media (max-width:767px){
  table.tbl.v2-tbl-cards,table.table.v2-tbl-cards{box-shadow:none;background:none}
  table.tbl.v2-tbl-cards thead,table.table.v2-tbl-cards thead{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
  table.tbl.v2-tbl-cards tbody tr,table.table.v2-tbl-cards tbody tr{display:block;background:var(--surface);border:1px solid var(--bi-border);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:12px;padding:8px 4px}
  table.tbl.v2-tbl-cards td,table.table.v2-tbl-cards td{display:flex;justify-content:space-between;gap:14px;border:none;padding:8px 14px;text-align:right}
  table.tbl.v2-tbl-cards td::before,table.table.v2-tbl-cards td::before{content:attr(data-label);font-weight:600;color:var(--bi-text-muted);text-align:left;flex:0 0 auto;text-transform:none;letter-spacing:0}
  table.tbl.v2-tbl-cards td:empty{display:none}
}

/* ---------- 4) GRID: densità adattata al tablet ----------
   Le .grid.cols-* del DS usano auto-fit/minmax: già fluide. Aggiustiamo solo i
   minmax in banda tablet per evitare colonne troppo strette o troppo larghe. */
@media (min-width:768px) and (max-width:1199px){
  .grid.cols-4{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
  .grid.cols-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
  .main{padding:18px}
}

/* ---------- 5) MODALI FULLSCREEN su tablet portrait + phone ----------
   I modali TaxAiCrud usano .modal-overlay > .modal-dialog. Su schermi stretti
   (tablet portrait/phone) li portiamo a tutto schermo per usabilità touch,
   con footer azioni sempre raggiungibile. Su desktop/tablet landscape invariati. */
@media (max-width:1199px) and (orientation:portrait){
  .modal-overlay{align-items:stretch!important;justify-content:stretch!important;padding:0!important}
  .modal-overlay .modal-dialog{width:100%!important;max-width:100%!important;max-height:100vh!important;height:100vh;margin:0!important;border-radius:0!important;display:flex;flex-direction:column}
  .modal-overlay .modal-body{flex:1 1 auto;overflow:auto}
  .modal-overlay .modal-footer{position:sticky;bottom:0;background:var(--surface);border-top:1px solid var(--bi-border)}
  .modal-overlay .modal-footer .btn{min-height:var(--v2-touch)}
}
@media (max-width:767px){
  .modal-overlay{align-items:stretch!important;justify-content:stretch!important;padding:0!important}
  .modal-overlay .modal-dialog{width:100%!important;max-width:100%!important;max-height:100vh!important;height:100vh;margin:0!important;border-radius:0!important;display:flex;flex-direction:column}
  .modal-overlay .modal-body{flex:1 1 auto;overflow:auto}
  .modal-overlay .modal-footer{position:sticky;bottom:0;background:var(--surface);border-top:1px solid var(--bi-border)}
}

/* ---------- 6) TOP NAV: drawer/overflow su tablet ----------
   La barra a 30+ voci con dropdown va in scroll orizzontale fluido su tablet,
   con bersagli grandi. Il drawer verticale (toggle hamburger) è gestito da
   shell-v2.js che aggiunge .v2-nav-drawer al <nav.topnav> quando attivo. */
@media (min-width:768px) and (max-width:1199px){
  .topnav .wrap{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
  .topnav .dd-menu{position:fixed;left:8px;right:8px;min-width:0;max-height:60vh}
}
/* Hamburger toggle (iniettato dalla shell solo in banda tablet/coarse) */
.v2-nav-toggle{display:none;background:none;border:none;color:#cfe0f0;font-size:1.2rem;padding:12px 14px;cursor:pointer;min-height:var(--v2-touch)}
/* Drawer verticale: quando .topnav ha .v2-nav-drawer.open, il .wrap diventa colonna a tendina */
.topnav.v2-nav-drawer .wrap{display:none}
.topnav.v2-nav-drawer.open .wrap{display:flex;flex-direction:column;flex-wrap:nowrap;overflow-x:visible;max-height:70vh;overflow-y:auto;background:var(--bi-primary-darker);padding:6px 8px 12px}
.topnav.v2-nav-drawer.open .dd{width:100%}
.topnav.v2-nav-drawer.open .dd-menu{position:static;display:none;box-shadow:none;border:none;background:rgba(255,255,255,.06);border-radius:8px;margin:2px 0 6px;max-height:none}
.topnav.v2-nav-drawer.open .dd.open .dd-menu{display:block}
.topnav.v2-nav-drawer.open .dd-menu a{color:#e8f0f8}
.topnav.v2-nav-drawer.open .dd-menu a:hover{background:rgba(255,255,255,.1);color:#fff}
@media (min-width:768px) and (max-width:1199px){ .v2-nav-toggle{display:inline-flex;align-items:center} }

/* ---------- 8) SPLIT asimmetrico contenuto+aside (es. calendar) ----------
   Le viste con layout "contenuto principale + colonna laterale" usano una grid
   asimmetrica inline (es. minmax(0,2.1fr) minmax(280px,1fr)). Su tablet portrait
   e phone va impilata per non sforare in larghezza. Marca il wrapper con
   .v2-split-aside: su portrait/phone diventa una colonna; l'aside sticky torna
   statico. Desktop e tablet landscape restano invariati (vince l'inline style
   solo finché questa regola non si attiva). */
@media (max-width:1199px) and (orientation:portrait){
  .v2-split-aside{grid-template-columns:1fr!important}
  .v2-split-aside aside .card{position:static!important}
  /* aside che è esso stesso una .card (es. nav della guida): de-stick + altezza libera */
  .v2-split-aside aside.card{position:static!important;max-height:none!important}
}
@media (max-width:767px){
  .v2-split-aside{grid-template-columns:1fr!important}
  .v2-split-aside aside .card{position:static!important}
  .v2-split-aside aside.card{position:static!important;max-height:none!important}
}

/* ---------- 7) Banner OFFLINE (gestito da sw-register.js) ---------- */
#v2-offline-banner{position:fixed;bottom:0;left:0;right:0;background:var(--bi-warning,#A66300);color:#fff;
  padding:9px 16px;text-align:center;z-index:99997;font-size:.9rem;display:flex;align-items:center;justify-content:center;gap:10px;box-shadow:0 -2px 8px rgba(0,0,0,.15)}
#v2-offline-banner i{font-size:1rem}
