/* ═══════════════════════════════════════════════════════════════════════
   ValoreCasa Design System · valorecasa.css · v1.1.0
   ───────────────────────────────────────────────────────────────────────
   Estetica mediterranea sobria — AVORIO caldo, VERDE petrolio, TERRACOTTA.
   Light + dark di prima classe. Firma visiva: il "quaderno a quadretti".
   Pensata per prodotti orientati ai numeri (dashboard, tool professionali)
   dove la fiducia si MOSTRA e il dato è il protagonista.

   ┌─ COS'È ──────────────────────────────────────────────────────────────┐
   │ Un singolo file CSS, puro, SENZA dipendenze. Funziona con React/Next, │
   │ Vue, Svelte o HTML statico. Tutto è costruito su custom properties     │
   │ (--color-*) così puoi consumarle ovunque, anche dentro Tailwind con    │
   │ valori arbitrari: class="bg-[var(--color-surface)]".                   │
   └────────────────────────────────────────────────────────────────────────┘

   ┌─ INSTALLA (3 passi) ──────────────────────────────────────────────────┐
   │ 1. Copia questo file nel progetto.                                     │
   │ 2. Importalo UNA volta, il più in alto possibile:                      │
   │      • CSS / Tailwind v4 :  @import 'valorecasa.css';                  │
   │      • HTML              :  <link rel="stylesheet" href="valorecasa.css">
   │ 3. (Consigliato) carica il font Inter. In assenza usa system-ui.       │
   └────────────────────────────────────────────────────────────────────────┘

   ┌─ DARK MODE ───────────────────────────────────────────────────────────┐
   │ Aggiungi/togli la classe `.dark` su <html> (o <body>):                 │
   │    document.documentElement.classList.toggle('dark');                  │
   │ Per il dark AUTOMATICO da OS, vedi lo snippet a fondo file.            │
   └────────────────────────────────────────────────────────────────────────┘

   ┌─ QUICK START (l'aspetto "ValoreCasa" in 30 secondi) ──────────────────┐
   │  <section class="vc-band">                          ← banda testata    │
   │    <div aria-hidden="true" class="vc-grid-paper"></div>                │
   │    <div class="vc-band__inner">                                        │
   │      <p class="vc-eyebrow">Annunci raccolti</p>                        │
   │      <h1 class="vc-title">Esplora i dati, città per città.</h1>        │
   │    </div>                                                              │
   │  </section>                                                            │
   │                                                                        │
   │  <div class="vc-card">                              ← card su superficie│
   │    <span class="vc-pill">Vertici <b class="vc-tnum">12</b></span>      │
   │    <button class="vc-btn vc-btn--primary">Applica</button>            │
   │    <button class="vc-btn vc-btn--ghost">Annulla</button>              │
   │  </div>                                                                │
   └────────────────────────────────────────────────────────────────────────┘

   ┌─ INDICE ──────────────────────────────────────────────────────────────┐
   │  1. Token colore (light)        5. Pattern firma (band/card/btn/pill)  │
   │  2. Token colore (dark)         6. Layer flottanti (modal/sheet/...)   │
   │  3. Base (body, selezione)      7. Controlli (input/select/button)     │
   │  4. Grid paper (quadretti)      8. Animazioni + reduced-motion         │
   └────────────────────────────────────────────────────────────────────────┘
   ═══════════════════════════════════════════════════════════════════════ */


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 1 · TOKEN COLORE — TEMA CHIARO (default)                               │
   │                                                                        │
   │ Regola d'oro: NON scrivere mai colori hardcoded nei componenti.        │
   │ Usa sempre questi token, così cambiando palette qui cambia tutta l'app.│
   │                                                                        │
   │ Come consumarli:                                                       │
   │   CSS     →  color: var(--color-text); background: var(--color-surface);│
   │   Tailwind →  text-[var(--color-text)]  bg-[var(--color-surface)]      │
   │                                                                        │
   │ Per una tinta del brand:  color-mix(in srgb, var(--color-brand) 12%, transparent)
   └───────────────────────────────────────────────────────────────────────┘ */
:root {
  /* Sfondi, dal più chiaro (pagina) al più carico */
  --color-bg: #f6f2ea;            /* sfondo pagina (avorio caldo)            */
  --color-bg-secondary: #ebe3d6;  /* fondo del gradiente, zone alternate      */
  --color-surface: #fffaf2;       /* card, pannelli, modali (sopra il bg)     */
  --color-surface-muted: #f0e8dc; /* hover, righe attenuate, stati soft       */

  /* Testo */
  --color-text: #1d211c;          /* testo primario, numeri protagonisti      */
  --color-text-secondary: #626954;/* label, metadati, testo di servizio       */

  /* Strutture */
  --color-border: #ddd3c4;        /* bordi, divisori, linee della griglia     */

  /* Brand & accento — usa con parsimonia, sono i "sharp accents" */
  --color-brand: #195d55;         /* verde petrolio: CTA primarie, link       */
  --color-brand-strong: #0f3f3a;  /* hover/pressed del brand, enfasi forte    */
  --color-accent: #bd6130;        /* terracotta: stato attivo, evidenziazioni */

  /* Token di sistema (raramente toccati a mano) */
  --vc-scrim: rgba(17, 23, 20, 0.48);   /* velo dietro overlay/modali         */
  --vc-shadow-color: rgba(19, 24, 19, 0.22); /* colore ombre dei layer        */
  --vc-grid-size: 48px;                  /* passo della griglia a quadretti    */
  --vc-radius: 12px;                     /* raggio standard di card/modali     */
  --vc-radius-sm: 8px;                   /* raggio di input/bottoni            */
  --vc-ring: 0 0 0 4px color-mix(in srgb, var(--color-brand) 16%, transparent); /* focus ring */
  --vc-select-chevron: var(--color-brand-strong);
  --vc-select-shadow: inset 0 1px 0 color-mix(in srgb, #fff 38%, transparent),
    0 1px 2px color-mix(in srgb, var(--vc-shadow-color) 22%, transparent);
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 2 · TOKEN COLORE — TEMA SCURO                                          │
   │ Stessi nomi, valori ribaltati. Si attiva con la classe `.dark`.        │
   │ In dark il brand/accent SCHIARISCONO (contrasto su fondo scuro).       │
   └───────────────────────────────────────────────────────────────────────┘ */
.dark {
  --color-bg: #111714;
  --color-bg-secondary: #1a221d;
  --color-surface: #18211c;
  --color-surface-muted: #202920;
  --color-text: #f2eadf;
  --color-text-secondary: #b8b0a3;
  --color-border: #334039;
  --color-brand: #7fc7b8;
  --color-brand-strong: #a7ded0;
  --color-accent: #f0ad73;

  --vc-scrim: rgba(6, 10, 8, 0.62);
  --vc-shadow-color: rgba(0, 0, 0, 0.5);
  --vc-select-chevron: var(--color-brand-strong);
  --vc-select-shadow: inset 0 1px 0 color-mix(in srgb, #fff 7%, transparent),
    0 1px 2px color-mix(in srgb, var(--vc-shadow-color) 34%, transparent);
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 3 · BASE                                                               │
   │ Il <body> riceve lo sfondo a doppio alone (accento + brand) sopra un   │
   │ gradiente verticale: è la "firma" calda della palette. Il font usa     │
   │ --font-sans se il progetto lo definisce, altrimenti Inter/system.      │
   └───────────────────────────────────────────────────────────────────────┘ */
body {
  font-family: var(--font-sans, 'Inter', system-ui, -apple-system, sans-serif);
  background:
    radial-gradient(circle at 14% -8%, color-mix(in srgb, var(--color-accent) 17%, transparent), transparent 30rem),
    radial-gradient(circle at 88% 4%, color-mix(in srgb, var(--color-brand) 13%, transparent), transparent 34rem),
    linear-gradient(180deg, var(--color-bg), var(--color-bg-secondary));
  color: var(--color-text);
  transition: background-color 0.2s, color 0.2s;
}

::selection {
  background: color-mix(in srgb, var(--color-accent) 32%, transparent);
}

button,
a,
input,
select,
textarea {
  -webkit-tap-highlight-color: transparent;
}

/* Numeri in colonna allineati (i numeri sono il protagonista). */
.vc-tnum {
  font-variant-numeric: tabular-nums;
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 4 · GRID PAPER — la firma "quaderno a quadretti"                       │
   │                                                                        │
   │ È un LAYER DECORATIVO: mettilo dentro un genitore `position: relative` │
   │ con `overflow: hidden`. Non intercetta i click (pointer-events: none). │
   │                                                                        │
   │   <section class="vc-band">  (oppure un tuo div relative+overflow)     │
   │     <div aria-hidden="true" class="vc-grid-paper"></div>               │
   │     ...contenuto sopra la griglia...                                   │
   │   </section>                                                           │
   │                                                                        │
   │ Personalizza il passo:  style="--vc-grid-size: 32px"                   │
   └───────────────────────────────────────────────────────────────────────┘ */
.vc-grid-paper {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.7;
  background-image:
    linear-gradient(to right, color-mix(in srgb, var(--color-border) 55%, transparent) 1px, transparent 1px),
    linear-gradient(to bottom, color-mix(in srgb, var(--color-border) 55%, transparent) 1px, transparent 1px);
  background-size: var(--vc-grid-size) var(--vc-grid-size);
}

/* Transizione morbida durante il cambio tema (aggiungi/togli .theme-transition su <html>). */
html.theme-transition * {
  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 5 · PATTERN FIRMA — i "mattoni" che rendono ogni app riconoscibile     │
   │ Sono classi pronte: usale e le tue app appariranno coerenti tra loro.  │
   └───────────────────────────────────────────────────────────────────────┘ */

/* — 5a. Banda testata col quaderno a quadretti —————————————————————————
   La testata-tipo di ValoreCasa: eyebrow + titolo grande su griglia.

     <section class="vc-band">
       <div aria-hidden="true" class="vc-grid-paper"></div>
       <div class="vc-band__inner">
         <p class="vc-eyebrow">Sezione</p>
         <h1 class="vc-title">Titolo della pagina.</h1>
         <p>Sottotitolo o descrizione…</p>
       </div>
     </section>                                                            */
.vc-band {
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid var(--color-border);
  background: var(--color-surface);
}

.vc-band__inner {
  position: relative; /* sopra il .vc-grid-paper */
  max-width: 80rem;
  margin-inline: auto;
  padding: 2.5rem 1.5rem;
}

/* — 5b. Eyebrow + Titolo ————————————————————————————————————————————————
   L'eyebrow è la piccola label uppercase del brand; il titolo è "font-black".
   Il titolo è fluido (clamp): cresce coi viewport grandi senza media query.  */
.vc-eyebrow {
  margin: 0 0 0.5rem;
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-brand-strong);
}

.vc-title {
  margin: 0;
  font-weight: 900;
  letter-spacing: -0.02em;
  line-height: 1.08;
  color: var(--color-text);
  font-size: clamp(1.75rem, 1.2rem + 2vw, 2.75rem);
}

/* — 5c. Card su superficie ——————————————————————————————————————————————
   Il contenitore base. NON annidare card dentro card (rumore visivo).

     <article class="vc-card"> … </article>
     <article class="vc-card vc-card--flush"> (senza padding, lo gestisci tu) */
.vc-card {
  border: 1px solid var(--color-border);
  border-radius: var(--vc-radius);
  background: var(--color-surface);
  color: var(--color-text);
  padding: 1.25rem;
}

.vc-card--flush {
  padding: 0;
}

/* — 5d. Bottoni ————————————————————————————————————————————————————————
   Base `.vc-btn` + UN modificatore. Gerarchia chiara, non rendere tutto primario.

     <button class="vc-btn vc-btn--primary">Azione principale</button>
     <button class="vc-btn vc-btn--outline">Azione secondaria</button>
     <button class="vc-btn vc-btn--ghost">Azione terziaria</button>
     <button class="vc-btn vc-btn--accent">Stato attivo / toggle</button>

   Disabilitato: aggiungi l'attributo `disabled`. Hanno già focus-visible.    */
.vc-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  min-height: 2.5rem;            /* compatto; per touch puro porta a 2.75rem */
  padding-inline: 0.875rem;
  border: 1px solid transparent;
  border-radius: var(--vc-radius-sm);
  font: inherit;
  font-size: 0.8125rem;
  font-weight: 600;
  cursor: pointer;
  text-decoration: none;
  transition: background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease;
}

.vc-btn:focus-visible {
  outline: none;
  box-shadow: var(--vc-ring);
}

.vc-btn:disabled,
.vc-btn[aria-disabled='true'] {
  opacity: 0.4;
  cursor: not-allowed;
}

/* Primario: pieno brand. La CTA che vuoi far premere. */
.vc-btn--primary {
  background: var(--color-brand);
  color: #fff;
}
.vc-btn--primary:hover:not(:disabled) {
  background: var(--color-brand-strong);
}

/* Outline: bordo neutro, si "accende" sul brand all'hover. */
.vc-btn--outline {
  border-color: var(--color-border);
  background: var(--color-bg);
  color: var(--color-text);
}
.vc-btn--outline:hover:not(:disabled) {
  border-color: var(--color-brand);
  color: var(--color-brand-strong);
}

/* Ghost: solo testo, fondo all'hover. Per azioni minori (annulla, reset). */
.vc-btn--ghost {
  color: var(--color-text-secondary);
  font-weight: 500;
}
.vc-btn--ghost:hover:not(:disabled) {
  background: var(--color-surface-muted);
  color: var(--color-text);
}

/* Accent: terracotta pieno. Per lo stato ATTIVO di un toggle (es. "in disegno"). */
.vc-btn--accent {
  background: var(--color-accent);
  color: #fff;
  box-shadow: 0 1px 2px var(--vc-shadow-color);
}
.vc-btn--accent:hover:not(:disabled) {
  opacity: 0.9;
}

/* — 5e. Pill / Badge ————————————————————————————————————————————————————
   Pill: contenitore di un piccolo dato (es. conteggio). Numero in tabular.

     <span class="vc-pill">Vertici <b class="vc-tnum">12</b></span>

   Badge: etichetta di stato semantica.

     <span class="vc-badge vc-badge--brand">Verificato</span>               */
.vc-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  border: 1px solid var(--color-border);
  border-radius: 999px;
  background: var(--color-bg);
  padding: 0.25rem 0.625rem;
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--color-text-secondary);
}
.vc-pill b,
.vc-pill strong {
  font-weight: 700;
  color: var(--color-text);
}

.vc-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  border-radius: 999px;
  padding: 0.125rem 0.5rem;
  font-size: 0.6875rem;
  font-weight: 700;
}
.vc-badge--brand {
  background: color-mix(in srgb, var(--color-brand) 16%, transparent);
  color: var(--color-brand-strong);
}
.vc-badge--accent {
  background: color-mix(in srgb, var(--color-accent) 18%, transparent);
  color: var(--color-accent);
}
.vc-badge--neutral {
  background: var(--color-surface-muted);
  color: var(--color-text-secondary);
}

/* — 5f. Status dot ——————————————————————————————————————————————————————
   Pallino-semaforo per righe di stato. Default neutro; modificatori colore.

     <p><span class="vc-dot vc-dot--brand"></span> Area applicata</p>       */
.vc-dot {
  display: inline-block;
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 999px;
  background: var(--color-border);
  vertical-align: middle;
}
.vc-dot--brand  { background: var(--color-brand); }
.vc-dot--accent { background: var(--color-accent); }


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 6 · LAYER FLOTTANTI — overlay, modale, sheet, popover                  │
   │                                                                        │
   │   <div class="vc-overlay" />                  ← velo a tutto schermo    │
   │   <div role="dialog" class="vc-modal"> … </div>                        │
   │   <aside class="vc-sheet"> … </aside>         ← pannello laterale       │
   │   <div role="menu" class="vc-popover"> … </div>                        │
   │                                                                        │
   │ Nota: usa i modali con parsimonia — spesso c'è di meglio.              │
   └───────────────────────────────────────────────────────────────────────┘ */
@keyframes vc-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes vc-pop-in {
  from { opacity: 0; transform: translateY(10px) scale(0.985); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes vc-sheet-in {
  from { opacity: 0; transform: translateX(24px); }
  to { opacity: 1; transform: translateX(0); }
}

.vc-overlay {
  animation: vc-fade-in 160ms ease-out;
  background:
    radial-gradient(circle at 20% 12%, color-mix(in srgb, var(--color-accent) 18%, transparent), transparent 24rem),
    var(--vc-scrim);
  backdrop-filter: blur(12px);
}

.vc-modal {
  animation: vc-pop-in 180ms ease-out;
  border: 1px solid var(--color-border);
  border-radius: var(--vc-radius);
  background: var(--color-surface);
  color: var(--color-text);
  box-shadow: 0 28px 70px var(--vc-shadow-color);
}

.vc-sheet {
  animation: vc-sheet-in 220ms ease-out;
  border-left: 1px solid var(--color-border);
  background: var(--color-surface);
  color: var(--color-text);
  box-shadow: -24px 0 70px var(--vc-shadow-color);
}

.vc-popover {
  animation: vc-pop-in 160ms ease-out;
  border: 1px solid var(--color-border);
  border-radius: 10px;
  background: var(--color-surface);
  color: var(--color-text);
  box-shadow: 0 20px 48px var(--vc-shadow-color);
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 7 · CONTROLLI — icon button + input + select                          │
   │                                                                        │
   │   <button class="vc-icon-button" aria-label="Chiudi">✕</button>        │
   │                                                                        │
   │   <div class="vc-input-shell">          ← guscio attorno a un input    │
   │     <input type="text" placeholder="Cerca…" />                         │
   │   </div>                                                               │
   │                                                                        │
   │   <select class="vc-select">…</select>                                  │
   │   <select class="vc-select vc-select--compact">…</select>               │
   │                                                                        │
   │ I select nativi mantengono accessibilità, tastiera e mobile OS picker.  │
   │ Il popup aperto resta controllato dal browser/sistema operativo; questa │
   │ regola rifinisce il controllo chiuso: superficie, freccia, hover, focus │
   │ e dark mode. Dentro .vc-modal/.vc-sheet i campi nativi sono allineati.  │
   └───────────────────────────────────────────────────────────────────────┘ */
.vc-icon-button {
  min-height: 44px;   /* touch target accessibile */
  min-width: 44px;
  border-radius: var(--vc-radius-sm);
  color: var(--color-text-secondary);
  transition: background-color 160ms ease, color 160ms ease, transform 160ms ease;
}

.vc-icon-button:hover {
  background: var(--color-surface-muted);
  color: var(--color-text);
}

.vc-input-shell {
  border: 1px solid var(--color-border);
  border-radius: var(--vc-radius-sm);
  background: var(--color-bg);
  color: var(--color-text);
}

.vc-input-shell:focus-within {
  border-color: var(--color-brand);
  box-shadow: var(--vc-ring);
}

/* Select nativi professionali: base globale + classi esplicite. */
select:not([multiple]),
.vc-select {
  appearance: none;
  -webkit-appearance: none;
  min-height: 44px;
  padding: 10px 42px 10px 14px;
  border: 1px solid var(--color-border);
  border-radius: var(--vc-radius-sm);
  color: var(--color-text);
  background-color: var(--color-surface);
  background-image:
    linear-gradient(45deg, transparent 50%, var(--vc-select-chevron) 50%),
    linear-gradient(135deg, var(--vc-select-chevron) 50%, transparent 50%),
    linear-gradient(180deg, color-mix(in srgb, var(--color-surface) 94%, var(--color-surface-muted)), var(--color-surface));
  background-position:
    calc(100% - 18px) 50%,
    calc(100% - 13px) 50%,
    0 0;
  background-size: 5px 5px, 5px 5px, auto;
  background-repeat: no-repeat;
  box-shadow: var(--vc-select-shadow);
  cursor: pointer;
  font: inherit;
  font-size: 0.9375rem;
  line-height: 1.25;
  transition: border-color 160ms ease, box-shadow 160ms ease, background-color 160ms ease;
}

select:not([multiple]):hover,
.vc-select:hover {
  border-color: color-mix(in srgb, var(--color-brand) 42%, var(--color-border));
  background-image:
    linear-gradient(45deg, transparent 50%, var(--vc-select-chevron) 50%),
    linear-gradient(135deg, var(--vc-select-chevron) 50%, transparent 50%),
    linear-gradient(180deg, color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-muted)), var(--color-surface));
}

select:not([multiple]):focus,
.vc-select:focus {
  border-color: var(--color-brand);
  outline: none;
  box-shadow: var(--vc-ring), var(--vc-select-shadow);
}

select:not([multiple]):disabled,
.vc-select:disabled {
  cursor: not-allowed;
  opacity: 0.58;
}

select:not([multiple]) option,
.vc-select option {
  color: var(--color-text);
  background: var(--color-surface);
}

.vc-select--compact {
  min-height: 38px;
  padding: 7px 38px 7px 12px;
  border-radius: var(--vc-radius-sm);
  font-size: 0.875rem;
}

.vc-select--pill {
  border-radius: 999px;
}

/* Dropdown command/glass: trigger + popover/listbox con bordo gradiente,
   superficie satinata e opzioni ricche. */
.vc-combobox {
  position: relative;
  width: 100%;
  min-width: 0;
  isolation: isolate;
  color: var(--color-text);
  --vc-combo-brand-soft: color-mix(in srgb, var(--color-brand) 17%, transparent);
  --vc-combo-brand-mid: color-mix(in srgb, var(--color-brand) 42%, transparent);
  --vc-combo-accent-soft: color-mix(in srgb, var(--color-accent) 18%, transparent);
  --vc-combo-accent-mid: color-mix(in srgb, var(--color-accent) 34%, transparent);
  --vc-combo-glass: color-mix(in srgb, var(--color-surface) 78%, transparent);
  --vc-combo-glass-strong: color-mix(in srgb, var(--color-surface) 92%, var(--color-bg));
}

.vc-combobox.is-open {
  z-index: 1000;
}

.vc-combobox-trigger {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
  min-height: 46px;
  overflow: hidden;
  border: 1px solid transparent;
  border-radius: calc(var(--vc-radius-sm) + 4px);
  padding: 0.62rem 0.78rem 0.62rem 0.92rem;
  color: var(--color-text);
  background:
    linear-gradient(135deg, rgba(255, 255, 255, 0.34), transparent 42%) padding-box,
    radial-gradient(circle at 12% 0%, var(--vc-combo-accent-soft), transparent 9rem) padding-box,
    linear-gradient(180deg, var(--vc-combo-glass-strong), var(--color-surface)) padding-box,
    linear-gradient(135deg, var(--vc-combo-brand-mid), var(--vc-combo-accent-mid), color-mix(in srgb, var(--color-border) 78%, transparent)) border-box;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.68),
    inset 0 -1px 0 color-mix(in srgb, var(--color-border) 36%, transparent),
    0 12px 28px -24px var(--vc-shadow-color);
  cursor: pointer;
  font: inherit;
  text-align: left;
  backdrop-filter: blur(14px) saturate(1.18);
  -webkit-backdrop-filter: blur(14px) saturate(1.18);
  transition: box-shadow 180ms ease, filter 180ms ease, transform 180ms ease;
}

.vc-combobox-trigger::before {
  content: "";
  position: absolute;
  inset: 1px 1px auto;
  height: 46%;
  border-radius: inherit;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.42), transparent);
  pointer-events: none;
  opacity: 0.68;
}

.vc-combobox-trigger::after {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: 5px;
  height: 2px;
  border-radius: 999px;
  background: linear-gradient(90deg, transparent, var(--color-brand), var(--color-accent), transparent);
  opacity: 0;
  transform: scaleX(0.58);
  transition: opacity 180ms ease, transform 180ms ease;
}

.vc-combobox-trigger:hover {
  transform: translateY(-1px);
  filter: saturate(1.04);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.78),
    inset 0 -1px 0 color-mix(in srgb, var(--color-border) 32%, transparent),
    0 16px 34px -26px var(--vc-shadow-color),
    0 0 0 3px color-mix(in srgb, var(--color-brand) 7%, transparent);
}

.vc-combobox-trigger:focus-visible,
.vc-combobox.is-open .vc-combobox-trigger {
  outline: none;
  box-shadow:
    var(--vc-ring),
    inset 0 1px 0 rgba(255, 255, 255, 0.78),
    0 18px 38px -24px var(--vc-shadow-color),
    0 0 0 1px color-mix(in srgb, var(--color-brand) 38%, transparent);
}

.vc-combobox.is-open .vc-combobox-trigger::after {
  opacity: 0.82;
  transform: scaleX(1);
}

.vc-combobox-trigger:disabled {
  cursor: not-allowed;
  opacity: 0.55;
  transform: none;
}

.vc-combobox-value {
  position: relative;
  z-index: 1;
  min-width: 0;
  overflow: hidden;
  color: var(--color-text);
  font-size: 0.9375rem;
  font-weight: 680;
  line-height: 1.2;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vc-combobox-value.is-placeholder {
  color: var(--color-text-secondary);
  font-weight: 500;
}

.vc-combobox-caret {
  position: relative;
  z-index: 1;
  width: 18px;
  height: 18px;
  border-radius: 999px;
  background:
    radial-gradient(circle at 35% 30%, rgba(255, 255, 255, 0.78), transparent 38%),
    linear-gradient(135deg, color-mix(in srgb, var(--color-brand) 18%, var(--color-surface)), color-mix(in srgb, var(--color-accent) 14%, var(--color-surface)));
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb, var(--color-brand) 24%, transparent),
    0 5px 12px -8px var(--vc-shadow-color);
}

.vc-combobox-caret::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 5px;
  width: 6px;
  height: 6px;
  border-right: 1.5px solid var(--color-brand-strong);
  border-bottom: 1.5px solid var(--color-brand-strong);
  transform: rotate(45deg);
  transition: transform 160ms ease, top 160ms ease;
}

.vc-combobox.is-open .vc-combobox-caret::before {
  top: 7px;
  transform: rotate(225deg);
}

.vc-combobox-popover {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  z-index: 1001;
  min-width: 100%;
  width: max-content;
  max-width: min(390px, calc(100vw - 32px));
  overflow: hidden;
  border: 1px solid transparent;
  border-radius: calc(var(--vc-radius) + 4px);
  background-color: var(--color-surface);
  background:
    radial-gradient(circle at 12% -12%, color-mix(in srgb, var(--color-accent) 12%, transparent), transparent 9.5rem) padding-box,
    radial-gradient(circle at 100% 0%, color-mix(in srgb, var(--color-brand) 10%, transparent), transparent 11rem) padding-box,
    linear-gradient(180deg, color-mix(in srgb, var(--color-surface) 99%, var(--color-bg)), var(--color-surface)) padding-box,
    linear-gradient(145deg, color-mix(in srgb, var(--color-brand) 48%, transparent), color-mix(in srgb, var(--color-accent) 38%, transparent), color-mix(in srgb, var(--color-border) 82%, transparent)) border-box;
  color: var(--color-text);
  pointer-events: auto;
  box-shadow:
    0 28px 64px -30px var(--vc-shadow-color),
    0 10px 24px -18px var(--vc-shadow-color),
    inset 0 1px 0 rgba(255, 255, 255, 0.64);
  backdrop-filter: blur(18px) saturate(1.22);
  -webkit-backdrop-filter: blur(18px) saturate(1.22);
  animation: vc-combobox-in 180ms cubic-bezier(0.16, 1, 0.3, 1);
}

.vc-combobox.is-align-right .vc-combobox-popover {
  right: 0;
  left: auto;
}

.vc-combobox-popover::before {
  content: "";
  position: absolute;
  top: 0;
  right: 18px;
  left: 18px;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.78), transparent);
  pointer-events: none;
}

@keyframes vc-combobox-in {
  from { opacity: 0; transform: translateY(-8px) scale(0.972); filter: blur(2px); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

.vc-combobox-search {
  position: relative;
  padding: 0.48rem 0.48rem 0.4rem;
  border-bottom: 1px solid color-mix(in srgb, var(--color-border) 64%, transparent);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.32), transparent),
    color-mix(in srgb, var(--color-surface) 72%, transparent);
}

.vc-combobox-search input {
  width: 100%;
  min-height: 40px;
  border: 1px solid color-mix(in srgb, var(--color-border) 74%, transparent);
  border-radius: calc(var(--vc-radius-sm) + 2px);
  padding: 0 0.82rem;
  color: var(--color-text);
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--color-bg) 58%, var(--color-surface)), var(--color-surface));
  box-shadow: inset 0 1px 2px color-mix(in srgb, var(--vc-shadow-color) 12%, transparent);
  font: inherit;
  font-size: 0.875rem;
  font-weight: 560;
}

.vc-combobox-search input:focus {
  border-color: var(--color-brand);
  outline: none;
  box-shadow: var(--vc-ring);
}

.vc-combobox-list {
  max-height: min(320px, 48vh);
  overflow: auto;
  padding: 0.42rem;
}

.vc-combobox-option {
  position: relative;
  display: grid;
  grid-template-columns: 7px minmax(0, 1fr) 20px;
  align-items: center;
  gap: 0.62rem;
  width: 100%;
  min-height: 42px;
  border: 0;
  border-radius: calc(var(--vc-radius-sm) + 2px);
  padding: 0.58rem 0.66rem;
  color: var(--color-text);
  background: transparent;
  cursor: pointer;
  font: inherit;
  text-align: left;
  transition: background 150ms ease, color 150ms ease, transform 150ms ease;
}

.vc-combobox-option::before {
  content: "";
  width: 5px;
  height: 22px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--color-border) 58%, transparent);
  opacity: 0.82;
  transition: background 150ms ease, opacity 150ms ease, transform 150ms ease;
}

.vc-combobox-option:hover,
.vc-combobox-option:focus-visible {
  outline: none;
  background:
    linear-gradient(90deg, color-mix(in srgb, var(--color-brand) 10%, transparent), transparent 72%),
    color-mix(in srgb, var(--color-surface) 76%, transparent);
  transform: translateX(1px);
}

.vc-combobox-option:hover::before,
.vc-combobox-option:focus-visible::before {
  background: linear-gradient(180deg, var(--color-brand), var(--color-accent));
  opacity: 1;
}

.vc-combobox-option.is-selected {
  color: var(--color-brand-strong);
  background:
    radial-gradient(circle at 0% 50%, color-mix(in srgb, var(--color-brand) 18%, transparent), transparent 12rem),
    linear-gradient(90deg, color-mix(in srgb, var(--color-brand) 14%, var(--color-surface)), color-mix(in srgb, var(--color-accent) 7%, var(--color-surface)));
}

.vc-combobox-option.is-selected::before {
  background: linear-gradient(180deg, var(--color-brand), var(--color-accent));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand) 9%, transparent);
  opacity: 1;
}

.vc-combobox-option span {
  display: grid;
  gap: 2px;
  min-width: 0;
}

.vc-combobox-option strong,
.vc-combobox-option small {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.vc-combobox-option strong {
  font-size: 0.9rem;
  font-weight: 720;
}

.vc-combobox-option small {
  color: var(--color-text-secondary);
  font-size: 0.75rem;
  font-weight: 500;
}

.vc-combobox-option i {
  position: relative;
  width: 20px;
  height: 20px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--color-surface) 72%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-border) 72%, transparent);
}

.vc-combobox-option.is-selected i {
  background:
    radial-gradient(circle at 35% 28%, rgba(255, 255, 255, 0.72), transparent 36%),
    linear-gradient(135deg, var(--color-brand), color-mix(in srgb, var(--color-brand) 62%, var(--color-accent)));
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb, #fff 34%, transparent),
    0 6px 12px -8px var(--color-brand);
}

.vc-combobox-option.is-selected i::before {
  content: "";
  position: absolute;
  left: 7px;
  top: 4px;
  width: 4px;
  height: 8px;
  border-right: 2px solid var(--color-surface);
  border-bottom: 2px solid var(--color-surface);
  transform: rotate(45deg);
}

.vc-combobox-empty {
  margin: 0;
  padding: 0.85rem;
  color: var(--color-text-secondary);
  font-size: 0.875rem;
  text-align: center;
}

.vc-combobox.is-compact .vc-combobox-trigger {
  min-height: 40px;
  padding: 0.45rem 0.7rem 0.45rem 0.82rem;
}

.vc-combobox.is-compact .vc-combobox-value {
  font-size: 0.875rem;
}

.vc-combobox.is-compact .vc-combobox-popover {
  min-width: max(100%, 156px);
}

.vc-combobox.is-pill .vc-combobox-trigger {
  border-radius: 999px;
}

.vc-combobox.is-embedded .vc-combobox-trigger {
  min-height: 30px;
  padding: 3px 8px 3px 10px;
  border: 0;
  background: transparent;
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

.vc-combobox.is-embedded .vc-combobox-trigger::before,
.vc-combobox.is-embedded .vc-combobox-trigger::after {
  display: none;
}

.vc-combobox.is-embedded .vc-combobox-trigger:hover {
  filter: none;
  transform: none;
  box-shadow: none;
}

.vc-combobox.is-embedded.is-open .vc-combobox-trigger,
.vc-combobox.is-embedded .vc-combobox-trigger:focus-visible {
  box-shadow: none;
}

.vc-combobox.vc-combobox-inline {
  width: auto;
  min-width: 150px;
}

/* Campi nativi dentro modali e sheet allineati ai token. */
.vc-sheet input:not([type='checkbox']):not([type='radio']),
.vc-sheet textarea,
.vc-sheet select,
.vc-modal input:not([type='checkbox']):not([type='radio']),
.vc-modal textarea,
.vc-modal select {
  border-color: var(--color-border);
  border-radius: var(--vc-radius-sm);
  background: var(--color-bg);
  color: var(--color-text);
}

.vc-sheet select:not([multiple]),
.vc-modal select:not([multiple]) {
  padding: 10px 42px 10px 14px;
  background-color: var(--color-bg);
  background-image:
    linear-gradient(45deg, transparent 50%, var(--vc-select-chevron) 50%),
    linear-gradient(135deg, var(--vc-select-chevron) 50%, transparent 50%),
    linear-gradient(180deg, color-mix(in srgb, var(--color-bg) 88%, var(--color-surface-muted)), var(--color-bg));
  background-position:
    calc(100% - 18px) 50%,
    calc(100% - 13px) 50%,
    0 0;
  background-size: 5px 5px, 5px 5px, auto;
  background-repeat: no-repeat;
}

.vc-sheet input:not([type='checkbox']):not([type='radio']):focus,
.vc-sheet textarea:focus,
.vc-sheet select:focus,
.vc-modal input:not([type='checkbox']):not([type='radio']):focus,
.vc-modal textarea:focus,
.vc-modal select:focus {
  border-color: var(--color-brand);
  outline: none;
  box-shadow: var(--vc-ring);
}

.vc-sheet input::placeholder,
.vc-sheet textarea::placeholder,
.vc-modal input::placeholder,
.vc-modal textarea::placeholder {
  color: color-mix(in srgb, var(--color-text-secondary) 68%, transparent);
}


/* ┌───────────────────────────────────────────────────────────────────────┐
   │ 8 · ANIMAZIONI DI UTILITÀ + ACCESSIBILITÀ                             │
   │                                                                        │
   │   class="animate-slide-in"        toast/banner da destra (con fade)    │
   │   class="animate-slide-in-right"  pannello da destra                   │
   │   class="animate-pulse"           skeleton/placeholder in caricamento  │
   │                                                                        │
   │ Tutto viene neutralizzato se l'utente chiede meno movimento.           │
   └───────────────────────────────────────────────────────────────────────┘ */
@keyframes slide-in {
  from { transform: translateX(100%); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}

.animate-slide-in {
  animation: slide-in 0.3s ease-out;
}

@keyframes slide-in-right {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

.animate-slide-in-right {
  animation: slide-in-right 0.25s ease-out;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

.animate-pulse {
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

/* Rispetta prefers-reduced-motion: azzera animazioni e transizioni. */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}


/* ───────────────────────────────────────────────────────────────────────
   SCROLLBAR (WebKit) — tematizzata sui token.
   ─────────────────────────────────────────────────────────────────────── */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: var(--color-bg-secondary);
}

::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--color-text-secondary) 42%, transparent);
  border-radius: 4px;
}

.dark ::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--color-text-secondary) 48%, transparent);
}

::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--color-brand) 58%, transparent);
}

.dark ::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--color-brand) 70%, transparent);
}


/* ═══════════════════════════════════════════════════════════════════════
   APPENDICE · DARK MODE AUTOMATICO DA SISTEMA OPERATIVO (opt-in)
   ───────────────────────────────────────────────────────────────────────
   Di default il dark si attiva SOLO con la classe `.dark` (così i progetti
   con toggle manuale non vengono forzati). Se in una NUOVA app vuoi che il
   tema segua l'OS, INCOLLA questo blocco nel tuo CSS (non qui):

     @media (prefers-color-scheme: dark) {
       :root:not(.light) {
         --color-bg: #111714;
         --color-bg-secondary: #1a221d;
         --color-surface: #18211c;
         --color-surface-muted: #202920;
         --color-text: #f2eadf;
         --color-text-secondary: #b8b0a3;
         --color-border: #334039;
         --color-brand: #7fc7b8;
         --color-brand-strong: #a7ded0;
         --color-accent: #f0ad73;
       }
     }

   Con questo: dark automatico via OS, `.light` forza il chiaro, `.dark`
   forza lo scuro. Documentazione completa in README.md.
   ═══════════════════════════════════════════════════════════════════════ */
