
/* Fase 2.5.2 fix: se l'utente arriva da dashboard con ?run= o ?site=,
   nascondo landing immediatamente (prima che JS giri) per evitare il flash.
   La classe è settata da script inline nel <head>. Il JS rimuovera' poi
   la classe quando l'audit/loading è attivo. */
html.from-dashboard-action #landing { display: none !important; }

/* ═══════════════════════ TOKENS ═══════════════════════ */
:root {
  --cream:        #fafaf7;
  --cream-soft:   #f4f1ea;
  --cream-deep:   #ece6d8;
  --ink:          #0f0f0f;
  --ink-soft:     #3a3a38;
  /* Fase 5.33: era #737065 (contrasto 4.39 su cream-soft, sotto AA 4.5:1).
     #6b675c da 5.40 su cream e 5.00 su cream-soft, sopra AA, restando più
     chiaro di --ink-soft (gerarchia testi preservata). Usato ~240 volte. */
  --ink-muted:    #6b675c;
  --border:       #d9d4ca;
  --primary:      #1a3a5c;
  /* Il blu quando fa da FONDO (bottoni, pill piene). In chiaro è lo stesso
     valore del testo: è scuro, e sta lontano sia dalla crema sia dal bianco. */
  --primary-fondo: #1a3a5c;
  --primary-deep: #0f253d;
  --terracotta:   #a14d3a;
  /* hover dei CTA terracotta (prima era un hex hardcoded sparso, REGOLA CSS-1) */
  --terracotta-hover: #b85a47;
  /* Fase 5.66: superficie "card bianca" adattiva (bianco in light, scuro in
     dark). Mancava in index.html: alcuni chip usavano `white` hardcoded che
     restava bianco in dark. */
  --surface:      #ffffff;
  --success:      #557152;
  --warning:      #b8732e;
  /* Tinta scura del warning per il TESTO piccolo su fondo chiaro (AA >=4.5:1);
     --warning resta per fill/bordi/icone (>=3:1 basta). In dark coincide con --warning. */
  --warning-ink:  #87521c;
  --danger:       #a14d3a;

  --r:    14px;
  --r-lg: 18px;
  --r-sm: 8px;

  --shadow-sm: 0 2px 8px rgba(15,23,42,.06);
  --shadow:    0 8px 24px -8px rgba(15,23,42,.12);
  --shadow-lg: 0 20px 40px -12px rgba(15,23,42,.18);

  --ease: cubic-bezier(.4, 0, .2, 1);

  --font-head: 'Fraunces', 'Times New Roman', Georgia, serif;
  --font-body: 'Inter', system-ui, -apple-system, sans-serif;

  color-scheme: light;
}

/* ═══════════════════════ Fase 5.10: DARK MODE ═══════════════════════
   3 modi: auto (default = segue OS), light (forzato), dark (forzato).
   Toggle in /account. Implementato via [data-theme] sul <html>.
   I valori semantici (cream/ink/border) cambiano; --primary e --terracotta
   restano IDENTICI (brand) ma con ombre/border calibrate al fondo scuro. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --cream:        #14181c;
    --cream-soft:   #1b2026;
    --cream-deep:   #232931;
    --ink:          #f1ece1;
    --ink-soft:     #c9c3b6;
    --ink-muted:    #8b8678;
    --border:       #2f353d;
    --surface:      #1b2026;   /* Fase 5.66: superficie card adattiva in dark */
    /* In scuro un tono di mezzo non può servire i due ruoli: #6b7f96 stava a
       circa 4.1 sia dal fondo scuro sia dal bianco, cioe' sotto la soglia in
       entrambi i versi. Quindi due valori, stessa tinta (212 gradi):
       --primary schiarito per leggersi COME TESTO sul fondo scuro,
       --primary-fondo scurito perché l'etichetta chiara sopra si legga. */
    --primary:      #8696a9;
    --primary-fondo: #617489;
    --primary-deep: #82a0c4;
    --terracotta:   #d68a72;   /* terracotta schiarita */
    --terracotta-hover: #e3a98f;  /* hover più chiaro coerente in dark */
    --success:      #88b282;
    --warning:      #d99c5e;
    --warning-ink:  var(--warning);
    --danger:       #d68a72;
    --shadow-sm: 0 2px 8px rgba(0,0,0,.4);
    --shadow:    0 8px 24px -8px rgba(0,0,0,.5);
    --shadow-lg: 0 20px 40px -12px rgba(0,0,0,.6);
    color-scheme: dark;
  }
}
:root[data-theme="dark"] {
  --cream:        #14181c;
  --cream-soft:   #1b2026;
  --cream-deep:   #232931;
  --ink:          #f1ece1;
  --ink-soft:     #c9c3b6;
  --ink-muted:    #8b8678;
  --border:       #2f353d;
  --surface:      #1b2026;   /* Fase 5.66: superficie card adattiva in dark */
  --primary:      #8696a9;
  --primary-fondo: #617489;
  --primary-deep: #82a0c4;
  --terracotta:   #d68a72;
  --terracotta-hover: #e3a98f;  /* hover più chiaro coerente in dark */
  --success:      #88b282;
  --warning:      #d99c5e;
  --warning-ink:  var(--warning);
  --danger:       #d68a72;
  --shadow-sm: 0 2px 8px rgba(0,0,0,.4);
  --shadow:    0 8px 24px -8px rgba(0,0,0,.5);
  --shadow-lg: 0 20px 40px -12px rgba(0,0,0,.6);
  color-scheme: dark;
}
/* light esplicito: vince sempre sui media query auto */
:root[data-theme="light"] { color-scheme: light; }

/* Fase 5.10: in dark, fondi "bianchi" hardcoded vanno gestiti.
   Cards/modals che usavano #fff diventano cream (var). Niente cambio per
   #ffffff hardcoded in PDF (jsPDF lavora a parte). */
:root[data-theme="dark"] body,
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) body { background: var(--cream); color: var(--ink); }
}
/* Soft surface override per dark: ogni `background: #fff` o `white` lasciato
   hardcoded resta: pulire tutto sarebbe enorme. Aggiungiamo override mirati
   per i container principali. */
[data-theme="dark"] .dashboard-widget,
[data-theme="dark"] .account-section,
[data-theme="dark"] .modal-card,
[data-theme="dark"] .auth-modal-card,
[data-theme="dark"] .agency-table tr,
[data-theme="dark"] .user-sites-item,
[data-theme="dark"] .user-sites-row,
[data-theme="dark"] .sites-skeleton-row,
[data-theme="dark"] .agency-cell-scantype,
[data-theme="dark"] .reset-card,
[data-theme="dark"] .ai-output-gate-card,
[data-theme="dark"] .rescan-scope-menu,
[data-theme="dark"] .nav-account-dropdown,
[data-theme="dark"] .compare-plan,
[data-theme="dark"] .credits-topup-card,
[data-theme="dark"] .account-invoice-row,
/* Fase 5.26 / 5.27: card report/dashboard con background: white -> cream-soft
   in dark. Fase 5.27: aggiunta la variante @media (prefers-color-scheme: dark)
   che MANCAVA: gli utenti in dark mode via OS (non via toggle data-theme)
   non vedevano l'override e le card restavano bianche. Aggiunti anche
   .pages-list e i pannelli .ai-section/.chat-header (primary-deep -> celeste
   in dark) che vanno su surface-deep. */
[data-theme="dark"] .sub,
[data-theme="dark"] .page-row,
[data-theme="dark"] .pages-list,
[data-theme="dark"] .chat-bubble,
[data-theme="dark"] .chat-empty,
[data-theme="dark"] .chat-wrap,
[data-theme="dark"] .agency-table-wrap {
  background: var(--cream-soft);
  color: var(--ink);
}
[data-theme="dark"] .ai-section,
[data-theme="dark"] .chat-header {
  background: var(--surface-deep);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .sub,
  :root:not([data-theme="light"]) .page-row,
  :root:not([data-theme="light"]) .pages-list,
  :root:not([data-theme="light"]) .chat-bubble,
  :root:not([data-theme="light"]) .chat-empty,
  :root:not([data-theme="light"]) .chat-wrap,
  :root:not([data-theme="light"]) .agency-table-wrap {
    background: var(--cream-soft);
    color: var(--ink);
  }
  :root:not([data-theme="light"]) .ai-section,
  :root:not([data-theme="light"]) .chat-header {
    background: var(--surface-deep);
  }
}
/* La chat-bubble dell'utente resta scura (ink) anche in dark: non sovrascrivere */
[data-theme="dark"] .chat-msg.user .chat-bubble { background: var(--surface-deep); color: var(--on-dark); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .chat-msg.user .chat-bubble { background: var(--surface-deep); color: var(--on-dark); }
}

/* Fase 5.95: dark mode fix per i background bianchi NON coperti dalle liste
   centralizzate (audit testCssDarkModeHardcoded). Doppia forma obbligatoria
   (toggle manuale + preferenza OS). Non imposto color: i testi usano già var(). */
[data-theme="dark"] .right-slot-select,
[data-theme="dark"] .right-slot-btn-action,
[data-theme="dark"] .dashboard-sub-reactivate,
[data-theme="dark"] .account-plan-action-cancel,
[data-theme="dark"] .account-export-btn,
[data-theme="dark"] .user-sites-new,
[data-theme="dark"] .pd-toggle,
[data-theme="dark"] .pd-row,
[data-theme="dark"] .issue-pages-more,
[data-theme="dark"] .po-extract-btn,
[data-theme="dark"] .account-field input:focus,
[data-theme="dark"] .account-field select:focus {
  background: var(--cream-soft);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .right-slot-select,
  :root:not([data-theme="light"]) .right-slot-btn-action,
  :root:not([data-theme="light"]) .dashboard-sub-reactivate,
  :root:not([data-theme="light"]) .account-plan-action-cancel,
  :root:not([data-theme="light"]) .account-export-btn,
  :root:not([data-theme="light"]) .user-sites-new,
  :root:not([data-theme="light"]) .pd-toggle,
  :root:not([data-theme="light"]) .pd-row,
  :root:not([data-theme="light"]) .issue-pages-more,
  :root:not([data-theme="light"]) .po-extract-btn,
  :root:not([data-theme="light"]) .account-field input:focus,
  :root:not([data-theme="light"]) .account-field select:focus {
    background: var(--cream-soft);
    border-color: var(--border);
  }
}

/* Fase 5.10.2: surface override estesi (white residui non coperti dalla
   lista P0). Coprono i bottoni "ghost" e i form elements (input/select/
   textarea) che usavano background:#fff hardcoded ovunque. */
[data-theme="dark"] .credits-topup-btn,
[data-theme="dark"] .account-theme-btn,
[data-theme="dark"] .admin-test-plan-btn,
[data-theme="dark"] .dashboard-scan-form input,
[data-theme="dark"] .dashboard-scan-form input[type="text"],
[data-theme="dark"] .sites-manage-add-form input,
[data-theme="dark"] .account-input,
[data-theme="dark"] .auth-field input,
[data-theme="dark"] .form-input,
[data-theme="dark"] .agency-row-btn,
[data-theme="dark"] .agency-action-btn,
[data-theme="dark"] .user-sites-trash-btn,
[data-theme="dark"] .user-sites-confirm-btn,
[data-theme="dark"] .sites-manage-add-btn,
[data-theme="dark"] .sites-manage-add-cancel,
[data-theme="dark"] .dashboard-scan-picker-chip,
[data-theme="dark"] .account-invoice-btn,
[data-theme="dark"] .pdf-preview-btn-ghost,
[data-theme="dark"] .agency-overview,
[data-theme="dark"] .agency-metric,
[data-theme="dark"] .ai-panel-drawer,
[data-theme="dark"] .toast,
[data-theme="dark"] .palette-card,
[data-theme="dark"] .dashboard-scan-scope,
[data-theme="dark"] .dashboard-scan-scope-btn,
[data-theme="dark"] .audit-type-toggle,
[data-theme="dark"] .audit-type-toggle button,
[data-theme="dark"] select,
[data-theme="dark"] input[type="text"],
[data-theme="dark"] input[type="email"],
[data-theme="dark"] input[type="password"],
[data-theme="dark"] input[type="url"],
[data-theme="dark"] textarea {
  background: var(--cream-soft) !important;
  color: var(--ink);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .credits-topup-btn,
  :root:not([data-theme="light"]) .account-theme-btn,
  :root:not([data-theme="light"]) .admin-test-plan-btn,
  :root:not([data-theme="light"]) .dashboard-scan-form input,
  :root:not([data-theme="light"]) .sites-manage-add-form input,
  :root:not([data-theme="light"]) .agency-row-btn,
  :root:not([data-theme="light"]) .agency-action-btn,
  :root:not([data-theme="light"]) .user-sites-trash-btn,
  :root:not([data-theme="light"]) .user-sites-confirm-btn,
  :root:not([data-theme="light"]) .sites-manage-add-btn,
  :root:not([data-theme="light"]) .sites-manage-add-cancel,
  :root:not([data-theme="light"]) .dashboard-scan-picker-chip,
  :root:not([data-theme="light"]) .account-invoice-btn,
  :root:not([data-theme="light"]) .pdf-preview-btn-ghost,
  :root:not([data-theme="light"]) .agency-overview,
  :root:not([data-theme="light"]) .agency-metric,
  :root:not([data-theme="light"]) .toast,
  :root:not([data-theme="light"]) .palette-card,
  :root:not([data-theme="light"]) .dashboard-scan-scope,
  :root:not([data-theme="light"]) .dashboard-scan-scope-btn,
  :root:not([data-theme="light"]) .audit-type-toggle,
  :root:not([data-theme="light"]) .audit-type-toggle button,
  :root:not([data-theme="light"]) select,
  :root:not([data-theme="light"]) input[type="text"],
  :root:not([data-theme="light"]) input[type="email"],
  :root:not([data-theme="light"]) input[type="password"],
  :root:not([data-theme="light"]) input[type="url"],
  :root:not([data-theme="light"]) textarea {
    background: var(--cream-soft) !important;
    color: var(--ink);
    border-color: var(--border);
  }
}
/* Fase 5.31: dark-mode sweep. Card, pannelli e tooltip con background bianco
   hardcoded che restavano chiari in dark mode (testo var(--ink) chiaro su
   bianco = invisibile). Aggiunti anche .account-input/.auth-field input/
   .form-input/.ai-panel-drawer che erano nel blocco [data-theme] ma mancavano
   dal twin @media (utenti con dark mode da preferenza OS li vedevano bianchi).
   Regola d'oro: ogni override dark in entrambe le forme (toggle + OS). */
[data-theme="dark"] .tour-tooltip,
[data-theme="dark"] .dashboard-subscription-card,
[data-theme="dark"] .dashboard-improve-item,
[data-theme="dark"] .dashboard-guide-card,
[data-theme="dark"] .ai-panel-head,
[data-theme="dark"] .ai-panel-action,
[data-theme="dark"] .vertical-selector,
[data-theme="dark"] .chat-input input,
[data-theme="dark"] .account-input,
[data-theme="dark"] .auth-field input,
[data-theme="dark"] .form-input {
  background: var(--cream-soft) !important;
  color: var(--ink);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .tour-tooltip,
  :root:not([data-theme="light"]) .dashboard-subscription-card,
  :root:not([data-theme="light"]) .dashboard-improve-item,
  :root:not([data-theme="light"]) .dashboard-guide-card,
  :root:not([data-theme="light"]) .ai-panel-head,
  :root:not([data-theme="light"]) .ai-panel-action,
  :root:not([data-theme="light"]) .vertical-selector,
  :root:not([data-theme="light"]) .chat-input input,
  :root:not([data-theme="light"]) .account-input,
  :root:not([data-theme="light"]) .auth-field input,
  :root:not([data-theme="light"]) .form-input,
  :root:not([data-theme="light"]) .ai-panel-drawer {
    background: var(--cream-soft) !important;
    color: var(--ink);
    border-color: var(--border);
  }
}
/* Stati attivi: in dark, il selected/active rimane primary fill */
[data-theme="dark"] .account-theme-btn.is-active,
[data-theme="dark"] .admin-test-plan-btn.is-active,
[data-theme="dark"] .dashboard-scan-picker-chip.is-active {
  background: var(--primary-fondo) !important;
  color: #fff;
  border-color: var(--primary);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .account-theme-btn.is-active,
  :root:not([data-theme="light"]) .admin-test-plan-btn.is-active,
  :root:not([data-theme="light"]) .dashboard-scan-picker-chip.is-active {
    background: var(--primary-fondo) !important;
    color: #fff;
    border-color: var(--primary);
  }
}
/* Fase 5.28: i toggle con indicatore scorrevole (.dashboard-scan-scope,
   .audit-type-toggle, .hero-explain-tabs) NON devono avere background solido
   sul bottone attivo (creava un doppio strato che lasciava intravedere
   l'indicatore ::before sotto). Inoltre l'indicatore ::before usava
   var(--ink) che in dark diventa cream chiaro = "pezzo bianco sotto".
   Forziamo: bottone attivo trasparente + indicatore su --primary. */
[data-theme="dark"] .dashboard-scan-scope::before,
[data-theme="dark"] .audit-type-toggle::before,
[data-theme="dark"] .hero-explain-tabs::before,
[data-theme="dark"] .demo-scope-toggle::before {
  background: var(--primary-fondo);
}
[data-theme="dark"] .dashboard-scan-scope-btn.active,
[data-theme="dark"] .audit-type-toggle.has-indicator button.active,
[data-theme="dark"] .hero-explain-tabs.has-indicator button.active {
  background: transparent !important;
  color: var(--on-dark);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dashboard-scan-scope::before,
  :root:not([data-theme="light"]) .audit-type-toggle::before,
  :root:not([data-theme="light"]) .hero-explain-tabs::before,
  :root:not([data-theme="light"]) .demo-scope-toggle::before {
    background: var(--primary-fondo);
  }
  :root:not([data-theme="light"]) .dashboard-scan-scope-btn.active,
  :root:not([data-theme="light"]) .audit-type-toggle.has-indicator button.active,
  :root:not([data-theme="light"]) .hero-explain-tabs.has-indicator button.active {
    background: transparent !important;
    color: var(--on-dark);
  }
}

/* Fase 5.29: superfici bianche residue del REPORT logged-in viste dagli
   screenshot in dark mode (OS):
   - .pdf-btn (bottone "Scarica PDF" header report) -> bianco illeggibile
   - .issues (pannello "Cosa migliorare") -> bianco con titoli cream invisibili
   - .palette-option (card "Personalizza il PDF") -> bianche
   - .loading (overlay scansione) -> rgba bianco, sfondo chiaro dietro il card
   - [data-tooltip]::after -> bg var(--ink) cream in dark = cream-on-cream
   Tutte con entrambe le varianti (toggle + OS-media). */
[data-theme="dark"] .pdf-btn,
[data-theme="dark"] .issues,
[data-theme="dark"] .palette-option {
  background: var(--cream-soft);
  color: var(--ink);
}
[data-theme="dark"] .loading {
  background: rgba(20, 24, 28, 0.96);
}
[data-theme="dark"] [data-tooltip]:hover::after,
[data-theme="dark"] [data-tooltip]:focus-visible::after {
  background: var(--surface-deep);
  color: var(--on-dark);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .pdf-btn,
  :root:not([data-theme="light"]) .issues,
  :root:not([data-theme="light"]) .palette-option {
    background: var(--cream-soft);
    color: var(--ink);
  }
  :root:not([data-theme="light"]) .loading {
    background: rgba(20, 24, 28, 0.96);
  }
  :root:not([data-theme="light"]) [data-tooltip]:hover::after,
  :root:not([data-theme="light"]) [data-tooltip]:focus-visible::after {
    background: var(--surface-deep);
    color: var(--on-dark);
  }
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dashboard-widget,
  :root:not([data-theme="light"]) .account-section,
  :root:not([data-theme="light"]) .modal-card,
  :root:not([data-theme="light"]) .auth-modal-card,
  :root:not([data-theme="light"]) .agency-table tr,
  :root:not([data-theme="light"]) .user-sites-item,
  :root:not([data-theme="light"]) .user-sites-row,
  :root:not([data-theme="light"]) .sites-skeleton-row,
  :root:not([data-theme="light"]) .agency-cell-scantype,
  :root:not([data-theme="light"]) .reset-card,
  :root:not([data-theme="light"]) .ai-output-gate-card,
  :root:not([data-theme="light"]) .rescan-scope-menu,
  :root:not([data-theme="light"]) .nav-account-dropdown,
  :root:not([data-theme="light"]) .compare-plan,
  :root:not([data-theme="light"]) .credits-topup-card,
  :root:not([data-theme="light"]) .account-invoice-row,
  :root:not([data-theme="light"]) .sub,
  :root:not([data-theme="light"]) .page-row,
  :root:not([data-theme="light"]) .chat-bubble,
  :root:not([data-theme="light"]) .chat-empty,
  :root:not([data-theme="light"]) .chat-wrap,
  :root:not([data-theme="light"]) .agency-table-wrap {
    background: var(--cream-soft);
    color: var(--ink);
  }
}

/* Fase 5.26: .ai-section / .ai-output / .chat-header usano background:
   var(--primary-deep) con testo cream (sono "feature panel scuri"). In dark
   --primary-deep diventa azzurro pallido -> pannello celeste washed (vedi
   screenshot AI Lab/Chat). Forziamo --surface-deep che resta navy scuro
   in entrambi i temi. */
[data-theme="dark"] .ai-section,
[data-theme="dark"] .ai-output,
[data-theme="dark"] .chat-header {
  background: var(--surface-deep);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .ai-section,
  :root:not([data-theme="light"]) .ai-output,
  :root:not([data-theme="light"]) .chat-header {
    background: var(--surface-deep);
  }
}

/* ═══════════════════════ Fase 5.12.4: DARK MODE FIXES LANDING ═══════════════════════
   La landing aveva ancora molti card con `background: white` hardcoded che
   in dark mode restavano bianchi: il testo color(--ink) diventato cream era
   invisibile. Inoltre `--primary-deep` in dark valeva #7aa3d4 (azzurro pallido):
   tutti i container che lo usavano come BG diventavano celesti washed-out.
   Qui i fix mirati per le sezioni della home (problem, social-proof, seogeo,
   hero-visual, demo dashboard/scan, score-row). */

/* "Dark navy" che resta scuro anche in dark mode: lo usiamo per i container
   "feature dark" (hero-visual AUDIT DEMO, score-row, GEO card, score row demo).
   --on-dark: testo SEMPRE chiaro (non cambia con tema) per uso su surface-deep.
   Fix critico: prima molti elementi usavano color: var(--on-dark), che in dark
   diventava #14181c (nero) -> testo nero su navy = invisibile. */
:root {
  --surface-deep: #0f253d;
  --on-dark: #fafaf7;
  --on-dark-soft: rgba(250, 250, 247, 0.78);
  --on-dark-muted: rgba(250, 250, 247, 0.55);
}
/* --surface-deep-hover: hover dei CTA primari in dark. Prima l'hover virava a
   var(--terracotta) (#d68a72) con testo chiaro = contrasto ~2.7:1 (sotto AA).
   Un navy leggermente più chiaro mantiene il feedback hover ma testo chiaro
   leggibile (#fafaf7 su #223449 ~11:1). */
[data-theme="dark"] { --surface-deep: #182532; --surface-deep-hover: #223449; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --surface-deep: #182532; --surface-deep-hover: #223449; }
}

/* Card bianche → cream-soft in dark */
[data-theme="dark"] .problem-card,
[data-theme="dark"] .social-proof-quote,
[data-theme="dark"] .seogeo-card,
[data-theme="dark"] .demo-sites-card,
[data-theme="dark"] .demo-pro-site,
[data-theme="dark"] .demo-agency-metric,
[data-theme="dark"] .demo-agency-table-wrap,
[data-theme="dark"] .demo-agency-action,
[data-theme="dark"] .demo-scan-sub,
[data-theme="dark"] .demo-pro-arrow,
[data-theme="dark"] .demo-pro-trash,
[data-theme="dark"] .demo-saved-chip,
[data-theme="dark"] .demo-input,
[data-theme="dark"] .demo-add-site-btn {
  background: var(--cream-soft);
  color: var(--ink);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .problem-card,
  :root:not([data-theme="light"]) .social-proof-quote,
  :root:not([data-theme="light"]) .seogeo-card,
  :root:not([data-theme="light"]) .demo-sites-card,
  :root:not([data-theme="light"]) .demo-pro-site,
  :root:not([data-theme="light"]) .demo-agency-metric,
  :root:not([data-theme="light"]) .demo-agency-table-wrap,
  :root:not([data-theme="light"]) .demo-agency-action,
  :root:not([data-theme="light"]) .demo-scan-sub,
  :root:not([data-theme="light"]) .demo-pro-arrow,
  :root:not([data-theme="light"]) .demo-pro-trash,
  :root:not([data-theme="light"]) .demo-saved-chip,
  :root:not([data-theme="light"]) .demo-input,
  :root:not([data-theme="light"]) .demo-add-site-btn {
    background: var(--cream-soft);
    color: var(--ink);
    border-color: var(--border);
  }
}
/* Bordo terracotta a sinistra delle quote: in dark resta visibile */
[data-theme="dark"] .social-proof-quote { border-left-color: var(--terracotta); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .social-proof-quote { border-left-color: var(--terracotta); }
}

/* Container "dark navy" che usavano --primary-deep (in dark sarebbe celeste).
   Forziamo --surface-deep così restano coerentemente scuri in entrambi i temi. */
[data-theme="dark"] .hero-visual,
[data-theme="dark"] .score-row,
[data-theme="dark"] .demo-score-row,
[data-theme="dark"] .demo-scan-score-row,
[data-theme="dark"] .seogeo-card.geo-card {
  background: var(--surface-deep);
  color: var(--on-dark);
  border-color: rgba(255,255,255,0.08);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hero-visual,
  :root:not([data-theme="light"]) .score-row,
  :root:not([data-theme="light"]) .demo-score-row,
  :root:not([data-theme="light"]) .demo-scan-score-row,
  :root:not([data-theme="light"]) .seogeo-card.geo-card {
    background: var(--surface-deep);
    color: var(--on-dark);
    border-color: rgba(255,255,255,0.08);
  }
}
/* Il light mode usa primary-deep originale (navy #0f253d): lascio invariato */

/* Statement card "Pensato per chi ha un mestiere..." in dark resta cream-deep */
[data-theme="dark"] .hero-statement,
[data-theme="dark"] .hero-statement-card {
  background: var(--cream-soft);
  color: var(--ink);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hero-statement,
  :root:not([data-theme="light"]) .hero-statement-card {
    background: var(--cream-soft);
    color: var(--ink);
  }
}

/* SEO badge: in dark il --primary diventa celeste, su white card invisibile.
   La pill SEO mantiene navy scuro per restare leggibile. */
[data-theme="dark"] .seogeo-badge.seo {
  background: var(--surface-deep);
  color: var(--on-dark);
  border: 1px solid rgba(250,250,247,0.18);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .seogeo-badge.seo {
    background: var(--surface-deep);
    color: var(--on-dark);
    border: 1px solid rgba(250,250,247,0.18);
  }
}

/* Toggle Analizza nelle card demo: in dark il pill ink diventa cream chiaro.
   Forziamo surface-deep così il bottone resta visibile. */
[data-theme="dark"] .demo-analizza-btn,
[data-theme="dark"] .demo-scope-toggle::before {
  background: var(--surface-deep);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-analizza-btn,
  :root:not([data-theme="light"]) .demo-scope-toggle::before {
    background: var(--surface-deep);
  }
}
/* Subscores demo: i numeri "good/warn/bad" usano success/warning/danger
   che in dark sono colori brand chiari, leggibili su cream-soft. Niente fix. */

/* ═══════════════ Fase 5.12.8: dark mode fix critici (testi su navy) ═══════════════
   In dark `var(--cream)` diventa #14181c (quasi nero). Tutti i testi su
   container "dark surface" (score-row, hero-visual, GEO card, demo-score-row,
   demo-scan-score-row) che usavano color:var(--cream) diventavano invisibili.
   Forziamo --on-dark (#fafaf7 fissato) sui figli di questi container in dark. */
[data-theme="dark"] .hero-visual,
[data-theme="dark"] .hero-visual *,
[data-theme="dark"] .score-row,
[data-theme="dark"] .score-row *,
[data-theme="dark"] .demo-score-row,
[data-theme="dark"] .demo-score-row *,
[data-theme="dark"] .demo-scan-score-row,
[data-theme="dark"] .demo-scan-score-row *,
[data-theme="dark"] .seogeo-card.geo-card,
[data-theme="dark"] .seogeo-card.geo-card * {
  color: var(--on-dark);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hero-visual,
  :root:not([data-theme="light"]) .hero-visual *,
  :root:not([data-theme="light"]) .score-row,
  :root:not([data-theme="light"]) .score-row *,
  :root:not([data-theme="light"]) .demo-score-row,
  :root:not([data-theme="light"]) .demo-score-row *,
  :root:not([data-theme="light"]) .demo-scan-score-row,
  :root:not([data-theme="light"]) .demo-scan-score-row *,
  :root:not([data-theme="light"]) .seogeo-card.geo-card,
  :root:not([data-theme="light"]) .seogeo-card.geo-card * {
    color: var(--on-dark);
  }
}
/* Eccezione: numeri val.bad/warn/ok in hero-visual conservano colori brand */
[data-theme="dark"] .hv-row .val.bad   { color: #f6a890; }
[data-theme="dark"] .hv-row .val.warn  { color: #f3c98e; }
[data-theme="dark"] .hv-row .val.ok    { color: #a3c79f; }
[data-theme="dark"] .hv-row .label     { color: var(--on-dark-soft); }
[data-theme="dark"] .hv-score-label    { color: var(--on-dark-muted); }
[data-theme="dark"] .score-row .score-context,
[data-theme="dark"] .score-row .score-summary p,
[data-theme="dark"] .score-label,
[data-theme="dark"] .demo-score-label,
[data-theme="dark"] .demo-scan-score-label { color: var(--on-dark-soft); }
[data-theme="dark"] .score-row .score-context-bench,
[data-theme="dark"] .score-row .demo-scan-summary p { color: var(--on-dark-muted); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hv-row .val.bad   { color: #f6a890; }
  :root:not([data-theme="light"]) .hv-row .val.warn  { color: #f3c98e; }
  :root:not([data-theme="light"]) .hv-row .val.ok    { color: #a3c79f; }
  :root:not([data-theme="light"]) .hv-row .label     { color: var(--on-dark-soft); }
  :root:not([data-theme="light"]) .hv-score-label    { color: var(--on-dark-muted); }
  :root:not([data-theme="light"]) .score-row .score-context,
  :root:not([data-theme="light"]) .score-row .score-summary p,
  :root:not([data-theme="light"]) .score-label,
  :root:not([data-theme="light"]) .demo-score-label,
  :root:not([data-theme="light"]) .demo-scan-score-label { color: var(--on-dark-soft); }
  :root:not([data-theme="light"]) .score-row .score-context-bench { color: var(--on-dark-muted); }
}

/* Trust strip ora light (cream-soft) anche in dark via var: niente override
   necessari, --cream-soft diventa #1b2026 in dark e i numeri --primary
   restano leggibili come blu schiarito. */

/* Navbar sticky con bg cream HARDCODATO (rgba 250,250,247): override dark */
[data-theme="dark"] .nav { background: rgba(20, 24, 28, 0.92); }
[data-theme="dark"] .nav.scrolled { border-bottom-color: var(--border); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav { background: rgba(20, 24, 28, 0.92); }
  :root:not([data-theme="light"]) .nav.scrolled { border-bottom-color: var(--border); }
}

/* CTA finale (.cta-final): in light usa var(--ink) bg (scuro) + var(--cream)
   text (chiaro). In dark var(--ink) diventa chiaro e var(--cream) scuro -> il p
   hardcoded rgba(250,250,247,0.7) diventa cream chiaro su bg cream chiaro =
   INVISIBILE. Forziamo dark surface in dark. */
[data-theme="dark"] .cta-final {
  background: var(--surface-deep);
  color: var(--on-dark);
}
[data-theme="dark"] .cta-final h2 { color: var(--on-dark); }
[data-theme="dark"] .cta-final p  { color: var(--on-dark-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cta-final {
    background: var(--surface-deep);
    color: var(--on-dark);
  }
  :root:not([data-theme="light"]) .cta-final h2 { color: var(--on-dark); }
  :root:not([data-theme="light"]) .cta-final p  { color: var(--on-dark-soft); }
}

/* Seogeo SEO card (lato bianco): titolo h3 e p devono avere contrasto su
   cream-soft. Usavano var(--ink) gia, ma alcuni h3 hanno color hardcoded. */
[data-theme="dark"] .seogeo-card h3,
[data-theme="dark"] .seogeo-card .seogeo-tagline,
[data-theme="dark"] .seogeo-card p,
[data-theme="dark"] .seogeo-card .seogeo-list li,
[data-theme="dark"] .seogeo-card .seogeo-list li strong { color: var(--ink); }
[data-theme="dark"] .seogeo-card.geo-card h3,
[data-theme="dark"] .seogeo-card.geo-card .seogeo-tagline,
[data-theme="dark"] .seogeo-card.geo-card p,
[data-theme="dark"] .seogeo-card.geo-card .seogeo-list li { color: var(--on-dark); }
[data-theme="dark"] .seogeo-card.geo-card .seogeo-tagline { color: #f6a890; }
[data-theme="dark"] .seogeo-card.geo-card .seogeo-list li strong { color: var(--on-dark); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .seogeo-card h3,
  :root:not([data-theme="light"]) .seogeo-card .seogeo-tagline,
  :root:not([data-theme="light"]) .seogeo-card p,
  :root:not([data-theme="light"]) .seogeo-card .seogeo-list li,
  :root:not([data-theme="light"]) .seogeo-card .seogeo-list li strong { color: var(--ink); }
  :root:not([data-theme="light"]) .seogeo-card.geo-card h3,
  :root:not([data-theme="light"]) .seogeo-card.geo-card .seogeo-tagline,
  :root:not([data-theme="light"]) .seogeo-card.geo-card p,
  :root:not([data-theme="light"]) .seogeo-card.geo-card .seogeo-list li { color: var(--on-dark); }
  :root:not([data-theme="light"]) .seogeo-card.geo-card .seogeo-tagline { color: #f6a890; }
}

/* Mockup demo-scan: testi che ereditano color var(--cream) ora vivono su
   demo-scan-panel che ha bg --cream (scuro in dark). Forza var(--ink) sui
   testi descendenti che NON sono dentro lo score-row blu. */
[data-theme="dark"] .demo-scan-app-header h3,
[data-theme="dark"] .demo-scan-issues-head h5,
[data-theme="dark"] .demo-scan-issue-body h6,
[data-theme="dark"] .demo-scan-tab.active,
[data-theme="dark"] .demo-scan-sub-val,
[data-theme="dark"] .demo-issues-block-title,
[data-theme="dark"] .demo-issue-content h4,
[data-theme="dark"] .demo-issue-content h5,
[data-theme="dark"] .demo-pro-site-name,
[data-theme="dark"] .demo-sites-title,
[data-theme="dark"] .demo-dash-greeting,
[data-theme="dark"] .demo-agency-metric-value { color: var(--ink); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-app-header h3,
  :root:not([data-theme="light"]) .demo-scan-issues-head h5,
  :root:not([data-theme="light"]) .demo-scan-issue-body h6,
  :root:not([data-theme="light"]) .demo-scan-tab.active,
  :root:not([data-theme="light"]) .demo-scan-sub-val,
  :root:not([data-theme="light"]) .demo-issues-block-title,
  :root:not([data-theme="light"]) .demo-issue-content h4,
  :root:not([data-theme="light"]) .demo-issue-content h5,
  :root:not([data-theme="light"]) .demo-pro-site-name,
  :root:not([data-theme="light"]) .demo-sites-title,
  :root:not([data-theme="light"]) .demo-dash-greeting,
  :root:not([data-theme="light"]) .demo-agency-metric-value { color: var(--ink); }
}
/* Eccezione: i numeri good/warn/bad nei subscores demo restano colorati */
[data-theme="dark"] .demo-scan-sub-val.good,
[data-theme="dark"] .demo-sub-val.good { color: var(--success); }
[data-theme="dark"] .demo-scan-sub-val.warn,
[data-theme="dark"] .demo-sub-val.warn { color: var(--warning); }
[data-theme="dark"] .demo-scan-sub-val.bad,
[data-theme="dark"] .demo-sub-val.bad  { color: var(--danger); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-sub-val.good,
  :root:not([data-theme="light"]) .demo-sub-val.good { color: var(--success); }
  :root:not([data-theme="light"]) .demo-scan-sub-val.warn,
  :root:not([data-theme="light"]) .demo-sub-val.warn { color: var(--warning); }
  :root:not([data-theme="light"]) .demo-scan-sub-val.bad,
  :root:not([data-theme="light"]) .demo-sub-val.bad  { color: var(--danger); }
}

/* ═══════════════ Fase 5.12.6: dark mode round 2 (audit landing) ═══════════════
   Altre classi della landing con background:white/#fff hardcoded che restavano
   bianche in dark. */
[data-theme="dark"] .hero-form,
[data-theme="dark"] .hero-explain-tabs,
[data-theme="dark"] .sector-prepicker-options button,
[data-theme="dark"] .sector-prepicker-chosen,
[data-theme="dark"] .solution-visual,
[data-theme="dark"] .plan,
[data-theme="dark"] .faq-item,
[data-theme="dark"] .about-contacts,
[data-theme="dark"] .onboarding-progress-step,
[data-theme="dark"] .onboarding-step,
[data-theme="dark"] .onboarding-form input,
[data-theme="dark"] .onboarding-sector,
[data-theme="dark"] .onboarding-report-issues li {
  background: var(--cream-soft);
  color: var(--ink);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hero-form,
  :root:not([data-theme="light"]) .hero-explain-tabs,
  :root:not([data-theme="light"]) .sector-prepicker-options button,
  :root:not([data-theme="light"]) .sector-prepicker-chosen,
  :root:not([data-theme="light"]) .solution-visual,
  :root:not([data-theme="light"]) .plan,
  :root:not([data-theme="light"]) .faq-item,
  :root:not([data-theme="light"]) .about-contacts,
  :root:not([data-theme="light"]) .onboarding-progress-step,
  :root:not([data-theme="light"]) .onboarding-step,
  :root:not([data-theme="light"]) .onboarding-form input,
  :root:not([data-theme="light"]) .onboarding-sector,
  :root:not([data-theme="light"]) .onboarding-report-issues li {
    background: var(--cream-soft);
    color: var(--ink);
    border-color: var(--border);
  }
}
/* (Rimosso: vecchio dark override .dev-code-block/.dev-params-table/.dev-tab/.dev-copy-btn
   del mockup Fase 5.20. Forzava .dev-code-block a var(--cream-soft) !important in dark,
   rendendo chiaro il terminale del nuovo /developers redesign. .dev-tab/.dev-params-table
   non esistono più; .dev-code-block ora è #14181c fisso, .dev-copy-btn ha le sue regole.) */

/* Plan-card: bordo featured terracotta + text discendenti restano leggibili */
[data-theme="dark"] .plan h3,
[data-theme="dark"] .plan-name,
[data-theme="dark"] .plan-price,
[data-theme="dark"] .plan-feature,
[data-theme="dark"] .faq-item summary,
[data-theme="dark"] .faq-item .answer-wrap,
[data-theme="dark"] .solution-visual h4,
[data-theme="dark"] .solution-visual p {
  color: var(--ink);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .plan h3,
  :root:not([data-theme="light"]) .plan-name,
  :root:not([data-theme="light"]) .plan-price,
  :root:not([data-theme="light"]) .plan-feature,
  :root:not([data-theme="light"]) .faq-item summary,
  :root:not([data-theme="light"]) .faq-item .answer-wrap,
  :root:not([data-theme="light"]) .solution-visual h4,
  :root:not([data-theme="light"]) .solution-visual p {
    color: var(--ink);
  }
}

/* Fase 5.10: focus ring globale consistente (a11y). Override del default
   browser, terracotta brand, offset 2px, no shadow blur. */
*:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
button:focus-visible, a:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}

/* Fase 5.10: skip-to-content link per screen reader + keyboard nav.
   Invisibile finché non riceve focus (Tab), poi appare in alto a sinistra. */
.skip-to-content {
  position: absolute;
  top: -100px;
  left: 16px;
  background: var(--primary-fondo);
  color: #fff;
  padding: 10px 16px;
  border-radius: 8px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 14px;
  text-decoration: none;
  z-index: 99999;
  transition: top 0.2s var(--ease);
}
.skip-to-content:focus { top: 16px; }

/* Fase 5.10: theme picker in /account (3 chip Auto/Chiaro/Scuro). */
.account-theme-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 14px 8px;
  border: 1px solid var(--border);
  background: var(--cream-soft);
  color: var(--ink);
  border-radius: 10px;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease), color 0.18s var(--ease);
}
[data-theme="dark"] .account-theme-btn { background: var(--cream-soft); }
.account-theme-btn:hover { border-color: var(--ink-muted); }
.account-theme-btn.is-active {
  background: var(--primary-fondo);
  color: #fff;
  border-color: var(--primary);
}
.account-theme-btn.is-active svg { stroke: #fff; }

/* Fase 5.10.1: PDF preview modal. Iframe + 2 azioni. */
.pdf-preview-overlay {
  position: fixed; inset: 0;
  background: rgba(15, 23, 42, 0.6);
  z-index: 20000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s var(--ease);
}
.pdf-preview-overlay.is-open { opacity: 1; pointer-events: auto; }
.pdf-preview-overlay[hidden] { display: none !important; }
.pdf-preview-panel {
  width: 100%;
  max-width: 900px;
  height: 90vh;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: var(--shadow-lg);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.pdf-preview-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 22px;
  border-bottom: 1px solid var(--border);
}
.pdf-preview-head h3 {
  margin: 0;
  font-family: var(--font-head);
  font-size: 18px;
  color: var(--ink);
  font-weight: 700;
}
.pdf-preview-close {
  background: transparent;
  border: none;
  cursor: pointer;
  padding: 4px;
  border-radius: 4px;
  color: var(--ink-muted);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  min-height: 40px;
}
/* Hover con token, non con un rgba navy fisso: su fondo scuro un velo navy al
   6% era praticamente invisibile e la X non dava feedback in dark mode. */
.pdf-preview-close:hover { color: var(--ink); background: var(--cream-soft); }
.pdf-preview-body {
  flex: 1;
  min-height: 0;
  background: #525659;
  display: flex;
}
.pdf-preview-body iframe {
  flex: 1;
  border: none;
  width: 100%;
  height: 100%;
}
.pdf-preview-actions {
  display: flex;
  gap: 10px;
  padding: 14px 22px;
  border-top: 1px solid var(--border);
  justify-content: flex-end;
}
.pdf-preview-btn {
  padding: 10px 18px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.pdf-preview-btn-ghost {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink);
}
.pdf-preview-btn-ghost:hover { background: rgba(15, 37, 61, 0.06); }
.pdf-preview-btn-primary {
  background: var(--primary-fondo);
  color: #fff;
  border: 1px solid var(--primary);
}
.pdf-preview-btn-primary:hover { background: var(--primary-deep); }
@media (max-width: 640px) {
  .pdf-preview-overlay { padding: 0; }
  .pdf-preview-panel { max-width: 100%; height: 100vh; border-radius: 0; }
  .pdf-preview-actions { flex-direction: column-reverse; }
  .pdf-preview-btn { width: 100%; }
}

/* Fase 5.10: Cmd+K command palette (search rapido siti+azioni). */
.cmdk-overlay {
  position: fixed; inset: 0;
  background: rgba(15, 23, 42, 0.55);
  z-index: 20000;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-top: 12vh;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.18s var(--ease);
}
.cmdk-overlay.is-open { opacity: 1; pointer-events: auto; }
/* Gotcha CLAUDE.md: l'attributo hidden perde contro display:flex. Senza questa
   regola il dialog aria-modal resta nell'accessibility tree da chiuso (come il
   fratello .pdf-preview-overlay[hidden] a riga 1180). */
.cmdk-overlay[hidden] { display: none !important; }
.cmdk-panel {
  width: 100%;
  max-width: 560px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: var(--shadow-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  max-height: 70vh;
  transform: translateY(-8px);
  transition: transform 0.18s var(--ease);
}
.cmdk-overlay.is-open .cmdk-panel { transform: translateY(0); }
.cmdk-input {
  width: 100%;
  padding: 18px 22px;
  border: none;
  border-bottom: 1px solid var(--border);
  background: transparent;
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--ink);
  outline: none;
}
.cmdk-input::placeholder { color: var(--ink-muted); }
.cmdk-results {
  overflow-y: auto;
  padding: 6px;
}
.cmdk-group-label {
  padding: 8px 14px 4px;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ink-muted);
  font-weight: 600;
}
.cmdk-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 14px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink);
  background: transparent;
  border: none;
  width: 100%;
  text-align: left;
  transition: background 0.15s var(--ease);
}
.cmdk-item.is-selected,
.cmdk-item:hover { background: rgba(26, 58, 92, 0.08); }
.cmdk-item-meta { margin-left: auto; color: var(--ink-muted); font-size: 12px; }
.cmdk-empty { padding: 24px; text-align: center; color: var(--ink-muted); font-size: 13.5px; }
.cmdk-footer {
  padding: 10px 16px;
  border-top: 1px solid var(--border);
  font-size: 11px;
  color: var(--ink-muted);
  display: flex;
  gap: 14px;
  justify-content: space-between;
}
.cmdk-kbd {
  display: inline-block;
  padding: 1px 6px;
  border: 1px solid var(--border);
  border-radius: 4px;
  font-size: 10.5px;
  font-family: ui-monospace, Menlo, monospace;
}
@media (max-width: 540px) {
  .cmdk-overlay { padding-top: 8vh; }
  .cmdk-panel { max-width: calc(100% - 24px); }
  .cmdk-input { font-size: 16px; }
}

/* Fase 5.10 / 5.12.7: contesto score con benchmark settore.
   Stile base (per card dashboard): muted + italic. La regola sotto
   .score-row sovrascrive per il contesto report (sfondo navy). */
.score-context {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-soft);
  text-align: center;
  margin: 10px auto 0;
  max-width: 360px;
  line-height: 1.5;
}
.score-context strong { color: var(--ink); font-weight: 600; }
.score-context-delta { color: var(--terracotta); font-weight: 700; }
.score-context-delta.up { color: var(--success); }
.score-context-bench {
  display: inline-block;
  margin-top: 4px;
  font-size: 12.5px;
  color: var(--ink-muted);
  font-weight: 400;
}

/* Quando il .score-context sta dentro .score-row (sfondo primary-deep
   navy nel report), il colore --ink-soft scompare. Usiamo cream con
   alpha ridotta + niente max-width + text-align coerente con il resto
   del summary (left), senza italic eccessivo. */
.score-row .score-context {
  color: rgba(250, 250, 247, 0.78);
  text-align: left;
  max-width: none;
  margin: 12px 0 0;
  font-style: normal;
  font-size: 14px;
}
.score-row .score-context strong { color: var(--on-dark); font-weight: 600; }
.score-row .score-context-delta { color: #f3c98e; font-weight: 600; }
.score-row .score-context-delta.up { color: #a3c79f; }
.score-row .score-context-bench { color: rgba(250, 250, 247, 0.55); }

/* Fase 5.10: loading steps fake-progress durante audit. */
.audit-loading-steps {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 14px;
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
  max-width: 320px;
  margin-left: auto;
  margin-right: auto;
  text-align: left;
}
.audit-loading-step {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 3px 0;
  opacity: 0.4;
  transition: opacity 0.3s var(--ease);
}
.audit-loading-step.is-active { opacity: 1; color: var(--ink); font-weight: 600; }
.audit-loading-step.is-done { opacity: 0.85; }
.audit-loading-step-dot {
  width: 8px; height: 8px; border-radius: 99px;
  background: var(--border);
  flex-shrink: 0;
}
.audit-loading-step.is-active .audit-loading-step-dot { background: var(--terracotta); animation: stepPulse 1s ease-in-out infinite; }
.audit-loading-step.is-done .audit-loading-step-dot { background: var(--success); }
@keyframes stepPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.4); }
}

/* Fase 5.10: onboarding checklist persistente in dashboard. */
.onboarding-checklist {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 18px 22px;
  margin: 0 0 22px;
}
.onboarding-checklist[hidden] { display: none !important; }
.onboarding-checklist-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.onboarding-checklist-title {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.onboarding-checklist-progress {
  font-size: 12px;
  color: var(--ink-muted);
  font-weight: 600;
}
.onboarding-checklist-bar {
  height: 4px;
  background: var(--border);
  border-radius: 99px;
  overflow: hidden;
  margin-bottom: 14px;
}
.onboarding-checklist-bar-fill {
  height: 100%;
  background: var(--terracotta);
  transition: width 0.5s var(--ease);
}
.onboarding-checklist-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.onboarding-checklist-item {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 13.5px;
  color: var(--ink-soft);
  font-family: var(--font-body);
}
.onboarding-checklist-item.is-done { color: var(--ink-muted); text-decoration: line-through; }
.onboarding-checklist-check {
  width: 18px; height: 18px;
  border-radius: 99px;
  border: 1.5px solid var(--border);
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.onboarding-checklist-item.is-done .onboarding-checklist-check {
  background: var(--success);
  border-color: var(--success);
  color: #fff;
}
.onboarding-checklist-close {
  background: transparent;
  border: none;
  color: var(--ink-muted);
  cursor: pointer;
  min-width: 40px;
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border-radius: 8px;
  font-size: 18px;
  line-height: 1;
}
.onboarding-checklist-close:hover { background: rgba(15, 37, 61, 0.06); color: var(--ink); }

/* Fase 5.10: AI Lab demo card (mostra prima/dopo per attrarre uso). */
.ai-lab-demo {
  background: var(--cream-soft);
  border: 1px dashed var(--border);
  border-radius: 12px;
  padding: 16px 18px;
  margin: 0 0 14px;
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-soft);
}
.ai-lab-demo[hidden] { display: none !important; }
.ai-lab-demo-title {
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 10px;
  font-size: 14px;
}
.ai-lab-demo-row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 8px; }
.ai-lab-demo-row:last-child { margin-bottom: 0; }
.ai-lab-demo-label {
  font-size: 11px;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 600;
}
.ai-lab-demo-before { color: var(--ink-soft); font-style: italic; }
.ai-lab-demo-after { color: var(--ink); font-weight: 600; }

/* ═══════════════════════ RESET ═══════════════════════ */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: var(--font-body);
  color: var(--ink);
  background: var(--cream);
  font-size: 15.5px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* Fase 2.5.37: previeni scrollbar orizzontale globale (safety net se qualche
     widget sfora la viewport su mobile stretto). overflow-x: clip è preferibile
     a hidden perché non crea uno scroll container per i figli (es. position:sticky
     della navbar continua a funzionare). */
  overflow-x: clip;
}
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; border: none; background: none; }
a { color: inherit; text-decoration: none; }
img, svg { display: block; max-width: 100%; }
::selection { background: rgba(26,58,92,.18); }

/* ═══════════════════════ ANIMATIONS ═══════════════════════ */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(24px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes slideInRight {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.96); }
  to { opacity: 1; transform: scale(1); }
}

/* Staggered reveal: applicato a sezioni della landing */
.reveal {
  opacity: 0;
  animation: fadeInUp 0.7s var(--ease) forwards;
}
.reveal-d1 { animation-delay: 0.05s; }
.reveal-d2 { animation-delay: 0.15s; }
.reveal-d3 { animation-delay: 0.25s; }
.reveal-d4 { animation-delay: 0.35s; }
.reveal-d5 { animation-delay: 0.45s; }
.reveal-d6 { animation-delay: 0.55s; }

/* PERFORMANCE LCP/FCP (mobile): il contenuto hero above-the-fold NON deve
   partire da opacity:0. fadeInUp tiene l'h1 (elemento LCP) invisibile durante
   l'animation-delay, e Lighthouse non conta come "dipinto" ciò che è
   invisibile: questo gonfiava FCP e LCP. Dentro la hero l'entrata resta una
   leggera salita solo-transform (composita su GPU, nessun layout shift), col
   contenuto visibile fin dal primo frame anche durante il delay (fill both). */
@keyframes heroRise { from { transform: translateY(10px); } to { transform: translateY(0); } }
.hero .reveal { opacity: 1; animation: heroRise 0.6s var(--ease) both; }

/* Scroll-triggered (per sezioni più in basso) */
/* Fase 2.5.57: utility class generica per transizioni di sezione gestite
   via CSS. Il JS si limita ad aggiungere/rimuovere .section-visible. */
.section-fade {
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 0.2s ease, transform 0.2s ease;
}
.section-fade.section-visible {
  opacity: 1;
  transform: translateY(0);
}

.scroll-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.scroll-reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
  .reveal, .scroll-reveal, .reveal-d1, .reveal-d2, .reveal-d3, .reveal-d4, .reveal-d5, .reveal-d6 {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  /* Fase 5.9: rispetta il setting OS anche per dashboard/account/sites e
     skeleton. Tieni i transition leggeri (hover, focus, color) ma elimina
     le animazioni macro-pagina e gli shimmer continui. */
  .dashboard-panel:not([hidden]),
  .dashboard-panel:not([hidden]) .dashboard-head,
  .dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget,
  .dashboard-panel:not([hidden]) .dashboard-section,
  .dashboard-panel:not([hidden]) .onboarding-banner:not([hidden]),
  .account-panel:not([hidden]),
  .account-panel:not([hidden]) .account-head,
  .account-panel:not([hidden]) .account-card,
  .user-sites-row,
  .user-sites-item,
  .sites-skeleton-row,
  .ai-output-spinner {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ═══════════════════════ Fase 2.5.15: animazioni avanzate ═══════════════════════
   Hero visual demo: entrata con bounce, poi galleggia in loop.
   Righe della card: stagger da destra.
   Numero punteggio: pop con rimbalzo.
   Badge bad/warn: pulse continuo per "sembrare vive".
   Solution rows: scroll-triggered (visual da una parte, testo dall'altra).
   Quote beta tester: cascata dall'alto dopo l'hero.
   Tutto rispetta prefers-reduced-motion in coda. */

/* ── Card demo hero: entrata bounce + galleggiamento loop ───────────── */
@keyframes hv-enter {
  0%   { opacity: 0; transform: translateY(40px) scale(0.96); }
  70%  { opacity: 1; transform: translateY(-8px) scale(1.02); }
  85%  { transform: translateY(3px) scale(0.995); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes hv-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-8px); }
}
.hero-visual {
  opacity: 0;
  animation:
    hv-enter 0.9s cubic-bezier(.34, 1.56, .64, 1) 0.25s forwards,
    hv-float 6s ease-in-out 1.2s infinite;
}

/* ── Righe interne (.hv-row): da destra con stagger 80ms ───────────── */
@keyframes hv-row-enter {
  0%   { opacity: 0; transform: translateX(32px); }
  100% { opacity: 1; transform: translateX(0); }
}
.hero-visual .hv-row {
  opacity: 0;
  animation: hv-row-enter 0.45s cubic-bezier(.22, 1, .36, 1) forwards;
}
/* Fase 2.5.17: shift +1 perché .hv-score è il 1° div figlio; le hv-row sono 2°-7°.
   (Il <nav class="hv-lang-toggle"> non interferisce: tipo diverso, non viene contato.) */
.hero-visual .hv-row:nth-of-type(2) { animation-delay: 0.70s; }
.hero-visual .hv-row:nth-of-type(3) { animation-delay: 0.78s; }
.hero-visual .hv-row:nth-of-type(4) { animation-delay: 0.86s; }
.hero-visual .hv-row:nth-of-type(5) { animation-delay: 0.94s; }
.hero-visual .hv-row:nth-of-type(6) { animation-delay: 1.02s; }
.hero-visual .hv-row:nth-of-type(7) { animation-delay: 1.10s; }

/* ── Numero "62": pop con rimbalzo ───────────── */
@keyframes hv-num-pop {
  0%   { opacity: 0; transform: scale(0.2); }
  55%  { opacity: 1; transform: scale(1.18); }
  78%  { transform: scale(0.94); }
  100% { transform: scale(1); }
}
.hv-score-num {
  display: inline-block;
  transform-origin: center;
  animation: hv-num-pop 0.7s cubic-bezier(.34, 1.7, .64, 1) 0.55s both;
}

/* ── Badge "bad" e "warn": pulse leggera in loop ───────────── */
@keyframes badge-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(161, 77, 58, 0.45); }
  50%      { box-shadow: 0 0 0 6px rgba(161, 77, 58, 0); }
}
@keyframes badge-pulse-warn {
  0%, 100% { box-shadow: 0 0 0 0 rgba(193, 138, 73, 0.4); }
  50%      { box-shadow: 0 0 0 5px rgba(193, 138, 73, 0); }
}
.hero-visual .hv-row .val.bad {
  border-radius: 6px;
  animation: badge-pulse 2.2s ease-in-out 1.5s infinite;
}
.hero-visual .hv-row .val.warn {
  border-radius: 6px;
  animation: badge-pulse-warn 2.4s ease-in-out 1.7s infinite;
}

/* ── Solution rows: scroll-in, visual da destra + testo da sinistra,
       invertiti sulla riga .reverse ───────────── */
.solution-row .solution-text,
.solution-row .solution-visual {
  opacity: 0;
  transition: opacity 0.75s var(--ease), transform 0.8s cubic-bezier(.22, 1, .36, 1);
}
.solution-row .solution-text   { transform: translateX(-40px); }
.solution-row .solution-visual { transform: translateX(40px); transition-delay: 0.1s; }
.solution-row.reverse .solution-text   { transform: translateX(40px); }
.solution-row.reverse .solution-visual { transform: translateX(-40px); }
.solution-row.is-visible .solution-text,
.solution-row.is-visible .solution-visual {
  opacity: 1;
  transform: translateX(0);
}
/* Fase 2.5.69 P2 #19: su mobile il translateX(±40px) creava overflow
   orizzontale (body.scrollWidth > clientWidth). Disabilita translateX su
   mobile, solo fade in, niente scroll laterale. */
@media (max-width: 760px) {
  .solution-row .solution-text,
  .solution-row .solution-visual,
  .solution-row.reverse .solution-text,
  .solution-row.reverse .solution-visual {
    transform: none;
  }
}
/* Fase 2.5.71: icona simbolica sopra l'eyebrow di ogni .solution-row */
.solution-icon svg { width: 100%; height: 100%; display: block; }
@media (max-width: 768px) {
  .solution-icon { width: 44px !important; height: 44px !important; margin-bottom: 12px !important; }
}

/* Fase 2.5.22: le quote beta tester non sono più nella hero (cascata rimossa).
   Vivono in una sezione dedicata `.social-proof` e usano il pattern .scroll-reveal
   esistente (entrano allo scroll, non al load). */

/* ── Fase 2.5.17: toggle linguaggio Semplice/Tecnico sulla card demo hero ──
   Posizionato in alto a destra dentro la card. Click → swap delle label tra
   versione user-friendly e versione gergo SEO. Stato indipendente dal toggle
   globale post-audit (è una demo standalone della hero). */
.hero-visual { position: relative; }
.hv-lang-toggle {
  position: absolute;
  top: 14px;
  right: 14px;
  display: inline-flex;
  gap: 2px;
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 99px;
  padding: 3px;
  z-index: 2;
}
.hv-lang-toggle button {
  background: transparent;
  border: 0;
  color: rgba(255, 255, 255, 0.6);
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.02em;
  padding: 4px 10px;
  border-radius: 99px;
  cursor: pointer;
  transition: color 0.2s var(--ease), background 0.2s var(--ease);
}
.hv-lang-toggle button:hover { color: rgba(255, 255, 255, 0.85); }
.hv-lang-toggle button:focus-visible {
  outline: 2px solid rgba(255, 255, 255, 0.45);
  outline-offset: 1px;
}
.hv-lang-toggle button.active {
  background: var(--cream);
  color: var(--primary);
}
/* Swap label: default mostra Semplice, .lang-mode-tech swappa */
.hero-visual .lang-tech { display: none; }
.hero-visual.lang-mode-tech .lang-simple { display: none; }
.hero-visual.lang-mode-tech .lang-tech { display: inline; }
@media (max-width: 540px) {
  .hv-lang-toggle { top: 10px; right: 10px; padding: 2px; }
  .hv-lang-toggle button { font-size: 10.5px; padding: 3px 8px; }
}

/* ── Rispetto preferenza ridurre movimento ───────────── */
@media (prefers-reduced-motion: reduce) {
  .hero-visual, .hero-visual .hv-row, .hv-score-num,
  .hero-visual .hv-row .val.bad, .hero-visual .hv-row .val.warn,
  .social-proof-quote {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
  .solution-row .solution-text,
  .solution-row .solution-visual {
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ═══════════════════════ TYPOGRAPHY ═══════════════════════ */
.h-eyebrow {
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--primary);
}
.h-eyebrow.warm { color: var(--terracotta); }

/* Fase 5.5: badge "in arrivo" per feature di roadmap (es. Plugin WordPress).
   Pill piccola accanto al label; colore terracotta per segnalare attenzione
   senza essere allarmante. */
.coming-soon-badge {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 8px;
  border-radius: 99px;
  background: rgba(161, 77, 58, 0.12);
  color: var(--terracotta);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  vertical-align: middle;
  white-space: nowrap;
}
/* Referral section nascosta: hidden deve vincere su display block (gotcha CLAUDE.md) */
#referralSection[hidden] { display: none !important; }

h1, h2, h3, h4 {
  font-family: var(--font-head);
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--ink);
}
h1 { font-size: clamp(40px, 5.5vw, 64px); line-height: 1.05; letter-spacing: -0.025em; font-weight: 900; }
h2 { font-size: clamp(28px, 3.5vw, 42px); line-height: 1.15; letter-spacing: -0.02em; }
h3 { font-size: clamp(20px, 2.2vw, 26px); line-height: 1.3; }

p { color: var(--ink-soft); }
.lead { font-size: 18px; line-height: 1.55; color: var(--ink-soft); }

/* ═══════════════════════ LAYOUT ═══════════════════════ */
.container {
  width: 100%;
  max-width: 1180px;
  margin: 0 auto;
  padding: 0 24px;
  /* usato da .ag-ailab per il full-bleed: deve tracciare il padding del
     container ai breakpoint, altrimenti la banda sfora (overflow orizzontale). */
  --container-pad: 24px;
}
.container-narrow {
  max-width: 880px;
  margin: 0 auto;
  padding: 0 24px;
}

section {
  padding: 96px 0;
}
section.tight { padding: 64px 0; }

/* ═══════════════════════ NAVBAR ═══════════════════════ */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(250, 250, 247, 0.92);
  backdrop-filter: saturate(180%) blur(8px);
  -webkit-backdrop-filter: saturate(180%) blur(8px);
  border-bottom: 1px solid transparent;
  transition: border-color 0.2s var(--ease), background 0.2s var(--ease);
}
.nav.scrolled { border-bottom-color: var(--border); }
.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 24px;
  max-width: 1180px;
  margin: 0 auto;
}
.brand-mark {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 900;
  letter-spacing: -0.025em;
  color: var(--ink);
  display: flex;
  align-items: center;
  gap: 10px;
  /* Fase 2.5.13: brand-mark ora contiene il logo immagine, non più testo+dot.
     Altezza fissa, scala mantenuta. Il dot terracotta storico è stato rimosso
     perché il logo ha già una stella terracotta integrata. */
}
.brand-logo {
  /* Fase 5.39: nuovo logo geometrico SVG inline (brand-aware via CSS vars).
     Dimensione fissa quadrata 36x36 come da nuovo design. */
  width: 36px;
  height: 36px;
  display: block;
  flex-shrink: 0;
  transition: transform 0.25s var(--ease), opacity 0.2s var(--ease);
}
/* Fase 2.5.19: hover/focus mancanti sul brand link. Piccolo scale per dare
   feedback visivo senza rompere la sensazione di "logo statico". */
.brand-mark:hover .brand-logo { transform: scale(1.04); opacity: 0.92; }
.brand-mark:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 4px;
  border-radius: 6px;
}
/* Compat: la vecchia classe .brand-dot non è più nel markup, ma se altre pagine
   l'hanno usata in passato la nascondo per sicurezza. */
.brand-dot { display: none; }
.nav-links {
  display: flex;
  align-items: center;
  /* 2026-07-25: il gap era fisso a 32px. Misurato in inglese, la navbar chiede
     907px mentre l'hamburger scattava solo sotto 768: fra i due valori le voci
     andavano a capo A METÀ PAROLA ("How it / works"). In italiano non si
     vedeva perché le etichette sono più corte, ed è il motivo per cui il
     difetto è rimasto nascosto fino alla traduzione. Ora il gap si stringe
     con lo schermo invece di rompere il layout. */
  gap: clamp(14px, 2vw, 32px);
}
.nav-links a {
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-soft);
  transition: color 0.15s var(--ease);
  /* Un'etichetta di menu non va mai spezzata: meglio stringere il gap. */
  white-space: nowrap;
}
.nav-links a:hover { color: var(--ink); }
/* Link Agenzie: distinto dagli altri (specifico per chi gestisce clienti). */
.nav-links a.nav-link-agency {
  color: var(--terracotta);
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.nav-links a.nav-link-agency:hover { color: var(--terracotta-hover); }
.nav-links a.nav-link-agency::after {
  content: "Pro";
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--terracotta);
  background: rgba(161,77,58,0.10);
  padding: 1px 6px;
  border-radius: 99px;
  line-height: 1.4;
}
[data-theme="dark"] .nav-links a.nav-link-agency::after { background: rgba(214,138,114,0.16); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav-links a.nav-link-agency::after { background: rgba(214,138,114,0.16); }
}
.nav-cta {
  background: var(--ink);
  color: var(--on-dark);
  padding: 10px 18px;
  border-radius: var(--r-sm);
  font-size: 13.5px;
  font-weight: 600;
  transition: transform 0.15s var(--ease), background 0.15s var(--ease);
}
.nav-cta:hover { background: var(--primary-fondo); transform: translateY(-1px); }
/* Fase 5.18: in dark mode --ink diventa cream chiaro -> bg+text entrambi
   chiari = bottone INVISIBILE. Override mirato per tutti i primary CTA che
   usano il pattern "background: var(--ink); color: var(--on-dark);". */
[data-theme="dark"] .nav-cta,
[data-theme="dark"] .nav-auth-cta,
[data-theme="dark"] .auth-submit,
[data-theme="dark"] .account-save,
[data-theme="dark"] .account-save-btn,
[data-theme="dark"] .audit-history-rerun,
[data-theme="dark"] .demo-analizza-btn,
[data-theme="dark"] .api-keys-btn,
[data-theme="dark"] .modal-btn.primary,
[data-theme="dark"] .dashboard-empty-cta-primary,
[data-theme="dark"] .post-audit-cta-soft-btn,
[data-theme="dark"] .dashboard-scan-btn {
  background: var(--surface-deep);
  color: var(--on-dark);
}
[data-theme="dark"] .nav-cta:hover,
[data-theme="dark"] .nav-auth-cta:hover,
[data-theme="dark"] .auth-submit:hover,
[data-theme="dark"] .account-save:hover,
[data-theme="dark"] .account-save-btn:hover,
[data-theme="dark"] .modal-btn.primary:hover,
[data-theme="dark"] .demo-analizza-btn:hover,
[data-theme="dark"] .api-keys-btn:hover,
[data-theme="dark"] .post-audit-cta-soft-btn:hover,
[data-theme="dark"] .dashboard-scan-btn:hover {
  background: var(--surface-deep-hover);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav-cta,
  :root:not([data-theme="light"]) .nav-auth-cta,
  :root:not([data-theme="light"]) .auth-submit,
  :root:not([data-theme="light"]) .account-save,
  :root:not([data-theme="light"]) .account-save-btn,
  :root:not([data-theme="light"]) .audit-history-rerun,
  :root:not([data-theme="light"]) .demo-analizza-btn,
  :root:not([data-theme="light"]) .api-keys-btn,
  :root:not([data-theme="light"]) .modal-btn.primary,
  :root:not([data-theme="light"]) .dashboard-empty-cta-primary,
  :root:not([data-theme="light"]) .post-audit-cta-soft-btn,
  :root:not([data-theme="light"]) .dashboard-scan-btn {
    background: var(--surface-deep);
    color: var(--on-dark);
  }
  :root:not([data-theme="light"]) .nav-cta:hover,
  :root:not([data-theme="light"]) .nav-auth-cta:hover,
  :root:not([data-theme="light"]) .auth-submit:hover,
  :root:not([data-theme="light"]) .account-save:hover,
  :root:not([data-theme="light"]) .account-save-btn:hover,
  :root:not([data-theme="light"]) .modal-btn.primary:hover,
  :root:not([data-theme="light"]) .demo-analizza-btn:hover,
  :root:not([data-theme="light"]) .api-keys-btn:hover,
  :root:not([data-theme="light"]) .post-audit-cta-soft-btn:hover,
  :root:not([data-theme="light"]) .dashboard-scan-btn:hover {
    background: var(--surface-deep-hover);
  }
}

/* 1.36.8: in dark --terracotta = #d68a72; testo bianco su terracotta chiara
   = ~2.7:1 (sotto AA). Questi CTA usano background terracotta senza override
   dark: scurisco lo sfondo alla terracotta di brand #a14d3a (bianco ~5.8:1). */
[data-theme="dark"] .right-slot-btn-primary,
[data-theme="dark"] .chat-input button,
[data-theme="dark"] .apuc-btn-primary,
[data-theme="dark"] .gh-mock-form-btn {
  background: #a14d3a;
}
[data-theme="dark"] .right-slot-btn-primary:hover,
[data-theme="dark"] .chat-input button:hover,
[data-theme="dark"] .gh-mock-form-btn:hover {
  background: #a14d3a;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .right-slot-btn-primary,
  :root:not([data-theme="light"]) .chat-input button,
  :root:not([data-theme="light"]) .apuc-btn-primary,
  :root:not([data-theme="light"]) .gh-mock-form-btn {
    background: #a14d3a;
  }
  :root:not([data-theme="light"]) .right-slot-btn-primary:hover,
  :root:not([data-theme="light"]) .chat-input button:hover,
  :root:not([data-theme="light"]) .gh-mock-form-btn:hover {
    background: #a14d3a;
  }
}

/* Fase 5.4: plan switcher amministratore nel /account.
   Visibile solo a riccardo@riccardomores.com (toggle hidden via JS). */
.account-admin-section[hidden] { display: none !important; }
.admin-test-plan-btn {
  padding: 10px 8px;
  border: 1px solid var(--border);
  background: var(--cream-soft);
  color: var(--ink);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  border-radius: 10px;
  cursor: pointer;
  transition: background 0.18s var(--ease), color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.admin-test-plan-btn:hover {
  background: var(--cream-deep);
  border-color: var(--ink-muted);
}
.admin-test-plan-btn.is-active {
  background: var(--primary-fondo);
  color: #fff;
  border-color: var(--primary);
}
@media (max-width: 540px) {
  .admin-test-plan-grid { grid-template-columns: repeat(2, 1fr) !important; }
}

/* Fase 5.3: la UI della modalità test è completamente nascosta a TUTTI gli
   utenti (anche admin). L'admin ottiene comunque test mode lato server via
   cookie auto-settato al login. Override !important sui display:inline-flex
   sottostanti per blindare il nascondimento. */
.nav-test-mode,
.nav-test-mode-wrap,
#testModeBtn,
#testModePlanDropdown { display: none !important; }

/* Toggle modalità test (sviluppo / demo) */
.nav-test-mode {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 10px;
  padding: 8px 12px;
  background: transparent;
  color: var(--ink-muted);
  border: 1px solid var(--border);
  border-radius: 99px;
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.2s var(--ease);
}
.nav-test-mode .dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ink-muted);
  transition: background 0.2s var(--ease);
}
.nav-test-mode:hover {
  border-color: var(--ink-muted);
  color: var(--ink-soft);
}
.nav-test-mode.active {
  border-color: var(--success);
  color: var(--success);
  background: rgba(94, 124, 90, 0.14);
}
.nav-test-mode.active .dot {
  background: var(--success);
  box-shadow: 0 0 0 3px rgba(94, 124, 90, 0.18);
}

.nav-auth-link, .nav-auth-cta { white-space: nowrap; }

/* 2026-07-25: l'hamburger scattava a 768px, misura tarata sulle etichette
   ITALIANE. In inglese la navbar chiede 907px, quindi fra 768 e 907 le voci si
   spezzavano a metà parola. Alzato a 960px: misurato, il FRANCESE (la lingua
   più lunga: "Comment ca marche", "Creer un compte") a 920px ci stava per
   3 pixel, che non è stare. Sotto la soglia si passa al menu hamburger, che
   il contenuto lo regge sempre. */
@media (max-width: 960px) {
  .nav-links { display: none; }
  /* Fase 2.5.9: su mobile la navbar era sovraccarica (brand + Prova gratis + Accedi
     + Crea account + Modalità test) e gli elementi si sovrapponevano al brand.
     Nascondo CTA "Prova gratis" (il form è subito sotto nella hero, ridondante).
     Modalità test viene riportata su una seconda riga sotto Accedi/Crea account
     (Fase 2.5.12: utente l'ha richiesta indietro perché serve per i test). */
  .nav-inner {
    padding: 12px 16px;
    gap: 8px;
    flex-wrap: wrap;        /* permette alla pill Modalità test di andare a capo */
    row-gap: 8px;
  }
  .nav-cta { display: none !important; }
  .brand-mark { gap: 8px; }
  .brand-logo { width: 36px; height: 36px; }
  /* Fase 2.5.63: wrap deve a sua volta occupare 100% della riga, altrimenti
     il button child al 100% del wrap stretto resta cropped a destra. */
  .nav-test-mode-wrap {
    order: 99;
    flex-basis: 100%;
    width: 100%;
    margin-left: 0;
    margin-top: 4px;
    display: flex;
    justify-content: center;
  }
  /* Modalità test su seconda riga, sotto auth buttons */
  .nav-test-mode {
    order: 99;
    flex-basis: auto;
    justify-content: center;
    margin-left: 0;
    margin-top: 0;
    font-size: 11.5px;
    padding: 6px 10px;
    max-width: 100%;
  }
}
@media (max-width: 380px) {
  .brand-logo { width: 32px; height: 32px; }
  .nav-inner { padding: 10px 12px; }
}

/* ═══════════════════════ HERO ═══════════════════════ */
.hero {
  padding: 80px 0 100px;
  position: relative;
  overflow: hidden;
}
.hero::before {
  content: "";
  position: absolute;
  top: -100px;
  right: -200px;
  width: 600px;
  height: 600px;
  background: radial-gradient(circle, rgba(161, 77, 58, 0.08) 0%, transparent 65%);
  pointer-events: none;
  z-index: 0;
}
.hero-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 60px;
  /* Fase 2.18.3 BUG FIX: era 'center'. Con align-items center, quando il testo a sinistra
     si allunga (apertura accordion SEO/GEO), il browser riallinea verticalmente l'intera
     colonna destra → l'immagine demo "scendeva" per restare centrata. 'start' ancora
     entrambe le colonne in alto, e l'immagine resta dov'è. */
  align-items: start;
  position: relative;
  z-index: 1;
}
@media (max-width: 920px) {
  .hero-grid { grid-template-columns: 1fr; gap: 40px; }
}

.hero-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  padding: 6px 14px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink-soft);
  margin-bottom: 24px;
}
.hero-eyebrow .dot {
  width: 6px; height: 6px;
  background: var(--success);
  border-radius: 999px;
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

.hero h1 {
  margin-bottom: 24px;
}
.hero h1 em {
  font-style: italic;
  color: var(--terracotta);
  font-weight: 700;
}
.hero-lead {
  font-size: 18.5px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin-bottom: 32px;
  max-width: 540px;
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.3: Dashboard /dashboard (pagina personale loggato)
   ═══════════════════════════════════════════════════════════════ */
/* ═══════════════════════ Fase 2.5.41: Onboarding panel ═══════════════════════ */
.onboarding-panel {
  min-height: 100vh;
  padding: 80px 0 60px;
  background: var(--cream);
}
.onboarding-panel[hidden] { display: none !important; }
.onboarding-progress {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-bottom: 40px;
}
.onboarding-progress-step {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--cream-soft);
  border: 2px solid var(--border);
  color: var(--ink-muted);
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 14px;
}
.onboarding-progress-step.active {
  background: var(--primary-fondo);
  border-color: var(--primary);
  color: var(--on-dark);
}
.onboarding-progress-step.done {
  background: var(--success, #5e7c5a);
  border-color: var(--success, #5e7c5a);
  color: var(--on-dark);
}
.onboarding-progress-line {
  flex: 0 0 40px;
  height: 2px;
  background: var(--border);
}
.onboarding-step {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 40px 36px;
  box-shadow: 0 4px 14px rgba(15, 15, 15, 0.04);
}
.onboarding-step[hidden] { display: none !important; }
.onboarding-title {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin: 0 0 10px;
  line-height: 1.2;
}
.onboarding-sub {
  font-size: 15.5px;
  color: var(--ink-soft);
  line-height: 1.55;
  margin: 0 0 28px;
}
.onboarding-form {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
}
.onboarding-form input {
  flex: 1;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 13px 16px;
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--ink);
  outline: none;
  transition: border-color 0.15s var(--ease);
}
.onboarding-form input:focus { border-color: var(--primary); }
.onboarding-btn-primary {
  background: var(--terracotta);
  color: var(--on-dark);
  border: 0;
  padding: 13px 24px;
  border-radius: var(--r-sm);
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.onboarding-btn-primary:hover { background: var(--primary-fondo); transform: translateY(-1px); }
.onboarding-btn-primary:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.onboarding-btn-primary:disabled { opacity: 0.6; cursor: not-allowed; transform: none; }
.onboarding-error {
  background: rgba(161, 77, 58, 0.08);
  border: 1px solid rgba(161, 77, 58, 0.25);
  color: var(--terracotta);
  border-radius: var(--r-sm);
  padding: 10px 14px;
  font-size: 13.5px;
  margin-bottom: 14px;
}
.onboarding-loader {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  color: var(--ink-soft);
  font-size: 14px;
}
.onboarding-loader p { margin: 0; }
/* GOTCHA hidden: senza questa regola il loader (display:flex) resterebbe visibile
   allo Step 1 nonostante l'attributo hidden, mostrando lo spinner a freddo. */
.onboarding-loader[hidden] { display: none !important; }
.onboarding-loader-spinner {
  width: 24px;
  height: 24px;
  border: 3px solid var(--border);
  border-top-color: var(--primary);
  border-radius: 50%;
  animation: onboarding-spin 0.8s linear infinite;
}
@keyframes onboarding-spin { to { transform: rotate(360deg); } }
.onboarding-sectors {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
}
.onboarding-sector {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 14px 18px;
  font-family: var(--font-body);
  font-size: 14.5px;
  color: var(--ink);
  cursor: pointer;
  text-align: left;
  transition: border-color 0.15s var(--ease), background 0.15s var(--ease), transform 0.15s var(--ease);
}
.onboarding-sector:hover {
  border-color: var(--primary);
  transform: translateY(-1px);
}
.onboarding-sector:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.onboarding-report {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 22px;
  margin-bottom: 22px;
}
.onboarding-report-score {
  display: flex;
  align-items: center;
  gap: 18px;
  margin-bottom: 20px;
  padding-bottom: 18px;
  border-bottom: 1px solid var(--border);
}
.onboarding-report-score-circle {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: var(--primary-fondo);
  color: var(--on-dark);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.onboarding-report-score-num {
  font-family: var(--font-head);
  font-size: 28px;
  font-weight: 900;
}
.onboarding-report-score-label {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  opacity: 0.7;
}
.onboarding-report-score-desc {
  font-size: 14px;
  color: var(--ink-soft);
  line-height: 1.5;
}
.onboarding-report-issues h3 {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 700;
  margin: 0 0 10px;
  color: var(--ink);
}
.onboarding-report-issues ul {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.onboarding-report-issues li {
  padding: 10px 14px;
  background: white;
  border: 1px solid var(--border);
  border-left: 3px solid var(--terracotta);
  border-radius: 8px;
  font-size: 13.5px;
  color: var(--ink);
}
@media (max-width: 540px) {
  .onboarding-panel { padding: 24px 0 40px; }
  .onboarding-step { padding: 24px 18px; }
  .onboarding-title { font-size: 24px; }
  .onboarding-sub { font-size: 14px; }
  .onboarding-form { flex-direction: column; }
  .onboarding-btn-primary { width: 100%; }
  /* Fase 2.5.77: sector picker a 2 colonne su mobile (era 1 col -> 6 righe
     verticali troppo lunghe), font 16px sull'input URL onboarding per
     evitare zoom-on-focus iOS. */
  .onboarding-sectors { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .onboarding-form input { font-size: 16px; }
  .onboarding-report-score { flex-direction: column; text-align: center; }
}

.dashboard-panel {
  min-height: 100vh;
  /* La prima cosa del pannello è la barra delle sezioni, non un titolo: una
     barra di navigazione va vicino a quella sopra di lei, non sospesa in mezzo
     al vuoto. I 100px di prima nascevano da quando qui iniziava l'intestazione
     "Ciao <nome>", e sono rimasti dopo che la barra si è messa davanti. */
  padding: 28px 0 60px;
  background: var(--cream);
}
.dashboard-panel[hidden] { display: none; }

/* Fase 5.9: entrance fluido per la dashboard (allineata al pattern account).
   Fade + slide-up del container, stagger morbido sui widget interni così
   il render non "pop-in" tutto insieme. */
.dashboard-panel:not([hidden]) {
  animation: dashboardPanelIn 0.42s cubic-bezier(0.4, 0, 0.2, 1) both;
}
@keyframes dashboardPanelIn {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
.dashboard-panel:not([hidden]) .dashboard-head { animation: dashFadeUp 0.5s cubic-bezier(0.4,0,0.2,1) 0.06s both; }
.dashboard-panel:not([hidden]) .onboarding-banner:not([hidden]) { animation: dashFadeUp 0.5s cubic-bezier(0.4,0,0.2,1) 0.10s both; }
.dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget { animation: dashFadeUp 0.5s cubic-bezier(0.4,0,0.2,1) both; }
.dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget:nth-of-type(1) { animation-delay: 0.12s; }
.dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget:nth-of-type(2) { animation-delay: 0.18s; }
.dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget:nth-of-type(3) { animation-delay: 0.24s; }
.dashboard-panel:not([hidden]) .dashboard-grid > .dashboard-widget:nth-of-type(4) { animation-delay: 0.30s; }
.dashboard-panel:not([hidden]) .dashboard-section { animation: dashFadeUp 0.5s cubic-bezier(0.4,0,0.2,1) 0.30s both; }
@keyframes dashFadeUp {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Fase 5.9: card siti entrano con stagger morbido (60ms tra una e l'altra). */
.user-sites-row,
.user-sites-item {
  animation: sitesRowIn 0.32s cubic-bezier(0.4, 0, 0.2, 1) both;
}
.user-sites-item:nth-child(1), .user-sites-row:nth-child(1) { animation-delay: 0.00s; }
.user-sites-item:nth-child(2), .user-sites-row:nth-child(2) { animation-delay: 0.05s; }
.user-sites-item:nth-child(3), .user-sites-row:nth-child(3) { animation-delay: 0.10s; }
.user-sites-item:nth-child(4), .user-sites-row:nth-child(4) { animation-delay: 0.15s; }
.user-sites-item:nth-child(5), .user-sites-row:nth-child(5) { animation-delay: 0.20s; }
.user-sites-item:nth-child(n+6), .user-sites-row:nth-child(n+6) { animation-delay: 0.25s; }
@keyframes sitesRowIn {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Fase 5.9: skeleton card mentre /api/me/sites è in fetch. Sostituiscono
   il "white flash" della lista vuota in attesa di dati. */
.sites-skeleton {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.sites-skeleton-row {
  height: 50px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background:
    linear-gradient(90deg, transparent 0%, rgba(15, 37, 61, 0.04) 50%, transparent 100%),
    #fff;
  background-size: 200% 100%;
  background-repeat: no-repeat;
  animation: skeletonShimmer 1.4s ease-in-out infinite;
}
.sites-skeleton-row:nth-child(1) { animation-delay: 0s; }
.sites-skeleton-row:nth-child(2) { animation-delay: 0.15s; }
.sites-skeleton-row:nth-child(3) { animation-delay: 0.30s; }
@keyframes skeletonShimmer {
  0%   { background-position: -100% 0; }
  100% { background-position: 200% 0; }
}

/* Fase 5.9: fade transition fra i tab content del report.
   .tab-panel ha display:none default; aggiungo opacity per il momento
   in cui diventa visibile. */
.tab-panel { transition: opacity 0.25s var(--ease); }
.tab-panel.tab-panel-enter { opacity: 0; }
.tab-panel.tab-panel-enter-active { opacity: 1; }

.dashboard-head {
  margin-bottom: 32px;
}
.dashboard-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 99px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--ink-soft);
  text-transform: uppercase;
  margin-bottom: 14px;
}
.dashboard-eyebrow .dot {
  width: 7px; height: 7px;
  background: var(--terracotta);
  border-radius: 50%;
}
.dashboard-title {
  font-family: var(--font-head);
  font-size: 40px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
  letter-spacing: -0.02em;
  line-height: 1.1;
}
.dashboard-title em {
  font-style: italic;
  color: var(--terracotta);
  font-weight: 700;
}
.dashboard-sub {
  font-size: 14px;
  color: var(--ink-muted);
  margin: 0;
}
/* Fase 2.5.55: saluto contestuale basato su stato reale */
.dashboard-context-greeting {
  font-family: var(--font-body);
  font-size: 15px;
  color: var(--ink-soft);
  margin: 6px 0 4px;
  line-height: 1.4;
}
.dashboard-context-greeting.warn { color: var(--terracotta); font-weight: 500; }
.dashboard-context-greeting:empty { display: none; }
.dashboard-sub-mini {
  font-size: 13px !important;
  color: var(--ink-muted) !important;
  margin-top: 2px !important;
}
.dashboard-sub strong {
  color: var(--ink-soft);
  font-weight: 600;
  text-transform: capitalize;
}
.dashboard-sub-sep {
  margin: 0 8px;
  color: var(--border);
}
.dashboard-back-link {
  color: var(--ink-soft);
  text-decoration: none;
  font-weight: 500;
  transition: color 0.15s var(--ease);
}
.dashboard-back-link:hover { color: var(--terracotta); }

/* Grid responsivo: wide widget in alto, 2 widget normali sotto */
.dashboard-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 18px;
}
.dashboard-widget {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 22px;
  box-shadow: 0 2px 8px rgba(15, 15, 15, 0.03);
}
/* Messa da pareggiaGriglia() sull'ultimo widget rimasto solo nella sua riga.
   Quali widget compaiono dipende dal piano e da cosa hai collegato, quindi
   quale resti spaiato non si sa in anticipo: senza questa riga accanto a lui
   restava mezza dashboard vuota. */
.dashboard-grid > .occupa-riga { grid-column: 1 / -1; }

.dashboard-widget-wide {
  grid-column: 1 / -1; /* occupa tutta la riga */
}
.dashboard-widget-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 16px;
}
.dashboard-widget-head h3 {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 600;
  color: var(--ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.dashboard-widget-count {
  font-size: 12px;
  color: var(--ink-muted);
  background: var(--cream-soft);
  padding: 3px 9px;
  border-radius: 99px;
  font-weight: 500;
}
.dashboard-widget-body {
  /* spazio per contenuto */
}

/* I tuoi siti: stesso pattern delle card landing */
.dashboard-sites-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 8px;
}
.dashboard-sites-list:empty { margin-bottom: 0; }
.dashboard-empty {
  text-align: center;
  padding: 32px 16px;
  color: var(--ink-muted);
}
.dashboard-empty p {
  margin: 0 0 12px;
  font-size: 14px;
}
.dashboard-empty-cta {
  color: var(--terracotta);
  text-decoration: none;
  font-weight: 500;
  font-size: 14px;
}
.dashboard-empty-cta:hover { color: var(--ink); }
.dashboard-sites-new {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 11px 14px;
  border: 1px dashed var(--border);
  border-radius: 10px;
  color: var(--ink-muted);
  text-decoration: none;
  font-size: 13.5px;
  font-weight: 500;
  transition: all 0.18s var(--ease);
  margin-top: 8px;
}
.dashboard-sites-new:hover {
  border-color: var(--ink-muted);
  color: var(--ink);
  background: var(--cream-soft);
}
.dashboard-sites-new-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}

/* Fase 2.5.38: form scansione integrato in dashboard (sostituisce
   dashboard-sites-cta-top che rimandava a /?landing=1). */
.dashboard-scan-form {
  display: flex;
  gap: 8px;
  margin-bottom: 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 8px;
}
.dashboard-scan-form input {
  flex: 1;
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 10px 14px;
  font-family: var(--font-body);
  font-size: 14.5px;
  color: var(--ink);
  outline: none;
  transition: border-color 0.15s var(--ease);
}
.dashboard-scan-form input::placeholder { color: var(--ink-muted); }

/* Fase 5.8.7: picker chip per scegliere un sito già salvato. */
.dashboard-scan-picker {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 10px;
  font-size: 13px;
  color: var(--ink-muted);
  flex-wrap: wrap;
}
.dashboard-scan-picker[hidden] { display: none !important; }
.dashboard-scan-picker-label {
  font-weight: 600;
  font-size: 12px;
  color: var(--ink-muted);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  flex-shrink: 0;
}
.dashboard-scan-picker-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.dashboard-scan-picker-chip {
  display: inline-flex;
  align-items: center;
  padding: 5px 11px;
  border: 1px solid var(--border);
  border-radius: 99px;
  background: #fff;
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease), color 0.18s var(--ease);
}
.dashboard-scan-picker-chip:hover,
.dashboard-scan-picker-chip:focus-visible {
  background: rgba(26, 58, 92, 0.06);
  border-color: var(--primary);
  color: var(--primary);
  outline: none;
}
.dashboard-scan-picker-chip.is-active {
  background: var(--primary-fondo);
  color: #fff;
  border-color: var(--primary);
}
@media (max-width: 540px) {
  .dashboard-scan-picker-label { flex-basis: 100%; margin-bottom: 2px; }
}
.dashboard-scan-form input:focus { border-color: var(--primary); }
.dashboard-scan-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--ink);
  color: var(--on-dark);
  border: 0;
  padding: 10px 18px;
  border-radius: var(--r-sm);
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.dashboard-scan-btn:hover { background: var(--primary-fondo); transform: translateY(-1px); }
.dashboard-scan-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.dashboard-scan-error {
  background: rgba(161, 77, 58, 0.08);
  border: 1px solid rgba(161, 77, 58, 0.25);
  color: var(--terracotta);
  border-radius: var(--r-sm);
  padding: 8px 12px;
  font-size: 13px;
  margin-bottom: 10px;
}
/* Fase 2.5.43: toggle ambito scansione (single page vs site) */
/* Fase 2.5.78: toggle dashboard scope con pill scorrevole animata (era statico) */
.dashboard-scan-scope {
  /* Griglia a due colonne uguali, non flex. Con `flex: 1` dentro un
     contenitore che si stringe al contenuto le colonne NON si equalizzano:
     restano larghe quanto il loro testo, e in inglese uscivano 226 contro 167.
     Con `1fr 1fr` le due tracce prendono entrambe la larghezza della piu'
     larga, quindi la pillola resta simmetrica in qualunque lingua. */
  display: inline-grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 2px;
  background: var(--cream-soft);
  box-shadow: inset 0 0 0 1px var(--border);
  border-radius: 99px;
  padding: 3px;
  margin: 10px 0 4px;
  position: relative;
  isolation: isolate;
}
.dashboard-scan-scope::before {
  content: "";
  position: absolute;
  top: 3px;
  bottom: 3px;
  left: 0;
  width: var(--indicator-w, 0);
  background: var(--ink);
  border-radius: 99px;
  transform: translateX(var(--indicator-x, 0));
  transition: transform 0.32s cubic-bezier(.34, 1.2, .64, 1), width 0.32s cubic-bezier(.34, 1.2, .64, 1);
  z-index: 0;
  pointer-events: none;
  opacity: 0;
}
.dashboard-scan-scope.has-indicator::before { opacity: 1; }
.dashboard-scan-scope .dashboard-scan-scope-btn { position: relative; z-index: 1; }
.dashboard-scan-scope .dashboard-scan-scope-btn.active { background: transparent; }
.dashboard-scan-scope-btn {
  justify-content: center;
  white-space: nowrap;
  background: transparent;
  border: 0;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 12.5px;
  font-weight: 600;
  padding: 6px 14px;
  border-radius: 99px;
  cursor: pointer;
  transition: color 0.15s var(--ease), background 0.15s var(--ease);
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.dashboard-scan-scope-btn:hover:not(.active):not(:disabled) { color: var(--ink); }
.dashboard-scan-scope-btn.active {
  background: var(--ink);
  color: var(--on-dark);
}
.dashboard-scan-scope-btn:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.dashboard-scan-scope-btn:disabled { opacity: 0.55; cursor: not-allowed; }
/* Fase 2.5.44: stato "locked" (Free su 'Tutto il sito'). Visivamente sembra
   attenuato ma è cliccabile e apre il modal upgrade.
   27/07: il bordo tratteggiato era `border`, quindi aggiungeva 2px alla scatola
   e il lato bloccato risultava piu' grande dell'altro dentro la stessa
   pillola. E disegnava un secondo anello a 3px da quello del contenitore
   (REGOLA CSS-3: una sola tecnica di separazione). Ora e' un'ombra interna:
   si vede uguale e non occupa spazio. */
.dashboard-scan-scope-btn[data-locked="true"] {
  opacity: 0.75;
  cursor: pointer;
  background: rgba(161, 77, 58, 0.06);
  box-shadow: inset 0 0 0 1px rgba(161, 77, 58, 0.28);
}
.dashboard-scan-scope-btn[data-locked="true"]:hover {
  opacity: 1;
  background: rgba(161, 77, 58, 0.12);
  box-shadow: inset 0 0 0 1px var(--terracotta);
}
.dashboard-scan-scope-lock {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--terracotta);
  /* Niente text-transform: uppercase. Su "Solo+" non si notava, ma qualunque
     etichetta piu' lunga diventava un blocco che urla e sbilancia la pillola. */
  white-space: nowrap;
}
.dashboard-scan-scope-btn.active .dashboard-scan-scope-lock { color: rgba(255, 255, 255, 0.85); }
.dashboard-scan-scope-pages {
  font-size: 11px;
  opacity: 0.7;
  font-weight: 500;
}
/* Fase 5.49: su mobile il toggle "Solo la home / Tutto il sito" si rompeva:
   la label lunga ("Tutto il sito (fino a 200 pagine)") non sta in riga, il
   contenitore diventa alto e l'indicatore ::before (top/bottom:3px = tutta
   l'altezza) diventava una pillola altissima. Soluzione: su mobile impilo i due
   bottoni in colonna a tutta larghezza, nascondo la pillola scorrevole e do lo
   sfondo direttamente al bottone attivo. */
@media (max-width: 600px) {
  .dashboard-scan-scope {
    display: grid;
    grid-template-columns: 1fr;
    width: 100%;
    gap: 5px;
    border-radius: 16px;
    padding: 5px;
  }
  .dashboard-scan-scope::before { display: none !important; }
  .dashboard-scan-scope .dashboard-scan-scope-btn {
    width: 100%;
    justify-content: center;
    border-radius: 11px;
    padding: 10px 14px;
  }
  .dashboard-scan-scope .dashboard-scan-scope-btn.active {
    background: var(--ink);
    color: var(--on-dark);
  }
}
/* Dark mobile: la pillola è nascosta, quindi l'active button prende il colore
   (var(--ink) in dark è chiaro -> uso var(--primary) come fa la pillola dark).
   !important per battere la regola dark globale che forza il bottone trasparente. */
@media (max-width: 600px) {
  [data-theme="dark"] .dashboard-scan-scope .dashboard-scan-scope-btn.active {
    background: var(--primary-fondo) !important;
    color: var(--on-dark);
  }
}
@media (prefers-color-scheme: dark) and (max-width: 600px) {
  :root:not([data-theme="light"]) .dashboard-scan-scope .dashboard-scan-scope-btn.active {
    background: var(--primary-fondo) !important;
    color: var(--on-dark);
  }
}

/* Fase 2.5.42: info sotto il form per chiarire single-page vs multi-page */
.dashboard-scan-info {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 8px 0 14px;
  line-height: 1.4;
}
.dashboard-scan-info svg { flex-shrink: 0; color: var(--ink-muted); }
@media (max-width: 540px) {
  .dashboard-scan-form { flex-direction: column; padding: 10px; }
  .dashboard-scan-form input { font-size: 16px; }  /* Fase 2.5.77: no iOS zoom */
  .dashboard-scan-btn { width: 100%; justify-content: center; }
}
/* Fase 2.5.77: AI Lab buttons full-width su mobile (erano pill inline). */
@media (max-width: 540px) {
  .ai-buttons button.ai-btn,
  .ai-buttons-geo button.ai-btn {
    width: 100%;
    justify-content: flex-start;
  }
  .ai-output, .ai-output pre, .ai-output textarea { font-size: 14px; }
}

/* Fase 2.5.37: empty state grande quando l'utente non ha audit */
.dashboard-empty-big {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 36px 16px 24px;
  background: var(--cream-soft);
  border: 1px dashed var(--border);
  border-radius: var(--r);
}
/* Fase 2.5.39: pattern hidden attr vs display:flex (vedi Fase 2.5.5).
   Senza questa regola l'empty state restava visibile sotto la lista anche
   quando l'utente aveva siti. */
.dashboard-empty-big[hidden] { display: none !important; }
.dashboard-empty-big-icon {
  color: var(--ink-muted);
  margin-bottom: 12px;
  opacity: 0.7;
}
.dashboard-empty-big-title {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}
.dashboard-empty-big-sub {
  margin: 0 0 18px;
  font-size: 14px;
  color: var(--ink-muted);
  max-width: 380px;
}
.dashboard-empty-big-cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--terracotta);
  color: var(--on-dark);
  padding: 11px 22px;
  border-radius: var(--r-sm);
  font-family: var(--font-body);
  font-size: 14.5px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.dashboard-empty-big-cta:hover {
  background: var(--primary-fondo);
  transform: translateY(-1px);
}
.dashboard-empty-big-cta:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
/* Fase 2.5.73: empty state arricchito con illustrazione brand + titolo Fraunces + CTA */
.dashboard-empty-illustration {
  display: flex;
  justify-content: center;
  margin-bottom: 18px;
}
.dashboard-empty-illustration svg {
  width: 160px;
  height: auto;
  max-width: 100%;
  display: block;
}
.dashboard-empty-big .dashboard-empty-big-title {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
  text-align: center;
}
.dashboard-empty-big .dashboard-empty-big-sub {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-muted);
  text-align: center;
  max-width: 420px;
  margin: 0 auto 18px;
  line-height: 1.5;
}
.dashboard-empty-cta-primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto;
  background: var(--ink);
  color: var(--on-dark);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 14px;
  padding: 11px 22px;
  border: none;
  border-radius: 999px;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.dashboard-empty-cta-primary:hover { background: var(--primary-fondo); transform: translateY(-1px); }
.dashboard-empty-cta-primary:focus-visible { outline: 2px solid var(--terracotta); outline-offset: 2px; }
/* Fase 5.36: link secondario "report di esempio" sotto la CTA dell'empty-state. */
.dashboard-empty-example-link {
  display: inline-block;
  margin: 12px auto 0;
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  color: var(--primary);
  padding: 4px 8px;
}
.dashboard-empty-example-link:hover { text-decoration: underline; }
.dashboard-empty-example-link:focus-visible { outline: 2px solid var(--terracotta); outline-offset: 2px; }
@media (max-width: 760px) {
  .dashboard-empty-illustration svg { width: 120px; }
}

/* Crediti AI: numero grande + barra di progresso */
.dashboard-credits-big {
  font-family: var(--font-head);
  font-size: 44px;
  font-weight: 700;
  color: var(--ink);
  letter-spacing: -0.02em;
  line-height: 1;
  margin-bottom: 4px;
}
.dashboard-credits-sep {
  color: var(--ink-muted);
  font-weight: 400;
  margin: 0 4px;
}
.dashboard-credits-label {
  font-size: 13px;
  color: var(--ink-muted);
  margin-bottom: 14px;
}
.dashboard-credits-bar {
  height: 6px;
  background: var(--cream-soft);
  border-radius: 99px;
  overflow: hidden;
  margin-bottom: 12px;
}
.dashboard-credits-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--primary-fondo), var(--terracotta));
  border-radius: 99px;
  transition: width 0.4s var(--ease);
  width: 0%;
}
.dashboard-credits-note {
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.4;
}

/* Fase 2.5.41: card acquisto crediti AI extra */
/* Fase 2.5.47: widget destro condizionale (Free callout grosso / Paid AI workspace).
   Riempie il 3o slot della grid quando il widget stats è nascosto. */
.dashboard-right-slot-free .dashboard-widget-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}
.right-slot-icon {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: var(--terracotta);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 4px;
}
.right-slot-title {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1.25;
}
.right-slot-text {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.5;
  margin: 0;
}
.right-slot-text-small {
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 0 0 4px;
}
.right-slot-list {
  list-style: none;
  padding: 0;
  margin: 4px 0 8px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.right-slot-list li {
  font-size: 12.5px;
  color: var(--ink-soft);
  padding-left: 18px;
  position: relative;
}
.right-slot-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--success, #5e7c5a);
  font-weight: 700;
}
.right-slot-btn-primary {
  width: 100%;
  margin-top: auto;
  background: var(--terracotta);
  color: #fff;
  border: none;
  padding: 11px 14px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.right-slot-btn-primary:hover { background: var(--terracotta-hover); transform: translateY(-1px); }

/* Paid: AI workspace con select + 2 CTA */
.dashboard-right-slot-paid .dashboard-widget-body {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.right-slot-label {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-top: 2px;
}
.right-slot-select {
  width: 100%;
  padding: 10px 40px 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: #fff;
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink);
  cursor: pointer;
  transition: border-color 0.18s var(--ease);
  /* Fase 2.5.48: rimuovo la freccia nativa del browser e ne metto una custom
     (SVG inline) così non è "fuori" dal box e segue il design system. */
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%231a3a5c' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 14px 14px;
}
.right-slot-select:focus { outline: none; border-color: var(--primary); }
.right-slot-select::-ms-expand { display: none; }
.right-slot-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 6px;
}
.right-slot-btn-action {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  gap: 8px 12px;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 14px;
  cursor: pointer;
  text-align: left;
  font-family: var(--font-body);
  transition: border-color 0.18s var(--ease), transform 0.15s var(--ease), background 0.18s var(--ease);
}
.right-slot-btn-action:not(:disabled):hover {
  border-color: var(--primary);
  transform: translateY(-1px);
  background: var(--cream-soft, #f5f3ec);
}
.right-slot-btn-action:disabled { opacity: 0.5; cursor: not-allowed; }
.right-slot-action-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  background: var(--primary-fondo);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  grid-row: span 2;
}
.right-slot-btn-action > span:nth-child(2) {
  font-weight: 700;
  font-size: 13.5px;
  color: var(--ink);
}
.right-slot-action-sub {
  font-size: 11.5px;
  color: var(--ink-muted);
  grid-column: 2;
}

/* Fase 2.5.54: modal "Crediti AI esauriti" (#planExhaustedModal) eredita
   compare-plans-*. Override per card del piano attuale (disabilitata) +
   nota in fondo. Rule [hidden] esplicita per non far apparire il backdrop
   prima del JS toggle. */
#planExhaustedModal[hidden] { display: none !important; }
.compare-plan.is-current {
  opacity: 0.55;
  pointer-events: none;
}
.compare-plan.is-current .compare-plan-btn { display: none; }
.compare-plan.is-current::after {
  content: "Piano attuale";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(-12deg);
  background: var(--ink);
  color: var(--on-dark);
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 700;
  padding: 6px 14px;
  border-radius: 8px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.plan-exhausted-footnote {
  margin: 18px 0 0;
  text-align: center;
  font-size: 12.5px;
  color: var(--ink-muted);
  font-family: var(--font-body);
}

/* Fase 2.5.46: callout "Stai usando un piano con limiti" per Free, sotto i
   crediti AI. Bordo terracotta soft, icona triangolo, CTA "Confronta i piani". */
.dashboard-plan-limit-callout {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 10px 12px;
  align-items: start;
  background: rgba(161, 77, 58, 0.06);
  border: 1px solid rgba(161, 77, 58, 0.25);
  border-radius: var(--r-sm);
  padding: 12px 14px;
  margin-top: 12px;
}
.dashboard-plan-limit-callout[hidden] { display: none !important; }
.dashboard-plan-limit-icon {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: var(--terracotta);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.dashboard-plan-limit-text { display: flex; flex-direction: column; gap: 2px; }
.dashboard-plan-limit-text strong {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink);
  font-weight: 700;
}
.dashboard-plan-limit-text span {
  font-size: 12.5px;
  color: var(--ink-soft);
  line-height: 1.45;
}
.dashboard-plan-limit-btn {
  grid-column: 1 / -1;
  margin-top: 4px;
  background: var(--terracotta);
  color: #fff;
  border: none;
  padding: 8px 14px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.dashboard-plan-limit-btn:hover { background: var(--terracotta-hover); transform: translateY(-1px); }

.credits-topup-card {
  margin-top: 14px;
  padding: 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
}
.credits-topup-title {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: var(--ink);
  margin-bottom: 10px;
}
.credits-topup-buttons {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
  margin-bottom: 8px;
}
.credits-topup-btn {
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 9px 6px;
  cursor: pointer;
  transition: border-color 0.15s var(--ease), transform 0.15s var(--ease);
  font-family: var(--font-body);
}
.credits-topup-btn:hover {
  border-color: var(--primary);
  transform: translateY(-1px);
}
.credits-topup-btn:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.credits-topup-btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; }
.credits-topup-amount {
  font-size: 11.5px;
  color: var(--ink-soft);
  font-weight: 500;
}
.credits-topup-price {
  font-size: 16px;
  color: var(--primary);
  font-weight: 700;
}
.credits-topup-note {
  font-size: 11.5px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.4;
}
@media (max-width: 540px) {
  .credits-topup-buttons { grid-template-columns: 1fr; }
  .credits-topup-btn { flex-direction: row; justify-content: space-between; padding: 10px 12px; }
}

/* Ultimi 30 giorni: stat-row con label a sinistra e valore a destra */
.dashboard-stat-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.dashboard-stat-row:last-child { border-bottom: none; }
.dashboard-stat-label {
  font-size: 14px;
  color: var(--ink-soft);
}
.dashboard-stat-value {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 700;
  color: var(--ink);
  letter-spacing: -0.01em;
}

@media (max-width: 760px) {
  /* Fase 2.5.39: padding-top molto ridotto. La nav è sticky e si autodimensiona
     (incl. seconda riga 'Modalità test' su mobile). Prima 80px creava gap
     vuoto di ~80px tra nav e header dashboard. Ora 24px = aria-spazio minima. */
  .dashboard-panel { padding: 24px 0 40px; }
  .dashboard-title { font-size: 30px; }
  .dashboard-grid { grid-template-columns: 1fr; gap: 14px; }
  .dashboard-widget { padding: 18px; }
  .dashboard-credits-big { font-size: 36px; }
  .dashboard-head { margin-bottom: 20px; }
  .dashboard-eyebrow { margin-bottom: 10px; padding: 4px 12px; font-size: 11px; }
  /* Fase 2.5.40: centro header dashboard su mobile. Prima i testi DASHBOARD +
     Ciao + Piano erano left-aligned, davano impressione di pagina sbilanciata.
     Centrati danno simmetria visiva con i widget sottostanti (box centrati). */
  .dashboard-head { text-align: center; }
  .dashboard-head > div { display: flex; flex-direction: column; align-items: center; }
  .dashboard-sub { justify-content: center; flex-wrap: wrap; }
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.5.4: Sezioni operative della dashboard (Cosa migliorare,
   Cosa AI, Aggiorna piano)
   ═══════════════════════════════════════════════════════════════ */
.dashboard-section {
  margin-top: 36px;
}
.dashboard-section[hidden] { display: none !important; }

/* Fase 2.5.87: bottoni inline azioni invito (Rimanda, Annulla) */
/* Posti del team agenzia: "N di 3 posti usati". Diventa terracotta quando sono
   finiti, così si capisce a colpo d'occhio perché il form è chiuso. */
.agency-seats {
  margin: 0 0 14px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-muted);
}
.agency-seats[hidden] { display: none !important; }
.agency-seats.is-full { color: var(--terracotta); }
.invite-action {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 600;
  padding: 5px 10px;
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.15s var(--ease), color 0.15s var(--ease), border-color 0.15s var(--ease);
}
.invite-action:hover { background: var(--ink); color: var(--on-dark); border-color: var(--ink); }
.invite-action:disabled { opacity: 0.5; cursor: not-allowed; }
.invite-action.invite-cancel:hover { background: var(--terracotta); color: var(--on-dark); border-color: var(--terracotta); }

/* Fase 2.5.86: widget Report settimanale via email (dashboard) */
.dashboard-weekly-card {
  /* Fase 5.20.1: era "white" hardcoded -> in dark restava bianco con
     testi cream invisibili. cream-soft adatta entrambi i temi. */
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 22px 26px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.dashboard-weekly-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--border);
}
.dashboard-weekly-row:last-of-type { border-bottom: 0; }
.dashboard-weekly-row[hidden] { display: none !important; }
.dashboard-weekly-label { font-size: 13px; color: var(--ink-muted); font-weight: 500; }
.dashboard-weekly-value { font-size: 14px; color: var(--ink); font-weight: 600; text-align: right; }
.dashboard-weekly-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 10px;
  border-radius: 99px;
  font-size: 12px;
  font-weight: 600;
}
.dashboard-weekly-status::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
}
.dashboard-weekly-status.active { background: rgba(94,124,90,0.12); color: var(--success, #5e7c5a); }
.dashboard-weekly-status.inactive { background: rgba(161,77,58,0.12); color: var(--terracotta); }
.dashboard-weekly-actions { display: flex; justify-content: flex-end; margin-top: 6px; }
@media (max-width: 540px) {
  .dashboard-weekly-card { padding: 16px 18px; }
  .dashboard-weekly-row { flex-direction: column; align-items: flex-start; gap: 4px; }
  .dashboard-weekly-value { text-align: left; }
  .dashboard-weekly-actions { justify-content: stretch; }
  .dashboard-weekly-actions button { width: 100%; }
}

/* Fase 2.5.31: card del widget abbonamento (dashboard) */
.dashboard-subscription-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 20px 24px;
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  flex-wrap: wrap;
}
.dashboard-subscription-info {
  display: flex;
  gap: 32px;
  flex-wrap: wrap;
  flex: 1;
  min-width: 0;
}
.dashboard-subscription-row {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.dashboard-subscription-label {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.dashboard-subscription-value {
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
}
.dashboard-subscription-value.warn { color: var(--terracotta); }
.dashboard-subscription-actions {
  display: flex;
  gap: 8px;
}
.dashboard-sub-cancel,
.dashboard-sub-reactivate {
  padding: 10px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid var(--border);
  background: white;
  color: var(--ink-soft);
  transition: background 0.15s var(--ease), border-color 0.15s var(--ease), color 0.15s var(--ease);
}
.dashboard-sub-cancel:hover {
  background: rgba(161, 77, 58, 0.06);
  border-color: var(--terracotta);
  color: var(--terracotta);
}
.dashboard-sub-cancel:focus-visible,
.dashboard-sub-reactivate:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.dashboard-sub-reactivate {
  background: var(--primary-fondo);
  color: var(--on-dark);
  border-color: var(--primary);
}
.dashboard-sub-reactivate:hover { background: #234d76; }
.dashboard-sub-cancel:disabled,
.dashboard-sub-reactivate:disabled { opacity: 0.6; cursor: wait; }
.dashboard-subscription-note {
  margin: 14px 4px 0;
  font-size: 13px;
  color: var(--ink-muted);
  line-height: 1.55;
}
@media (max-width: 540px) {
  .dashboard-subscription-card { padding: 16px 18px; gap: 16px; }
  .dashboard-subscription-info { gap: 20px; }
  .dashboard-subscription-actions { width: 100%; }
  .dashboard-sub-cancel, .dashboard-sub-reactivate { width: 100%; }
}

.dashboard-section-head {
  margin-bottom: 20px;
}
.dashboard-section-head h2 {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 6px;
  color: var(--ink);
  line-height: 1.15;
}
.dashboard-section-sub {
  font-size: 14px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.5;
  max-width: 640px;
}

/* Widget A: lista issues top con priorità */
.dashboard-improve-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
/* Fase 2.5.46: wrapper item (header row + body expand). Bordo e radius
   spostati qui dal .row così l'item appare come un unico card. */
.dashboard-improve-item {
  background: white;
  border: 1px solid var(--border);
  border-left: 4px solid var(--ink-muted);
  border-radius: 12px;
  overflow: hidden;
  transition: border-color 0.18s var(--ease), box-shadow 0.18s var(--ease), transform 0.18s var(--ease);
}
.dashboard-improve-item:hover {
  border-color: var(--ink-soft);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(15, 15, 15, 0.06);
}
.dashboard-improve-item[data-open="true"] {
  box-shadow: 0 6px 18px rgba(15, 15, 15, 0.08);
  border-color: var(--ink-soft);
}
.dashboard-improve-item.sev-high { border-left-color: var(--terracotta); }
.dashboard-improve-item.sev-medium { border-left-color: var(--warning); }
.dashboard-improve-item.sev-low { border-left-color: var(--ink-muted); }
.dashboard-improve-row {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 18px 22px;
  background: transparent;
  border: none;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  font-family: inherit;
  text-align: left;
  width: 100%;
}
.dashboard-improve-sev {
  display: inline-flex;
  padding: 4px 10px;
  border-radius: 99px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  flex-shrink: 0;
  font-family: var(--font-body);
}
.dashboard-improve-sev.sev-high { background: rgba(161, 77, 58, 0.12); color: var(--terracotta); }
.dashboard-improve-sev.sev-medium { background: rgba(184, 115, 46, 0.12); color: var(--warning); }
.dashboard-improve-sev.sev-low { background: var(--cream-soft); color: var(--ink-muted); }
/* Fase 2.5.73: icona categoria SEO / GEO (inline accanto a label categoria) */
.category-icon { vertical-align: middle; margin-right: 4px; flex-shrink: 0; }
/* Fase 2.5.74: icone settore (sector picker) e azioni AI Lab */
.sector-icon { width: 24px; height: 24px; flex-shrink: 0; }
.ai-btn-icon { flex-shrink: 0; vertical-align: middle; }
/* sector picker: bottoni in flex per icona + label allineati */
button[data-v] { display: inline-flex; align-items: center; gap: 8px; }
.sector-label { display: inline-block; }
/* AI Lab buttons: icon + label in flex */
button.ai-btn { display: inline-flex; align-items: center; gap: 6px; }
.ai-btn-label { display: inline-block; }
.dashboard-improve-cat { display: inline-flex; align-items: center; flex-shrink: 0; }
.dashboard-improve-cat svg { display: block; margin: 0; }
/* Header SEO/GEO nel report issues: icona + label inline */
.issues-group-icon { display: inline-flex; align-items: center; gap: 6px; }
.issues-group-icon svg { display: block; flex-shrink: 0; }
.dashboard-improve-text {
  flex: 1;
  min-width: 0;
}
.dashboard-improve-title {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 600;
  color: var(--ink);
  margin-bottom: 3px;
}
.dashboard-improve-meta {
  font-size: 12.5px;
  color: var(--ink-muted);
}
.dashboard-improve-arrow {
  color: var(--ink-muted);
  font-size: 18px;
  flex-shrink: 0;
}
.dashboard-improve-row:hover .dashboard-improve-arrow {
  color: var(--terracotta);
}

/* Fase 2.5.46: chevron + body expand inline (no più navigate-away) */
.dashboard-improve-chevron {
  color: var(--ink-muted);
  flex-shrink: 0;
  transition: transform 0.25s var(--ease), color 0.18s var(--ease);
  display: inline-flex;
}
.dashboard-improve-item[data-open="true"] .dashboard-improve-chevron {
  transform: rotate(180deg);
  color: var(--terracotta);
}
.dashboard-improve-expand {
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}
.dashboard-improve-item[data-open="true"] .dashboard-improve-expand {
  max-height: 800px;
  opacity: 1;
  transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1) 0.08s;
}
.dashboard-improve-expand-inner {
  padding: 4px 22px 20px;
  border-top: 1px solid var(--border);
  margin-top: -1px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transform: translateY(-4px);
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.dashboard-improve-item[data-open="true"] .dashboard-improve-expand-inner {
  transform: translateY(0);
  padding-top: 16px;
}
.improve-block h5 {
  font-family: var(--font-body);
  font-size: 11.5px;
  font-weight: 700;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 0 0 4px;
}
.improve-block p {
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 0;
}
.improve-actions {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
  padding-top: 4px;
}
.improve-ai-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--primary-fondo);
  color: #fff;
  border: none;
  padding: 10px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.improve-ai-btn:hover { background: #142e49; transform: translateY(-1px); }
.improve-ai-sparkle {
  display: inline-block;
  animation: improveSparkle 2.5s linear infinite;
  font-size: 14px;
}
@keyframes improveSparkle {
  0%, 100% { transform: rotate(0deg) scale(1); }
  50% { transform: rotate(180deg) scale(1.15); }
}
.improve-open-link {
  font-size: 13px;
  color: var(--ink-muted);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.improve-open-link:hover {
  color: var(--primary);
  border-bottom-color: var(--primary);
}
@media (max-width: 540px) {
  .improve-actions { flex-direction: column; align-items: stretch; }
  .improve-ai-btn { justify-content: center; }
  .improve-open-link { text-align: center; padding-top: 4px; }
}

/* Widget B: 3 card AI affiancate */
.dashboard-ai-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.dashboard-ai-card {
  display: flex;
  flex-direction: column;
  padding: 24px 24px 22px;
  /* Fase 5.20.1: era "white" hardcoded -> in dark mode card bianca con
     titoli cream invisibili. cream-soft adatta al tema. */
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  text-decoration: none;
  color: inherit;
  transition: all 0.18s var(--ease);
  position: relative;
}
.dashboard-ai-card:hover {
  border-color: var(--ink-soft);
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(15, 15, 15, 0.06);
}
.dashboard-ai-card-icon {
  display: inline-flex;
  width: 44px;
  height: 44px;
  align-items: center;
  justify-content: center;
  background: var(--cream-soft);
  color: var(--ink-soft);
  border-radius: 12px;
  margin-bottom: 14px;
  flex-shrink: 0;
}
.dashboard-ai-card:hover .dashboard-ai-card-icon {
  background: var(--primary-fondo);
  color: var(--on-dark);
}
.dashboard-ai-card h4 {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.01em;
  margin: 0 0 6px;
  color: var(--ink);
  line-height: 1.2;
}
.dashboard-ai-card p {
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--ink-muted);
  margin: 0 0 16px;
  flex: 1;
}
.dashboard-ai-card-cta {
  font-size: 13px;
  font-weight: 600;
  color: var(--terracotta);
  margin-top: auto;
}

/* Widget E: Aggiorna piano */
.dashboard-upgrade {
  margin-top: 40px;
}
.dashboard-upgrade-grid {
  display: grid;
  grid-template-columns: 1.55fr 1fr;
  gap: 32px;
  padding: 32px 36px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  align-items: center;
}
.dashboard-upgrade-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 12px;
  background: rgba(15, 15, 15, 0.06);
  border: 1px solid var(--border);
  border-radius: 99px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 12px;
  color: var(--ink-muted);
}
.dashboard-upgrade-eyebrow .dot {
  width: 7px; height: 7px;
  background: var(--ink-muted);
  border-radius: 50%;
}
.dashboard-upgrade-text h2 {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 10px;
  color: var(--ink);
  line-height: 1.15;
}
.dashboard-upgrade-text p {
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 0 0 18px;
}
.dashboard-upgrade-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.dashboard-upgrade-list li {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 13.5px;
  color: var(--ink-soft);
}
.dashboard-upgrade-list svg {
  color: var(--success);
  flex-shrink: 0;
}
.dashboard-upgrade-price {
  text-align: center;
  padding: 20px;
  /* Fase 5.20.2: era "white" hardcoded -> in dark "49 €" cream
     invisibile su bianco. cream-soft adatta entrambi i temi. */
  background: var(--cream-soft);
  border-radius: var(--r);
  border: 1px solid var(--border);
}
.dashboard-upgrade-price-num {
  font-family: var(--font-head);
  font-size: 56px;
  font-weight: 700;
  letter-spacing: -0.04em;
  color: var(--ink);
  line-height: 1;
}
.dashboard-upgrade-price-num .cur {
  font-size: 28px;
  color: var(--ink-muted);
  margin-left: 4px;
  font-weight: 500;
  vertical-align: super;
}
.dashboard-upgrade-price-label {
  font-size: 12px;
  color: var(--ink-muted);
  margin: 6px 0 18px;
  line-height: 1.4;
}
.dashboard-upgrade-cta {
  display: inline-block;
  padding: 11px 22px;
  background: var(--ink);
  color: var(--on-dark);
  text-decoration: none;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 600;
  transition: background 0.18s var(--ease);
}
.dashboard-upgrade-cta:hover { background: var(--primary-fondo); }

@media (max-width: 880px) {
  .dashboard-ai-grid { grid-template-columns: 1fr; }
  .dashboard-upgrade-grid { grid-template-columns: 1fr; gap: 20px; padding: 24px; }
  .dashboard-upgrade-price { padding: 18px; }
  .dashboard-section-head h2 { font-size: 22px; }
}
/* Fase 2.5.44: header sezione centrato su mobile per coerenza con dashboard-head
   (centratura 2.5.40). Allineato anche all'aspetto generale "centrato" delle
   card sottostanti, riduce sensazione "tutto a sinistra" segnalata da utente. */
@media (max-width: 760px) {
  .dashboard-section-head { text-align: center; }
  .dashboard-section-head h2 { font-size: 22px; }
  .dashboard-section-sub { padding: 0 4px; }
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.5: Navbar account rifatto (chip con avatar + nome)
   ═══════════════════════════════════════════════════════════════ */
.nav-account-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 4px 12px 4px 4px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 99px;
  cursor: pointer;
  font-family: inherit;
  font-size: 13.5px;
  color: var(--ink);
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease);
}
.nav-account-chip:hover {
  background: var(--cream-deep);
  border-color: var(--ink-muted);
}
.nav-account-chip[aria-expanded="true"] {
  background: var(--cream-deep);
  border-color: var(--ink-soft);
}
.nav-account-chip:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
.nav-account-chip-avatar {
  display: inline-flex;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--cream);
  flex-shrink: 0;
}
.nav-account-chip-avatar svg {
  width: 100%;
  height: 100%;
  display: block;
}
.nav-account-chip-name {
  font-weight: 500;
  max-width: 140px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.nav-account-chip-chevron {
  color: var(--ink-muted);
  flex-shrink: 0;
  transition: transform 0.18s var(--ease);
}
.nav-account-chip[aria-expanded="true"] .nav-account-chip-chevron {
  transform: rotate(180deg);
}

/* Dropdown rifatto: header con avatar grande + nome + email piccola + piano */
.nav-account-dropdown-header-row {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 6px;
}
.nav-account-dropdown-avatar {
  display: inline-flex;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--cream-soft);
  flex-shrink: 0;
}
.nav-account-dropdown-avatar svg {
  width: 100%;
  height: 100%;
  display: block;
}
.nav-account-dropdown-headertext {
  flex: 1;
  min-width: 0;
}
.nav-account-dropdown-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.nav-account-dropdown-email {
  font-size: 11.5px;
  color: var(--ink-muted);
  line-height: 1.3;
  margin-top: 2px;
  /* Fase 2.5.27: era word-break:break-all che spezzava email lunghe in modo
     brutto (es. "riccardomor / es.com"). Ora ellipsis con tooltip nativo:
     una riga sola, troncata a "...", hover mostra l'indirizzo completo. */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

/* Hide vecchio chip Fase 2.3 (compat) */
.nav-user-chip, .nav-account-btn {
  display: none !important;
}

@media (max-width: 760px) {
  .nav-account-chip-name { max-width: 90px; font-size: 12.5px; }
  .nav-account-chip-avatar { width: 24px; height: 24px; }
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.5: Pagina /account
   ═══════════════════════════════════════════════════════════════ */
.account-panel {
  min-height: 100vh;
  padding: 100px 0 60px;
  background: var(--cream);
}
.account-panel[hidden] { display: none; }
/* Fase 2.5.47: animazione apertura pagina /account. Fade + slide-up del
   container, stagger sulle card interne per effetto cascade. */
/* Fase 5.11.1: tempi dimezzati per ridurre il "lag percepito" passando da
   onboarding/checklist a /account. Prima 0.45+0.38 = ~0.83s totale, ora
   0.22+0.18 = ~0.40s. Cascade resta visibile ma snappy. */
.account-panel:not([hidden]) {
  animation: accountPanelIn 0.22s cubic-bezier(0.4, 0, 0.2, 1) both;
}
@keyframes accountPanelIn {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}
.account-panel:not([hidden]) .account-head { animation: accountFadeUp 0.25s cubic-bezier(0.4, 0, 0.2, 1) 0.04s both; }
.account-panel:not([hidden]) .account-card { animation: accountFadeUp 0.25s cubic-bezier(0.4, 0, 0.2, 1) both; }
.account-panel:not([hidden]) .account-card:nth-of-type(1) { animation-delay: 0.06s; }
.account-panel:not([hidden]) .account-card:nth-of-type(2) { animation-delay: 0.10s; }
.account-panel:not([hidden]) .account-card:nth-of-type(3) { animation-delay: 0.14s; }
.account-panel:not([hidden]) .account-card:nth-of-type(4) { animation-delay: 0.18s; }
.account-panel:not([hidden]) .account-card:nth-of-type(5) { animation-delay: 0.22s; }
@keyframes accountFadeUp {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

.account-head {
  margin-bottom: 32px;
}
.account-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 99px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--ink-soft);
  text-transform: uppercase;
  margin-bottom: 14px;
}
.account-eyebrow .dot {
  width: 7px; height: 7px;
  background: var(--terracotta);
  border-radius: 50%;
}
.account-title {
  font-family: var(--font-head);
  font-size: 40px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
  letter-spacing: -0.02em;
  line-height: 1.1;
}
.account-sub {
  font-size: 14px;
  color: var(--ink-muted);
  margin: 0;
}
.account-back-link {
  color: var(--ink-soft);
  text-decoration: none;
  font-weight: 500;
  transition: color 0.15s var(--ease);
}
.account-back-link:hover { color: var(--terracotta); }

.account-section {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 24px 26px;
  box-shadow: 0 2px 8px rgba(15, 15, 15, 0.03);
  margin-bottom: 18px;
}
.account-section-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 18px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.account-section-head h3 {
  font-family: var(--font-head);
  font-size: 22px;
  font-weight: 600;
  color: var(--ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.account-section-head h4 {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 600;
  color: var(--ink);
  margin: 0 0 12px;
}
.account-section-hint {
  font-size: 12.5px;
  color: var(--ink-muted);
}
.account-section-body {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.account-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.account-field label {
  font-size: 13px;
  color: var(--ink-soft);
  font-weight: 500;
}
.account-field-hint {
  color: var(--ink-muted);
  font-weight: 400;
  margin-left: 4px;
}
.account-field input,
.account-field select {
  font-family: inherit;
  font-size: 14px;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--cream);
  color: var(--ink);
  transition: border-color 0.15s var(--ease), background 0.15s var(--ease);
  width: 100%;
}
/* Fase 2.5.65: select nativo Safari/Firefox era ridotto a frecce up/down
   minuscole. Disabilita appearance e disegna chevron coerente col brand. */
.account-field select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  padding-right: 36px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231a3a5c' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 14px 14px;
  cursor: pointer;
}
.account-field input:focus,
.account-field select:focus {
  outline: none;
  border-color: var(--terracotta);
  background: white;
}
/* Fase 6.8: .account-input (form IBAN referral) non aveva una regola base.
   Senza width:100% l'input restava alla larghezza di default del browser
   (~20 caratteri via l'attributo size implicito) e un IBAN italiano completo
   (27 caratteri, 32 con gli spazi del placeholder) veniva troncato visivamente.
   box-sizing:border-box evita che il padding sfori il 100%. Stili allineati a
   .account-field input. Il colore in dark è già gestito dalle regole
   [data-theme="dark"] .account-input più su. */
.account-input {
  width: 100%;
  box-sizing: border-box;
  font-family: inherit;
  font-size: 14px;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--cream);
  color: var(--ink);
  transition: border-color 0.15s var(--ease);
}
.account-input:focus {
  outline: none;
  border-color: var(--terracotta);
}
.account-field-readonly .account-readonly-value {
  font-family: var(--font-body);
  font-size: 14px;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--cream-soft);
  color: var(--ink-soft);
  font-weight: 500;
}
.account-field-note {
  font-size: 11.5px;
  color: var(--ink-muted);
  margin-top: 2px;
  font-style: italic;
}

/* Dati di fatturazione: righe a più campi affiancati (P.IVA/CF, CAP/città/prov, SDI/PEC) */
.account-billing-row { display: flex; gap: 14px; flex-wrap: wrap; }
.account-billing-row .account-field { flex: 1 1 160px; }
.account-billing-zip { flex: 0 1 130px; }
.account-billing-prov { flex: 0 1 110px; }
.account-billing-note { margin: 0; font-style: normal; font-size: 12.5px; }

/* Fase 2.5.2: avviso Free su sito principale */
.account-field-warn {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-top: 8px;
  padding: 10px 12px;
  background: rgba(184, 115, 46, 0.08);
  border: 1px solid rgba(184, 115, 46, 0.25);
  border-radius: 8px;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--ink-soft);
}
.account-field-warn svg {
  color: var(--warning);
  flex-shrink: 0;
  margin-top: 2px;
}
.account-field-warn[hidden] { display: none; }
/* GOTCHA hidden: .account-field ha display:flex, quindi senza questa regola i
   campi nascosti via hidden (es. "Usa il logo come immagine profilo") restano
   visibili. Vale per tutti gli .account-field togglati con l'attributo hidden. */
.account-field[hidden] { display: none !important; }

.account-field-avatar .account-avatar-row {
  display: flex;
  align-items: center;
  gap: 14px;
}
.account-avatar-current {
  display: inline-flex;
  width: 72px;
  height: 72px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  flex-shrink: 0;
}
.account-avatar-current svg {
  width: 100%;
  height: 100%;
  display: block;
}
.account-avatar-change {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  padding: 8px 14px;
  border-radius: 10px;
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.18s var(--ease);
}
.account-avatar-change:hover {
  border-color: var(--terracotta);
  color: var(--terracotta);
  background: rgba(161, 77, 58, 0.05);
}

.account-actions {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 6px;
}
.account-save {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  padding: 10px 20px;
  border-radius: 10px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.account-save:hover {
  background: var(--primary-fondo);
}
.account-save:disabled {
  background: var(--ink-muted);
  cursor: not-allowed;
}
.account-save-feedback {
  font-size: 13px;
  color: var(--ink-muted);
}
.account-save-feedback.ok { color: var(--success); }
.account-save-feedback.err { color: var(--danger); }

.account-pwchange {
  padding-top: 4px;
  border-top: 1px solid var(--border);
  margin-top: 6px;
  padding-top: 18px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.account-info-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}
.account-info-cell {
  padding: 14px 16px;
  background: var(--cream-soft);
  border-radius: 10px;
}
.account-info-label {
  font-size: 11.5px;
  color: var(--ink-muted);
  margin-bottom: 4px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 500;
}
.account-info-value {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 600;
  color: var(--ink);
  text-transform: capitalize;
}

@media (max-width: 760px) {
  /* Fase 2.5.39: stesso fix di .dashboard-panel - padding-top ridotto */
  .account-panel { padding: 24px 0 40px; }
  .account-title { font-size: 30px; }
  .account-section { padding: 20px; }
  .account-info-grid { grid-template-columns: 1fr; }
  .account-head { margin-bottom: 20px; text-align: center; }
  /* Fase 2.5.40: anche header account centrato su mobile per simmetria */
  .account-head { display: flex; flex-direction: column; align-items: center; }
}

/* ═══════════ Fase 2.5.37: sezione "Il tuo piano e abbonamento" ═══════════ */
.account-plan-view { display: flex; flex-direction: column; gap: 20px; }
/* Fase 2.5.65: bug critico CLAUDE.md - hidden attr persa contro display:flex.
   Risultato: in test mode "Agenzia" sia freeView che paidView visibili
   contemporaneamente -> doppio "PIANO ATTUALE" + cards Solo/Pro/Agenzia. */
.account-plan-view[hidden] { display: none !important; }
.account-plan-current {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 18px 20px;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  flex-wrap: wrap;
}
.account-plan-current-row { display: flex; flex-direction: column; gap: 4px; }
.account-plan-current-eyebrow {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.account-plan-current-name {
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 900;
  color: var(--ink);
  letter-spacing: -0.02em;
}
.account-plan-current-price {
  display: flex;
  align-items: baseline;
  gap: 2px;
  font-family: var(--font-head);
}
.account-plan-current-price-num {
  font-size: 32px;
  font-weight: 900;
  color: var(--primary);
}
.account-plan-current-price-unit {
  font-size: 14px;
  color: var(--ink-muted);
  font-weight: 600;
}
.account-plan-limits {
  list-style: none;
  padding: 0;
  margin: 0;
  flex-basis: 100%;
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 13.5px;
  color: var(--ink-soft);
}
.account-plan-limits li {
  position: relative;
  padding-left: 18px;
}
.account-plan-limits li::before {
  content: "✓";
  position: absolute;
  left: 0;
  top: 0;
  color: var(--success);
  font-weight: 700;
}

/* Free: header upgrade + grid 3 card */
.account-plan-upgrade-head { margin-top: 8px; }
.account-plan-upgrade-head h4 {
  margin: 0 0 4px;
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
}
.account-plan-upgrade-head p {
  margin: 0;
  font-size: 13.5px;
  color: var(--ink-muted);
}
.account-plan-upgrade-grid {
  display: grid;
  /* Quanti piani superiori esistono dipende da quello che hai adesso: tre per
     chi è su Free, uno solo per chi è su Pro. Con tre colonne fisse quella
     singola card restava larga un terzo, con due colonne vuote accanto. Il
     tetto a 360px evita l'eccesso opposto: una card di prezzo larga quanto la
     pagina non si legge come una card. */
  grid-template-columns: repeat(auto-fit, minmax(220px, 360px));
  justify-content: start;
  gap: 18px;
  /* Fase 5.51: spazio sopra per non far sovrapporre il badge "Consigliato"
     (apuc-badge top:-10px) al sottotitolo "Cambi quando vuoi". */
  margin-top: 22px;
}
.account-plan-upgrade-card {
  /* Fase 5.20.2: era "white" hardcoded -> in dark Solo/Agenzia cards
     erano bianche con titoli cream invisibili. cream-soft adatta. */
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 18px 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  position: relative;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.account-plan-upgrade-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(15, 37, 61, 0.08);
}
.account-plan-upgrade-card[hidden] { display: none !important; }
.account-plan-paid-upgrade[hidden] { display: none !important; }
.account-plan-upgrade-card-featured {
  border-color: var(--primary);
  background: var(--cream);
}
.apuc-badge {
  position: absolute;
  top: -10px;
  left: 12px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  padding: 3px 8px;
  border-radius: 99px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
}
.apuc-name {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
}
.apuc-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--font-head);
}
.apuc-price-num {
  font-size: 28px;
  font-weight: 900;
  color: var(--primary);
}
.apuc-price-unit {
  font-size: 13px;
  color: var(--ink-muted);
  font-weight: 600;
}
.apuc-limits {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12.5px;
  color: var(--ink-soft);
  flex: 1;
}
.apuc-limits li::before { content: "· "; color: var(--ink-muted); }
.apuc-btn {
  margin-top: 6px;
  background: var(--ink);
  color: var(--on-dark);
  border: 0;
  padding: 9px 14px;
  border-radius: var(--r-sm);
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.2s var(--ease), opacity 0.15s var(--ease);
}
.apuc-btn:hover { background: var(--primary-fondo); }
.apuc-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.apuc-btn-primary { background: var(--terracotta); }
.apuc-btn-primary:hover { background: var(--primary-fondo); }

/* Paid: rows dettagli + bottoni cancel/reactivate + portal link */
.account-plan-paid-rows {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.account-plan-paid-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 13.5px;
  flex-wrap: wrap;
  gap: 8px;
}
/* GOTCHA hidden: display:flex vince sull'attributo hidden, quindi la riga "API
   per sviluppatori" (nascosta ai piani non-Agenzia via row.hidden=true) resterebbe
   visibile a Solo/Pro senza questa regola. */
.account-plan-paid-row[hidden] { display: none !important; }
.account-plan-paid-label { color: var(--ink-muted); font-weight: 500; }
.account-plan-paid-value { color: var(--ink); font-weight: 600; }
.account-plan-paid-value.warn { color: var(--terracotta); }
.account-plan-paid-note {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.55;
  margin: 4px 0 0;
}
.account-plan-paid-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.account-plan-action-cancel,
.account-plan-action-reactivate {
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 600;
  padding: 9px 16px;
  border-radius: var(--r-sm);
  cursor: pointer;
  transition: background 0.15s var(--ease), color 0.15s var(--ease);
  border: 1px solid var(--border);
}
.account-plan-action-cancel {
  background: white;
  color: var(--terracotta);
  border-color: rgba(161, 77, 58, 0.3);
}
.account-plan-action-cancel:hover { background: rgba(161, 77, 58, 0.06); }
.account-plan-action-reactivate {
  background: var(--success, #5e7c5a);
  color: var(--on-dark);
  border-color: transparent;
}
.account-plan-action-reactivate:hover { opacity: 0.9; }
.account-plan-portal-link {
  display: inline-block;
  margin-top: 8px;
  font-size: 13px;
  color: var(--primary);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color 0.15s var(--ease);
}
.account-plan-portal-link:hover { border-bottom-color: var(--primary); }

@media (max-width: 760px) {
  .account-plan-upgrade-grid { grid-template-columns: 1fr; }
  .account-plan-current { flex-direction: column; align-items: flex-start; }
  .account-plan-current-price { align-self: flex-start; }
}
@media (max-width: 540px) {
  .account-plan-paid-actions { flex-direction: column; }
  .account-plan-paid-actions button { width: 100%; }
}

/* Fase 2.5.51: CSS .ai-workspace-* + body.embed-mode RIMOSSI (dead code).
   Il modal iframe AI workspace è stato rimosso, ora si naviga direttamente
   al report nativo /?site=X&openTab=ai|chat. */

/* Fase 2.5.62: messaggio contestuale sotto score (4 soglie) */
.score-context {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
  margin: 6px 0 0;
  font-style: italic;
}
.score-context:empty { display: none; }
.user-sites-context {
  font-family: var(--font-body);
  font-size: 12px;
  color: var(--ink-muted);
  font-style: italic;
}

/* Fase 2.5.62: simulazione "Se sistemi i primi 3 elementi..." */
.score-potential {
  margin: 18px 0;
  padding: 14px 16px;
  background: rgba(94, 124, 90, 0.06);
  border: 1px solid rgba(94, 124, 90, 0.22);
  border-radius: var(--r-sm);
}
.score-potential-line {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink);
  margin: 0;
}
.score-potential-value {
  color: var(--success, #5e7c5a);
  font-weight: 700;
}
.score-potential-note {
  font-size: 11.5px;
  color: var(--ink-muted);
  margin: 6px 0 0;
  font-style: italic;
}

/* Fase 5.35: blocco "Le 3 cose da fare per prime" in cima alla Panoramica.
   Solo var() per adattarsi al dark mode automaticamente. */
.top3-fixes {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-left: 3px solid var(--terracotta);
  border-radius: var(--r);
  padding: 18px 20px;
  margin: 20px 0;
}
/* Fase 5.42: su mobile stretto compatto ma con margine ridotto coerente. */
@media (max-width: 540px) { .top3-fixes { padding: 16px 16px; margin: 16px 0; } }
.top3-fixes[hidden] { display: none !important; }
.top3-fixes-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}
.top3-fixes-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.top3-fixes-gain { font-size: 12.5px; color: var(--ink-muted); }
.top3-fixes-gain strong { color: var(--success); }
.top3-fix {
  display: flex;
  gap: 12px;
  padding: 12px 0;
  border-top: 1px solid var(--border);
}
.top3-fix:first-of-type { border-top: none; padding-top: 4px; }
.top3-fix-num {
  flex-shrink: 0;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--terracotta);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 13px;
  font-family: var(--font-head);
}
.top3-fix-body { flex: 1; min-width: 0; }
.top3-fix-title { font-weight: 600; color: var(--ink); font-size: 14.5px; margin: 0 0 3px; }
.top3-fix-do { font-size: 13px; color: var(--ink-soft); line-height: 1.5; margin: 0; }
.top3-fix-do strong { color: var(--terracotta); }
/* Fase 5.61b punto 3: bottone soft terracotta "Applica su WordPress" nel top3. */
.top3-wp-apply {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 8px;
  padding: 6px 12px;
  font-size: 13px;
  font-weight: 600;
  font-family: var(--font-body);
  color: var(--terracotta);
  background: var(--terracotta-soft, rgba(161, 77, 58, 0.08));
  border: 1px solid rgba(161, 77, 58, 0.25);
  border-radius: 10px;
  cursor: pointer;
  transition: background 0.14s var(--ease), border-color 0.14s var(--ease);
}
.top3-wp-apply:hover { background: rgba(161, 77, 58, 0.14); border-color: rgba(161, 77, 58, 0.4); }
.top3-wp-apply svg { width: 13px; height: 13px; flex-shrink: 0; }
.top3-wp-apply:disabled { cursor: default; }
.top3-wp-apply.top3-wp-apply-done {
  color: var(--success, #2f7d52);
  background: rgba(47, 125, 82, 0.1);
  border-color: rgba(47, 125, 82, 0.3);
}
.top3-fixes-cta {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin-top: 4px;
  font-size: 13px;
  font-weight: 600;
  color: var(--primary);
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
  font-family: var(--font-body);
}
.top3-fixes-cta:hover { text-decoration: underline; }

/* Fase 2.5.62: bottone Condividi report (accanto a PDF) */
.app-share-btn {
  background: transparent;
  color: var(--ink-soft);
  border: 1px solid var(--border);
  padding: 8px 14px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  margin-left: 8px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: background 0.18s var(--ease), color 0.18s var(--ease);
}
.app-share-btn:hover { background: var(--primary-fondo); color: #fff; border-color: var(--primary); }
/* GOTCHA hidden: il bottone ha display:inline-flex, quindi l'attributo hidden
   da solo non basta a nasconderlo agli anonimi (condivisione riservata ai loggati). */
.app-share-btn[hidden] { display: none !important; }

/* Fase 2.5.62: pagine legali (privacy, termini, cookie) */
.legal-panel {
  min-height: 100vh;
  padding: 90px 0 60px;
  background: var(--cream);
  font-family: var(--font-body);
}
.legal-panel[hidden] { display: none !important; }
/* SEO: i titoli legal sono h2.legal-h1 (un solo H1 per pagina: quello del hero). */
.legal-panel .legal-h1 {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  letter-spacing: -0.025em;
  color: var(--ink);
  margin: 0 0 4px;
}
.legal-meta {
  color: var(--ink-muted);
  font-size: 13px;
  margin: 0 0 28px;
}
.legal-panel h2 {
  font-family: var(--font-head);
  font-size: 20px;
  color: var(--ink);
  margin: 28px 0 10px;
}
.legal-panel p, .legal-panel li {
  font-size: 14.5px;
  color: var(--ink-soft);
  line-height: 1.65;
  margin: 0 0 12px;
}
.legal-panel ul { padding-left: 22px; margin: 0 0 16px; }
.legal-panel a { color: var(--terracotta); }
.legal-panel a:hover { text-decoration: underline; }
.legal-back {
  display: inline-block;
  margin-bottom: 18px;
  font-size: 13.5px;
  color: var(--ink-muted) !important;
  text-decoration: none;
}
.legal-back:hover { color: var(--ink) !important; }

/* Footer link legali */
.footer-legal a {
  color: var(--ink-muted);
  text-decoration: none;
  font-family: var(--font-body);
  font-size: 13px;
}
.footer-legal a:hover { color: var(--terracotta); }

/* Banner cookie */
.cookie-banner {
  position: fixed;
  bottom: 16px;
  left: 16px;
  right: 16px;
  max-width: 720px;
  margin: 0 auto;
  background: var(--ink);
  color: var(--on-dark);
  padding: 14px 18px;
  border-radius: 12px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
  display: flex;
  align-items: center;
  gap: 14px;
  z-index: 9990;
  font-family: var(--font-body);
  font-size: 13px;
}
.cookie-banner[hidden] { display: none !important; }
.cookie-banner-text { flex: 1; line-height: 1.4; }
.cookie-banner-text a { color: var(--on-dark); text-decoration: underline; }
/* Fase 5.19: in dark --ink diventa cream chiaro -> banner cream-on-cream
   invisibile. Forza surface-deep navy che resta scuro sempre. */
[data-theme="dark"] .cookie-banner { background: var(--surface-deep); color: var(--on-dark); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cookie-banner { background: var(--surface-deep); color: var(--on-dark); }
}
/* Fase 5.2: due bottoni (Solo necessari ghost + Accetta tutti primary).
   Mantengo .cookie-banner-btn come base condivisa. */
.cookie-banner-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.cookie-banner-btn {
  background: var(--primary-fondo);
  color: #fff;
  border: 1px solid var(--primary);
  padding: 8px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.18s var(--ease), color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.cookie-banner-btn:hover { background: #142e49; border-color: #142e49; }
.cookie-banner-btn-ghost {
  background: transparent;
  color: var(--on-dark);
  border: 1px solid var(--border);
}
.cookie-banner-btn-ghost:hover {
  background: rgba(250, 250, 247, 0.08);
  color: var(--on-dark);
  border-color: var(--on-dark);
}
@media (max-width: 540px) {
  .cookie-banner { flex-direction: column; align-items: stretch; bottom: 76px; }
  .cookie-banner-actions { width: 100%; flex-direction: column; gap: 8px; }
  .cookie-banner-btn { width: 100%; }
}

/* Fase 2.5.62: shared report read-only mode (URL /report/:token).
   Nasconde tutti i controlli interattivi (AI Lab, Chat, scan form, ecc.) */
body.shared-mode .nav-auth,
body.shared-mode #testModeBtn,
body.shared-mode .floating-help-btn,
body.shared-mode .mobile-bottom-nav,
body.shared-mode .ai-buttons,
body.shared-mode .ai-geo-section,
body.shared-mode .chat-wrap,
body.shared-mode .chat-input,
body.shared-mode #scoreViewToggle,
body.shared-mode .audit-type-toggle,
body.shared-mode .post-audit-cta-soft,
body.shared-mode .audit-history-strip,
body.shared-mode .dashboard-scan-form,
body.shared-mode .dashboard-scan-scope,
body.shared-mode .ai-output,
/* A1: nel portale che l'agenzia mostra al CLIENTE non devono comparire gli
   strumenti interni. Senza queste righe il cliente (o l'agenzia che si
   ricontrolla il link) vedeva form concorrente, controlla-link e genera-piano. */
body.shared-mode .audit-diff,
body.shared-mode .site-alert,
body.shared-mode .action-plan,
body.shared-mode .competitor-panel,
body.shared-mode .linkcheck {
  display: none !important;
}
body.shared-mode .shared-banner {
  background: var(--terracotta);
  color: #fff;
  padding: 8px 16px;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 9000;
}
body.shared-mode .nav { display: none !important; }
body.shared-mode #app { padding-top: 50px; }
/* A1 portale cliente white-label: quando il report è condiviso da un'agenzia
   con brand impostato, il banner usa il navy del brand (non il terracotta
   Trovavio) e mostra logo + nome agenzia a sinistra, "sola lettura" a destra. */
body.shared-mode.shared-whitelabel .shared-banner {
  background: var(--primary-fondo);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 18px;
  text-align: left;
}
body.shared-mode .shared-wl-inner {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
/* CHIP BIANCO dietro al logo. Senza, il logo sta direttamente sul navy del
   banner e un logo a inchiostro scuro (il caso più comune: i loghi si
   disegnano per la carta e per i siti a fondo chiaro) è illeggibile per il
   cliente dell'agenzia. Verificato con un logo scuro reale: spariva.
   Il chip è bianco in ENTRAMBI i temi, come .agency-logo-preview: è la
   stessa isola chiara, e la coerenza fra le due NON è estetica. L'anteprima
   nelle impostazioni è bianca; finché il banner era navy, l'anteprima
   mentiva e un'agenzia col logo scuro non scopriva mai di essere invisibile ai
   suoi clienti. Ora anteprima e barra mostrano la stessa cosa, quindi chi
   carica un logo chiaro lo vede sparire subito nell'anteprima e cambia file:
   il sistema si autocorregge invece di fallire in silenzio.
   box-sizing: content-box perché `height` deve restare l'altezza del LOGO,
   non del chip: col border-box il padding lo schiaccerebbe. */
body.shared-mode .shared-wl-logo {
  height: 26px;
  width: auto;
  max-width: 130px;
  object-fit: contain;
  border-radius: 6px;
  flex-shrink: 0;
  background: #fff;
  padding: 3px 6px;
  box-sizing: content-box;
}
[data-theme="dark"] body.shared-mode .shared-wl-logo { background: #fff; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) body.shared-mode .shared-wl-logo { background: #fff; }
}
body.shared-mode .shared-wl-name {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 14px;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
body.shared-mode .shared-wl-ro {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.82);
  flex-shrink: 0;
}

/* Fase 2.5.60: drawer laterale AI Lab / Chat (apre da destra in dashboard).
   80% width desktop, 100% mobile. Transition CSS-only su transform. */
.ai-panel-overlay {
  position: fixed;
  inset: 0;
  background: rgba(10, 20, 32, 0.55);
  z-index: 9650;
  opacity: 0;
  transition: opacity 0.22s ease-out;
}
.ai-panel-overlay[hidden] { display: none !important; }
.ai-panel-overlay.show { opacity: 1; }
.ai-panel-drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: 80%;
  max-width: 920px;
  background: var(--cream);
  z-index: 9700;
  display: flex;
  flex-direction: column;
  box-shadow: -8px 0 32px rgba(15, 37, 61, 0.18);
  transform: translateX(100%);
  transition: transform 0.25s ease-out;
}
.ai-panel-drawer[hidden] { display: none !important; }
.ai-panel-drawer.show { transform: translateX(0); }
@media (max-width: 760px) { .ai-panel-drawer { width: 100%; max-width: none; } }
.ai-panel-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--border);
  background: #fff;
}
.ai-panel-head-text { flex: 1; min-width: 0; }
.ai-panel-mode {
  font-size: 11px;
  font-weight: 700;
  color: var(--terracotta);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.ai-panel-title {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 2px 0 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ai-panel-score {
  display: inline-block;
  margin-top: 4px;
  font-size: 12.5px;
  color: var(--ink-muted);
}
.ai-panel-body {
  flex: 1;
  overflow-y: auto;
  padding: 22px;
}
.ai-panel-intro {
  font-size: 14px;
  color: var(--ink-soft);
  line-height: 1.6;
  margin: 0 0 18px;
}
.ai-panel-actions-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
}
.ai-panel-action {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 14px 16px;
  cursor: pointer;
  text-align: left;
  font-family: var(--font-body);
  display: flex;
  flex-direction: column;
  gap: 4px;
  transition: border-color 0.18s var(--ease), transform 0.15s var(--ease);
}
.ai-panel-action:hover { border-color: var(--primary); transform: translateY(-1px); }
.ai-panel-action strong { font-family: var(--font-head); font-size: 14px; color: var(--ink); }
.ai-panel-action span { font-size: 12px; color: var(--ink-muted); }
.ai-panel-cta {
  display: block;
  margin-top: 18px;
  padding: 12px 18px;
  background: var(--terracotta);
  color: #fff;
  text-align: center;
  border-radius: 10px;
  font-weight: 700;
  text-decoration: none;
  font-size: 14px;
}
.ai-panel-cta:hover { background: var(--terracotta-hover); }

/* Fase 2.5.60: test mode plan selector
   Fase 2.5.63 fix: era position bottom (pop-up sopra il bottone), ma il bottone
   sta nella navbar sticky in cima: il dropdown finiva fuori dal viewport in alto
   e appariva come rettangolo scuro clippato. Ora pop-down sotto il bottone. */
.test-mode-plan-dropdown {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  background: var(--ink);
  border-radius: 10px;
  padding: 6px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 130px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
  z-index: 100;
}
.test-mode-plan-dropdown[hidden] { display: none !important; }
.test-mode-plan-dropdown button {
  background: none;
  border: none;
  color: var(--on-dark);
  padding: 8px 12px;
  text-align: left;
  border-radius: 6px;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 13px;
}
.test-mode-plan-dropdown button:hover { background: rgba(255, 255, 255, 0.1); }
.test-mode-plan-dropdown button.active { background: var(--terracotta); }

/* Fase 2.5.59: dashboard agenzia (tabella panoramica + metriche + bottoni) */
.agency-overview {
  margin-bottom: 18px;
}
.agency-metrics {
  display: grid;
  /* Le tessere sono quattro (score medio, siti critici, migliorati, coda
     WordPress): con tre colonne la quarta finiva da sola su una seconda riga,
     larga un terzo, col resto vuoto. */
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  margin-bottom: 14px;
}
.agency-metric {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 14px 16px;
  text-align: center;
}
.agency-metric-num {
  font-family: var(--font-head);
  font-size: 30px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
}
.agency-metric-num.agency-metric-warn { color: var(--terracotta); }
.agency-metric-num.agency-metric-good { color: var(--success, #5e7c5a); }
.agency-metric-label {
  font-size: 12px;
  color: var(--ink-muted);
  margin-top: 6px;
  font-weight: 500;
}
.agency-actions { display: flex; gap: 10px; flex-wrap: wrap; }
/* Fase 5.37: barra avanzamento "Scansiona tutti i siti". Solo var() per il dark. */
.agency-scan-progress { margin-top: 14px; }
.agency-scan-progress[hidden] { display: none !important; }
.agency-scan-progress-label {
  font-size: 13px;
  color: var(--ink-soft);
  margin-bottom: 7px;
  font-weight: 500;
}
.agency-scan-progress-track {
  height: 8px;
  background: var(--cream-deep);
  border-radius: 99px;
  overflow: hidden;
}
.agency-scan-progress-bar {
  height: 100%;
  width: 0;
  background: var(--terracotta);
  border-radius: 99px;
  transition: width 0.4s var(--ease);
}
.agency-action-btn {
  background: #fff;
  color: var(--ink);
  border: 1px solid var(--border);
  padding: 10px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease);
}
.agency-action-btn:hover { background: var(--cream-soft, #f5f3ec); border-color: var(--primary); }
.agency-action-btn.agency-action-primary { background: var(--primary-fondo); color: #fff; border-color: var(--primary); }
.agency-action-btn.agency-action-primary:hover { background: #142e49; }
.agency-action-btn:disabled { opacity: 0.6; cursor: not-allowed; }

.agency-table-wrap {
  overflow-x: auto;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
}
/* ═══════════════════════ Fase 5.50: Sezione WordPress ═══════════════════════ */
.wp-section { margin: 22px 0; }
.wp-section[hidden] { display: none !important; }
/* Fase 5.64: il contenitore della sezione WordPress è un semplice wrapper
   trasparente (come .dashboard-section), niente card. Sfondo = pagina (--cream),
   nessun bordo: gli sfondi e i bordi vivono solo sugli elementi interni
   (banner, key-box, righe). Evita il doppio bordo e lo sfondo più scuro. */
.wp-card {
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 0;
}
.wp-card[hidden] { display: none !important; }
/* Fase 5.64b: la sezione WordPress è un fold collassabile come "Strumenti"
   (.dashboard-account-fold). Aperta di default; max-height ampia per la tabella. */
.wp-fold[hidden] { display: none !important; }
/* P0 gating: la sezione WordPress in /account è nascosta ai Free via
   renderWpAccount (section.hidden=true). Regola esplicita perché hidden non
   perda contro eventuali display futuri (lezione operativa CSS Fase 2.5.5). */
.account-section[hidden] { display: none !important; }
.wp-fold[data-open="true"] .dashboard-account-fold-body { max-height: 8000px; }
/* Fase 5.64c: badge di sintesi nell'header del fold, leggibile anche da chiuso. */
.wp-fold-head-label { display: inline-flex; align-items: center; gap: 10px; }
.wp-fold-badge {
  font-family: var(--font-body);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  padding: 2px 10px;
  border-radius: 99px;
  white-space: nowrap;
}
.wp-fold-badge[hidden] { display: none !important; }
.wp-fold-badge.is-queued { background: rgba(161,77,58,0.14); color: var(--terracotta); }
.wp-fold-badge.is-todo { background: rgba(184,115,46,0.14); color: var(--warning, #b8732e); }
.wp-fold-badge.is-ok { background: rgba(94,124,90,0.15); color: var(--success, #5e7c5a); }
[data-theme="dark"] .wp-fold-badge.is-todo { background: rgba(217,156,94,0.16); color: #d99c5e; }
[data-theme="dark"] .wp-fold-badge.is-ok { background: rgba(143,201,138,0.16); color: #8fc98a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-fold-badge.is-todo { background: rgba(217,156,94,0.16); color: #d99c5e; }
  :root:not([data-theme="light"]) .wp-fold-badge.is-ok { background: rgba(143,201,138,0.16); color: #8fc98a; }
}
.wp-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--ink);
  margin: 0 0 6px;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.wp-text { font-size: 14px; line-height: 1.55; color: var(--ink-soft); margin: 0 0 16px; max-width: 60ch; }
.wp-text-warn { color: var(--terracotta); font-weight: 500; }
.wp-text-warn[hidden] { display: none !important; }
.wp-text-muted { font-size: 12.5px; color: var(--ink-muted); margin: 4px 0 0; }
.wp-btn-primary {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  padding: 11px 20px;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.wp-btn-primary:hover:not(:disabled) { background: var(--primary-fondo); transform: translateY(-1px); }
.wp-btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }
.wp-btn-secondary {
  background: transparent;
  color: var(--primary);
  border: 1px solid var(--primary);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  padding: 8px 14px;
  cursor: pointer;
  transition: background 0.15s var(--ease);
}
.wp-btn-secondary:hover { background: rgba(26, 58, 92, 0.06); }
.wp-btn-sm { padding: 6px 12px; font-size: 12.5px; }
.wp-link-btn {
  background: none;
  border: none;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  padding: 6px 0;
  margin-top: 12px;
}
.wp-link-btn:hover { color: var(--terracotta); text-decoration: underline; }
.wp-key-row { display: flex; gap: 8px; align-items: stretch; margin-bottom: 8px; }
.wp-key-row[hidden] { display: none !important; }
.wp-key-input {
  flex: 1;
  min-width: 0;
  font-family: var(--font-mono, ui-monospace, monospace);
  font-size: 13px;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--cream);
  color: var(--ink);
}
.wp-copy-btn {
  flex-shrink: 0;
  background: var(--primary-fondo);
  color: var(--on-dark);
  border: none;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  padding: 0 16px;
  cursor: pointer;
}
.wp-copy-btn:hover { background: var(--primary-deep); }
/* Fase 5.50.2: box chiave + warning con icona + passi grafici numerati. */
.wp-key-box {
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px;
  margin: 4px 0 18px;
}
.wp-key-label {
  display: block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ink-muted);
  margin-bottom: 8px;
}
.wp-key-box .wp-key-row { margin-bottom: 0; }
.wp-key-once { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--terracotta); margin: 10px 0 0; }
.wp-key-once[hidden] { display: none !important; }
.wp-key-once svg { flex-shrink: 0; }
.wp-key-gone { font-size: 12.5px; color: var(--ink-muted); margin: 10px 0 0; }
.wp-key-gone[hidden] { display: none !important; }
.wp-steps-graphic { display: flex; flex-direction: column; gap: 14px; margin: 4px 0 10px; }
.wp-step { display: flex; gap: 14px; align-items: flex-start; }
.wp-step-num {
  flex-shrink: 0;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--terracotta);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 15px;
}
.wp-step-body { padding-top: 3px; min-width: 0; }
.wp-step-title { font-size: 14.5px; color: var(--ink); font-weight: 500; line-height: 1.4; }
.wp-steps-link { display: inline-block; margin-top: 4px; color: var(--terracotta); font-weight: 600; font-size: 13.5px; }
.wp-steps-link:hover { text-decoration: underline; }
.wp-c-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
/* Fase 5.99.4: selettore sito della sezione WordPress. Mancava del tutto: i chip
   apparivano come testo concatenato (es. "sito1.comsito2.com2"). */
.wp-site-switcher { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 16px; }
.wp-site-switcher[hidden] { display: none !important; }
.wp-site-switcher-label { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-muted); margin-right: 2px; }
.wp-site-current { font-size: 14px; font-weight: 600; color: var(--ink); }
.wp-site-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; color: var(--ink-soft); background: var(--cream-soft); border: 1px solid var(--border); border-radius: 99px; padding: 6px 14px; cursor: pointer; transition: background 0.15s var(--ease), border-color 0.15s var(--ease), color 0.15s var(--ease); }
.wp-site-chip:hover { border-color: var(--ink-muted); color: var(--ink); }
.wp-site-chip.is-active { background: var(--primary-fondo); border-color: var(--primary); color: var(--on-dark); }
.wp-site-chip-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 99px; background: var(--terracotta); color: var(--cream); font-size: 11px; font-weight: 700; }
.wp-site-chip.is-active .wp-site-chip-badge { background: var(--cream); color: var(--primary); }
/* Fase 6.6: selettore sito come menu a tendina nativo (scala fino a 15 domini del
   piano Agenzia senza il wrapping irregolare delle pill). Bordo, radius e altezza
   coerenti con gli altri input. Colori solo da token, quindi si adatta al dark. */
.an-site-select {
  height: 36px;
  padding: 0 12px;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 8px;
  cursor: pointer;
  font-family: inherit;
  max-width: 100%;
}
.an-site-select:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.wp-badge {
  display: inline-block;
  font-size: 12px;
  font-weight: 500;
  padding: 3px 10px;
  border-radius: 99px;
  vertical-align: middle;
}
.wp-badge-ok { background: rgba(94, 124, 90, 0.15); color: var(--success); }
.wp-badge-queued { background: rgba(161, 77, 58, 0.14); color: var(--terracotta); }
.wp-badge-applied { background: rgba(94, 124, 90, 0.15); color: var(--success); }
.wp-table-wrap { overflow-x: auto; }
.wp-table { width: 100%; border-collapse: collapse; font-family: var(--font-body); font-size: 13px; }
.wp-table thead th {
  text-align: left;
  font-family: var(--font-body);
  font-weight: 600;
  color: var(--ink-muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 8px 10px;
  border-bottom: 1px solid var(--border);
}
.wp-table tbody td { padding: 16px 14px; border-bottom: 1px solid var(--border); vertical-align: top; color: var(--ink-soft); font-size: 14px; }
.wp-table tbody tr:last-child td { border-bottom: none; }
.wp-table tbody tr { transition: background 0.12s var(--ease); }
.wp-table tbody tr:hover { background: var(--cream-deep); }
.wp-cell-page-title { font-family: var(--font-body); font-weight: 600; font-size: 14px; color: var(--ink); }
.wp-cell-page-url { font-size: 12px; color: var(--ink-muted); display: block; margin-top: 2px; word-break: break-all; }
/* Fase 5.60: testata cella pagina (titolo + pill completezza) + stato pending inline */
.wp-cell-page-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wp-page-score { font-size: 10.5px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; border-radius: 99px; padding: 1px 8px; white-space: nowrap; }
.wp-page-score-ok { background: rgba(94,124,90,0.14); color: var(--success, #5e7c5a); }
.wp-page-score-partial { background: rgba(184,115,46,0.14); color: var(--warning, #b8732e); }
.wp-page-score-empty { background: rgba(161,77,58,0.12); color: var(--terracotta); }
.wp-cell-pending-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
[data-theme="dark"] .wp-page-score-ok { background: rgba(143,201,138,0.16); color: #8fc98a; }
[data-theme="dark"] .wp-page-score-partial { background: rgba(217,156,94,0.16); color: #d99c5e; }
[data-theme="dark"] .wp-page-score-empty { background: rgba(224,145,122,0.16); color: #e0917a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-page-score-ok { background: rgba(143,201,138,0.16); color: #8fc98a; }
  :root:not([data-theme="light"]) .wp-page-score-partial { background: rgba(217,156,94,0.16); color: #d99c5e; }
  :root:not([data-theme="light"]) .wp-page-score-empty { background: rgba(224,145,122,0.16); color: #e0917a; }
}
.wp-cell-current { color: var(--ink); line-height: 1.4; }
.wp-cell-empty { color: var(--ink-muted); font-style: italic; }
/* Fase 5.67: cella azionabile pulita: valore/stato sopra, azione discreta sotto */
.wp-cell { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.wp-cell-top { min-height: 18px; }
.wp-cell-dash { color: var(--ink-muted); font-size: 12.5px; }
.wp-cell-action {
  background: none; border: none; padding: 0; cursor: pointer;
  font-family: var(--font-body); font-size: 12px; font-weight: 600;
  color: var(--terracotta); display: inline-flex; align-items: center; gap: 4px;
}
.wp-cell-action svg { width: 13px; height: 13px; flex-shrink: 0; }
.wp-cell-action:hover { text-decoration: underline; }
.wp-cell-action:disabled { opacity: 0.6; cursor: progress; text-decoration: none; }
/* Fase 5.60: "Genera con AI" (campo mancante) più marcato di "Migliora con AI". */
.wp-cell-action-gen { font-weight: 700; }
/* Fase 5.68: nota "rapide vs scansione" sopra la tabella */
.wp-table-note {
  display: flex; align-items: flex-start; gap: 8px;
  background: var(--cream-soft); border: 1px solid var(--border);
  border-radius: 10px; padding: 11px 14px; margin: 0 0 14px;
  font-size: 13px; color: var(--ink-soft); line-height: 1.5;
}
.wp-table-note svg { flex-shrink: 0; color: var(--primary); margin-top: 2px; }
.wp-table-note strong { color: var(--ink); }
.wp-inline-link {
  background: none; border: none; padding: 0; cursor: pointer;
  font-family: var(--font-body); font-size: 13px; font-weight: 600;
  color: var(--terracotta); text-decoration: underline;
}
.wp-inline-link:hover { color: var(--primary); }
/* Fase 5.69: barra riepilogo stato fix */
.wp-applyall {
  display: flex; align-items: center; gap: 9px;
  padding: 11px 14px; margin: 0 0 14px;
  border-radius: 10px; font-size: 13px; line-height: 1.45;
  border: 1px solid var(--border);
}
.wp-applyall[hidden] { display: none !important; }
.wp-applyall-active { background: rgba(26,58,92,0.06); color: var(--ink-soft); }
.wp-applyall-todo { background: rgba(184,115,46,0.08); color: var(--ink-soft); }
.wp-applyall-ok { background: rgba(94,124,90,0.08); color: var(--ink-soft); }
/* Fase 5.99.13: coda ferma da troppo tempo (WP-Cron non scattato). Toni terracotta, più marcato di "todo". */
.wp-applyall-stale { background: rgba(161,77,58,0.10); color: var(--ink-soft); border-color: rgba(161,77,58,0.32); }
.wp-applyall-stale strong { color: var(--terracotta); }
.wp-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--primary-fondo); flex-shrink: 0; }
.wp-dot-warn { background: var(--warning); }
.wp-dot-ok { background: var(--success); }
[data-theme="dark"] .wp-applyall-active { background: rgba(130,160,196,0.12); }
[data-theme="dark"] .wp-applyall-todo { background: rgba(217,156,94,0.14); }
[data-theme="dark"] .wp-applyall-ok { background: rgba(143,201,138,0.14); }
[data-theme="dark"] .wp-applyall-stale { background: rgba(200,110,86,0.16); border-color: rgba(200,110,86,0.38); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-applyall-active { background: rgba(130,160,196,0.12); }
  :root:not([data-theme="light"]) .wp-applyall-todo { background: rgba(217,156,94,0.14); }
  :root:not([data-theme="light"]) .wp-applyall-ok { background: rgba(143,201,138,0.14); }
  :root:not([data-theme="light"]) .wp-applyall-stale { background: rgba(200,110,86,0.16); border-color: rgba(200,110,86,0.38); }
}
.wp-apply-btn {
  background: transparent;
  color: var(--primary);
  border: 1px solid var(--primary);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  padding: 6px 12px;
  cursor: pointer;
  white-space: nowrap;
}
.wp-apply-btn:hover { background: rgba(26, 58, 92, 0.06); }
.wp-gen-btn {
  background: rgba(161, 77, 58, 0.10);
  color: var(--terracotta);
  border: 1px solid rgba(161, 77, 58, 0.3);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  padding: 6px 12px;
  cursor: pointer;
  white-space: nowrap;
}
.wp-gen-btn:hover { background: rgba(161, 77, 58, 0.18); }
.wp-gen-btn:disabled { opacity: 0.6; cursor: progress; }
.wp-kw-pills { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.wp-kw-pill {
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 4px 11px;
  font-size: 12px;
  font-weight: 500;
  color: var(--ink);
  cursor: pointer;
}
.wp-kw-pill:hover { border-color: var(--terracotta); color: var(--terracotta); }
.wp-ignore-link { background: none; border: none; color: var(--ink-muted); font-size: 12.5px; cursor: pointer; padding: 4px 0; }
.wp-ignore-link:hover { color: var(--terracotta); text-decoration: underline; }
.wp-spinner {
  display: inline-block; width: 13px; height: 13px; border: 2px solid var(--border);
  border-top-color: var(--terracotta); border-radius: 50%; animation: wpSpin 0.7s linear infinite; vertical-align: middle;
}
@keyframes wpSpin { to { transform: rotate(360deg); } }
/* Fase 5.64: sezione WordPress su mobile. */
@media (max-width: 768px) {
  /* Banner interni più compatti */
  .wp-table-note, .wp-applyall { padding: 12px; }
  .wp-key-box { padding: 12px; }
  /* "Rigenera chiave" va a capo sotto il titolo, allineata a destra */
  .wp-c-head { flex-direction: column; align-items: stretch; }
  .wp-c-head .wp-btn-sm { align-self: flex-end; }
  /* La tabella pagine diventa una lista di card verticali (no scroll orizzontale) */
  .wp-table-wrap { overflow-x: visible; }
  .wp-table, .wp-table tbody, .wp-table tr, .wp-table td { display: block; width: 100%; }
  .wp-table thead { display: none; }
  .wp-table tbody tr {
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--cream);
    padding: 14px;
    margin-bottom: 12px;
  }
  .wp-table tbody tr:last-child { margin-bottom: 0; }
  /* Prima cella: intestazione della card (titolo Fraunces + URL muted) */
  .wp-table tbody td:first-child {
    padding: 0 0 10px;
    margin-bottom: 8px;
    border-bottom: 1px solid var(--border);
  }
  /* Celle con label: label a sinistra, valore/azione a destra, stessa riga flex */
  .wp-table tbody td[data-label] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px;
    padding: 8px 0;
  }
  .wp-table tbody td[data-label]:last-child { padding-bottom: 0; }
  .wp-table tbody td[data-label]::before {
    content: attr(data-label);
    flex-shrink: 0;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--ink-muted);
    padding-top: 1px;
  }
  /* Il contenuto della cella (valore + azione) si allinea a destra */
  .wp-table tbody td[data-label] .wp-cell { align-items: flex-end; text-align: right; flex: 1; min-width: 0; }
  .wp-table tbody td[data-label] .wp-cell-page-url,
  .wp-table tbody td[data-label] .wp-cell-current { word-break: break-word; }
}
/* Dark mode: input e pill su superfici scure (entrambe le forme).
   Fase 5.64: .wp-card non è più una card, resta trasparente anche in dark. */
[data-theme="dark"] .wp-key-input,
[data-theme="dark"] .wp-kw-pill {
  background: var(--cream-soft);
  color: var(--ink);
  border-color: var(--border);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-key-input,
  :root:not([data-theme="light"]) .wp-kw-pill {
    background: var(--cream-soft);
    color: var(--ink);
    border-color: var(--border);
  }
}

/* ═══════════════════════════════════════════════════════
   Pagine WordPress: card espandibili (sostituiscono .wp-table).
   Tutti i bg usano var()/rgba(): si adattano al dark senza twin.
   ═══════════════════════════════════════════════════════ */
.trv-pages-wrap { display: flex; flex-direction: column; gap: 8px; }
.trv-pc {
  border: 0.5px solid var(--border);
  border-radius: 14px;
  overflow: hidden;
  background: var(--cream);
}
.trv-pc[hidden] { display: none !important; }
.trv-pc-head {
  display: flex; align-items: center; gap: 12px;
  padding: 13px 16px;
  cursor: pointer; user-select: none;
}
.trv-pc-head:hover { background: var(--cream-soft); }
.trv-pc-icon {
  width: 32px; height: 32px; flex-shrink: 0;
  border-radius: 10px; background: var(--cream-soft);
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-muted); font-size: 16px;
}
.trv-pc-meta { flex: 1; min-width: 0; }
.trv-pc-name {
  font-size: 13.5px; font-weight: 500; color: var(--ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.trv-pc-url {
  font-size: 11.5px; color: var(--ink-muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.trv-pc-chips { display: flex; gap: 6px; flex-shrink: 0; }
.trv-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 9px; border-radius: 99px;
  font-size: 11.5px; font-weight: 500;
  border: 0.5px solid transparent;
}
.trv-chip svg { width: 11px; height: 11px; flex-shrink: 0; }
.trv-chip-ok { background: rgba(94,124,90,0.13); color: var(--success); border-color: rgba(94,124,90,0.30); }
.trv-chip-warn { background: rgba(184,115,46,0.13); color: var(--warning-ink); border-color: rgba(184,115,46,0.30); }
.trv-chip-bad { background: rgba(161,77,58,0.13); color: var(--terracotta); border-color: rgba(161,77,58,0.30); }
.trv-chip-wp { background: rgba(26,58,92,0.10); color: var(--primary); border-color: rgba(26,58,92,0.26); }
.trv-pc-chevron { width: 16px; height: 16px; flex-shrink: 0; color: var(--ink-muted); transition: transform 0.2s var(--ease); }
.trv-pc.is-open .trv-pc-chevron { transform: rotate(180deg); }
.trv-pc-body { border-top: 0.5px solid var(--border); }
.trv-pc-body[hidden] { display: none !important; }

/* Anteprima SERP */
.trv-preview-wrap {
  padding: 14px 16px;
  background: var(--cream-soft);
  border-bottom: 0.5px solid var(--border);
}
.trv-preview-tabs {
  display: flex; gap: 2px;
  border-bottom: 0.5px solid var(--border);
  margin: 0 -16px; padding: 0 16px;
}
.trv-ptab {
  padding: 9px 12px; font-size: 12px; font-weight: 500;
  color: var(--ink-muted); border: none; background: none;
  cursor: pointer; border-bottom: 2px solid transparent;
  margin-bottom: -0.5px; font-family: var(--font-body);
}
.trv-ptab.is-active { color: var(--ink); border-bottom-color: var(--ink); }
.trv-pnl { margin-top: 12px; }
.trv-pnl[hidden] { display: none !important; }
.trv-serp-box {
  border: 0.5px solid var(--border); border-radius: 10px;
  padding: 10px 12px; margin-bottom: 10px; background: var(--cream);
}
.trv-serp-domain { font-size: 11px; color: var(--ink-muted); margin-bottom: 3px; }
.trv-serp-title { font-size: 14px; color: var(--primary); font-weight: 500; line-height: 1.3; margin-bottom: 3px; }
.trv-serp-desc { font-size: 12px; color: var(--ink-soft); line-height: 1.55; }
.trv-serp-desc.is-missing { color: var(--terracotta); font-style: italic; }
.trv-bar-row { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }
.trv-bar-lbl { font-size: 11px; color: var(--ink-soft); width: 64px; flex-shrink: 0; }
.trv-bar-track { flex: 1; height: 5px; border-radius: 99px; background: var(--border); overflow: hidden; }
.trv-bar-fill { height: 100%; border-radius: 99px; }
.trv-bar-fill.ok { background: var(--success); }
.trv-bar-fill.warn { background: var(--warning); }
.trv-bar-fill.bad { background: var(--terracotta); }
.trv-bar-ct { font-size: 11px; width: 36px; text-align: right; flex-shrink: 0; color: var(--ink-muted); }
.trv-bar-ct.warn { color: var(--warning-ink); }
.trv-bar-ct.bad { color: var(--terracotta); }
.trv-og-card { border: 0.5px solid var(--border); border-radius: 10px; overflow: hidden; }
.trv-og-img {
  height: 120px; background: var(--cream-soft);
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-muted); font-size: 12px; text-align: center; padding: 0 16px;
  border-bottom: 0.5px solid var(--border);
}
.trv-og-meta { padding: 9px 12px; background: var(--cream-soft); }
.trv-og-domain { font-size: 10px; color: var(--ink-muted); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 2px; }
.trv-og-title { font-size: 13px; font-weight: 500; color: var(--ink); line-height: 1.3; }
.trv-og-desc { font-size: 12px; color: var(--ink-soft); }
.trv-og-desc.is-missing { color: var(--terracotta); font-style: italic; }
.trv-og-status-list { display: flex; flex-direction: column; gap: 5px; margin-top: 10px; }
.trv-og-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 7px 10px; border-radius: 8px; background: var(--cream-soft);
  font-size: 12px; color: var(--ink);
}
.trv-og-badge { font-size: 11px; font-weight: 500; padding: 2px 8px; border-radius: 99px; }
.trv-og-badge.ok { background: rgba(94,124,90,0.13); color: var(--success); }
.trv-og-badge.missing { background: rgba(161,77,58,0.13); color: var(--terracotta); }
.trv-og-badge.warn { background: rgba(184,115,46,0.13); color: var(--warning-ink); }
.trv-note-discover {
  display: flex; gap: 7px; padding: 8px 10px; border-radius: 8px;
  background: var(--cream-soft); font-size: 11.5px; color: var(--ink-muted);
  margin-top: 10px; line-height: 1.45;
}
.trv-note-discover svg { flex-shrink: 0; margin-top: 1px; }

/* Field card */
.trv-fields-wrap { display: flex; flex-direction: column; gap: 8px; padding: 12px 16px; }
.trv-fld { border: 0.5px solid var(--border); border-radius: 12px; overflow: hidden; background: var(--cream); }
.trv-fld.has-issue { border-left: 2.5px solid var(--warning); }
.trv-fld.is-missing { border-left: 2.5px solid var(--terracotta); }
.trv-fld.is-ok { border-left: 2.5px solid var(--success); }
.trv-fld-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 13px 0; }
.trv-fld-label { font-size: 12px; font-weight: 500; color: var(--ink-soft); }
.trv-fld-badge { font-size: 11px; font-weight: 500; padding: 2px 8px; border-radius: 99px; }
.trv-fld-badge.missing { background: rgba(161,77,58,0.13); color: var(--terracotta); }
.trv-fld-badge.short { background: rgba(184,115,46,0.13); color: var(--warning-ink); }
.trv-fld-badge.ok { background: rgba(94,124,90,0.13); color: var(--success); }
.trv-fld-badge.queued { background: rgba(26,58,92,0.10); color: var(--primary); }
.trv-fld-current { font-size: 12px; color: var(--ink-muted); padding: 5px 13px 0; }
.trv-fld-val { font-size: 13px; color: var(--ink); padding: 3px 13px 7px; word-break: break-word; line-height: 1.45; }
.trv-fld-val.is-empty { color: var(--terracotta); font-style: italic; }
.trv-fld-divider { border: none; border-top: 0.5px solid var(--border); margin: 0 13px; }
.trv-fld-ai { padding: 8px 13px; background: var(--cream-soft); }
.trv-fld-ai[hidden] { display: none !important; }
.trv-fld-ai-lbl { font-size: 11px; font-weight: 500; color: var(--ink-muted); display: flex; align-items: center; gap: 4px; margin-bottom: 4px; }
.trv-fld-ai-lbl svg { width: 12px; height: 12px; flex-shrink: 0; }
.trv-fld-ai-val { font-size: 13px; color: var(--success); word-break: break-word; line-height: 1.45; }
.trv-fld-counter { font-size: 11px; text-align: right; padding: 2px 13px 5px; color: var(--ink-muted); }
.trv-fld-counter.warn { color: var(--warning-ink); }
.trv-fld-counter.bad { color: var(--terracotta); }
.trv-fld-actions { display: flex; gap: 6px; padding: 7px 13px 10px; flex-wrap: wrap; align-items: center; }
.trv-fld-actions[hidden] { display: none !important; }
.trv-act {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 11px; border-radius: 10px;
  font-size: 12px; font-weight: 500;
  border: 0.5px solid var(--border); background: none;
  cursor: pointer; color: var(--ink); font-family: var(--font-body);
}
.trv-act svg { width: 13px; height: 13px; flex-shrink: 0; }
.trv-act:hover { background: var(--cream-soft); }
.trv-act.primary { background: var(--primary-fondo); color: #fafaf7; border-color: var(--primary); }
.trv-act.primary:hover { background: var(--primary-deep); }
.trv-act.confirm { background: var(--cream-soft); border-color: var(--success); color: var(--success); }
.trv-act.ghost { color: var(--ink-muted); }
.trv-act[disabled] { opacity: 0.6; cursor: default; }
.trv-act-spacer { flex: 1; }
.trv-kw-pills-wrap { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 13px 10px; }
.trv-kw-pills-wrap[hidden] { display: none !important; }
.trv-kw-pill {
  padding: 4px 11px; border-radius: 99px; border: 0.5px solid var(--border);
  font-size: 12px; cursor: pointer; color: var(--ink); background: none; font-family: var(--font-body);
}
.trv-kw-pill:hover { background: var(--cream-soft); }
.trv-kw-pill.is-selected { border-color: var(--success); background: var(--cream-soft); color: var(--success); }

/* GEO section inline */
.trv-geo-section { border-top: 0.5px solid var(--border); padding: 12px 16px; }
.trv-geo-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.trv-geo-title { font-size: 12px; font-weight: 500; color: var(--ink-soft); text-transform: uppercase; letter-spacing: 0.05em; }
.trv-geo-score { font-size: 11.5px; color: var(--terracotta); font-weight: 500; }
.trv-geo-item { display: flex; gap: 10px; align-items: flex-start; padding: 9px 0; border-bottom: 0.5px solid var(--border); }
.trv-geo-item:last-child { border-bottom: none; }
.trv-geo-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 4px; }
.trv-geo-dot.red { background: var(--terracotta); }
.trv-geo-dot.amber { background: var(--warning); }
.trv-geo-dot.green { background: var(--success); }
.trv-geo-body { flex: 1; min-width: 0; }
.trv-geo-t { font-size: 13px; font-weight: 500; color: var(--ink); margin-bottom: 2px; }
.trv-geo-sub { font-size: 12px; color: var(--ink-soft); margin-bottom: 6px; line-height: 1.45; }
.trv-geo-empty { font-size: 12.5px; color: var(--ink-muted); padding: 4px 0; }

/* Spinner card (riusa il keyframe globale spin) */
.trv-spinner {
  display: inline-block; width: 14px; height: 14px;
  border: 2px solid var(--border); border-top-color: var(--primary);
  border-radius: 50%; animation: spin 0.7s linear infinite; vertical-align: middle;
}

.agency-table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-body);
  font-size: 13px;
}
.agency-table thead th {
  background: var(--cream-soft, #f5f3ec);
  padding: 12px 14px;
  text-align: left;
  font-weight: 700;
  color: var(--ink);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  cursor: pointer;
  user-select: none;
  border-bottom: 1px solid var(--border);
}
.agency-table thead th.active { color: var(--terracotta); }
.agency-table thead th:hover { background: var(--cream-deep); }
.agency-table tbody td {
  padding: 12px 14px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}
.agency-table tbody tr:last-child td { border-bottom: none; }
.agency-table tbody tr:hover { background: var(--cream-soft, #f5f3ec); }
/* Fase 5.52: colonna WordPress nella tabella agenzia */
.agency-wp { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; white-space: nowrap; }
.agency-wp-ico { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.agency-wp-on { color: var(--terracotta); }
.agency-wp-on .agency-wp-ico { background: var(--terracotta); }
.agency-wp-ok { color: var(--success, #5e7c5a); }
.agency-wp-ok .agency-wp-ico { background: var(--success, #5e7c5a); }
.agency-wp-muted { color: var(--ink-muted); font-size: 12.5px; }
/* Fase 5.99.24: stato salute connessione per sito (heartbeat). */
.agency-wp-stale { color: var(--terracotta); }
.agency-wp-stale .agency-wp-ico { background: var(--terracotta); box-shadow: 0 0 0 3px rgba(161,77,58,0.15); }
.agency-wp-seen { display: block; font-size: 10.5px; font-weight: 600; color: var(--ink-muted); margin-top: 2px; }
.agency-wp-seen-warn { color: var(--terracotta); }
[data-theme="dark"] .agency-wp-seen-warn, [data-theme="dark"] .agency-wp-stale { color: #e0a18f; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .agency-wp-seen-warn, :root:not([data-theme="light"]) .agency-wp-stale { color: #e0a18f; }
}
/* Fase 5.52: pannello fix WordPress aggregato (agenzia) */
.agency-wp-panel { margin-top: 14px; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 12px; }
.agency-wp-panel > summary { cursor: pointer; padding: 12px 16px; font-size: 13.5px; font-weight: 600; color: var(--ink); display: flex; align-items: center; gap: 8px; list-style: none; }
.agency-wp-panel > summary::-webkit-details-marker { display: none; }
.agency-wp-panel-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--terracotta); flex-shrink: 0; }
.agency-wp-panel-body { padding: 0 16px 12px; }
.agency-wp-row { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-top: 1px solid var(--border); }
.agency-wp-row-name { flex: 1; font-size: 13.5px; color: var(--ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.agency-wp-row-count { font-size: 12.5px; font-weight: 600; color: var(--terracotta); flex-shrink: 0; }
.agency-wp-row-btn { background: var(--primary-fondo); color: var(--on-dark, #fafaf7); border: none; border-radius: 10px; padding: 5px 14px; font-family: var(--font-body); font-size: 12.5px; font-weight: 600; cursor: pointer; flex-shrink: 0; }
.agency-wp-row-btn:hover { background: var(--primary-deep); }
[data-theme="dark"] .agency-wp-panel { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .agency-wp-panel { background: var(--cream-soft); } }
.agency-cell-name { display: flex; flex-direction: column; gap: 2px; }
.agency-cell-client {
  font-weight: 700;
  color: var(--ink);
  cursor: text;
}
.agency-cell-client .agency-client-edit,
.agency-cell-client .agency-client-add {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--ink-muted);
  font-size: 12px;
  padding: 0 4px;
}
.agency-cell-client .agency-client-add { color: var(--terracotta); font-weight: 500; }
.agency-cell-client .agency-client-edit:hover,
.agency-cell-client .agency-client-add:hover { color: var(--primary); }
.agency-client-input {
  font-family: var(--font-body);
  font-size: 13px;
  padding: 4px 8px;
  border: 1px solid var(--primary);
  border-radius: 6px;
  width: 100%;
  max-width: 240px;
}
.agency-cell-domain {
  font-size: 12px;
  color: var(--ink-muted);
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
}
/* Fase 5.8.6: riga dominio + badge tipo scansione. */
.agency-cell-domain-row {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
/* Categoria/settore per sito nella tabella agenzia. Solo token :root, dark-aware. */
.agency-cell-vertical-wrap { display: inline-flex; align-items: center; gap: 6px; margin-top: 6px; }
.agency-cell-vertical-lbl { font-size: 10.5px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; color: var(--ink-muted); }
.agency-cell-vertical {
  font-family: var(--font-body); font-size: 12.5px; font-weight: 600; color: var(--ink);
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 8px;
  /* padding-right largo: la freccia nativa del select occupa ~20px e con soli
     8px il testo ci finiva sotto ("Freelance / Libero professionis⌄").
     max-width: l'opzione più lunga misura 197px, +8 left +26 freccia +2 bordo
     = 233; 240 lascia margine se il font rende un filo più largo.
     min-width: 0 perché il select è un flex item dentro
     .agency-cell-vertical-wrap: col default (min-width: auto) il suo minimo è
     l'opzione più lunga, quindi non si restringe mai e a 320px sbordava dalla
     card. Con 0 può restringersi e rientra. */
  padding: 4px 26px 4px 8px; cursor: pointer; max-width: 240px; min-width: 0;
}
.agency-cell-vertical:hover { border-color: var(--primary); }
.agency-cell-vertical:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.agency-cell-vertical:disabled { opacity: 0.55; cursor: wait; }
/* Su schermi stretti label e select non ci stanno affiancati: è aritmetica,
   non estetica. A 320px la card ha 270px utili, "SETTORE" ne prende 52, quindi
   al select ne restano 212 mentre gliene servono 234 per l'opzione più lunga.
   Con la sola min-width: 0 il testo tornava tagliato, cioè il bug di partenza
   sotto altra forma. Mandando la label sopra il select prende tutti i 270px e
   il testo ci sta intero. */
@media (max-width: 480px) {
  .agency-cell-vertical-wrap { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; }
  .agency-cell-vertical { max-width: 100%; width: 100%; }
}
.agency-cell-scantype {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 99px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.02em;
  font-family: var(--font-body);
  text-transform: none;
  border: 1px solid var(--border);
  background: #fff;
}
.agency-cell-scantype-site {
  color: var(--primary);
  border-color: rgba(26, 58, 92, 0.3);
  background: rgba(26, 58, 92, 0.05);
}
.agency-cell-scantype-page {
  color: var(--ink-muted);
}
.agency-score-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 38px;
  padding: 4px 8px;
  border-radius: 6px;
  font-weight: 700;
  font-family: var(--font-head);
}
.agency-score-badge.good { color: var(--success); background: rgba(94, 124, 90, 0.1); }
.agency-score-badge.warn { color: var(--warning-ink); background: rgba(184, 115, 46, 0.1); }
.agency-score-badge.bad { color: var(--danger); background: rgba(161, 77, 58, 0.1); }
.agency-score-badge.empty { color: var(--ink-muted); }
.agency-cell-date { color: var(--ink-muted); font-size: 12.5px; white-space: nowrap; }
.agency-cell-actions { display: flex; gap: 4px; }
.agency-row-btn {
  background: none;
  border: 1px solid var(--border);
  border-radius: 6px;
  width: 30px;
  height: 30px;
  cursor: pointer;
  font-size: 14px;
  color: var(--ink-soft);
  transition: background 0.18s var(--ease), color 0.18s var(--ease);
  /* Fase 2.5.70: centra SVG inline (open/rescan/pdf) - prima il padding default
     del browser su <button> spingeva l'icona in alto/sinistra. */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  line-height: 1;
}
.agency-row-btn svg { display: block; }
.agency-row-btn:hover { background: var(--primary-fondo); color: #fff; border-color: var(--primary); }
/* Fase 5.8.3: variante "danger" per il cestino nella tabella agenzia. */
.agency-row-btn-danger:hover { background: var(--terracotta); color: #fff; border-color: var(--terracotta); }
.agency-row-btn:disabled { opacity: 0.5; cursor: not-allowed; }

/* Fase 5.8.7: popover scope per riscansiona. Posizionato assoluto sopra
   ai contenuti, sfondo bianco, ombra leggera. */
.rescan-scope-menu {
  position: absolute;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  box-shadow: 0 10px 30px rgba(15, 37, 61, 0.14);
  padding: 6px;
  z-index: 200;
  display: flex;
  flex-direction: column;
  min-width: 220px;
}
.rescan-scope-menu button {
  text-align: left;
  background: transparent;
  border: none;
  padding: 9px 12px;
  border-radius: 8px;
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink);
  cursor: pointer;
  transition: background 0.15s var(--ease);
}
.rescan-scope-menu button span {
  display: block;
  font-size: 11.5px;
  color: var(--ink-muted);
  margin-top: 2px;
  font-weight: 500;
}
.rescan-scope-menu button:hover:not(:disabled) { background: rgba(26, 58, 92, 0.06); }
.rescan-scope-menu button:disabled { opacity: 0.55; cursor: not-allowed; }

/* Mobile: tabella collassa in card.
   Fase 2.5.67: layout corretto - label e value sulla stessa riga (label left,
   value right) tranne per "Cliente" che è il titolo della card e per
   "Azioni" che è una riga bottoni full-width. */
@media (max-width: 760px) {
  .agency-metrics { grid-template-columns: 1fr; }
  .agency-metric { padding: 10px 14px; }
  .agency-metric-num { font-size: 24px; }
  .agency-table thead { display: none; }
  .agency-table, .agency-table tbody, .agency-table tr, .agency-table td { display: block; width: 100%; }
  /* Revisione 2026-07 (REGOLA CSS-3): in vista card mobile ogni tr ha già il
     suo bordo. Il wrap perde bordo e sfondo (UNA sola tecnica di separazione),
     altrimenti il contenitore disegnava un secondo bordo attorno alle card.
     Il selettore col [data-theme] serve a battere l'override dark del wrap. */
  .agency-table-wrap,
  [data-theme="dark"] .agency-table-wrap {
    background: transparent;
    border: none;
    border-radius: 0;
    overflow-x: visible;
  }
  .agency-table tr {
    background: #fff;
    border: 1px solid var(--border);
    border-radius: var(--r-sm);
    margin-bottom: 12px;
    padding: 14px 16px;
  }
  .agency-table tbody td {
    border: none;
    /* Fase 5.42: 6px -> 10px verticale: righe meno compresse in vista card mobile. */
    padding: 10px 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    font-size: 14px;
  }
  .agency-table tbody td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--ink-muted);
    font-size: 12px;
    text-transform: none;
    letter-spacing: 0;
    flex-shrink: 0;
  }
  /* "Cliente" è il titolo della card: niente label, full-width, separato */
  .agency-table tbody td[data-label="Cliente"] {
    display: block;
    border-bottom: 1px solid var(--border);
    padding-bottom: 10px;
    margin-bottom: 6px;
  }
  .agency-table tbody td[data-label="Cliente"]::before { display: none; }
  /* "Azioni" è una riga di bottoni: bottoni a destra, label a sinistra.
     Fase 5.1: rimosso border-top che generava doppio bordo sul fondo della
     card (la card ha già un bordo esterno). L'ultima riga prima di Azioni
     (data-label="Ultima scansione") perde anch'essa eventuali border-bottom
     per coerenza visiva: la card mostra UN SOLO bordo esterno. */
  .agency-table tbody td[data-label="Azioni"] {
    margin-top: 6px;
    padding-top: 10px;
    border-top: none;
  }
  .agency-table tbody td[data-label="Ultima scansione"],
  .agency-table tbody td:last-child,
  .agency-table tbody td:nth-last-child(2) {
    border-bottom: none;
  }
  .agency-cell-actions { display: flex; gap: 8px; }
}
/* Doppia forma dark (CSS-2) del fix doppio bordo mobile: l'override OS-dark del
   wrap (:root:not([data-theme=light])) ha specificità più alta, quindi va
   ribattuto con lo stesso selettore dentro la media query mobile. */
@media (max-width: 760px) and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .agency-table-wrap {
    background: transparent;
    border: none;
    border-radius: 0;
  }
}

/* Fase 2.5.59: sezione white label (piano Agenzia) in /account */
.account-agency-section[hidden] { display: none !important; }
.agency-logo-upload {
  position: relative;
  border: 2px dashed var(--border);
  border-radius: var(--r-sm);
  padding: 24px;
  cursor: pointer;
  transition: border-color 0.18s var(--ease), background 0.18s var(--ease);
  text-align: center;
  background: var(--cream-soft, #f5f3ec);
}
.agency-logo-upload:hover { border-color: var(--primary); background: var(--cream); }
.agency-logo-empty { display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--ink-muted); }
.agency-logo-empty[hidden] { display: none !important; }
.agency-logo-empty p { margin: 0; font-size: 14px; color: var(--ink-soft); font-weight: 500; }
.agency-logo-hint { font-size: 11.5px; color: var(--ink-muted); }
/* ISOLA CHIARA DELIBERATA. L'anteprima resta bianca in ENTRAMBI i temi: il logo
   di un'agenzia ha quasi sempre inchiostro scuro e su fondo scuro sparirebbe,
   quindi serve un fondo neutro. Da qui la regola per tutto ciò che ci sta
   sopra: colori FISSI, mai tematizzati. Un token che si ribalta col tema su un
   fondo che NON si ribalta non può essere corretto in entrambi i temi, ed era
   esattamente il bug (la X di rimozione stava a 1.76:1 in dark). Gli override
   dark qui sotto riaffermano il bianco apposta: dichiarano la scelta invece di
   lasciarla implicita, e sono ciò che la guardia CSS pretende di vedere. */
.agency-logo-preview {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  background: #fff;
  border-radius: var(--r-sm);
}
[data-theme="dark"] .agency-logo-preview { background: #fff; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .agency-logo-preview { background: #fff; }
}
.agency-logo-preview[hidden] { display: none !important; }
.agency-logo-preview img { max-width: 100%; max-height: 160px; object-fit: contain; }
.agency-logo-remove {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  /* Vive DENTRO l'isola bianca fissa, quindi usa i valori del tema chiaro fissi
     in entrambi i temi (vedi il commento su .agency-logo-preview). Prima il
     fondo era #fff fisso ma l'inchiostro era var(--ink-soft): in dark il testo
     schiariva mentre il fondo restava bianco, e la X spariva (1.76:1).
     I valori sono quelli dei token in tema chiaro: --border, --ink-soft,
     --terracotta. Fissi qui perché il fondo sotto non si ribalta. */
  border: 1px solid #d9d4ca;
  background: #fff;
  color: #3a3a38;
  font-size: 18px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.18s var(--ease), color 0.18s var(--ease);
}
.agency-logo-remove:hover { background: #a14d3a; color: #fff; border-color: #a14d3a; }
[data-theme="dark"] .agency-logo-remove { background: #fff; color: #3a3a38; border-color: #d9d4ca; }
[data-theme="dark"] .agency-logo-remove:hover { background: #a14d3a; color: #fff; border-color: #a14d3a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .agency-logo-remove { background: #fff; color: #3a3a38; border-color: #d9d4ca; }
  :root:not([data-theme="light"]) .agency-logo-remove:hover { background: #a14d3a; color: #fff; border-color: #a14d3a; }
}
.account-field-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 8px;
}
.account-save-btn {
  background: var(--primary-fondo);
  color: #fff;
  border: none;
  padding: 10px 18px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.account-save-btn:hover { background: #142e49; }
.account-save-btn:disabled { opacity: 0.6; cursor: not-allowed; }
.account-save-status {
  color: var(--success, #5e7c5a);
  font-size: 13px;
  font-weight: 600;
}
.account-save-status[hidden] { display: none !important; }

/* Fase 2.5.47: Zona pericolosa (cancella sub + elimina account) */
.account-danger-section .account-section-head h3 { color: var(--terracotta); }
.account-danger-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 16px 18px;
  border: 1px solid rgba(161, 77, 58, 0.25);
  background: rgba(161, 77, 58, 0.04);
  border-radius: 10px;
  margin-bottom: 12px;
}
.account-danger-row[hidden] { display: none !important; }
.account-danger-row:last-child { margin-bottom: 0; }
.account-danger-text { flex: 1; }
.account-danger-text h4 {
  font-family: var(--font-head);
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 4px;
}
.account-danger-text p {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.5;
  margin: 0;
}
.account-danger-btn {
  background: transparent;
  color: var(--terracotta);
  border: 1px solid var(--terracotta);
  padding: 9px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.18s var(--ease), color 0.18s var(--ease);
}
.account-danger-btn:hover { background: var(--terracotta); color: #fff; }
.account-danger-btn-strong {
  background: var(--terracotta);
  color: #fff;
  border-color: var(--terracotta);
}
.account-danger-btn-strong:hover { background: var(--terracotta-hover); border-color: var(--terracotta-hover); }
@media (max-width: 640px) {
  .account-danger-row { flex-direction: column; align-items: stretch; }
  .account-danger-btn { width: 100%; }
}

/* Modal conferma eliminazione account */
.account-delete-modal .account-delete-card { max-width: 480px; padding: 30px 28px 24px; position: relative; }
.account-delete-icon {
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: var(--terracotta);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 14px;
}
.account-delete-title {
  font-family: var(--font-head);
  font-size: 22px;
  font-weight: 900;
  color: var(--ink);
  margin: 0 0 10px;
  letter-spacing: -0.01em;
}
.account-delete-text { font-size: 14px; color: var(--ink-soft); line-height: 1.55; margin: 0 0 8px; }
.account-delete-note { font-size: 12.5px; color: var(--ink-muted); background: var(--cream-soft); border-radius: 10px; padding: 10px 12px; margin: 0 0 14px; }
.account-delete-list {
  list-style: none;
  padding: 0;
  margin: 8px 0 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.account-delete-list li {
  font-size: 13px;
  color: var(--ink-soft);
  padding-left: 18px;
  position: relative;
}
.account-delete-list li::before {
  content: "•";
  position: absolute;
  left: 4px;
  color: var(--terracotta);
  font-weight: 700;
}
.account-delete-password {
  width: 100%;
  padding: 11px 14px;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  margin-top: 6px;
  outline: none;
  transition: border-color 0.18s var(--ease);
}
.account-delete-password:focus { border-color: var(--terracotta); }
.account-delete-error {
  color: var(--terracotta);
  font-size: 12.5px;
  margin: 8px 0 0;
  font-weight: 500;
}
.account-delete-error[hidden] { display: none !important; }
.account-delete-actions {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  margin-top: 18px;
}
.account-delete-cancel {
  background: transparent;
  color: var(--ink-soft);
  border: 1px solid var(--border);
  padding: 10px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.account-delete-cancel:hover { background: var(--cream-soft, #f5f3ec); }
.account-delete-confirm {
  background: var(--terracotta);
  color: #fff;
  border: none;
  padding: 10px 18px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.account-delete-confirm:hover { background: var(--terracotta-hover); }
.account-delete-confirm:disabled { opacity: 0.6; cursor: not-allowed; }

/* Fase 2.5.1: Esporta dati GDPR */
.account-export {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-top: 18px;
  padding: 16px 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.account-export-text {
  flex: 1;
  min-width: 0;
}
.account-export-text h4 {
  font-family: var(--font-head);
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
  margin: 0 0 4px;
}
.account-export-text p {
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.4;
}
.account-export-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 9px 14px;
  background: var(--cream); /* Fase 5.95: era white hardcoded */
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--ink-soft);
  text-decoration: none;
  font-size: 13.5px;
  font-weight: 500;
  white-space: nowrap;
  transition: all 0.18s var(--ease);
  flex-shrink: 0;
}
.account-export-btn:hover {
  border-color: var(--terracotta);
  color: var(--terracotta);
}
@media (max-width: 540px) {
  .account-export { flex-direction: column; align-items: flex-start; }
  .account-export-btn { align-self: stretch; justify-content: center; }
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.5: Avatar picker modal
   ═══════════════════════════════════════════════════════════════ */
.avatar-picker-modal {
  position: fixed;
  inset: 0;
  /* Fase 2.5.88: z-index 10000 sopra la mobile-bottom-nav (z-index 9000).
     Prima a 200 -> bottom-nav copriva l'ultima riga di avatar (visibile
     nello screenshot utente: bullseye tagliato sotto). */
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.avatar-picker-modal[hidden] { display: none; }
.avatar-picker-overlay {
  position: absolute;
  inset: 0;
  background: rgba(15, 15, 15, 0.55);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.avatar-picker-card {
  position: relative;
  background: var(--cream);
  border-radius: var(--r-lg);
  padding: 28px;
  max-width: 480px;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  box-shadow: 0 20px 60px rgba(15, 15, 15, 0.25);
}
/* Fase 2.5.88: avatar picker mobile - approccio definitivo (4o tentativo).
   Modal z-index 10000 sopra la bottom-nav (era 200 sotto 9000 -> nav
   copriva l'ultima riga avatar). Ora il modal occupa TUTTO il viewport.
   Padding 16/24 perché nav nascosta sotto = niente spazio sprecato. */
@media (max-width: 760px) {
  .avatar-picker-modal {
    padding: 16px 16px 24px;
    align-items: flex-start;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }
  .avatar-picker-card {
    max-height: none;
    overflow: visible;
    margin: 0 auto;
  }
}
/* Fase 2.5.44: la X close è ora definita globalmente in .modal-close-x stack
   (vedi più sotto nel file). Le classi specifiche ereditano il pattern senza
   ridefinire dimensioni/colori per evitare drift visivo tra modali. */
.avatar-picker-title {
  font-family: var(--font-head);
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 6px;
  color: var(--ink);
  letter-spacing: -0.01em;
}
.avatar-picker-sub {
  font-size: 13px;
  color: var(--ink-muted);
  margin: 0 0 20px;
}
.avatar-picker-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  /* Fase 2.5.32: padding per evitare che lo :hover/.selected scale(1.05)
     faccia uscire gli avatar dai bordi della card (clipping visibile su mobile
     dove la griglia è più stretta). */
  padding: 4px;
}
.avatar-picker-item {
  /* Fase 5.25: dimensione uniforme + niente shift su hover/selected.
     Lo scale(1.05) di prima causava 2 problemi:
     1) avatar di dimensioni leggermente diverse fra normale e hover/selected
     2) "mini spazio vuoto" intorno all'avatar scalato per via del padding
        del grid cell che non si scalava insieme.
     Sostituito con outline esterno (non occupa layout) + box-shadow su hover. */
  width: 100%;
  aspect-ratio: 1;
  border-radius: 50%;
  overflow: hidden;
  border: 2px solid transparent;
  outline: 0;
  background: var(--cream-soft);
  cursor: pointer;
  padding: 0;
  transition: border-color 0.18s var(--ease), box-shadow 0.18s var(--ease), outline-color 0.18s var(--ease);
}
.avatar-picker-item:hover {
  border-color: var(--ink-muted);
  box-shadow: 0 4px 12px rgba(15, 37, 61, 0.10);
}
.avatar-picker-item.selected {
  border-color: var(--terracotta);
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
/* Fase 2.5.32: griglia avatar responsive. 4 colonne su desktop diventano
   troppo strette su mobile (cerchi schiacciati e tagliati al bordo card). */
@media (max-width: 540px) {
  .avatar-picker-grid { grid-template-columns: repeat(3, 1fr); gap: 14px; }
}
@media (max-width: 380px) {
  .avatar-picker-grid { grid-template-columns: repeat(2, 1fr); gap: 16px; }
}
.avatar-picker-item svg {
  width: 100%;
  height: 100%;
  display: block;
  /* Fase 2.5.42: alcuni avatar templates avevano contenuti SVG che sforavano
     il viewBox (rombi, triangoli posizionati ai bordi); siccome SVG ha
     overflow:visible di default, il contenuto era visibile FUORI dal cerchio
     mentre il container .avatar-picker-item con overflow:hidden + border-radius
     lo clippava per metà → sembrava "tagliato". Forziamo overflow:hidden anche
     sullo svg per chiudere il contenuto al viewBox. */
  overflow: hidden;
}

/* Fase 2.5.2: confirm delete modal */
.confirm-delete-card {
  max-width: 460px;
}
.confirm-delete-list-wrap {
  margin: 18px 0 22px;
  padding: 14px 16px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.confirm-delete-list-label {
  font-size: 11.5px;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
  margin-bottom: 6px;
}
.confirm-delete-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.confirm-delete-list li {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--danger);
  padding: 4px 0;
  font-weight: 500;
}
.confirm-delete-actions {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
}
.confirm-delete-ok {
  background: var(--danger);
}
.confirm-delete-ok:hover {
  background: #8a4030;
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.2: Sezione "I tuoi siti" + strip "Ultima analisi"
   ═══════════════════════════════════════════════════════════════ */
.user-sites {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 18px 20px;
  margin-bottom: 14px;
}
.user-sites-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 12px;
}
.user-sites-title {
  font-family: var(--font-head);
  font-size: 18px;
  color: var(--ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.user-sites-count {
  font-size: 12px;
  color: var(--ink-muted);
}
.user-sites-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 8px;
}
.user-sites-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap; /* Fase 2.5.53: permette alla riga meta di wrappare sotto */
  gap: 12px;
  /* Fase 5.51: più respiro verticale e orizzontale nelle righe sito. */
  padding: 14px 16px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 10px;
  cursor: pointer;
  transition: border-color 0.18s var(--ease), transform 0.18s var(--ease), opacity 0.25s var(--ease);
  text-align: left;
  width: 100%;
  font-family: inherit;
  font-size: 13.5px;
  color: var(--ink-soft);
  position: relative;
}
/* Fase 5.7: animazione fade-out dopo DELETE sito */
.user-sites-row.is-removing { opacity: 0; transform: translateY(-4px) scale(0.98); pointer-events: none; }

/* Fase 5.7: wrapper card + cestino.
   Fase 5.8.2: ridisegnato per evitare il doppio bordo (row con border 1px +
   trash con border 1px erano 2 bordi visivi affiancati). Ora il wrapper
   .user-sites-item ha l'UNICO bordo esterno; la row interna perde border e
   il trash è ghost. Single border, visivamente pulito. */
.user-sites-item {
  position: relative;
  display: flex;
  align-items: stretch;
  gap: 0;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  transition: border-color 0.18s var(--ease), transform 0.18s var(--ease), opacity 0.25s var(--ease);
}
.user-sites-item.is-removing { opacity: 0; transform: translateY(-4px) scale(0.98); pointer-events: none; }
.user-sites-item:hover { border-color: var(--terracotta); transform: translateY(-1px); }
.user-sites-item .user-sites-row {
  flex: 1;
  min-width: 0;
  padding-right: 8px;
  border: none !important;
  background: transparent;
  border-radius: 0;
  transition: none;
}
.user-sites-item .user-sites-row:hover { transform: none; border: none; }
.user-sites-trash-btn {
  flex-shrink: 0;
  width: 44px;
  min-width: 44px;
  align-self: stretch;
  min-height: 44px;
  border-radius: 0 10px 10px 0;
  border: none;
  border-left: 1px solid var(--border);
  background: transparent;
  color: var(--ink-muted);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: color 0.18s var(--ease), background 0.18s var(--ease);
}
.user-sites-trash-btn:hover,
.user-sites-trash-btn:focus-visible {
  color: var(--terracotta);
  background: rgba(161, 77, 58, 0.06);
  outline: none;
}
.user-sites-trash-btn svg { display: block; }

/* Conferma inline rimozione: occupa la stessa altezza della card, sostituisce
   il contenuto invece di apparire come modal. */
.user-sites-confirm {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  padding: 12px 14px;
  background: rgba(161, 77, 58, 0.06);
  border: 1px solid var(--terracotta);
  border-radius: 10px;
  font-size: 13.5px;
  color: var(--ink);
  transition: opacity 0.25s var(--ease);
}
.user-sites-confirm.is-removing { opacity: 0; pointer-events: none; }
.user-sites-confirm-text { flex: 1; min-width: 200px; }
.user-sites-confirm-actions { display: flex; gap: 8px; flex-shrink: 0; }
.user-sites-confirm-btn {
  padding: 8px 14px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  border: 1px solid var(--border);
  background: #fff;
  color: var(--ink);
  transition: background 0.18s var(--ease), color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.user-sites-confirm-btn:hover { background: var(--cream-deep); }
.user-sites-confirm-btn-danger {
  background: var(--terracotta);
  color: #fff;
  border-color: var(--terracotta);
}
.user-sites-confirm-btn-danger:hover { background: #8a3f2f; border-color: #8a3f2f; }

/* Fase 5.7: pannello "+ Aggiungi sito" sopra la lista. */
.sites-manage { margin-bottom: 12px; }
.sites-manage[hidden] { display: none !important; }
.sites-manage-add-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 14px;
  border-radius: 10px;
  border: 1px dashed var(--border);
  background: #fff;
  color: var(--primary);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease);
}
.sites-manage-add-btn:hover:not(:disabled) {
  background: rgba(26, 58, 92, 0.04);
  border-color: var(--primary);
}
.sites-manage-add-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.sites-manage-add-cap { color: var(--ink-muted); font-weight: 500; font-size: 12px; margin-left: 6px; }
.sites-manage-add-form {
  display: flex;
  align-items: stretch;
  gap: 8px;
  margin-top: 10px;
  flex-wrap: wrap;
  position: relative;
}
.sites-manage-add-form[hidden] { display: none !important; }
.sites-manage-add-form input {
  flex: 1;
  min-width: 200px;
  padding: 10px 14px;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink);
  background: #fff;
}
.sites-manage-add-form input:focus {
  outline: 2px solid var(--terracotta);
  outline-offset: 0;
  border-color: var(--terracotta);
}
.sites-manage-add-submit {
  padding: 10px 16px;
  border-radius: 10px;
  border: 1px solid var(--primary);
  background: var(--primary-fondo);
  color: #fff;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.sites-manage-add-submit:hover:not(:disabled) { background: #142e49; }
.sites-manage-add-submit:disabled { opacity: 0.6; cursor: not-allowed; }
.sites-manage-add-cancel {
  width: 40px;
  height: 40px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: #fff;
  color: var(--ink-muted);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.sites-manage-add-cancel:hover { color: var(--ink); border-color: var(--ink-muted); }
.sites-manage-add-err {
  flex-basis: 100%;
  font-size: 13px;
  color: var(--terracotta);
  margin-top: 4px;
}
.sites-manage-add-err[hidden] { display: none !important; }

@media (max-width: 540px) {
  .sites-manage-add-btn { width: 100%; justify-content: center; }
  .sites-manage-add-form input { font-size: 16px; min-width: 0; flex-basis: 100%; }
  .sites-manage-add-submit { flex: 1; }
  .user-sites-item { gap: 8px; }
  .user-sites-trash-btn { min-width: 44px; }
  .user-sites-confirm-actions { width: 100%; }
  .user-sites-confirm-btn { flex: 1; min-height: 44px; }
}
.user-sites-row:hover {
  border-color: var(--terracotta);
  transform: translateY(-1px);
}
/* Fase 5.70: la lista "I tuoi siti" vive DENTRO il widget bianco bordato
   (.dashboard-widget). Le card sito avevano un secondo bordo bianco -> doppio
   bordo, evidente su mobile dove il padding si stringe. Dentro il widget le
   card usano uno sfondo soft (che le distingue dal pannello in light e dark)
   senza bordo a riposo; il bordo terracotta compare solo all'hover. La card
   "aggiungi/scansiona" (dashed) resta visibile. */
.dashboard-sites-list .user-sites-row,
.dashboard-sites-list .user-sites-item {
  background: var(--cream-soft);
  border-color: transparent;
}
.dashboard-sites-list .user-sites-item .user-sites-row { background: transparent; }
.dashboard-sites-list .user-sites-row:hover,
.dashboard-sites-list .user-sites-item:hover { border-color: var(--terracotta); }
.dashboard-sites-list .user-sites-row-new { border-color: var(--border); background: rgba(161, 77, 58, 0.04); }
[data-theme="dark"] .dashboard-sites-list .user-sites-row,
[data-theme="dark"] .dashboard-sites-list .user-sites-item { background: var(--cream-deep); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dashboard-sites-list .user-sites-row,
  :root:not([data-theme="light"]) .dashboard-sites-list .user-sites-item { background: var(--cream-deep); }
}
.user-sites-row:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
.user-sites-domain {
  flex: 1;
  color: var(--ink);
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Il punteggio come anello: una cifra dice il valore, un anello dice anche
   quanto manca. La percentuale arriva in --p dal rendering, il disegno resta
   qui. Chi non ha ancora un punteggio (--) non ha anello: un cerchio vuoto
   sembrerebbe uno zero. */
/* Anello del punteggio. Una cifra dice il valore, l'anello dice anche quanto
   manca: si legge come quantità invece che come numero da interpretare.
   Le due liste, quella normale e la tabella agenzia, condividono le stesse
   righe: un anello disegnato due volte diventa due anelli diversi al primo
   ritocco. Cambia solo la misura, che nella tabella è più stretta perché li'
   le righe sono sette e non tre. */
.user-sites-score:not(.empty),
.agency-score-badge:not(.empty) {
  position: relative;
  display: inline-grid;
  place-items: center;
  width: var(--anello-d, 46px); height: var(--anello-d, 46px);
  min-width: 0;
  padding: 0;
  flex: 0 0 auto;
  font-family: var(--font-head);
  font-weight: 700;
  font-size: var(--anello-testo, 15px);
  border-radius: 50%;
  background: conic-gradient(currentColor calc(var(--p, 0) * 1%), var(--cream-deep) 0);
}
.agency-score-badge:not(.empty) { --anello-d: 36px; --anello-testo: 13px; }
.user-sites-score:not(.empty)::before,
.agency-score-badge:not(.empty)::before {
  content: "";
  position: absolute;
  inset: 4px;
  border-radius: 50%;
  background: var(--cream);
}
.uss-num { position: relative; z-index: 1; }
.user-sites-score.empty {
  /* Senza punteggio niente anello: un cerchio vuoto si legge come uno zero,
     cioè come il peggior punteggio possibile, e un sito mai scansionato non
     merita quel messaggio. Resta la pillola, che dice "non lo so ancora". */
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--cream-deep);
  width: auto; height: auto;
  border-radius: 6px;
  padding: 2px 8px;
  min-width: 56px;
}
@media (prefers-reduced-motion: reduce) { .user-sites-score { transition: none; } }

[data-theme="dark"] .user-sites-score:not(.empty)::before,
[data-theme="dark"] .agency-score-badge:not(.empty)::before { background: var(--cream); }
[data-theme="dark"] .user-sites-score.empty { background: var(--cream-deep); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .user-sites-score:not(.empty)::before,
  :root:not([data-theme="light"]) .agency-score-badge:not(.empty)::before { background: var(--cream); }
  :root:not([data-theme="light"]) .user-sites-score.empty { background: var(--cream-deep); }
}
.user-sites-score.good { color: var(--success); }
.user-sites-score.warn { color: var(--warning-ink); }
.user-sites-score.bad  { color: var(--danger); }
/* Fase 2.5.55 fix: stato "mai scansionato" (--) usa stesso peso/font dei
   numerici, niente colore di errore. Solo muted. */
.user-sites-score.empty { color: var(--ink-muted); }
.user-sites-date {
  font-size: 12px;
  color: var(--ink-muted);
  white-space: nowrap;
  /* Larghezza stabile e testo a destra: così le date, le frecce e soprattutto
     gli anelli del punteggio restano incolonnati fra una riga e l'altra.
     I 74px di prima non bastavano: la stringa più larga che questa funzione
     sa produrre è "4 settimane fa", misurata 81px, e le righe con quella data
     spingevano l'anello 7px più a sinistra delle altre. */
  min-width: 84px;
  text-align: right;
}
.user-sites-arrow {
  color: var(--ink-muted);
  font-size: 16px;
  width: 16px;
  text-align: center;
  flex-shrink: 0;
  transition: transform 0.18s var(--ease);
}
.user-sites-row:hover .user-sites-arrow {
  color: var(--terracotta);
  transform: translateX(3px);
}

/* Fase 2.5.54: testo issue muted sotto al titolo della card AI personalizzata.
   Mostra la issue reale che la card sta risolvendo. */
.dashboard-ai-card-issue {
  font-size: 12.5px !important;
  color: var(--ink-muted) !important;
  font-style: italic;
  margin-top: -2px !important;
}

/* Fase 2.5.54: badge delta score (+N / -N) accanto al punteggio card sito.
   Inter 11px peso 600, padding 2px 6px, border-radius 4px, sfondo tenue
   della stessa tinta. Verde se migliora, rosso se peggiora, niente badge
   se uguale o se prev_score è null (primo audit). */
.user-sites-delta {
  display: inline-flex;
  align-items: center;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  padding: 2px 6px;
  border-radius: 4px;
  margin-left: 6px;
  letter-spacing: 0.02em;
}
.user-sites-delta-up {
  color: var(--success, #5e7c5a);
  background: rgba(94, 124, 90, 0.12);
}
.user-sites-delta-down {
  color: var(--danger, #a14d3a);
  background: rgba(161, 77, 58, 0.12);
}

/* Fase 2.5.53: riga meta "Ultimo controllo automatico" sotto ogni card sito.
   Inter 12px ink-muted, flex-basis 100% per wrappare su riga propria sotto
   agli altri elementi (.user-sites-row è display:flex con flex-wrap). */
.user-sites-weekly-meta {
  flex: 0 0 100%;
  width: 100%;
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 400;
  color: var(--ink-muted);
  margin-top: 6px;
  padding-top: 8px;
  border-top: 1px dashed rgba(15, 37, 61, 0.08);
}

/* Fase 2.5.2: label SITO PRINCIPALE + CTA Scansiona ora per siti mai scansionati */
.user-sites-primary-label {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 7px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  font-family: var(--font-body);
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: 0.05em;
  border-radius: 4px;
  vertical-align: middle;
}
.user-sites-row-new {
  border: 1px dashed var(--border);
  background: rgba(161, 77, 58, 0.04);
}
.user-sites-row-new:hover {
  background: rgba(161, 77, 58, 0.08);
  border-color: var(--terracotta);
}
.user-sites-cta-scan {
  font-family: var(--font-body);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--terracotta);
  white-space: nowrap;
}
.user-sites-new {
  background: transparent;
  border: 1px dashed var(--border);
  border-radius: 10px;
  padding: 10px 12px;
  color: var(--ink-muted);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  width: 100%;
  text-align: center;
  transition: all 0.18s var(--ease);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
.user-sites-new:hover {
  border-color: var(--ink-muted);
  color: var(--ink);
  background: white;
}
.user-sites-new-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}

/* Strip "Ultima analisi" sopra le tab nei risultati */
.audit-history-strip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 10px 16px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  margin-bottom: 18px;
  font-size: 13.5px;
  color: var(--ink-soft);
}
/* Fase 2.5.5 fix: l'attributo HTML hidden veniva sovrascritto da display:flex.
   Lo strip "Ultima analisi" appariva quindi vuoto dopo ogni audit fresco.
   Forzo display:none quando hidden è presente. */
.audit-history-strip[hidden] { display: none !important; }
.audit-history-text {
  display: flex;
  align-items: center;
  gap: 8px;
}
.audit-history-text strong { color: var(--ink); font-weight: 600; }
.audit-history-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--ink-muted);
  flex-shrink: 0;
}
.audit-history-rerun {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  padding: 8px 14px;
  border-radius: 10px;
  font-weight: 500;
  font-size: 13px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.audit-history-rerun:hover { background: var(--primary-fondo); }

/* ═══════════════════════════════════════════════════════════════
   Fase 2: Auth UI (modal accedi/registrati + reset + header utente)
   ═══════════════════════════════════════════════════════════════ */

/* Nav: bottoni auth */
.nav-auth {
  display: flex;
  align-items: center;
  gap: 10px;
}
.nav-auth-link {
  background: transparent;
  border: none;
  color: var(--ink-soft);
  font-size: 13.5px;
  font-weight: 500;
  cursor: pointer;
  padding: 6px 10px;
  border-radius: 8px;
  transition: color 0.18s var(--ease), background 0.18s var(--ease);
}
.nav-auth-link:hover { color: var(--ink); background: var(--cream-soft); }
.nav-auth-cta {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  padding: 8px 14px;
  border-radius: 10px;
  font-weight: 500;
  font-size: 13.5px;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.18s var(--ease);
}
.nav-auth-cta:hover { background: var(--primary-fondo); transform: translateY(-1px); }

/* Nav: chip utente loggato */
.nav-user {
  display: flex;
  align-items: center;
  gap: 10px;
  /* Fase 2.5.63: quando nav-links sono nascosti (dashboard, mobile, loggati)
     spingi nav-user e nav-test-mode-wrap a destra invece di farli galleggiare
     al centro per via di justify-content: space-between. */
  margin-left: auto;
}
.nav-test-mode-wrap {
  /* Fase 2.5.63: idem nav-user, deve restare in fondo a destra anche senza
     nav-links. Su mobile la pill va a capo (flex-basis:100% + order:99). */
  margin-left: 8px;
}
.nav-user-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cream-soft);
  padding: 6px 12px;
  border-radius: 99px;
  border: 1px solid var(--border);
  font-size: 13px;
  color: var(--ink-soft);
}
.nav-user-dot {
  width: 7px; height: 7px;
  background: var(--success);
  border-radius: 50%;
  display: inline-block;
}
.nav-user-email {
  font-weight: 500;
  color: var(--ink);
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.3: Dropdown impostazioni account (icona ⚙ + menu)
   ═══════════════════════════════════════════════════════════════ */
.nav-account-menu {
  position: relative;
}
.nav-account-btn {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-muted);
  width: 32px;
  height: 32px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease), background 0.18s var(--ease);
  padding: 0;
}
.nav-account-btn:hover {
  color: var(--ink);
  border-color: var(--ink-soft);
  background: var(--cream-soft);
}
.nav-account-btn[aria-expanded="true"] {
  color: var(--ink);
  border-color: var(--ink-soft);
  background: var(--cream-soft);
}
.nav-account-btn:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
.nav-account-dropdown {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  min-width: 240px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 12px 36px rgba(15, 15, 15, 0.12);
  padding: 8px;
  z-index: 100;
  animation: dropdownIn 0.18s var(--ease);
}
.nav-account-dropdown[hidden] { display: none; }
@keyframes dropdownIn {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: translateY(0); }
}
.nav-account-dropdown-header {
  padding: 10px 12px 12px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 6px;
}
.nav-account-dropdown-email {
  font-size: 13px;
  color: var(--ink);
  font-weight: 500;
  word-break: break-all;
  line-height: 1.3;
}
.nav-account-dropdown-plan {
  font-size: 11.5px;
  color: var(--ink-muted);
  margin-top: 4px;
}
.nav-account-dropdown-plan strong {
  color: var(--terracotta);
  font-weight: 600;
  text-transform: capitalize;
}
.nav-account-dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 12px;
  background: transparent;
  border: none;
  border-radius: 8px;
  font-size: 13.5px;
  font-family: inherit;
  color: var(--ink-soft);
  cursor: pointer;
  text-align: left;
  text-decoration: none;
  transition: background 0.15s var(--ease), color 0.15s var(--ease);
}
.nav-account-dropdown-item:hover {
  background: var(--cream-soft);
  color: var(--ink);
}
.nav-account-dropdown-item:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: -2px;
}
.nav-account-dropdown-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  color: var(--ink-muted);
}
.nav-account-dropdown-item:hover .nav-account-dropdown-icon {
  color: var(--ink);
}
.nav-account-dropdown-danger .nav-account-dropdown-icon {
  color: var(--danger);
}
.nav-account-dropdown-soon {
  margin-left: auto;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ink-muted);
  background: var(--cream-deep);
  padding: 2px 7px;
  border-radius: 99px;
  font-weight: 500;
}
.nav-account-dropdown-sep {
  height: 1px;
  background: var(--border);
  margin: 6px 4px;
}
.nav-account-dropdown-danger {
  color: var(--danger);
}
.nav-account-dropdown-danger:hover {
  background: rgba(161, 77, 58, 0.08);
  color: var(--danger);
}
@media (max-width: 760px) {
  .nav-account-dropdown {
    min-width: 220px;
    /* Fase 2.5.63: evita overflow viewport su mobile (dropdown a destra del
       chip può superare il bordo sinistro se il chip è troppo a sinistra). */
    max-width: calc(100vw - 24px);
    right: 12px;
  }
  /* Fase 2.5.63: header dropdown row può troncare il nome utente lungo */
  .nav-account-dropdown-name { word-break: break-word; }
  .nav-account-dropdown-email { font-size: 12px; }
  .nav-account-dropdown-plan { font-size: 11px; }
}

/* Modal auth */
.auth-modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.auth-modal[hidden] { display: none; }
.auth-modal-overlay {
  position: absolute;
  inset: 0;
  background: rgba(15, 15, 15, 0.45);
  backdrop-filter: blur(2px);
}
.auth-modal-card {
  position: relative;
  background: white;
  border-radius: var(--r-lg);
  width: 100%;
  max-width: 420px;
  padding: 32px;
  box-shadow: 0 24px 64px rgba(15, 15, 15, 0.20);
  max-height: 90vh;
  overflow-y: auto;
}
/* Fase 2.5.44: auth-modal-close ora eredita stile da .modal-close-x stack
   (size 34px, border, hover rotate). Vedi blocco unificato CSS più sotto. */

.auth-modal-tabs {
  display: flex;
  border-bottom: 1px solid var(--border);
  margin-bottom: 18px;
  gap: 4px;
}
.auth-modal-tab {
  flex: 1;
  background: transparent;
  border: none;
  padding: 10px 14px;
  cursor: pointer;
  color: var(--ink-muted);
  font-size: 14px;
  font-weight: 500;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.auth-modal-tab:hover { color: var(--ink-soft); }
.auth-modal-tab.active {
  color: var(--ink);
  border-bottom-color: var(--terracotta);
}

.auth-modal-title {
  font-family: var(--font-head);
  font-size: 24px;
  color: var(--ink);
  margin: 0 0 16px;
  letter-spacing: -0.01em;
}

.auth-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.auth-field {
  display: flex;
  flex-direction: column;
  /* Fase 5.42: 4px -> 6px per coerenza con .account-field (era 6px). */
  gap: 6px;
}
.auth-field span {
  font-size: 12.5px;
  font-weight: 500;
  color: var(--ink-soft);
}
.auth-field input {
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 14px;
  font-family: var(--font-body);
  color: var(--ink);
  background: white;
  transition: border-color 0.18s var(--ease);
}
.auth-field input:focus {
  outline: none;
  border-color: var(--terracotta);
}
.auth-hint {
  font-size: 11.5px;
  color: var(--ink-muted);
  font-style: normal;
  margin-top: 2px;
}

.auth-error {
  font-size: 13px;
  color: var(--danger);
  min-height: 1.4em;
  padding: 0 2px;
}
.auth-error:empty { display: none; }

.auth-submit {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  padding: 12px 16px;
  border-radius: 10px;
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  margin-top: 4px;
  transition: background 0.18s var(--ease);
}
.auth-submit:hover { background: var(--primary-fondo); }
.auth-submit:disabled { opacity: 0.5; cursor: not-allowed; }

.auth-link {
  background: transparent;
  border: none;
  color: var(--terracotta);
  font-size: 13px;
  cursor: pointer;
  text-decoration: underline;
  padding: 6px;
  text-align: center;
}
.auth-link:hover { color: var(--ink); }

.auth-fineprint {
  font-size: 12px;
  color: var(--ink-muted);
  text-align: center;
  margin: 8px 0 0;
}
.auth-intro {
  font-size: 13.5px;
  color: var(--ink-soft);
  margin: 0 0 6px;
  line-height: 1.5;
}
.auth-success h3 {
  font-family: var(--font-head);
  font-size: 18px;
  color: var(--ink);
  margin: 0 0 10px;
}
.auth-success p {
  font-size: 13.5px;
  color: var(--ink-soft);
  margin: 0 0 12px;
  line-height: 1.5;
}

/* Reset password panel (pagina dedicata quando ?token=) */
/* Fase 5: header brandizzato + card centrata + tipografia coerente brand */
.reset-panel {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 60px 20px 40px;
  /* Fondo di una pagina intera: deve ribaltarsi col tema, altrimenti in scuro
     resta una lastra chiara con sopra il testo chiaro del form. */
  background: var(--cream-soft);
}
.reset-panel[hidden] { display: none !important; }
.reset-panel-inner {
  width: 100%;
  max-width: 400px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
}
.reset-panel-brand { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.reset-panel-brand img { display: block; width: 120px; height: auto; }
.reset-card {
  width: 100%;
  background: #ffffff;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 32px 28px;
  box-shadow: var(--shadow);
  text-align: left;
}
.reset-card-title {
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
.reset-card-sub {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-soft);
  margin: 0 0 20px;
  line-height: 1.5;
}
.reset-submit { width: 100%; }
.reset-success { margin-top: 14px; text-align: center; }
.reset-success p { font-family: var(--font-body); color: var(--ink-soft); margin: 0 0 10px; font-size: 14px; }
.reset-success-link {
  display: inline-block;
  font-family: var(--font-body);
  font-weight: 600;
  color: var(--primary);
  text-decoration: none;
  font-size: 14px;
}
.reset-success-link:hover { text-decoration: underline; }
@media (max-width: 540px) {
  .reset-panel { padding: 40px 20px 30px; }
  .reset-card { padding: 24px 20px; }
  .reset-card-title { font-size: 22px; }
}

/* Quando un'utente è loggato, nascondiamo il CTA "Prova gratis" della navbar
   (resta visibile per i visitatori anonimi). */
body.is-logged-in #navAuthLoggedOut { display: none; }
body:not(.is-logged-in) #navAuthLoggedIn { display: none; }
/* Fase 2.5.32: quando loggato, nascondo le ancore Problema/SEO+GEO/Soluzione/
   Piani/FAQ. Sono navigazione marketing della landing, irrilevanti per un
   utente registrato che vive in /dashboard. Per tornare alla home c'è il
   logo (brand-mark) che funziona da entry point. */
body.is-logged-in .nav-links { display: none; }
/* Fase 2.5.32: anti-flash. Finché /api/auth/me non ha risolto, NON mostrare
   nav-links ne' bottoni auth: lo stato auth è indeterminato e renderizzare
   nav-links per poi nasconderli (se utente loggato) crea un flash visibile.
   La classe .auth-resolved viene aggiunta da setLoggedIn / setLoggedOut. */
body:not(.auth-resolved) .nav-links,
body:not(.auth-resolved) #navAuthLoggedOut,
body:not(.auth-resolved) #navAuthLoggedIn { visibility: hidden; }

@media (max-width: 760px) {
  .nav-auth-link, .nav-user-chip { font-size: 12.5px; padding: 4px 8px; }
  .nav-auth-cta { font-size: 12.5px; padding: 6px 10px; }
  .auth-modal-card { padding: 24px; }
}

/* Fase 2.20: selector settore PRE-audit (facoltativo, collapsible).
   Stile coerente: details accordion come gli altri (hero-explain, pd-toggle).
   Apertura animata col pattern già esistente (max-height + opacity). */
/* Fase 2.5.22: sector-prepicker riscritto. Era un <details> sempre presente nel
   flusso. Ora è un container nascosto di default che appare al focus dell'input
   URL (progressive disclosure). Aggiunta spiegazione esplicita di cosa fa la
   scelta del settore. */
.sector-prepicker {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  margin-top: 12px;
  padding: 14px 16px;
  font-size: 13.5px;
  /* Nascosto fino al primo focus sull'input URL */
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  padding-top: 0;
  padding-bottom: 0;
  margin-top: 0;
  border-color: transparent;
  transition: max-height 0.4s var(--ease), opacity 0.3s var(--ease),
              padding 0.3s var(--ease), margin 0.3s var(--ease), border-color 0.3s var(--ease);
}
.sector-prepicker[data-revealed="true"] {
  max-height: 360px;
  opacity: 1;
  padding: 14px 16px;
  margin-top: 12px;
  border-color: var(--border);
}
.sector-prepicker-explain {
  margin-bottom: 12px;
}
.sector-prepicker-explain strong {
  color: var(--ink);
  font-weight: 600;
}
.sector-prepicker-optional {
  color: var(--ink-muted);
  font-size: 12px;
  margin-left: 6px;
  font-weight: 400;
}
.sector-prepicker-why {
  margin: 6px 0 0;
  font-size: 12.5px;
  color: var(--ink-muted);
  line-height: 1.55;
}
.sector-prepicker-options {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.sector-prepicker-options button {
  padding: 7px 12px;
  border-radius: 99px;
  border: 1px solid var(--border);
  background: white;
  color: var(--ink-soft);
  font-size: 12.5px;
  cursor: pointer;
  transition: all 0.2s var(--ease);
}
.sector-prepicker-options button:hover {
  border-color: var(--ink-muted);
  color: var(--ink);
}
.sector-prepicker-options button.active {
  background: var(--ink);
  color: var(--on-dark);
  border-color: var(--ink);
}
.sector-prepicker-chosen {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: 13px;
  color: var(--ink-soft);
}
.sector-prepicker-chosen strong { color: var(--ink); }
.sector-prepicker-chosen button {
  margin-left: auto;
  background: transparent;
  border: none;
  color: var(--terracotta);
  font-size: 12px;
  cursor: pointer;
  text-decoration: underline;
}

.hero-form {
  display: flex;
  gap: 8px;
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 8px;
  box-shadow: var(--shadow);
  max-width: 540px;
}
.hero-form input {
  flex: 1;
  border: none;
  outline: none;
  padding: 14px 16px;
  font-size: 15px;
  background: transparent;
  min-width: 0;
}
.hero-form input::placeholder { color: var(--ink-muted); }
.hero-form button {
  background: linear-gradient(135deg, var(--primary-fondo) 0%, var(--terracotta) 100%);
  background-size: 200% 100%;
  background-position: 0% 0%;
  color: white;
  padding: 14px 28px;
  border-radius: 10px;
  font-weight: 600;
  font-size: 15px;
  transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease), background-position 0.6s var(--ease);
  white-space: nowrap;
  position: relative;
}
.hero-form button:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 28px -8px rgba(161, 77, 58, 0.55);
  background-position: 100% 0%;
}
.hero-form button:active {
  transform: translateY(0);
  box-shadow: 0 4px 12px -4px rgba(161, 77, 58, 0.4);
}
.hero-form button:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  transform: none;
}
@media (max-width: 540px) {
  .hero-form { flex-direction: column; padding: 6px; }
  .hero-form button { width: 100%; }
}

/* Fase 5.13 / 5.25.1: riga prezzo piccola sotto il form hero.
   Allineato a sinistra (come il form e tutto il contenuto dell'hero column)
   con padding-left che matcha il padding interno del form, così il testo
   parte sotto la "i" di "ilmiosito.it" e non centrato in modo ambiguo. */
.hero-price-hint {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
  text-align: left;
  margin: 12px 0 0;
  padding-left: 4px;
  line-height: 1.5;
}
.hero-price-hint a {
  color: var(--terracotta);
  text-decoration: underline;
  text-underline-offset: 2px;
  font-weight: 500;
}
.hero-price-hint a:hover { color: var(--primary); }

.hero-trust {
  display: flex;
  gap: 24px;
  margin-top: 24px;
  font-size: 13px;
  color: var(--ink-muted);
  flex-wrap: wrap;
}
.hero-trust span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.hero-trust span::before {
  content: "✓";
  color: var(--success);
  font-weight: 700;
}

/* Fase 2.5.22: sezione dedicata "Lo stanno usando" spostata dalla hero a una
   sua sezione full-width tra trust-strip e problema. Le quote ora hanno spazio
   per respirare in 3 colonne su desktop, 1 colonna su mobile. */
.social-proof {
  padding: 80px 0 60px;
}
.social-proof-head {
  text-align: center;
  margin-bottom: 40px;
  max-width: 640px;
  margin-left: auto;
  margin-right: auto;
}
.social-proof-title {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  letter-spacing: -0.025em;
  color: var(--ink);
  margin: 8px 0 12px;
  line-height: 1.15;
}
.social-proof-sub {
  font-size: 15px;
  color: var(--ink-soft);
  line-height: 1.55;
  margin: 0;
}
.social-proof-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.social-proof-quote {
  display: flex;
  flex-direction: column;
  /* Fase 5.25: no gap fra figli (il margin-top:auto su .social-proof-attr
     gestisce lo spazio). gap creava distanze inconsistenti tra carte. */
  padding: 20px 22px;
  background: white;
  border: 1px solid var(--border);
  border-left: 3px solid var(--terracotta);
  border-radius: 12px;
  height: 100%;
  transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease);
}
.social-proof-quote:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(15, 37, 61, 0.08);
}
.social-proof-quote p {
  margin: 0 0 16px;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink);
  font-style: italic;
  /* Fase 5.25: flex:1 spinge .social-proof-attr in fondo così i nomi sono
     visivamente allineati alla stessa Y in tutte e 3 le card. */
  flex: 1;
}
.social-proof-attr {
  font-size: 12.5px;
  color: var(--ink-muted);
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  border-top: 1px solid var(--border);
  padding-top: 12px;
  margin-top: auto;
}
.social-proof-attr strong {
  color: var(--ink);
  font-weight: 600;
  font-style: normal;
}
.social-proof-beta {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--terracotta);
  background: rgba(161, 77, 58, 0.08);
  border: 1px solid rgba(161, 77, 58, 0.2);
  border-radius: 99px;
  margin-left: auto;
}
.social-proof-beta::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 99px;
  background: var(--terracotta);
}
@media (max-width: 920px) {
  .social-proof-grid { grid-template-columns: 1fr; gap: 16px; max-width: 560px; margin-left: auto; margin-right: auto; }
}
@media (max-width: 540px) {
  .social-proof { padding: 56px 0 40px; }
  .social-proof-title { font-size: 26px; }
  .social-proof-quote { padding: 18px 18px; }
}

/* Demo audit: link secondario "guarda un esempio reale" sotto la CTA primaria
   (sottotono, non compete con il bottone principale) + banner in cima ai
   risultati. Colori via var() -> si adattano in dark mode senza override. */
/* Revisione 2026-07: stack coerente sotto la CTA: stessa size (13px) e stesso
   ritmo verticale (6px) di trust-line e agency-link. */
.hero-demo-line { margin-top: 6px; font-family: var(--font-body); font-size: 13px; color: var(--ink-muted); }
.hero-demo-line:hover { color: var(--ink); }
#loadDemoBtn { background: none; border: 0; padding: 0; margin: 0; font: inherit; color: inherit; cursor: pointer; text-decoration: underline; }
.demo-banner { display: flex; align-items: center; gap: 12px; width: 100%; box-sizing: border-box; padding: 10px 16px; margin-bottom: 16px; border-radius: 12px; background: rgba(184, 115, 46, 0.14); color: var(--ink); font-family: var(--font-body); font-size: 14px; }
.demo-banner-text { flex: 1; }
.demo-banner-cta { background: none; border: 0; padding: 0; font: inherit; font-weight: 600; color: var(--terracotta); cursor: pointer; }
.demo-banner-cta:hover { text-decoration: underline; }
.demo-banner-close { background: none; border: 0; color: var(--ink); opacity: 0.55; cursor: pointer; font-size: 20px; line-height: 1; min-width: 40px; min-height: 40px; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
.demo-banner-close:hover { opacity: 1; }

/* FIX 2: microcopy rassicurante sotto il form hero (niente .reveal:
   l'animazione del hero forzerebbe opacity:1). Revisione 2026-07: allineata a
   SINISTRA come tutte le altre righe sotto la CTA (demo-line, trust-line,
   agency-link): era l'unica centrata e la colonna risultava disallineata. */
.hero-microcopy { margin-top: 8px; text-align: left; font-family: var(--font-body); font-size: 13px; color: var(--ink); opacity: 0.55; }

/* Fase 2.5.22: opzioni secondarie sotto al form (era toggle audit-type sopra al form) */
.hero-form-options {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 10px;
  flex-wrap: wrap;
}
.hero-form-toggle {
  margin: 0;
  font-size: 12.5px;
}
.hero-form-toggle button {
  padding: 6px 12px;
  color: var(--ink-muted);
}
.hero-form-toggle.has-indicator button.active {
  color: var(--on-dark);
}

/* Landing Refresh: CSS dell'accordion hero "Cosa sono SEO e GEO?"
   (.hero-explain-merged / .hero-explain-tabs / .hero-explain-pane) rimosso
   insieme al markup: la spiegazione vive solo nella sezione #seogeo. */

/* Fase 2.18: card errore inline persistente (sostituisce toast 3.5s per errori audit) */
.audit-error {
  display: none;
  margin-top: 16px;
  padding: 14px 16px;
  background: #fef7f3;
  border: 1px solid #e7c8b8;
  border-left: 3px solid var(--terracotta);
  border-radius: var(--r);
  gap: 12px;
  align-items: flex-start;
  position: relative;
  animation: auditErrorIn 0.25s var(--ease);
}
.audit-error.show { display: flex; }
@keyframes auditErrorIn {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Notice "pagine non analizzate" del crawl parziale (renderSiteAudit).
   Solo token adattivi (niente background hardcoded) così è ok in dark mode. */
.site-failed-notice {
  margin: 10px 0 0;
  padding: 12px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-left: 3px solid var(--terracotta);
  border-radius: 12px;
  font-size: 13px;
  color: var(--ink-soft);
}
.site-failed-notice .sfn-head { font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.site-failed-notice .sfn-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.site-failed-notice .sfn-list li { display: flex; flex-direction: column; gap: 2px; }
.site-failed-notice .sfn-url { font-size: 12px; color: var(--terracotta); word-break: break-all; }
.site-failed-notice .sfn-reason { color: var(--ink-muted); }
.site-failed-notice .sfn-more { margin-top: 6px; font-size: 12px; color: var(--ink-muted); }
.site-failed-notice .sfn-foot { margin-top: 8px; font-size: 12px; color: var(--ink-muted); font-style: italic; }
/* Fase 6.6 P3: file tecnici ignorati (indici sitemap XML): elemento neutro,
   collassato di default, distinto dalle pagine HTML reali non raggiungibili
   (niente rosso, niente bordo terracotta, tono var(--ink-muted)). */
.site-tech-notice {
  margin: 10px 0 0;
  padding: 10px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 13px;
  color: var(--ink-muted);
}
.site-tech-notice > summary { cursor: pointer; color: var(--ink-muted); font-weight: 600; list-style: none; }
.site-tech-notice > summary::-webkit-details-marker { display: none; }
.site-tech-notice .stn-list { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.site-tech-notice .stn-list .sfn-url { font-size: 12px; color: var(--ink-muted); word-break: break-all; }
.audit-error-icon {
  flex-shrink: 0;
  color: var(--terracotta);
  margin-top: 1px;
}
.audit-error-body { flex: 1; min-width: 0; }
.audit-error-title {
  font-weight: 600;
  color: var(--ink);
  font-size: 14px;
  margin-bottom: 4px;
}
.audit-error-msg {
  color: var(--ink-soft);
  font-size: 13.5px;
  line-height: 1.5;
}
.audit-error-close {
  position: absolute;
  top: 8px;
  right: 10px;
  background: none;
  border: none;
  color: var(--ink-muted);
  font-size: 11px;
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.audit-error-close:hover { background: rgba(0,0,0,0.04); color: var(--ink); }
/* Fase 5.33: .audit-error aveva background #fef7f3 (rosa chiaro fisso) + testo
   var(--ink)/var(--ink-soft) che in dark diventano chiari: testo chiaro su
   sfondo chiaro = banner illeggibile (contrasto 1.11). Override dark in
   entrambe le forme: sfondo scuro con tinta terracotta, bordo terracotta
   mantenuto per la semantica "attenzione". Titolo/messaggio ereditano --ink
   (chiaro in dark) e tornano leggibili. */
[data-theme="dark"] .audit-error {
  background: rgba(161, 77, 58, 0.18);
  border-color: rgba(161, 77, 58, 0.45);
}
[data-theme="dark"] .audit-error-close:hover { background: rgba(255,255,255,0.08); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .audit-error {
    background: rgba(161, 77, 58, 0.18);
    border-color: rgba(161, 77, 58, 0.45);
  }
  :root:not([data-theme="light"]) .audit-error-close:hover { background: rgba(255,255,255,0.08); }
}

/* Hero visual right side */
.hero-visual {
  position: relative;
  background: var(--primary-deep);
  border-radius: var(--r-lg);
  padding: 28px;
  color: var(--on-dark);
  box-shadow: var(--shadow-lg);
  transform: rotate(0.5deg);
  font-family: 'SF Mono', Menlo, Consolas, monospace;
}
.hero-visual::before {
  content: "audit demo";
  position: absolute;
  top: -10px; left: 28px;
  background: var(--terracotta);
  color: white;
  font-family: var(--font-body);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 4px 10px;
  border-radius: 4px;
}
.hv-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0;
  border-bottom: 1px solid rgba(255,255,255,0.08);
  font-size: 13px;
}
.hv-row:last-child { border-bottom: none; }
.hv-row .label { color: rgba(255,255,255,0.7); }
.hv-row .val { color: var(--on-dark); font-weight: 600; }
.hv-row .val.bad { color: #f6a890; }
.hv-row .val.warn { color: #f3c98e; }
.hv-row .val.ok { color: #a3c79f; }
.hv-score {
  text-align: center;
  margin-bottom: 18px;
  padding-bottom: 18px;
  border-bottom: 1px solid rgba(255,255,255,0.12);
}
.hv-score-num {
  font-family: var(--font-head);
  font-size: 56px;
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--on-dark);
}
.hv-score-num span { color: rgba(255,255,255,0.4); font-size: 28px; }
.hv-score-label {
  font-family: var(--font-body);
  font-size: 11px;
  color: rgba(255,255,255,0.5);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-top: 6px;
}

/* ═══════════════════════ TRUST STRIP ═══════════════════════
   Fase 5.13: 3 stat numeriche al posto della frase generica.
   Sfondo cream-soft per separazione visiva tra hero e problem. */
.trust-strip {
  background: var(--cream-soft);
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  /* Fase 5.42: 48px -> 64px per ritmo verticale più coerente con le sezioni. */
  padding: 64px 0;
}
.trust-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
  align-items: center;
  justify-items: center;
  text-align: center;
}
.trust-stat-num {
  font-family: var(--font-head);
  font-size: clamp(36px, 5vw, 52px);
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
  letter-spacing: -0.02em;
  margin-bottom: 6px;
}
/* Fase 5.15: in dark mode i numeri trust strip diventavano blu aqua washed.
   Usiamo terracotta per pop warm coerente col brand. */
[data-theme="dark"] .trust-stat-num { color: var(--terracotta); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .trust-stat-num { color: var(--terracotta); }
}
.trust-stat-label {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-muted);
  font-weight: 500;
}
@media (max-width: 760px) {
  .trust-stats {
    grid-template-columns: 1fr;
    gap: 22px;
  }
}

/* ═══════════════════════ PROBLEM ═══════════════════════ */
.problem {
  background: var(--cream);
  /* ritmo verticale uniforme con le altre sezioni landing (era 96px ereditati) */
  padding: 80px 0;
}
.problem-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
  margin-top: 48px;
}
@media (max-width: 820px) {
  .problem-grid { grid-template-columns: 1fr; gap: 24px; }
}
.problem-card {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 28px;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease);
}
.problem-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 32px rgba(15, 37, 61, 0.08);
  border-color: var(--cream-deep);
}
.problem-card:hover .num {
  letter-spacing: 0.04em;
}
.problem-card .num {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: var(--terracotta);
  margin-bottom: 8px;
  display: block;
  transition: letter-spacing 0.3s var(--ease);
}
.problem-card h3 {
  font-size: 18px;
  margin-bottom: 12px;
  color: var(--ink);
}
.problem-card p {
  font-size: 14.5px;
  color: var(--ink-soft);
}

/* ═══════════════════════ Fase 5.12: DEMO PREVIEW SECTION ═══════════════════════
   Fase 5.12.2: replica fedele della dashboard Pro (lista siti compatta) e
   della dashboard Agenzia (3 metric card + 3 azioni + tabella con colonne
   complete). Tutto HTML+CSS puro, JS minimo per toggle.
   Classi prefissate demo- per non collidere con quelle reali. */
.demo-preview {
  background: var(--cream);
  padding: 60px 0 80px;
}
.demo-preview-head { text-align: center; max-width: 720px; margin: 0 auto 28px; padding: 0 20px; }
.demo-preview-head h2 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 38px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 12px;
  letter-spacing: -0.01em;
}
.demo-preview-head p {
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--ink-soft);
  margin: 0;
  line-height: 1.5;
}

/* Toggle centrato, animato come .audit-type-toggle (indicatore pill scorrevole) */
.demo-toggle-wrap {
  display: flex;
  justify-content: center;
  margin: 0 auto 28px;
}
.demo-toggle {
  display: inline-flex;
  background: var(--cream-soft);
  box-shadow: inset 0 0 0 1px var(--border);
  border-radius: 99px;
  padding: 4px;
  position: relative;
  isolation: isolate;
}
.demo-toggle::before {
  content: "";
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 0;
  width: var(--indicator-w, 0);
  background: var(--primary-fondo);
  border-radius: 99px;
  transform: translateX(var(--indicator-x, 0));
  transition: transform 0.32s cubic-bezier(.34, 1.2, .64, 1), width 0.32s cubic-bezier(.34, 1.2, .64, 1);
  z-index: 0;
  pointer-events: none;
  opacity: 0;
}
.demo-toggle.has-indicator::before { opacity: 1; }
.demo-toggle button {
  border: none;
  background: transparent;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 14px;
  color: var(--ink-muted);
  padding: 9px 24px;
  border-radius: 99px;
  cursor: pointer;
  position: relative;
  z-index: 1;
  transition: color 0.25s var(--ease);
}
.demo-toggle button:not(.active):hover { color: var(--ink); }
.demo-toggle.has-indicator button.active { color: #fff; }
.demo-toggle:not(.has-indicator) button.active {
  background: var(--primary-fondo);
  color: #fff;
}

/* Cornice browser larga, fedele al viewport del prodotto reale */
.demo-frame {
  max-width: 1140px;
  margin: 0 auto;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 20px 60px rgba(15, 37, 61, 0.10);
  overflow: hidden;
}
[data-theme="dark"] .demo-frame { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-frame { background: var(--cream-soft); }
}
.demo-frame-bar {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 14px;
  background: var(--cream-soft);
  border-bottom: 1px solid var(--border);
}
.demo-frame-dots { display: inline-flex; gap: 6px; flex-shrink: 0; }
.demo-frame-dots span { width: 11px; height: 11px; border-radius: 99px; display: inline-block; }
.demo-frame-dots span.r { background: #ed6a5e; }
.demo-frame-dots span.y { background: #f5bf4f; }
.demo-frame-dots span.g { background: #62c554; }
.demo-frame-url {
  flex: 1;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 5px 12px;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 12.5px;
  color: var(--ink-muted);
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
[data-theme="dark"] .demo-frame-url { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-frame-url { background: var(--cream); }
}

.demo-panel { padding: 36px 40px 40px; background: var(--cream); }
.demo-panel[hidden] { display: none !important; }
@media (max-width: 880px) { .demo-panel { padding: 28px 24px; } }
@media (max-width: 640px) { .demo-panel { padding: 22px 16px; } }
@media (max-width: 420px) { .demo-panel { padding: 20px 16px; } }

/* ── Header dashboard (identico a Pro e Agenzia) ── */
.demo-dash-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 5px 14px;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 14px;
}
.demo-dash-eyebrow::before {
  content: "";
  width: 7px; height: 7px; border-radius: 99px;
  background: var(--terracotta);
}
.demo-dash-greeting {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 40px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}
.demo-dash-greeting em {
  font-style: italic;
  color: var(--terracotta);
  font-weight: 700;
}
.demo-dash-sub {
  font-family: var(--font-body);
  font-size: 15px;
  color: var(--ink-soft);
  margin: 0 0 4px;
}
.demo-dash-plan {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-muted);
  margin: 0 0 24px;
}
.demo-dash-plan strong { color: var(--ink); font-weight: 600; }

/* ── Card "I tuoi siti" ── */
.demo-sites-card {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 24px;
}
[data-theme="dark"] .demo-sites-card { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-sites-card { background: var(--cream-soft); }
}
.demo-sites-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 14px;
}
.demo-sites-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.demo-sites-count {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
  font-weight: 500;
}

/* Form input + Analizza */
.demo-form-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 10px;
  background: var(--cream-soft);
  padding: 10px;
  border-radius: 12px;
  margin-bottom: 14px;
}
.demo-input {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 16px;
  font-family: var(--font-body);
  font-size: 15px;
  color: var(--ink);
  min-width: 0;
  width: 100%;
}
[data-theme="dark"] .demo-input { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-input { background: var(--cream); }
}
.demo-analizza-btn {
  background: var(--ink);
  color: #fff;
  border: none;
  border-radius: 10px;
  padding: 12px 22px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.demo-analizza-btn::before {
  content: "";
  width: 14px; height: 14px;
  border: 2px solid #fff;
  border-radius: 99px;
  display: inline-block;
  position: relative;
}

/* Siti salvati chips */
.demo-saved-row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}
.demo-saved-label {
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-muted);
  margin-right: 4px;
}
.demo-saved-chip {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 6px 14px;
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink);
  font-weight: 500;
}
[data-theme="dark"] .demo-saved-chip { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-saved-chip { background: var(--cream); }
}

/* Toggle Solo la home / Tutto il sito (animato come l'altro) */
.demo-scope-toggle {
  display: inline-flex;
  background: var(--cream-soft);
  border-radius: 99px;
  padding: 4px;
  margin-bottom: 8px;
  position: relative;
  isolation: isolate;
}
.demo-scope-toggle::before {
  content: "";
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 0;
  width: var(--indicator-w, 0);
  background: var(--ink);
  border-radius: 99px;
  transform: translateX(var(--indicator-x, 0));
  transition: transform 0.32s cubic-bezier(.34, 1.2, .64, 1), width 0.32s cubic-bezier(.34, 1.2, .64, 1);
  z-index: 0;
  pointer-events: none;
  opacity: 0;
}
.demo-scope-toggle.has-indicator::before { opacity: 1; }
.demo-scope-toggle button {
  border: none;
  background: transparent;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-muted);
  padding: 7px 16px;
  border-radius: 99px;
  position: relative;
  z-index: 1;
  cursor: pointer;
  transition: color 0.25s var(--ease);
}
.demo-scope-toggle.has-indicator button.active { color: #fff; }
.demo-scope-toggle:not(.has-indicator) button.active {
  background: var(--ink);
  color: #fff;
}
.demo-scope-toggle button .demo-scope-meta {
  font-weight: 400;
  color: var(--ink-muted);
  margin-left: 6px;
  font-size: 12px;
}
.demo-scope-toggle.has-indicator button.active .demo-scope-meta { color: rgba(255,255,255,0.7); }
.demo-scope-toggle:not(.has-indicator) button.active .demo-scope-meta { color: rgba(255,255,255,0.6); }
.demo-scope-info {
  font-family: var(--font-body);
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 6px 0 14px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.demo-scope-info::before {
  content: "i";
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px; height: 14px;
  border-radius: 99px;
  border: 1px solid var(--ink-muted);
  font-family: var(--font-head);
  font-size: 10px;
  font-style: italic;
}
.demo-add-site-btn {
  background: transparent;
  border: 1px dashed var(--border);
  border-radius: 10px;
  padding: 9px 16px;
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-soft);
  font-weight: 500;
}

/* ── PRO: lista siti compatta ── */
.demo-pro-sites { margin-top: 18px; display: flex; flex-direction: column; gap: 12px; }
.demo-pro-site {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 16px 18px;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 14px;
}
.demo-pro-site-bottom {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.demo-pro-site-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.demo-pro-site-name {
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  color: var(--ink);
}
.demo-pro-site-meta {
  font-family: var(--font-body);
  font-size: 12.5px;
  color: var(--ink-muted);
}
.demo-pro-score {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.demo-pro-score .demo-agency-score-badge { padding: 4px 10px; font-size: 14px; }
.demo-pro-delta {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 12px;
  padding: 2px 6px;
  border-radius: 6px;
}
.demo-pro-delta.down { color: var(--danger); background: rgba(161,77,58,0.12); }
.demo-pro-delta.up   { color: var(--success); background: rgba(94,124,90,0.12); }
.demo-pro-date {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
}
.demo-pro-arrow, .demo-pro-trash {
  width: 32px; height: 32px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: #fff;
  color: var(--ink-muted);
}
[data-theme="dark"] .demo-pro-arrow,
[data-theme="dark"] .demo-pro-trash { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-pro-arrow,
  :root:not([data-theme="light"]) .demo-pro-trash { background: var(--cream); }
}

/* ── AGENZIA: 3 metric cards + 3 azioni + tabella ── */
.demo-agency-metrics {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: 22px;
  margin-bottom: 18px;
}
.demo-agency-metric {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 28px 22px;
  text-align: center;
}
[data-theme="dark"] .demo-agency-metric { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-agency-metric { background: var(--cream-soft); }
}
.demo-agency-metric-value {
  font-family: var(--font-head);
  font-size: 48px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
  margin-bottom: 8px;
}
.demo-agency-metric.warn .demo-agency-metric-value { color: var(--terracotta); }
.demo-agency-metric.good .demo-agency-metric-value { color: var(--success); }
.demo-agency-metric-label {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-soft);
}

.demo-agency-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 22px;
}
.demo-agency-action {
  border: 1px solid var(--border);
  background: #fff;
  border-radius: 10px;
  padding: 12px 18px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
}
[data-theme="dark"] .demo-agency-action { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-agency-action { background: var(--cream-soft); }
}
.demo-agency-action.primary {
  background: var(--primary-fondo);
  color: #fff;
  border-color: var(--primary);
}

.demo-agency-table-wrap {
  border: 1px solid var(--border);
  border-radius: 14px;
  overflow: hidden;
  background: #fff;
}
[data-theme="dark"] .demo-agency-table-wrap { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-agency-table-wrap { background: var(--cream-soft); }
}
.demo-agency-table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-body);
  font-size: 14px;
}
.demo-agency-table thead th {
  text-align: left;
  font-weight: 700;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-muted);
  padding: 14px 16px;
  background: var(--cream-soft);
  border-bottom: 1px solid var(--border);
}
[data-theme="dark"] .demo-agency-table thead th { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-agency-table thead th { background: var(--cream); }
}
.demo-agency-table tbody td {
  padding: 16px;
  border-bottom: 1px solid var(--border);
  color: var(--ink);
  vertical-align: middle;
}
.demo-agency-table tbody tr:last-child td { border-bottom: none; }
.demo-agency-domain {
  display: block;
  font-size: 12px;
  color: var(--ink-muted);
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  margin-top: 2px;
}
.demo-agency-score-badge {
  display: inline-block;
  min-width: 42px;
  padding: 5px 12px;
  border-radius: 8px;
  font-family: var(--font-head);
  font-weight: 700;
  text-align: center;
}
.demo-agency-score-badge.good { color: var(--success); background: rgba(94, 124, 90, 0.12); }
.demo-agency-score-badge.warn { color: var(--warning-ink); background: rgba(184, 115, 46, 0.12); }
.demo-agency-score-badge.bad  { color: var(--danger);  background: rgba(161, 77, 58, 0.12); }
.demo-agency-delta {
  display: inline-block;
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 13.5px;
  padding: 4px 10px;
  border-radius: 8px;
}
.demo-agency-delta.up   { color: var(--success); background: rgba(94, 124, 90, 0.10); }
.demo-agency-delta.down { color: var(--danger);  background: rgba(161, 77, 58, 0.10); }
.demo-agency-actions-cell { display: inline-flex; gap: 6px; }
.demo-agency-actions-cell .demo-pro-arrow,
.demo-agency-actions-cell .demo-pro-trash { width: 30px; height: 30px; }
.demo-agency-scope-pill {
  display: inline-block;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  color: var(--primary);
  background: rgba(26,58,92,0.08);
  border-radius: 99px;
  padding: 2px 10px;
  margin-left: 6px;
  vertical-align: 2px;
}

@media (max-width: 880px) {
  .demo-agency-metrics { grid-template-columns: 1fr; }
  /* Fase 5.12.6: pro site card mobile = nome sopra, bottom row sotto */
  .demo-pro-site { grid-template-columns: 1fr; gap: 12px; }
  .demo-pro-site-bottom { justify-content: space-between; width: 100%; }
  .demo-agency-table thead { display: none; }
  .demo-agency-table tbody tr {
    display: block;
    padding: 14px 16px;
    border-bottom: 1px solid var(--border);
  }
  .demo-agency-table td {
    display: flex !important;
    justify-content: space-between;
    align-items: center;
    padding: 5px 0 !important;
    border: none !important;
    font-size: 13.5px;
  }
  .demo-agency-table td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--ink-muted);
    font-size: 12px;
  }
  .demo-agency-table td[data-label="Cliente / Sito"] {
    display: block !important;
    border-bottom: 1px solid var(--border) !important;
    padding-bottom: 8px !important;
    margin-bottom: 6px;
  }
  .demo-agency-table td[data-label="Cliente / Sito"]::before { display: none; }
}

/* ═══════════════════════ Fase 5.12.3: DEMO SCAN PREVIEW ═══════════════════════
   Seconda anteprima statica: come esce una singola scansione (report di un
   sito). Replica .app-header + .tabs + .score-row + .subscores + .issues
   reali del prodotto. */
.demo-scan {
  background: var(--cream-soft);
  padding: 60px 0 80px;
  border-top: 1px solid var(--border);
}
.demo-scan-head { text-align: center; max-width: 720px; margin: 0 auto 32px; padding: 0 20px; }
.demo-scan-head h2 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 38px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 12px;
  letter-spacing: -0.01em;
}
.demo-scan-head p {
  font-family: var(--font-body);
  font-size: 16px;
  color: var(--ink-soft);
  margin: 0;
  line-height: 1.5;
}

/* Riutilizzo .demo-frame e .demo-frame-bar/url dalla sezione anteprima. */
.demo-scan-panel { padding: 32px 36px 36px; background: var(--cream); }
@media (max-width: 880px) { .demo-scan-panel { padding: 26px 22px; } }
@media (max-width: 640px) { .demo-scan-panel { padding: 22px 16px; } }
@media (max-width: 420px) { .demo-scan-panel { padding: 18px 12px; } }

/* App header come dashboard reale (.app-header) */
.demo-scan-app-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-wrap: wrap;
  gap: 16px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 18px;
}
.demo-scan-app-header h3 {
  font-family: var(--font-head);
  font-size: clamp(22px, 2.6vw, 28px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 4px;
  letter-spacing: -0.01em;
}
.demo-scan-app-url {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 13px;
  color: var(--ink-muted);
}
.demo-scan-rescan {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  padding: 9px 16px;
  border-radius: 10px;
}

/* Tabs come .tabs reali */
.demo-scan-tabs {
  display: flex;
  gap: 4px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 26px;
  overflow-x: auto;
  scrollbar-width: none;
}
.demo-scan-tabs::-webkit-scrollbar { display: none; }
.demo-scan-tabs .demo-scan-tab {
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  padding: 12px 18px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-muted);
  white-space: nowrap;
  cursor: default;
}
.demo-scan-tabs .demo-scan-tab.active {
  color: var(--ink);
  border-bottom-color: var(--terracotta);
  font-weight: 600;
}
.demo-scan-tab-badge {
  display: inline-block;
  background: var(--terracotta);
  color: #fff;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  min-width: 18px;
  padding: 1px 6px;
  border-radius: 99px;
  margin-left: 6px;
  vertical-align: 1px;
}

/* Score row blu (replica .score-row con --primary-deep) */
.demo-scan-score-row {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 36px;
  align-items: center;
  background: var(--primary-deep);
  color: var(--on-dark);
  padding: 32px 36px;
  border-radius: 16px;
  margin-bottom: 24px;
}
.demo-scan-circle {
  width: 140px;
  height: 140px;
  border-radius: 50%;
  background: rgba(255,255,255,0.05);
  border: 3px solid var(--terracotta);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.demo-scan-num {
  font-family: var(--font-head);
  font-size: 56px;
  font-weight: 900;
  color: var(--on-dark);
  line-height: 1;
  letter-spacing: -0.04em;
}
.demo-scan-score-label {
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(250, 250, 247, 0.6);
  margin-top: 4px;
}
.demo-scan-summary h4 {
  font-family: var(--font-head);
  font-size: 22px;
  font-weight: 700;
  color: var(--on-dark);
  margin: 0 0 8px;
}
.demo-scan-summary p {
  font-family: var(--font-body);
  font-size: 15px;
  color: rgba(250, 250, 247, 0.78);
  line-height: 1.6;
  margin: 0 0 10px;
}
.demo-scan-context {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: rgba(250, 250, 247, 0.62);
  line-height: 1.55;
  margin: 0 0 18px;
}
.demo-scan-context strong { color: rgba(250, 250, 247, 0.85); font-weight: 600; }

/* Toggle Complessivo / Solo SEO / Solo GEO dentro score-row blu */
.demo-scan-viewtoggle {
  display: inline-flex;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 99px;
  padding: 4px;
  font-family: var(--font-body);
}
.demo-scan-viewtoggle button {
  background: transparent;
  border: none;
  color: rgba(250, 250, 247, 0.72);
  font-size: 13px;
  font-weight: 500;
  padding: 7px 16px;
  border-radius: 99px;
  cursor: default;
}
.demo-scan-viewtoggle button.active {
  background: var(--cream);
  color: var(--ink);
  font-weight: 600;
}
/* dark: la banda è già var(--surface-deep); la pill attiva deve restare
   CHIARA fissa per staccarsi (var(--cream) in dark diventerebbe quasi nera e
   sparirebbe sul navy). Doppia forma CSS-2. */
[data-theme="dark"] .demo-scan-viewtoggle button.active {
  background: #fafaf7;
  color: #0f253d;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-viewtoggle button.active {
    background: #fafaf7;
    color: #0f253d;
  }
}

/* Riga "Linguaggio delle spiegazioni" tra score-row e subscores */
.demo-scan-lang-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 14px;
  margin-bottom: 22px;
  padding: 14px 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 12px;
}
[data-theme="dark"] .demo-scan-lang-row { background: var(--cream-soft); }
.demo-scan-lang-left {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.demo-scan-lang-label {
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
}
.demo-scan-lang-hint {
  font-family: var(--font-body);
  font-size: 12.5px;
  color: var(--ink-muted);
}
.demo-scan-lang-toggle {
  display: inline-flex;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 4px;
}
[data-theme="dark"] .demo-scan-lang-toggle { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-lang-toggle { background: var(--cream); }
}
.demo-scan-lang-toggle button {
  background: transparent;
  border: none;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  padding: 7px 16px;
  border-radius: 99px;
  cursor: default;
}
.demo-scan-lang-toggle button.active {
  background: var(--ink);
  color: #fff;
}
[data-theme="dark"] .demo-scan-lang-toggle button.active {
  background: var(--surface-deep);
  color: var(--on-dark);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-lang-toggle button.active {
    background: var(--surface-deep);
    color: var(--on-dark);
  }
}

/* Subscores 4-col (replica .subscores .sub) */
.demo-scan-subscores {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 28px;
}
.demo-scan-sub {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 18px;
  text-align: center;
}
[data-theme="dark"] .demo-scan-sub { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .demo-scan-sub { background: var(--cream-soft); }
}
.demo-scan-sub-label {
  font-family: var(--font-body);
  font-size: 12px;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 8px;
  font-weight: 600;
}
.demo-scan-sub-val {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
}
.demo-scan-sub-val.good { color: var(--success); }
.demo-scan-sub-val.warn { color: var(--warning); }
.demo-scan-sub-val.bad  { color: var(--danger); }

/* Issues (replica .issue grid 3-col, .issue-prio dot, .issue-tag) */
.demo-scan-issues-head h5 {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 4px;
}
.demo-scan-issues-head p {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-muted);
  margin: 0 0 12px;
}
.demo-scan-issue {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 16px;
  padding: 16px 0;
  border-bottom: 1px solid var(--border);
  align-items: start;
}
.demo-scan-issue:last-child { border-bottom: none; }
.demo-scan-issue-prio {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  margin-top: 8px;
}
.demo-scan-issue-prio.high { background: var(--danger); }
.demo-scan-issue-prio.medium { background: var(--warning); }
.demo-scan-issue-prio.low { background: var(--success); }
.demo-scan-issue-body h6 {
  font-family: var(--font-body);
  font-size: 15.5px;
  font-weight: 600;
  margin: 0 0 4px;
  color: var(--ink);
}
.demo-scan-issue-body p {
  font-family: var(--font-body);
  font-size: 13.5px;
  color: var(--ink-soft);
  margin: 0;
  line-height: 1.55;
}
.demo-scan-issue-fix { margin-top: 6px !important; font-size: 13px !important; }
.demo-scan-issue-fix strong { color: var(--terracotta); }
.demo-scan-issue-tag {
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 4px 10px;
  border-radius: 99px;
  white-space: nowrap;
  border: 1px solid var(--border);
  background: var(--cream-soft);
  color: var(--ink-muted);
}
.demo-scan-issue-tag.high   { color: var(--danger);  border-color: rgba(161,77,58,0.3); background: rgba(161,77,58,0.08); }
.demo-scan-issue-tag.medium { color: var(--warning); border-color: rgba(184,115,46,0.3); background: rgba(184,115,46,0.08); }
.demo-scan-issue-tag.low    { color: var(--success); border-color: rgba(94,124,90,0.3);  background: rgba(94,124,90,0.08); }

@media (max-width: 760px) {
  .demo-scan-score-row { grid-template-columns: 1fr; text-align: center; padding: 24px 20px; gap: 20px; }
  .demo-scan-circle { margin: 0 auto; width: 110px; height: 110px; }
  .demo-scan-num { font-size: 44px; }
  .demo-scan-subscores { grid-template-columns: repeat(2, 1fr); }
  /* Toggle interno score-row + lang-row. Fase 5.99.x: su mobile i 3 segmenti
     (Complessivo/Solo SEO/Solo GEO) andavano a capo male (flex-wrap lasciava
     "Solo GEO" da solo sulla seconda riga). Griglia a 3 colonne uguali: stanno
     su una riga, larghezza piena, segmenti bilanciati. */
  .demo-scan-viewtoggle { display: grid; grid-template-columns: repeat(3, 1fr); width: 100%; border-radius: 99px; }
  .demo-scan-viewtoggle button { padding: 8px 4px; font-size: 12px; text-align: center; }
  .demo-scan-lang-row { flex-direction: column; align-items: flex-start; }
  /* il toggle riempie tutta la riga e i due bottoni si dividono lo spazio
     (prima i bottoni restavano centrati lasciando molto vuoto ai lati) */
  .demo-scan-lang-toggle { align-self: stretch; display: flex; }
  .demo-scan-lang-toggle button { flex: 1; text-align: center; }
  /* App header rescan button va a wrap */
  .demo-scan-app-header { gap: 12px; }
  .demo-scan-rescan { width: 100%; }
  /* Issue tag piu compatto */
  .demo-scan-issue { gap: 12px; }
  .demo-scan-issue-tag { font-size: 10px; padding: 3px 8px; }
}
@media (max-width: 480px) {
  .demo-scan-subscores { grid-template-columns: 1fr 1fr; gap: 8px; }
  .demo-scan-sub { padding: 14px 10px; }
  .demo-scan-sub-val { font-size: 26px; }
  .demo-scan-summary h4 { font-size: 18px; }
  .demo-scan-summary p { font-size: 14px; }
  .demo-scan-context { font-size: 12.5px; }
}

/* Mobile per anteprima dashboard (demo-preview): app-header pro/agency,
   form-row, scope-toggle, action buttons, agency-actions-cell visibili */
@media (max-width: 760px) {
  .demo-dash-greeting { font-size: 28px; }
  .demo-form-row { grid-template-columns: 1fr; }
  .demo-analizza-btn { width: 100%; justify-content: center; }
  .demo-scope-toggle { flex-direction: column; align-items: stretch; padding: 6px; gap: 4px; }
  .demo-scope-toggle::before { display: none; }
  .demo-scope-toggle button { text-align: center; padding: 10px 14px; }
  .demo-scope-toggle button.active { background: var(--ink); color: #fff; }
  [data-theme="dark"] .demo-scope-toggle button.active { background: var(--surface-deep); }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .demo-scope-toggle button.active { background: var(--surface-deep); }
  }
  .demo-saved-row { gap: 6px; }
  .demo-saved-chip { font-size: 12px; padding: 5px 10px; }
  /* Agency action buttons impilati */
  .demo-agency-actions { flex-direction: column; }
  .demo-agency-action { width: 100%; text-align: center; }
  /* Agency actions cell in mobile: rendi visibili come bottoni */
  .demo-agency-actions-cell .demo-pro-arrow,
  .demo-agency-actions-cell .demo-pro-trash {
    background: var(--cream); border: 1px solid var(--border);
  }
}

/* ═══════════════════════ SOLUTION ═══════════════════════ */
.solution {
  background: var(--cream-soft);
  /* Landing Refresh v2: più respiro (stile Apple) */
  padding: 88px 0;
}

/* SEO + GEO explainer */
.seogeo-explainer {
  background: var(--cream);
  padding: 80px 0;
}
.seogeo-intro {
  font-size: 16px;
  color: var(--ink-soft);
  max-width: 780px;
  margin: 16px 0 48px;
  line-height: 1.6;
}
.seogeo-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 28px;
  /* Fase 5.18.1: piu spazio sopra le card per respirare dopo l'headline */
  margin-top: 40px;
  margin-bottom: 40px;
}
@media (max-width: 820px) { .seogeo-grid { margin-top: 28px; } }
@media (max-width: 820px) {
  .seogeo-grid { grid-template-columns: 1fr; }
}
.seogeo-card {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 32px 28px;
  position: relative;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.seogeo-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(15, 15, 15, 0.06);
}
.seogeo-card.geo-card {
  background: var(--primary-deep);
  color: var(--on-dark);
  border-color: var(--primary);
}
.seogeo-badge {
  display: inline-block;
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 14px;
  letter-spacing: -0.01em;
  padding: 6px 14px;
  border-radius: 99px;
  color: white;
  margin-bottom: 18px;
}
.seogeo-badge.seo {
  background: var(--primary-fondo);
}
.seogeo-badge.geo {
  background: var(--terracotta);
}
.seogeo-card h3 {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.015em;
  margin-bottom: 4px;
}
.seogeo-card.geo-card h3 {
  /* Fase 5.16: era var(--cream) -> in dark mode diventava nero (cream-dark).
     Usiamo --on-dark che resta sempre chiaro su qualsiasi tema. */
  color: var(--on-dark);
}
.seogeo-tagline {
  font-size: 14px;
  font-weight: 600;
  color: var(--terracotta);
  margin-bottom: 14px;
}
.seogeo-card.geo-card .seogeo-tagline {
  color: #f6a890;
}
.seogeo-card p {
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--ink-soft);
  margin-bottom: 16px;
}
.seogeo-card.geo-card p {
  color: rgba(250, 250, 247, 0.85);
}
.seogeo-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.seogeo-list li {
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--ink-soft);
  padding-left: 16px;
  position: relative;
}
.seogeo-list li::before {
  content: "→";
  position: absolute;
  left: 0;
  color: var(--terracotta);
  font-weight: 600;
}
.seogeo-card.geo-card .seogeo-list li {
  color: rgba(250, 250, 247, 0.85);
}
.seogeo-card.geo-card .seogeo-list li::before {
  color: #f6a890;
}
.seogeo-list li strong {
  color: var(--ink);
  font-weight: 600;
}
.seogeo-card.geo-card .seogeo-list li strong {
  color: var(--on-dark);
}
.seogeo-cta {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 24px 28px;
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--ink-soft);
}
.seogeo-cta strong {
  color: var(--ink);
}


.solution-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
  margin-top: 48px;
}
.solution-row.reverse { direction: rtl; }
.solution-row.reverse > * { direction: ltr; }
.solution-row + .solution-row { margin-top: 100px; }
/* Mobile: la riga soluzione collassa a 1 colonna (prima restava 2col e il
   .solution-visual monospace sforava oltre il viewport). min-width:0 evita
   l'overflow da grid item. */
@media (max-width: 768px) {
  .solution-row { grid-template-columns: 1fr; gap: 28px; direction: ltr; }
  .solution-row.reverse { direction: ltr; }
  .solution-row .solution-text,
  .solution-row .solution-visual { min-width: 0; }
}
@media (max-width: 820px) {
  .solution-row + .solution-row { margin-top: 60px; }
}
@media (max-width: 820px) {
  .solution-row, .solution-row.reverse {
    grid-template-columns: 1fr;
    gap: 24px;
    direction: ltr;
  }
  .solution-row + .solution-row { margin-top: 48px; }
}
.solution-text .h-eyebrow { margin-bottom: 16px; }
.solution-text h3 {
  font-size: clamp(26px, 3.5vw, 36px);
  line-height: 1.15;
  margin-bottom: 16px;
}
.solution-text p {
  font-size: 16px;
  color: var(--ink-soft);
  margin-bottom: 16px;
}
/* Reset generico: la freccia ::before è l'unico marcatore, niente disco
   nativo (la lista è usata anche fuori da .solution-text: chat-ai, agenzie). */
.feature-list { list-style: none; margin: 0; padding: 0; }
.solution-text .feature-list {
  list-style: none;
  margin-top: 16px;
}
.solution-text .feature-list li {
  padding: 8px 0;
  font-size: 14.5px;
  color: var(--ink-soft);
  display: flex;
  gap: 10px;
}
.solution-text .feature-list li::before {
  content: "→";
  color: var(--terracotta);
  font-weight: 700;
}
.solution-visual {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 24px;
  box-shadow: var(--shadow);
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: 13px;
}
.sv-line { padding: 6px 0; }
.sv-line .key { color: var(--ink-muted); }
.sv-line .val { color: var(--ink); font-weight: 600; }
.sv-line .arrow {
  margin: 0 8px;
  color: var(--terracotta);
}
.sv-line .new { color: var(--success); font-weight: 600; }

/* ═══════════════════════ PIANI ═══════════════════════ */
.piani {
  background: var(--cream);
  /* ritmo verticale uniforme con le altre sezioni landing (era 96px ereditati) */
  padding: 80px 0;
}
.piani-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  /* Fase 5.42: gap 16px -> 24px. Le card piani (padding 28px) si toccavano
     quasi a 4 e 2 colonne: più respiro nel punto di conversione. */
  gap: 24px;
  margin-top: 48px;
}
@media (max-width: 980px) { .piani-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .piani-grid { grid-template-columns: 1fr; } }

.plan {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 28px;
  display: flex;
  flex-direction: column;
  position: relative;
  transition: transform 0.3s var(--ease), border-color 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.plan:hover {
  transform: translateY(-6px);
  border-color: var(--primary);
  box-shadow: 0 20px 40px rgba(15, 37, 61, 0.10);
}
.plan.featured {
  background: var(--primary-deep);
  color: var(--on-dark);
  border: 2px solid var(--terracotta);
  transform: scale(1.03);
  box-shadow: 0 12px 30px rgba(15, 37, 61, 0.15);
}
.plan.featured:hover {
  transform: scale(1.03) translateY(-6px);
  box-shadow: 0 28px 50px rgba(15, 37, 61, 0.20);
}
.plan-badge {
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--terracotta);
  color: white;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 4px 12px;
  border-radius: 999px;
}
/* Fase 2.5.75: icona piano (48x48) sopra il nome */
.plan-icon { display: block; margin: 0 auto 12px; width: 48px; height: 48px; }
.plan-name {
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 8px;
}
.plan.featured .plan-name { color: rgba(250, 250, 247, 0.7); }
.plan-price {
  font-family: var(--font-head);
  font-size: 44px;
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--ink);
  margin-bottom: 4px;
}
.plan.featured .plan-price { color: var(--on-dark); }
.plan-price-period {
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  color: var(--ink-muted);
  margin-bottom: 24px;
}
.plan.featured .plan-price-period { color: rgba(250, 250, 247, 0.7); }
/* Fase 2.5.60: feature list piani con check verde / X muted barrato */
.plan-features li.feat-ok,
.plan-features li.feat-no {
  position: relative;
  padding-left: 26px;
}
/* Fase 2.5.61: a11y - screen reader hint per features non disponibili */
.plan-features li.feat-no::after {
  content: " (non incluso in questo piano)";
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}
.plan-features li.feat-ok::before {
  content: "✓";
  position: absolute;
  left: 4px;
  color: var(--success, #5e7c5a);
  font-weight: 700;
}
.plan-features li.feat-no {
  color: var(--ink-muted);
  text-decoration: line-through;
  text-decoration-color: rgba(15, 37, 61, 0.25);
}
.plan-features li.feat-no::before {
  content: "✕";
  position: absolute;
  left: 4px;
  color: var(--ink-muted);
  text-decoration: none;
  font-weight: 600;
  opacity: 0.6;
}
.plan-features li.feat-no strong { color: var(--ink-muted); }

/* Fase 2.5.55: tagline B2B sotto al prezzo nel piano Agenzia */
.plan-tagline-b2b {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.5;
  margin: 0 0 14px;
  padding: 10px 12px;
  background: var(--cream-soft, #f5f3ec);
  border-left: 3px solid var(--terracotta);
  border-radius: 6px;
  font-style: italic;
}
/* Fase 2.5.55: confronto "Attuale -> Proposto" sopra le proposte AI per
   title/description/h1. Sfondo bianco-trasparente sul tema scuro del report. */
.ai-before {
  background: rgba(255, 255, 255, 0.06);
  border-left: 3px solid var(--ink-muted);
  padding: 8px 12px;
  border-radius: 6px;
  font-size: 13px;
  margin: 10px 0 12px;
  color: var(--on-dark);
}
.ai-before-label {
  font-weight: 700;
  color: var(--on-dark);
  margin-right: 6px;
}
.ai-before-value { font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: 12px; opacity: 0.9; }
.ai-before-empty { font-style: italic; opacity: 0.6; }
.ai-proposed-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--terracotta);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 4px;
}

/* Fase 2.5.56: guida contestuale "Come si applica" sotto box AI raw */
.ai-apply-guide {
  margin-top: 14px;
  border-top: 1px dashed var(--border);
  padding-top: 12px;
}
.ai-apply-guide summary {
  cursor: pointer;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  color: var(--primary);
  padding: 4px 0;
  user-select: none;
}
.ai-apply-guide summary:hover { color: var(--terracotta); }
.ai-apply-guide-body {
  padding-top: 10px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.ai-apply-guide-section {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.55;
  margin: 0;
}
.ai-apply-guide-section strong { color: var(--ink); }
.ai-apply-guide-section code {
  background: var(--cream-soft, #f5f3ec);
  padding: 1px 5px;
  border-radius: 4px;
  font-size: 12px;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
}
.ai-apply-guide-section a { color: var(--terracotta); text-decoration: none; border-bottom: 1px solid var(--terracotta); }

/* Fase 2.5.56: animazione bounce su score badge dopo audit migliorato.
   scala 1 -> 1.15 -> 1 in 0.4s ease-out. */
@keyframes scoreSuccessPulse {
  0% { transform: scale(1); }
  40% { transform: scale(1.15); }
  100% { transform: scale(1); }
}
.score-success-pulse { animation: scoreSuccessPulse 0.4s ease-out 1; display: inline-block; }

/* Fase 2.5.55: tempo stimato sotto la barra del loader */
.loading-eta {
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 8px 0 0;
  text-align: center;
  font-style: italic;
  animation: loadingEtaIn 0.3s var(--ease);
}
.loading-eta[hidden] { display: none !important; }
@keyframes loadingEtaIn { from { opacity: 0; } to { opacity: 1; } }
/* Fase 5.61b punto 1: hint WordPress collegato nell'overlay di scansione. */
.loading-wp-hint {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 14px auto 0;
  max-width: 320px;
  text-align: center;
  line-height: 1.4;
}
.loading-wp-hint svg { width: 14px; height: 14px; flex-shrink: 0; color: var(--terracotta); }
.loading-wp-hint[hidden] { display: none !important; }

.plan-features {
  list-style: none;
  flex: 1;
}
.plan-features li {
  padding: 8px 0;
  font-size: 13.5px;
  color: var(--ink-soft);
  border-bottom: 1px solid var(--border);
}
.plan-features li:last-child { border: none; }
.plan.featured .plan-features li {
  color: rgba(250, 250, 247, 0.85);
  border-bottom-color: rgba(255,255,255,0.1);
}
.plan-cta {
  margin-top: 24px;
  padding: 12px 18px;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 600;
  text-align: center;
  /* Fase 5.94 (A2): CTA piena e prominente per OGNI piano (prima solo Pro era
     evidenziato, Solo/Agenzia sembravano secondari). Paid = terracotta. */
  background: var(--terracotta);
  color: white;
  transition: background 0.15s var(--ease);
  /* Fase 2.5.30: era <a>, ora <button> per Stripe. Reset stili browser. */
  display: block;
  width: 100%;
  border: 0;
  cursor: pointer;
  font-family: var(--font-body);
  text-decoration: none;
}
.plan-cta:hover { background: var(--terracotta-hover); }
/* Free: navy primario (entry), distinto dai paid terracotta. */
.plan-cta-free { background: var(--primary-fondo); color: white; }
.plan-cta-free:hover { background: var(--primary-deep); }
.plan-cta:disabled { opacity: 0.6; cursor: wait; }
.plan-cta:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.plan.featured .plan-cta {
  background: var(--terracotta);
  color: white;
}
.plan.featured .plan-cta:hover {
  background: var(--terracotta-hover);
}
.plan-soon {
  font-size: 11px;
  color: var(--ink-muted);
  text-align: center;
  margin-top: 8px;
}
.plan.featured .plan-soon { color: rgba(250, 250, 247, 0.5); }

/* ═══════════════════════ FAQ ═══════════════════════ */
.faq { background: var(--cream-soft); padding: 80px 0; }
.faq-list {
  max-width: 760px;
  margin: 48px auto 0;
}
.faq-item {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  margin-bottom: 16px;
  overflow: hidden;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease), transform 0.25s var(--ease);
}
.faq-item:hover {
  border-color: var(--primary);
  box-shadow: 0 6px 20px rgba(15, 37, 61, 0.06);
  transform: translateY(-1px);
}
.faq-item[open] {
  border-color: var(--primary);
  box-shadow: 0 6px 20px rgba(15, 37, 61, 0.08);
}
.faq-item summary {
  padding: 18px 24px;
  font-size: 16px;
  font-weight: 600;
  color: var(--ink);
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  transition: color 0.2s var(--ease);
}
.faq-item:hover summary { color: var(--primary); }
.faq-item[open] summary { color: var(--primary); }
.faq-item summary:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: -2px;
  border-radius: var(--r-sm);
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+";
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 400;
  color: var(--terracotta);
  flex-shrink: 0;
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
  display: inline-block;
}
.faq-item[open] summary::after { transform: rotate(135deg); }

/* Animazione apertura: max-height + opacity. JS imposta scrollHeight quando si apre.
   Più robusto del trick grid-rows 0fr→1fr che non funziona su tutti i browser. */
.faq-item .answer-wrap {
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  transition: max-height 0.4s var(--ease), opacity 0.3s var(--ease);
}
.faq-item[open] .answer-wrap {
  max-height: 600px;  /* fallback se JS non parte; verrà sovrascritto dinamicamente */
  opacity: 1;
}
.faq-item .answer {
  padding: 0 24px 18px;
  color: var(--ink-soft);
  font-size: 15px;
  line-height: 1.6;
  opacity: 0;
  transform: translateY(-6px);
  transition: opacity 0.3s var(--ease) 0.05s, transform 0.3s var(--ease) 0.05s;
}
.faq-item[open] .answer {
  opacity: 1;
  transform: translateY(0);
}

/* ═══════════════════════ FINAL CTA ═══════════════════════ */
.cta-final {
  /* Fase 5.45: era var(--ink) (#0f0f0f quasi nero), troppo cupo e stacco duro
     col resto cream. Uso var(--surface-deep) (navy #0f253d, scuro in entrambi i
     temi) come la card dello score: più caldo e coerente del nero puro. */
  background: var(--surface-deep);
  color: var(--on-dark);
  text-align: center;
  padding: 100px 24px;
  /* Fase 5.43/5.46: sfondo dinamico "aurora glow" a 3 bagliori animati
     (::before terracotta, ::after navy, .cta-glow-3 accento) con percorsi ampi.
     position+overflow per contenere i glow, isolation per uno stacking pulito. */
  position: relative;
  overflow: hidden;
  isolation: isolate;
}
/* Fase 5.46: aurora dinamica a 3 bagliori (terracotta + navy + terracotta
   accento) con percorsi ampi/organici e velocità diverse (16/21/13s), niente
   reattivita' mouse. Solo transform/opacity -> GPU-friendly. */
/* Glow terracotta principale */
.cta-final::before {
  content: "";
  position: absolute;
  z-index: 0;
  width: 90vw;
  max-width: 760px;
  aspect-ratio: 1;
  top: 50%;
  left: 30%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(161, 77, 58, 0.42) 0%, rgba(161, 77, 58, 0.16) 38%, transparent 68%);
  filter: blur(8px);
  transform: translate(-50%, -50%);
  animation: ctaAuroraA 16s ease-in-out infinite;
  pointer-events: none;
}
/* Glow navy */
.cta-final::after {
  content: "";
  position: absolute;
  z-index: 0;
  width: 80vw;
  max-width: 680px;
  aspect-ratio: 1;
  top: 45%;
  left: 72%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(26, 58, 92, 0.40) 0%, rgba(26, 58, 92, 0.15) 40%, transparent 70%);
  filter: blur(8px);
  transform: translate(-50%, -50%);
  animation: ctaAuroraB 21s ease-in-out infinite;
  pointer-events: none;
}
/* Terzo bagliore: accento terracotta più piccolo e veloce, da' dinamismo */
.cta-glow-3 {
  position: absolute;
  z-index: 0;
  width: 60vw;
  max-width: 520px;
  aspect-ratio: 1;
  top: 58%;
  left: 55%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(193, 90, 67, 0.30) 0%, rgba(193, 90, 67, 0.10) 40%, transparent 70%);
  filter: blur(10px);
  transform: translate(-50%, -50%);
  animation: ctaAuroraC 13s ease-in-out infinite;
  pointer-events: none;
}
@keyframes ctaAuroraA {
  0%   { transform: translate(-70%, -52%) scale(1);    opacity: 0.8; }
  25%  { transform: translate(-32%, -66%) scale(1.22); opacity: 1; }
  50%  { transform: translate(-55%, -38%) scale(0.95); opacity: 0.85; }
  75%  { transform: translate(-22%, -60%) scale(1.14); opacity: 1; }
  100% { transform: translate(-70%, -52%) scale(1);    opacity: 0.8; }
}
@keyframes ctaAuroraB {
  0%   { transform: translate(-40%, -45%) scale(1.1);  opacity: 0.6; }
  33%  { transform: translate(-66%, -62%) scale(0.85); opacity: 0.9; }
  66%  { transform: translate(-48%, -30%) scale(1.18); opacity: 1; }
  100% { transform: translate(-40%, -45%) scale(1.1);  opacity: 0.6; }
}
@keyframes ctaAuroraC {
  0%   { transform: translate(-50%, -50%) scale(0.9);  opacity: 0.45; }
  30%  { transform: translate(-82%, -72%) scale(1.12); opacity: 0.85; }
  60%  { transform: translate(-24%, -44%) scale(0.8);  opacity: 0.65; }
  100% { transform: translate(-50%, -50%) scale(0.9);  opacity: 0.45; }
}
/* Contenuto sempre sopra i glow */
.cta-final h2, .cta-final p, .cta-final-btn { position: relative; z-index: 1; }
/* Rispetta chi disattiva le animazioni: glow statici ma presenti */
@media (prefers-reduced-motion: reduce) {
  .cta-final::before, .cta-final::after, .cta-glow-3 { animation: none; }
}
/* Fase 5.42: su mobile il padding non deve crollare al default sezione (era una
   riduzione brusca ~44%): mantiene peso visivo alla sezione di chiusura. */
@media (max-width: 540px) { .cta-final { padding: 72px 24px; } }
.cta-final h2 {
  color: var(--on-dark);
  margin-bottom: 16px;
}
.cta-final p {
  color: rgba(250, 250, 247, 0.7);
  font-size: 17px;
  margin-bottom: 32px;
  max-width: 540px;
  margin-left: auto;
  margin-right: auto;
}
.cta-final-btn {
  display: inline-block;
  background: var(--terracotta);
  color: white;
  padding: 18px 40px;
  border-radius: 12px;
  font-size: 16px;
  font-weight: 600;
  transition: transform 0.15s var(--ease), background 0.15s var(--ease);
}
.cta-final-btn:hover { background: var(--terracotta-hover); transform: translateY(-2px); }

/* ═══════════════════════ Fase 2.5.35: Mobile responsive batch ═══════════════════════
   Audit Explore 2.5.35 ha identificato 8 punti dove il layout era stretto/sconnesso
   sotto 540px. Tutte aggiunte qui in blocco coerente per facilità di manutenzione. */
@media (max-width: 540px) {
  /* Fase 2.5.40: padding container leggermente aumentato (16 → 20) per dare
     più aria laterale. iPhone 14 viewport 390 → contenuto 350px (era 358).
     Visivamente la pagina sembra meno "schiacciata" sul bordo sinistro. */
  .container { padding: 0 20px; --container-pad: 20px; }
  .container-narrow { padding: 0 20px; }
  section { padding: 56px 0; }
  section.tight { padding: 40px 0; }
  /* Tab navigation post-audit più compatta (4 tab Panoramica/Problemi/AI Lab/Chat) */
  .tab { padding: 11px 14px; font-size: 13px; gap: 6px; }
  .tabs { gap: 2px; margin-bottom: 24px; }
  /* Dashboard widget interno padding ridotto + header impilabile */
  .dashboard-widget { padding: 18px; }
  /* Issues card (post-audit problemi) */
  .issues { padding: 20px 16px; }
  /* Footer compatto */
  .footer { padding: 24px 16px; }
}
/* Fase 2.5.37: fix mobile 390px segnalati (piani, chi-siamo, dashboard grid, account).
   iPhone 14 ha viewport 390px CSS quindi serviva un breakpoint dedicato (540 non
   bastava per padding interni grossi). */
@media (max-width: 540px) {
  .piani { padding: 56px 0; }
  .plan { padding: 22px 18px; }
  .about { padding: 40px 0 32px; }
  .about-contacts { padding: 12px 14px; font-size: 12.5px; }
  .account-section { padding: 18px 16px; border-radius: var(--r); }
  .account-section-head { padding-bottom: 10px; margin-bottom: 14px; }
  .account-section-head h3 { font-size: 18px; }
  .account-field input,
  .account-field select { font-size: 15px; }
  /* upgrade-card mobile: padding più stretto, no transform su hover (touch) */
  .account-plan-upgrade-card { padding: 16px 14px; }
  .account-plan-upgrade-card:hover { transform: none; }
  .account-plan-current { padding: 14px 16px; }
  .account-plan-current-name { font-size: 20px; }
  .account-plan-current-price-num { font-size: 26px; }
  .dashboard-head { padding: 0; }
}
@media (max-width: 380px) {
  .container { padding: 0 12px; --container-pad: 12px; }
  .container-narrow { padding: 0 12px; }
  section { padding: 44px 0; }
  .tab { padding: 10px 10px; font-size: 12.5px; }
  /* Modal-card padding ridotto su mini-iPhone (era 28-32px fisso) */
  .modal-card { padding: 18px 18px; }
  .dashboard-widget { padding: 14px; }
  .issues { padding: 16px 12px; }
  .account-section { padding: 16px 14px; }
  .account-plan-upgrade-card { padding: 14px 12px; }
  .apuc-name { font-size: 16px; }
  .apuc-price-num { font-size: 24px; }
  /* Account dropdown: nome troncato se molto lungo */
  .nav-account-dropdown-name { font-size: 13px; }
}

/* ═══════════════════════ Fase 2.5.35: Chi siamo (E-E-A-T per GEO) ═══════════════════════ */
.about { padding: 56px 0 48px; background: var(--cream-soft); }
.about-body {
  margin-top: 28px;
  max-width: 720px;
  margin-left: auto;
  margin-right: auto;
}
.about-body p {
  font-size: 15px;
  color: var(--ink-soft);
  line-height: 1.7;
  margin: 0 0 14px;
}
.about-contacts {
  margin-top: 24px;
  padding: 14px 18px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 13.5px;
  color: var(--ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.about-contacts a { color: var(--terracotta); font-weight: 600; }
.about-contacts a:hover { text-decoration: underline; }
.about-sep { color: var(--ink-muted); }

/* ═══════════════════════ Fase 5.17: API KEYS (account) ═══════════════════════ */
.api-keys-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.api-keys-list:empty { display: none; }
.api-key-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 12px;
  align-items: center;
  padding: 12px 14px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
}
.api-key-row-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.api-key-row-name { font-weight: 600; color: var(--ink); font-family: var(--font-body); font-size: 14px; }
.api-key-row-meta {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 12.5px;
  color: var(--ink-muted);
}
.api-key-row-meta strong { color: var(--ink-soft); font-weight: 600; }
.api-key-row-revoke {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 12.5px;
  padding: 6px 12px;
  border-radius: 8px;
  cursor: pointer;
}
.api-key-row-revoke:hover { color: var(--danger); border-color: var(--danger); }
.api-keys-form { margin-top: 6px; }
.api-keys-form label {
  display: block;
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted);
  margin-bottom: 6px;
}
.api-keys-form-row { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 8px; }
.api-keys-form input {
  padding: 10px 14px;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  background: #fff;
  color: var(--ink);
  min-width: 0;
}
[data-theme="dark"] .api-keys-form input { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .api-keys-form input { background: var(--cream); }
}
.api-keys-btn {
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  padding: 10px 18px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
.api-key-reveal {
  margin-top: 16px;
  padding: 16px;
  background: var(--cream-soft);
  border: 1px solid var(--terracotta);
  border-radius: 12px;
}
.api-key-reveal[hidden] { display: none !important; }
.api-key-reveal-warning {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-soft);
  margin-bottom: 10px;
}
.api-key-reveal-warning strong { color: var(--terracotta); }
.api-key-reveal-box {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  gap: 8px;
  align-items: center;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 10px;
}
.api-key-reveal-box code {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 13.5px;
  color: var(--ink);
  word-break: break-all;
}
.api-key-reveal-copy {
  background: var(--terracotta);
  color: #fff;
  border: none;
  padding: 6px 14px;
  border-radius: 6px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.api-key-reveal-close {
  background: transparent;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 13px;
  padding: 6px 14px;
  border-radius: 8px;
  cursor: pointer;
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* ═══════════════════════════════════════════════════════
   PAGINA /developers : redesign completo
   ═══════════════════════════════════════════════════════ */
/* Layout generale */
.developers-panel { display: none; }
.developers-panel.show { display: block; }
.dev-page { background: var(--cream); }
/* ── Hero (banda navy FISSA: var(--primary-deep) si inverte in dark) ── */
.dev-hero {
  background: #0f253d;
  padding: 56px 0 60px;
  position: relative;
  overflow: hidden;
}
.dev-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 60% 50% at 70% 50%,
    rgba(161,77,58,0.12) 0%, transparent 70%);
  pointer-events: none;
}
.dev-hero-inner {
  max-width: 900px;
  margin: 0 auto;
  padding: 0 24px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
  position: relative;
}
@media (max-width: 720px) {
  .dev-hero-inner { grid-template-columns: 1fr; gap: 32px; }
}
.dev-hero-eyebrow {
  font-size: 11px;
  font-weight: 700;
  font-family: var(--font-body);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--terracotta);
  margin-bottom: 12px;
}
.dev-hero-h1 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 900;
  color: #fafaf7;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin: 0 0 16px;
}
.dev-hero-lead {
  font-size: 16px;
  color: rgba(250,250,247,0.65);
  line-height: 1.7;
  margin: 0 0 28px;
}
.dev-hero-actions { display: flex; gap: 14px; flex-wrap: wrap; align-items: center; }
.dev-btn-primary {
  display: inline-block;
  background: var(--terracotta);
  color: #fff;
  border-radius: 10px;
  padding: 12px 22px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.18s var(--ease-spring), transform 0.15s;
}
.dev-btn-primary:hover { background: var(--terracotta-hover); transform: translateY(-1px); }
.dev-btn-ghost {
  display: inline-block;
  color: rgba(250,250,247,0.5);
  font-size: 14px;
  font-weight: 500;
  font-family: var(--font-body);
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: color 0.15s;
  padding: 12px 0;
}
.dev-btn-ghost:hover { color: rgba(250,250,247,0.85); }
/* Hero code block */
.dev-hero-code {
  background: rgba(15,15,15,0.6);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 14px;
  overflow: hidden;
}
.dev-hero-code .dev-code-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 16px;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.dev-hero-code .dev-code-dots {
  display: flex;
  gap: 6px;
}
.dev-hero-code .dev-code-dots span {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: rgba(255,255,255,0.15);
}
.dev-hero-code .dev-copy-btn {
  font-size: 11px;
  font-family: var(--font-body);
  font-weight: 600;
  color: rgba(250,250,247,0.45);
  background: none;
  border: none;
  cursor: pointer;
  padding: 3px 8px;
  border-radius: 5px;
  transition: background 0.15s, color 0.15s;
}
.dev-hero-code .dev-copy-btn:hover {
  background: rgba(255,255,255,0.08);
  color: rgba(250,250,247,0.85);
}
.dev-hero-code pre {
  padding: 16px;
  margin: 0;
  font-family: 'SF Mono', 'Fira Code', 'Menlo', monospace;
  font-size: 13px;
  line-height: 1.7;
  color: rgba(250,250,247,0.85);
  overflow-x: auto;
  white-space: pre;
}
.dev-hero-code .code-key   { color: rgba(250,250,247,0.45); }
.dev-hero-code .code-str   { color: #c3e88d; }
.dev-hero-code .code-url   { color: #82aaff; text-decoration: underline; text-underline-offset: 2px; }
.dev-hero-code .code-flag  { color: var(--terracotta); }
/* ── Sezioni pagina developers ─────────────────────────── */
.dev-section {
  max-width: 900px;
  margin: 0 auto;
  padding: 44px 24px;
  border-bottom: 1px solid var(--border);
}
.dev-section:last-child { border-bottom: none; }
.dev-section-h2 {
  font-family: var(--font-head);
  font-size: clamp(20px, 3vw, 28px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
}
.dev-section-lead {
  font-size: 15px;
  color: var(--ink-muted);
  margin: 0 0 32px;
  line-height: 1.6;
}
/* ── Auth steps ─────────────────────────────────────────── */
.dev-auth-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
@media (max-width: 640px) {
  .dev-auth-steps { grid-template-columns: 1fr; gap: 14px; }
}
.dev-auth-step {
  padding: 20px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
}
.dev-auth-num {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  color: var(--primary);
  opacity: 0.2;
  line-height: 1;
  margin-bottom: 8px;
}
.dev-auth-step h3 {
  font-family: var(--font-head);
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 6px;
}
.dev-auth-step p {
  font-size: 13px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.5;
}
.dev-auth-step code {
  display: inline-block;
  background: var(--cream-deep);
  border-radius: 5px;
  padding: 1px 6px;
  font-size: 12px;
  color: var(--primary);
  font-family: 'SF Mono', 'Fira Code', monospace;
}
.dev-auth-step a { color: var(--primary); text-decoration: underline; text-underline-offset: 2px; }
/* ── Endpoint cards ─────────────────────────────────────── */
.dev-endpoint-card {
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  margin-bottom: 20px;
  overflow: hidden;
  transition: box-shadow 0.18s var(--ease-spring);
}
.dev-endpoint-card:hover {
  box-shadow: 0 4px 20px rgba(15,15,15,0.07);
}
.dev-endpoint-header {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
}
.dev-method {
  display: inline-block;
  padding: 3px 9px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 700;
  font-family: 'SF Mono', 'Fira Code', monospace;
  letter-spacing: 0.04em;
  flex-shrink: 0;
}
.dev-get  { background: rgba(94,124,90,0.12);  color: var(--success); }
.dev-post { background: rgba(26,58,92,0.1);    color: var(--primary); }
.dev-path {
  font-family: 'SF Mono', 'Fira Code', monospace;
  font-size: 14px;
  color: var(--ink);
  font-weight: 500;
}
.dev-endpoint-desc {
  padding: 12px 22px 16px;
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
  border-bottom: 1px solid var(--border);
}
.dev-endpoint-desc code { color: var(--primary); }
/* Code blocks dentro endpoint (terminale: sempre scuro, colore FISSO) */
.dev-code-block {
  background: #14181c;
  position: relative;
}
/* Code block standalone (es. codici di errore, fuori da una endpoint card): angoli arrotondati */
.dev-code-block-rounded {
  border-radius: var(--r);
  overflow: hidden;
}
.dev-code-block .dev-code-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 16px;
  border-bottom: 1px solid rgba(255,255,255,0.07);
}
.dev-code-lang {
  font-size: 10px;
  font-weight: 700;
  font-family: var(--font-body);
  color: rgba(250,250,247,0.3);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.dev-copy-btn {
  font-size: 11px;
  font-family: var(--font-body);
  font-weight: 600;
  color: rgba(250,250,247,0.4);
  background: none;
  border: none;
  cursor: pointer;
  padding: 3px 8px;
  border-radius: 5px;
  transition: background 0.15s, color 0.15s;
}
.dev-copy-btn:hover { background: rgba(255,255,255,0.07); color: rgba(250,250,247,0.8); }
.dev-copy-btn.copied {
  color: var(--success) !important;
}
.dev-code-block pre {
  padding: 14px 18px;
  margin: 0;
  font-family: 'SF Mono', 'Fira Code', 'Menlo', monospace;
  font-size: 12.5px;
  line-height: 1.7;
  color: rgba(250,250,247,0.85);
  overflow-x: auto;
  white-space: pre;
}
.code-comment { color: rgba(250,250,247,0.3); }
.code-key     { color: rgba(250,250,247,0.45); }
.code-str     { color: #c3e88d; }
.code-num     { color: #f78c6c; }
.code-bool    { color: #c792ea; }
.code-url     { color: #82aaff; }
.code-flag    { color: var(--terracotta); }
/* Response toggle */
.dev-response-toggle {
  display: block;
  width: 100%;
  text-align: left;
  padding: 12px 22px;
  background: none;
  border: none;
  border-top: 1px solid var(--border);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  color: var(--primary);
  cursor: pointer;
  transition: background 0.12s;
}
.dev-response-toggle:hover { background: var(--cream-soft); }
.dev-response-toggle::after {
  content: ' \25BE';
  font-size: 11px;
  opacity: 0.6;
  transition: transform 0.2s;
  display: inline-block;
}
.dev-response-toggle.open::after { transform: rotate(180deg); }
.dev-response-body { display: none; }
.dev-response-body.open { display: block; }
/* ── Rate limits ─────────────────────────────────────────── */
.dev-limits-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
@media (max-width: 640px) {
  .dev-limits-grid { grid-template-columns: 1fr; }
}
.dev-limit-card {
  padding: 20px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  text-align: center;
}
.dev-limit-num {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
  margin-bottom: 4px;
}
.dev-limit-label {
  font-size: 12px;
  color: var(--ink-muted);
  font-weight: 500;
}
/* ── CTA developers (banda navy FISSA) ───────────────────── */
.dev-cta-section {
  text-align: center;
  padding: 52px 24px;
  background: #0f253d;
}
.dev-cta-section h2 {
  font-family: var(--font-head);
  font-size: clamp(22px, 3.5vw, 34px);
  font-weight: 700;
  color: #fafaf7;
  margin: 0 0 12px;
}
.dev-cta-section p {
  font-size: 15px;
  color: rgba(250,250,247,0.55);
  margin: 0 0 28px;
}
/* Banner piano richiesto */
.dev-plan-banner {
  background: rgba(26,58,92,0.07);
  border: 1px solid rgba(26,58,92,0.15);
  border-radius: var(--r);
  padding: 14px 20px;
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 32px;
  font-size: 14px;
  color: var(--ink-soft);
}
.dev-plan-banner a {
  color: var(--primary);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}
/* Dark mode developers (doppia forma REGOLA CSS-2) */
[data-theme="dark"] .dev-auth-step    { background: var(--cream); }
[data-theme="dark"] .dev-endpoint-card { background: var(--cream-soft); }
[data-theme="dark"] .dev-limit-card   { background: var(--cream); }
[data-theme="dark"] .dev-page         { background: var(--cream-soft); }
[data-theme="dark"] .dev-plan-banner  { background: rgba(250,250,247,0.05); border-color: rgba(250,250,247,0.1); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dev-auth-step    { background: var(--cream); }
  :root:not([data-theme="light"]) .dev-endpoint-card { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .dev-limit-card   { background: var(--cream); }
  :root:not([data-theme="light"]) .dev-page         { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .dev-plan-banner  { background: rgba(250,250,247,0.05); border-color: rgba(250,250,247,0.1); }
}

/* ═══════════════════════ FOOTER ═══════════════════════
   Fase 2.5.78: redesign. Era ink puro (nero triste). Ora:
   - sfondo cream-deep (continuita' col resto della pagina)
   - colonna brand a sinistra con stella + tagline
   - gradient sottile dall'alto per "elevarlo" dalla pagina senza essere scuro */
/* ── Fase 5.88: sezione "Guadagna con Trovavio" (referral) ──
   Sfondo --surface-deep: navy in light (#0f253d) e resta scuro in dark
   (#182532), quindi il testo chiaro funziona in entrambi i temi senza
   override (a differenza di --primary-deep, che in dark si schiarisce). */
.referral-section {
  /* Fase 5.94 (A3): navy fisso, sempre scuro anche in dark mode (eccezione
     approvata: testo chiaro su #0f253d funziona in entrambi i temi). */
  background: #0f253d;
  padding: 96px 24px;
}
.referral-inner {
  max-width: 1080px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 400px;
  gap: 80px;
  align-items: center;
}
.referral-eyebrow {
  display: inline-block;
  font: 600 11px/1 "Inter", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--terracotta);
  margin-bottom: 16px;
}
.referral-title {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 42px);
  font-weight: 700;
  /* Banda navy fissa: colore chiaro fisso (in dark var(--cream) diventava quasi
     nero -> titolo illeggibile sullo sfondo #0f253d). */
  color: #fafaf7;
  letter-spacing: -0.02em;
  line-height: 1.15;
  margin: 0 0 20px;
}
.referral-desc {
  font: 400 18px/1.6 "Inter", sans-serif;
  color: rgba(250,250,247,0.75);
  margin: 0 0 36px;
  max-width: 480px;
}
.referral-examples { display: flex; flex-direction: column; gap: 10px; margin-bottom: 36px; }
.referral-example { display: flex; align-items: center; gap: 12px; font: 500 15px "Inter", sans-serif; }
.re-plan { color: rgba(250,250,247,0.6); min-width: 110px; }
.re-arrow { color: rgba(250,250,247,0.3); }
.re-earn { color: #fafaf7; font-weight: 600; }
.referral-cta {
  display: inline-block;
  background: var(--terracotta);
  color: white;
  font: 600 15px "Inter", sans-serif;
  padding: 14px 28px;
  border-radius: 10px;
  text-decoration: none;
  transition: opacity 150ms;
  margin-bottom: 16px;
}
.referral-cta:hover { opacity: 0.88; }
.referral-note { font: 400 13px "Inter", sans-serif; color: rgba(250,250,247,0.4); margin: 0; }
.referral-card {
  background: rgba(250,250,247,0.06);
  border: 1px solid rgba(250,250,247,0.12);
  border-radius: 18px;
  padding: 36px 32px;
}
.rc-icon { margin-bottom: 20px; opacity: 0.9; }
.rc-title {
  font: 500 13px "Inter", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: rgba(250,250,247,0.5);
  margin-bottom: 8px;
}
.rc-amount {
  font-family: var(--font-head);
  font-size: 64px;
  font-weight: 700;
  color: #fafaf7;
  letter-spacing: -0.03em;
  line-height: 1;
  margin-bottom: 4px;
}
.rc-sub { font: 400 14px "Inter", sans-serif; color: rgba(250,250,247,0.5); margin-bottom: 28px; }
.rc-divider { height: 1px; background: rgba(250,250,247,0.1); margin-bottom: 20px; }
.rc-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 0;
  font: 400 14px "Inter", sans-serif;
  color: rgba(250,250,247,0.7);
  border-bottom: 1px solid rgba(250,250,247,0.06);
}
.rc-row:last-child { border-bottom: none; }
.rc-check { color: #5e7c5a; font-weight: 700; font-size: 16px; }
@media (max-width: 768px) {
  .referral-inner { grid-template-columns: 1fr; gap: 48px; }
  .referral-card { padding: 28px 24px; }
  .rc-amount { font-size: 48px; }
  .referral-section { padding: 64px 20px; }
}

.footer {
  /* Fase 5.8.4: uniformato a --cream (stesso bg del body) per non introdurre
     un colore extra-palette. Border-top separa visivamente dalla sezione
     precedente. Il ::before gradient (terracotta-tint molto leggero) resta
     come accent brand, non è un colore di sfondo nuovo. */
  background: var(--cream);
  color: var(--ink-soft);
  padding: 48px 24px 28px;
  font-size: 13.5px;
  border-top: 1px solid var(--border);
  position: relative;
}
.footer::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  right: 0;
  height: 32px;
  background: linear-gradient(to bottom, rgba(161, 77, 58, 0.04), transparent);
  pointer-events: none;
}
.footer-inner {
  max-width: 1080px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.6fr 1fr 1fr;
  gap: 48px;
  align-items: start;
  text-align: left;
}
.footer-brand {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
/* Fase 2.5.83: solo logo immagine, niente word-mark testuale */
.footer-brand-mark {
  display: inline-block;
  text-decoration: none;
}
.footer-brand-mark img { display: block; flex-shrink: 0; width: 56px; height: 56px; object-fit: contain; }
.footer-brand-logo { display: block; flex-shrink: 0; width: 40px; height: 40px; }
.footer-tagline {
  font-size: 13.5px;
  color: var(--ink-muted);
  max-width: 320px;
  line-height: 1.55;
  margin: 0;
}
.footer-col-title {
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ink);
  margin-bottom: 14px;
}
.footer-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.footer-list a {
  color: var(--ink-soft);
  /* Link di testo distinguibili anche senza colore: underline (WCAG link in text). */
  text-decoration: underline;
  text-underline-offset: 2px;
  font-size: 13.5px;
  transition: color 0.15s var(--ease);
}
.footer-list a:hover { color: var(--terracotta); }
/* Credito "Stripe Climate" nel footer: link inline, underline per distinguibilita'. */
.footer-climate-text a { text-decoration: underline; text-underline-offset: 2px; }
.footer-bottom {
  grid-column: 1 / -1;
  padding-top: 24px;
  margin-top: 16px;
  border-top: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
}
.footer-copy {
  font-size: 12.5px;
  color: var(--ink-muted);
}
/* Fase 2.5.81: tablet (641-880) footer leggermente più compatto così
   le 3 colonne respirano senza scivolare in 1 col. */
@media (max-width: 880px) and (min-width: 641px) {
  .footer-inner { grid-template-columns: 1.4fr 1fr 1fr; gap: 32px; }
  .footer-tagline { max-width: 100%; font-size: 13px; }
}
/* Fase 2.5.81: iOS no-zoom su TUTTI gli input critici sotto 540px.
   Safari iOS zooma sull'input se font-size < 16px al focus. */
@media (max-width: 540px) {
  .hero-form input,
  .auth-field input,
  .account-field input,
  .account-field select,
  textarea { font-size: 16px; }
}
@media (max-width: 640px) {
  .footer { padding: 36px 20px 24px; }
  .footer-inner { grid-template-columns: 1fr; text-align: center; gap: 28px; }
  .footer-brand { align-items: center; text-align: center; }
  .footer-tagline { text-align: center; max-width: 100%; }
  .footer-list { align-items: center; }
}
.footer-row { line-height: 1.6; }
.footer-row strong { color: var(--ink); font-weight: 700; }
.footer-meta { font-size: 12.5px; color: var(--ink-muted); display: flex; justify-content: center; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 24px; padding-top: 18px; border-top: 1px solid var(--border); }
.footer-meta a { color: var(--ink-soft); text-decoration: underline; }
.footer-meta a:hover { color: var(--terracotta); }
.footer-meta time { color: var(--ink-soft); }

/* Fase 2.5.83: layout climate row flex inline center con icona + testo wrap
   naturale. La pagina su mobile mostrava icona+testo a destra+link a capo. */
.footer-climate {
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink-muted) !important;
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
  text-align: center;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: center;
  line-height: 1.5;
}
.footer-climate-leaf { flex-shrink: 0; }
.footer-climate-text { color: var(--ink-muted) !important; }
.footer-climate a {
  color: var(--primary) !important;
  text-decoration: none;
  font-weight: 600;
  white-space: nowrap;
}
.footer-climate a:hover { color: var(--terracotta) !important; text-decoration: underline; }
@media (max-width: 540px) {
  .about { padding: 40px 0 32px; }
  .about-body p { font-size: 14px; }
  .about-contacts { font-size: 12.5px; gap: 6px; }
  .footer-meta { gap: 6px; font-size: 12px; }
}

/* ═══════════════════════ APP / AUDIT RESULT ═══════════════════════ */
#app {
  display: none;
  padding: 60px 0;
  background: var(--cream);
  min-height: 80vh;
}
#app.show { display: block; }

.app-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-wrap: wrap;
  gap: 24px;
  margin-bottom: 40px;
  padding-bottom: 32px;
  border-bottom: 1px solid var(--border);
}
.app-header h2 {
  font-size: clamp(24px, 3vw, 32px);
  margin-bottom: 4px;
}
.app-header .url {
  font-size: 13px;
  color: var(--ink-muted);
  font-family: 'SF Mono', Menlo, Consolas, monospace;
}
.app-back {
  font-size: 14px;
  color: var(--ink-muted);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.app-back:hover { color: var(--ink); }

.score-row {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 40px;
  align-items: center;
  background: var(--primary-deep);
  color: var(--on-dark);
  padding: 36px;
  border-radius: var(--r-lg);
  margin-bottom: 40px;
}
@media (max-width: 720px) {
  .score-row { grid-template-columns: 1fr; text-align: center; }
}
.score-circle {
  width: 140px;
  height: 140px;
  border-radius: 50%;
  background: rgba(255,255,255,0.05);
  border: 3px solid var(--terracotta);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  margin: 0 auto;
  animation: scorePulse 0.8s var(--ease);
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.score-circle:hover {
  transform: scale(1.04);
  box-shadow: 0 0 0 8px rgba(161, 77, 58, 0.12);
}
@keyframes scorePulse {
  0%   { transform: scale(0.6); opacity: 0; }
  60%  { transform: scale(1.06); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}
.score-num {
  font-family: var(--font-head);
  font-size: 56px;
  font-weight: 900;
  line-height: 1;
  color: var(--on-dark);
  letter-spacing: -0.04em;
}
.score-label {
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(250, 250, 247, 0.6);
  margin-top: 4px;
}
/* Fase 5.34: pill verdetto in una parola. Colore = var semantica per fascia
   (già con variante dark), bordo currentColor: leggibile in light e dark. */
.score-verdict {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 3px 11px;
  border-radius: 99px;
  border: 1px solid currentColor;
  background: transparent;
  margin-bottom: 9px;
}
.score-verdict[hidden] { display: none !important; }
/* Specificità alzata con .score-summary: in dark mode esistono override
   testo (var(--on-dark)) che colpiscono i discendenti di .score-summary e
   vincevano sul colore di fascia.
   Fase 5.41: la .score-row è SEMPRE navy scuro (light: --primary-deep #0f253d,
   dark: --surface-deep). Quindi il verdetto va colorato per contrastare sul
   NAVY, non sulla pagina. Le var semantiche fallivano: in light "buono" =
   var(--primary) #1a3a5c = navy su navy = invisibile. Uso le varianti chiare
   fisse (on-dark) che restano leggibili sul navy in entrambi i temi. */
.score-summary .score-verdict.critico { color: #e0917a; }
.score-summary .score-verdict.migliorare { color: #e0a566; }
.score-summary .score-verdict.buono { color: #8fb0d6; }
.score-summary .score-verdict.ottimo { color: #8fc98a; }
.score-summary h3 {
  color: var(--on-dark);
  font-size: 24px;
  margin-bottom: 8px;
}
.score-summary p {
  color: rgba(250, 250, 247, 0.75);
  font-size: 15px;
  line-height: 1.6;
}

.subscores {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 40px;
}
@media (max-width: 720px) {
  .subscores { grid-template-columns: repeat(2, 1fr); }
}

/* Fase 5.72: grafico andamento punteggio nel tempo (report + dashboard).
   Colori via variabili: SEO navy --primary, GEO --terracotta, Complessivo
   --ink-muted tratteggiato. Tutto adatta al dark mode tramite le var. */
.score-trend {
  background: white;
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 18px 18px 14px;
  margin-bottom: 40px;
}
/* Fase 5.77 review: toggle via hidden + dark mode (il bianco hardcoded
   restava chiaro in dark). Override in entrambe le forme. */
.score-trend[hidden] { display: none !important; }
.score-trend-badge[hidden] { display: none !important; }
[data-theme="dark"] .score-trend { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .score-trend { background: var(--cream-soft); }
}
.score-trend-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 12px;
}
.score-trend-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  margin: 0;
  color: var(--ink);
}
.score-trend-chart { width: 100%; }
.score-trend-svg { display: block; width: 100%; overflow: visible; }
.score-trend-grid { stroke: var(--border); stroke-width: 1; opacity: 0.6; }
.score-trend-svg .trend-seo { stroke: var(--primary); }
.score-trend-svg .trend-geo { stroke: var(--terracotta); }
.score-trend-svg .trend-overall { stroke: var(--ink-muted); }
.score-trend-dot { fill: var(--primary); cursor: pointer; }
.score-trend-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin-top: 10px;
  font-size: 12.5px;
  color: var(--ink-muted);
}
.score-trend-leg { display: inline-flex; align-items: center; gap: 6px; }
.score-trend-leg-line {
  display: inline-block;
  width: 16px;
  height: 0;
  border-top: 2px solid currentColor;
}
.score-trend-leg-line.trend-seo { border-top-color: var(--primary); }
.score-trend-leg-line.trend-geo { border-top-color: var(--terracotta); }
.score-trend-leg-line.trend-overall { border-top-style: dashed; border-top-color: var(--ink-muted); }
.score-trend-badge {
  display: inline-flex;
  align-items: center;
  font-size: 12.5px;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 99px;
  white-space: nowrap;
}
.score-trend-badge.trend-up { background: rgba(94, 124, 90, 0.14); color: #4f7049; }
.score-trend-badge.trend-down { background: rgba(184, 115, 46, 0.16); color: #9a6020; }
.score-trend-badge.trend-flat { background: var(--cream-deep); color: var(--ink-muted); }
[data-theme="dark"] .score-trend-badge.trend-up { color: #8fc187; }
[data-theme="dark"] .score-trend-badge.trend-down { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .score-trend-badge.trend-up { color: #8fc187; }
  :root:not([data-theme="light"]) .score-trend-badge.trend-down { color: #e0a463; }
}

/* S1: pannello "Cosa è cambiato dall'ultima scansione" (delta punteggio +
   problemi nuovi/risolti). Colori up/down identici a .score-trend-badge. */
.audit-diff {
  margin-top: 16px;
  padding: 16px 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 16px;
}
.audit-diff[hidden] { display: none !important; }
.audit-diff-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 12px;
}
.audit-diff-title { font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); }
.audit-diff-since { font-size: 12px; color: var(--ink-muted); }
.audit-diff-scores { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.audit-diff-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: 99px;
  font-size: 13px; font-weight: 600;
  background: var(--cream-deep); color: var(--ink-muted);
}
.audit-diff-pill .adp-label { color: var(--ink-muted); font-weight: 500; }
.audit-diff-pill.up { background: rgba(94, 124, 90, 0.14); color: #4f7049; }
.audit-diff-pill.down { background: rgba(184, 115, 46, 0.16); color: #9a6020; }
[data-theme="dark"] .audit-diff-pill.up { color: #8fc187; }
[data-theme="dark"] .audit-diff-pill.down { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .audit-diff-pill.up { color: #8fc187; }
  :root:not([data-theme="light"]) .audit-diff-pill.down { color: #e0a463; }
}
.audit-diff-lists { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 560px) { .audit-diff-lists { grid-template-columns: 1fr; } }
.audit-diff-col-title {
  font-size: 12px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.04em; margin: 0 0 8px;
}
.audit-diff-col.resolved .audit-diff-col-title,
.audit-diff-col.resolved .adl-ic { color: #4f7049; }
.audit-diff-col.new .audit-diff-col-title,
.audit-diff-col.new .adl-ic { color: #9a6020; }
[data-theme="dark"] .audit-diff-col.resolved .audit-diff-col-title,
[data-theme="dark"] .audit-diff-col.resolved .adl-ic { color: #8fc187; }
[data-theme="dark"] .audit-diff-col.new .audit-diff-col-title,
[data-theme="dark"] .audit-diff-col.new .adl-ic { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .audit-diff-col.resolved .audit-diff-col-title,
  :root:not([data-theme="light"]) .audit-diff-col.resolved .adl-ic { color: #8fc187; }
  :root:not([data-theme="light"]) .audit-diff-col.new .audit-diff-col-title,
  :root:not([data-theme="light"]) .audit-diff-col.new .adl-ic { color: #e0a463; }
}
.audit-diff-ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.audit-diff-li { display: flex; gap: 8px; font-size: 13px; line-height: 1.4; color: var(--ink); }
.audit-diff-li .adl-ic { flex-shrink: 0; font-weight: 700; }
.audit-diff-more { font-size: 12px; color: var(--ink-muted); margin-top: 6px; }
.audit-diff-none { font-size: 13px; color: var(--ink-muted); margin: 0; }

/* S2: banner di allerta in cima al report. Palette esistente: terracotta per il
   critico, marrone-ambra (stesso del trend "in giù") per l'avviso. */
.site-alert { display: flex; gap: 12px; align-items: flex-start; margin-top: 16px; padding: 14px 16px; border-radius: 14px; border: 1px solid var(--border); background: var(--cream-soft); }
.site-alert[hidden] { display: none !important; }
.site-alert-ic { flex-shrink: 0; width: 26px; height: 26px; border-radius: 99px; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 15px; }
.site-alert-body { min-width: 0; }
.site-alert-title { font-family: var(--font-head); font-size: 14px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.site-alert-list { margin: 0; padding-left: 18px; font-size: 13px; line-height: 1.5; color: var(--ink); }
.site-alert.critical { background: rgba(161, 77, 58, 0.12); border-color: rgba(161, 77, 58, 0.4); }
.site-alert.critical .site-alert-ic { background: var(--terracotta); color: var(--cream); }
.site-alert.warning { background: rgba(184, 115, 46, 0.1); border-color: rgba(184, 115, 46, 0.32); }
.site-alert.warning .site-alert-ic { background: var(--cream-deep); color: #9a6020; }
[data-theme="dark"] .site-alert.warning .site-alert-ic { color: #e0a463; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .site-alert.warning .site-alert-ic { color: #e0a463; } }

/* S3: selettore cadenza controllo automatico (segmented, stile pill). */
.scanfreq-seg { display: inline-flex; flex-wrap: wrap; gap: 2px; background: var(--cream-deep); border: 1px solid var(--border); border-radius: 99px; padding: 3px; }
.scanfreq-btn { border: none; background: transparent; color: var(--ink-muted); font-family: var(--font-body); font-size: 13px; font-weight: 600; padding: 7px 15px; border-radius: 99px; cursor: pointer; }
.scanfreq-btn:hover { color: var(--ink); }
.scanfreq-btn.is-active { background: var(--primary-fondo); color: #fff; }

/* S4: piano d'azione del mese (Solo+). Lista spuntabile + barra progresso. */
.action-plan { margin-top: 16px; padding: 16px 18px; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 16px; }
.action-plan[hidden] { display: none !important; }
.action-plan-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.action-plan-title { display: block; font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); }
.action-plan-sub { display: block; font-size: 12px; color: var(--ink-muted); margin-top: 3px; }
.action-plan-progress { font-size: 12px; font-weight: 700; color: var(--ink-muted); white-space: nowrap; }
.action-plan-progress[hidden] { display: none !important; }
.action-plan-empty, .action-plan-locked { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.action-plan-empty[hidden], .action-plan-locked[hidden], .action-plan-body[hidden], .action-plan-loading[hidden] { display: none !important; }
.action-plan-empty-text, .action-plan-locked-text { font-size: 13px; color: var(--ink-muted); margin: 0; line-height: 1.5; }
.action-plan-btn { padding: 10px 18px; border: none; border-radius: 10px; background: var(--primary-fondo); color: #fff; font-family: var(--font-body); font-weight: 600; font-size: 13px; cursor: pointer; }
.action-plan-btn:hover { opacity: 0.92; }
.action-plan-btn:disabled { opacity: 0.6; cursor: default; }
.action-plan-cost { font-size: 11px; color: var(--ink-muted); }
.action-plan-bar { height: 6px; background: var(--cream-deep); border-radius: 99px; overflow: hidden; margin-bottom: 14px; }
.action-plan-bar-fill { height: 100%; width: 0; background: var(--terracotta); border-radius: 99px; transition: width 0.3s var(--ease, ease); }
.action-plan-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.action-plan-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; background: var(--cream); border: 1px solid var(--border); border-radius: 12px; }
.action-plan-check { flex-shrink: 0; margin-top: 2px; width: 17px; height: 17px; accent-color: var(--terracotta); cursor: pointer; }
.action-plan-item-body { min-width: 0; flex: 1; }
.action-plan-action { font-size: 13px; font-weight: 600; color: var(--ink); line-height: 1.45; }
.action-plan-why { font-size: 12px; color: var(--ink-muted); margin-top: 3px; line-height: 1.45; }
.action-plan-time { font-size: 11px; color: var(--ink-muted); white-space: nowrap; flex-shrink: 0; margin-top: 2px; }
.action-plan-item.is-done .action-plan-action { text-decoration: line-through; color: var(--ink-muted); }
.action-plan-foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.action-plan-generated { font-size: 11px; color: var(--ink-muted); }
.action-plan-regen { border: 1px solid var(--border); background: transparent; color: var(--ink-muted); font-family: var(--font-body); font-size: 12px; font-weight: 600; padding: 7px 13px; border-radius: 10px; cursor: pointer; }
.action-plan-regen:hover { color: var(--ink); border-color: var(--primary); }
.action-plan-loading { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--ink-muted); }
.action-plan-spinner { width: 15px; height: 15px; border-radius: 50%; border: 2px solid var(--cream-deep); border-top-color: var(--terracotta); animation: aivisSpin 0.8s linear infinite; }
[data-theme="dark"] .action-plan-item { background: var(--cream); border-color: var(--border); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .action-plan-item { background: var(--cream); border-color: var(--border); } }

/* P4: pannello controllo link interni rotti (Pro+). */
.linkcheck { margin-top: 16px; padding: 16px 18px; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 16px; }
.linkcheck[hidden] { display: none !important; }
/* hidden vince su display:flex solo con questa guardia esplicita (gotcha noto). */
.linkcheck-actions[hidden] { display: none !important; }
.linkcheck-loading[hidden] { display: none !important; }
.linkcheck-locked[hidden] { display: none !important; }
.linkcheck-msg[hidden] { display: none !important; }
.linkcheck-result[hidden] { display: none !important; }
.linkcheck-head { margin-bottom: 12px; }
.linkcheck-title { display: block; font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); }
.linkcheck-sub { display: block; font-size: 12.5px; color: var(--ink-muted); margin-top: 3px; line-height: 1.4; }
.linkcheck-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.linkcheck-btn { padding: 10px 18px; border: none; border-radius: 10px; background: var(--primary-fondo); color: var(--on-dark); font-family: var(--font-body); font-size: 14px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; }
.linkcheck-btn:hover { opacity: 0.92; }
.linkcheck-btn:disabled { opacity: 0.6; cursor: default; }
.linkcheck-upgrade { background: var(--terracotta); }
.linkcheck-note { font-size: 11.5px; color: var(--ink-muted); }
.linkcheck-loading { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--ink-muted); }
.linkcheck-spinner { width: 15px; height: 15px; border-radius: 50%; border: 2px solid var(--cream-deep); border-top-color: var(--primary); animation: aivisSpin 0.8s linear infinite; }
.linkcheck-msg { margin-top: 10px; font-size: 13px; padding: 10px 12px; border-radius: 10px; background: var(--cream); border: 1px solid var(--border); color: var(--ink); }
/* Tinte con bordo colorato come .site-alert: le rgba a bassa opacità da sole
   spariscono sul fondo scuro, il bordo a 0.35 si legge in entrambi i temi. */
.linkcheck-msg.error { background: rgba(178,59,59,0.12); border-color: rgba(178,59,59,0.35); color: var(--danger, #b23b3b); }
.linkcheck-msg.ok { background: rgba(46,125,84,0.14); border-color: rgba(46,125,84,0.35); }
.linkcheck-result { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
.linkcheck-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; background: var(--cream); border: 1px solid var(--border); border-radius: 12px; }
.linkcheck-code { flex-shrink: 0; font-size: 11px; font-weight: 700; padding: 3px 8px; border-radius: 99px; background: rgba(161,77,58,0.14); color: var(--terracotta); }
.linkcheck-item-body { min-width: 0; }
/* url e motivo sono span: senza display:block finirebbero incollati sulla
   stessa riga ("...paginaLa pagina non esiste"). */
.linkcheck-url { display: block; font-size: 12.5px; font-weight: 600; color: var(--ink); word-break: break-all; }
.linkcheck-why { display: block; font-size: 12px; color: var(--ink-muted); margin-top: 3px; line-height: 1.45; }
.linkcheck-locked { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.linkcheck-locked-text { font-size: 13px; color: var(--ink-muted); margin: 0; }
/* NB: qui NON va incluso .linkcheck-msg. Ha la stessa specificità di
   .linkcheck-msg.ok/.error ma viene dopo nel file, quindi ne azzererebbe le
   tinte: in dark i messaggi "nessun link rotto" / "N rotti" perderebbero il
   colore. Il fondo base di .linkcheck-msg è già var(--cream), che si adatta da
   solo. Verificato dal vivo in dark. */
[data-theme="dark"] .linkcheck-item { background: var(--cream); border-color: var(--border); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .linkcheck-item { background: var(--cream); border-color: var(--border); }
}

/* P1: pannello confronto con un concorrente (Pro+). */
.competitor-panel { margin-top: 16px; padding: 16px 18px; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 16px; }
.competitor-panel[hidden] { display: none !important; }
/* hidden vince su display:flex solo con questa guardia esplicita (gotcha noto). */
.competitor-form[hidden] { display: none !important; }
.competitor-locked[hidden] { display: none !important; }
.competitor-msg[hidden] { display: none !important; }
.competitor-result[hidden] { display: none !important; }
.competitor-head { margin-bottom: 12px; }
.competitor-title { display: block; font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); }
.competitor-sub { display: block; font-size: 12.5px; color: var(--ink-muted); margin-top: 3px; line-height: 1.4; }
.competitor-form { display: flex; gap: 8px; flex-wrap: wrap; }
.competitor-input { flex: 1; min-width: 200px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--cream); color: var(--ink); font-family: var(--font-body); font-size: 14px; }
.competitor-input:focus { outline: none; border-color: var(--primary); }
.competitor-btn { padding: 10px 18px; border: none; border-radius: 10px; background: var(--primary-fondo); color: var(--on-dark); font-family: var(--font-body); font-size: 14px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; }
.competitor-btn:hover { filter: brightness(1.08); }
.competitor-btn[disabled] { opacity: 0.6; cursor: default; }
.competitor-locked { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.competitor-locked-txt { font-size: 13px; color: var(--ink-muted); margin: 0; line-height: 1.5; }
.competitor-msg { margin-top: 12px; font-size: 13px; color: var(--ink-muted); }
.competitor-msg.error { color: var(--terracotta); }
.competitor-result { margin-top: 16px; }
.competitor-scores { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
.competitor-col { padding: 12px; border-radius: 12px; background: var(--cream-deep); text-align: center; }
.competitor-col-name { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-muted); margin-bottom: 8px; overflow: hidden; text-overflow: ellipsis; }
.competitor-col-name.you { color: var(--primary); }
[data-theme="dark"] .competitor-col-name.you { color: #8fb0d6; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .competitor-col-name.you { color: #8fb0d6; } }
.competitor-scoreline { display: flex; justify-content: space-between; align-items: baseline; font-size: 13px; padding: 3px 0; color: var(--ink); }
.competitor-scoreline .csl-lab { color: var(--ink-muted); }
.competitor-scoreline .csl-val { font-weight: 700; }
.competitor-scoreline.win .csl-val { color: #4f7049; }
[data-theme="dark"] .competitor-scoreline.win .csl-val { color: #8fc187; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .competitor-scoreline.win .csl-val { color: #8fc187; } }
.competitor-sig-row { display: grid; grid-template-columns: 1fr 52px 52px; gap: 8px; align-items: center; padding: 8px 0; border-top: 1px solid var(--border); font-size: 13px; color: var(--ink); }
.competitor-sig-row.head { border-top: none; font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: 0.03em; color: var(--ink-muted); }
.competitor-sig-cell { text-align: center; }
.competitor-sig-yes { color: #4f7049; font-weight: 700; }
.competitor-sig-no { color: var(--ink-muted); }
[data-theme="dark"] .competitor-sig-yes { color: #8fc187; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .competitor-sig-yes { color: #8fc187; } }
@media (max-width: 520px) { .competitor-scores { grid-template-columns: 1fr; } }

/* ── Fase 2.6: pannello "Come migliorare questa pagina" ──
   Stessa forma dei tre pannelli fratelli (action-plan, competitor, linkcheck):
   16px 18px LETTERALI (non var(--r-lg) che vale 18, stonerebbe coi vicini),
   fondo var(--cream-soft), bordo var(--border), radius 16px. */
.pageimprove { margin-top: 16px; padding: 16px 18px; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 16px; }
.pageimprove[hidden] { display: none !important; }
.pageimprove-pagesel[hidden] { display: none !important; }
.pageimprove-actions[hidden] { display: none !important; }
.pageimprove-loading[hidden] { display: none !important; }
.pageimprove-msg[hidden] { display: none !important; }
.pageimprove-result[hidden] { display: none !important; }
.pageimprove-locked[hidden] { display: none !important; }
.pageimprove-head { margin-bottom: 12px; }
.pageimprove-title { display: block; font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); }
.pageimprove-sub { display: block; font-size: 12.5px; color: var(--ink-muted); margin-top: 3px; line-height: 1.4; }
.pageimprove-pagesel { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
.pageimprove-pagesel-lab { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-muted); }
.pageimprove-select { width: 100%; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--cream); color: var(--ink); font-family: var(--font-body); font-size: 14px; }
.pageimprove-select:focus { outline: none; border-color: var(--primary); }
.pageimprove-actions { display: flex; flex-direction: column; gap: 10px; }
.pageimprove-btn { padding: 10px 14px; border: none; border-radius: 10px; background: var(--primary-fondo); color: var(--on-dark); font-family: var(--font-body); font-size: 13px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 7px; }
.pageimprove-btn:hover { opacity: 0.92; }
.pageimprove-btn:disabled { opacity: 0.55; cursor: default; }
.pageimprove-btn-batch { background: var(--terracotta); }
.pageimprove-upgrade { background: var(--terracotta); }
.pageimprove-cost { font-size: 11px; font-weight: 600; opacity: 0.85; }
.pageimprove-pro { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; padding: 2px 6px; border-radius: 99px; background: rgba(250,250,247,0.22); }
/* Fase 2.6.3: il menu "come migliorare" non è più 5 bottoni pieni (un muro) ma un
   elenco calmo. Le 3 azioni sullo stesso elemento (titolo/descrizione/titolo
   principale) diventano chip in UN solo gruppo; chiarezza e batch sono righe
   leggere. Solo token del tema -> il dark si ribalta da sé, niente override. */
.pi-line { border: 1px solid var(--border); border-radius: 12px; background: var(--cream); }
.pi-line-elem { padding: 11px 13px; }
.pi-line-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 9px; }
.pi-line-title { font-size: 13.5px; font-weight: 700; color: var(--ink); }
.pi-line-cost { font-size: 11px; font-weight: 600; color: var(--ink-muted); white-space: nowrap; }
.pi-chips { display: flex; flex-wrap: wrap; gap: 7px; }
.pageimprove-btn.pi-chip { background: var(--cream-deep); color: var(--ink); border: 1px solid var(--border); padding: 7px 12px; font-size: 12.5px; font-weight: 600; border-radius: 99px; }
.pageimprove-btn.pi-chip:hover { opacity: 1; border-color: var(--primary); background: var(--cream-soft); }
.pageimprove-btn.pi-line-btn { display: flex; width: 100%; justify-content: flex-start; text-align: left; padding: 12px 14px; background: var(--cream); color: var(--ink); border: 1px solid var(--border); border-radius: 12px; font-size: 13.5px; font-weight: 700; }
.pageimprove-btn.pi-line-btn:hover { opacity: 1; border-color: var(--primary); background: var(--cream-soft); }
.pi-line-btn .pi-line-cost { margin-left: auto; }
.pi-line-btn .pageimprove-pro { margin-left: auto; background: var(--terracotta); color: var(--cream); }
.pi-line-btn .pageimprove-cost { color: var(--ink-muted); opacity: 1; font-size: 11px; }
.pageimprove-loading { display: flex; align-items: center; gap: 9px; margin-top: 12px; font-size: 13px; color: var(--ink-muted); }
.pageimprove-spinner { width: 15px; height: 15px; border-radius: 50%; border: 2px solid var(--cream-deep); border-top-color: var(--terracotta); animation: aivisSpin 0.8s linear infinite; }
/* Messaggio: fondo tinto con bordo a 0.35 come .linkcheck-msg, l'unico pattern
   che sopravvive in dark (le rgba a bassa opacità da sole spariscono). */
.pageimprove-msg { margin-top: 12px; font-size: 13px; padding: 10px 12px; border-radius: 10px; background: var(--cream); border: 1px solid var(--border); color: var(--ink); line-height: 1.45; }
.pageimprove-msg.error { background: rgba(178,59,59,0.12); border-color: rgba(178,59,59,0.35); color: var(--danger, #b23b3b); }
.pageimprove-result { margin-top: 14px; display: flex; flex-direction: column; gap: 12px; }
/* Il gap sopra vale solo per i figli diretti del flex. Chiarezza e batch
   avvolgono più card in un unico .pi-card-group: senza questa regola le card
   dentro il gruppo si toccano. Stessa tecnica (gap), niente doppio bordo. */
.pi-card-group { display: flex; flex-direction: column; gap: 12px; }
/* Card consiglio: var(--cream) su var(--cream-soft), come .linkcheck-item. */
.pi-card { padding: 12px 14px; background: var(--cream); border: 1px solid var(--border); border-radius: 12px; }
/* "Già a norma": bordo verde tenue per distinguere a colpo d'occhio l'elemento
   che non serve cambiare da quelli con una proposta. */
.pi-card-ok { border-color: rgba(46,125,84,0.4); }
.pi-card-ok .pi-card-len { color: var(--success); }
.pi-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.pi-card-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-muted); }
.pi-card-len { font-size: 11px; font-weight: 600; color: var(--success); }
.pi-card-len.off { color: var(--warning-ink, #87521c); }
.pi-row { margin-bottom: 8px; }
.pi-row-lab { display: block; font-size: 11px; font-weight: 600; color: var(--ink-muted); margin-bottom: 2px; }
.pi-current { display: block; font-size: 13px; color: var(--ink-muted); text-decoration: line-through; word-break: break-word; line-height: 1.4; }
.pi-suggested { display: block; font-size: 14px; font-weight: 600; color: var(--ink); word-break: break-word; line-height: 1.45; }
.pi-why { display: block; font-size: 12.5px; color: var(--ink-muted); margin-top: 6px; line-height: 1.5; }
.pi-copy { margin-top: 10px; padding: 7px 13px; border: 1px solid var(--border); background: transparent; color: var(--ink-muted); font-family: var(--font-body); font-size: 12px; font-weight: 600; border-radius: 10px; cursor: pointer; }
.pi-copy:hover { color: var(--ink); border-color: var(--primary); }
.pi-summary { font-size: 13px; color: var(--ink); line-height: 1.5; margin: 0 0 4px; }
.pi-note { font-size: 12px; color: var(--ink-muted); line-height: 1.5; margin: 4px 0 0; }
.pageimprove-locked { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.pageimprove-locked-text { font-size: 13px; color: var(--ink-muted); margin: 0; line-height: 1.5; }
/* Dark mode in doppia forma (REGOLA CSS-2): toggle manuale + preferenza OS.
   Riafferma var(--cream) sulla card, che è il fondo giusto in entrambi i temi. */
[data-theme="dark"] .pi-card { background: var(--cream); border-color: var(--border); }
[data-theme="dark"] .pageimprove-select { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .pi-card { background: var(--cream); border-color: var(--border); }
  :root:not([data-theme="light"]) .pageimprove-select { background: var(--cream); }
}
@media (max-width: 520px) {
  /* Le righe azione a piena larghezza; le chip restano pill che vanno a capo. */
  .pageimprove-btn:not(.pi-chip) { width: 100%; }
}

/* Mini grafico nel widget dashboard "I tuoi siti" */
.dashboard-score-trend {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
}
.dashboard-score-trend-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
}
.dashboard-score-trend-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

/* ── Fase 5.86: sparkline andamento dentro il widget sito (sotto SEO/GEO) ── */
.site-sparkline {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
}
.site-sparkline[hidden] { display: none !important; }
.site-sparkline-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
}
.site-sparkline-label {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-muted);
  font-weight: 600;
}
.site-sparkline-domain {
  /* Revisione 2026-07: era nel font dei titoli (serif) e accanto alla label
     uppercase leggeva come un corsivo fuori posto. Dato tecnico: font body. */
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-soft);
  flex: 1;
  margin-left: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.site-sparkline-badge {
  font-size: 10px;
  font-weight: 600;
  border-radius: 99px;
  padding: 2px 8px;
  white-space: nowrap;
}
.site-sparkline-badge[hidden] { display: none !important; }
.site-sparkline-badge.trend-up { background: rgba(94, 124, 90, 0.14); color: #4f7049; }
.site-sparkline-badge.trend-down { background: rgba(184, 115, 46, 0.16); color: #9a6020; }
.site-sparkline-badge.trend-flat { background: var(--cream-deep); color: var(--ink-muted); }
[data-theme="dark"] .site-sparkline-badge.trend-up { color: #8fc187; }
[data-theme="dark"] .site-sparkline-badge.trend-down { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .site-sparkline-badge.trend-up { color: #8fc187; }
  :root:not([data-theme="light"]) .site-sparkline-badge.trend-down { color: #e0a463; }
}
.site-sparkline-svg { display: block; width: 100%; overflow: visible; }
.site-sparkline-legend { display: flex; gap: 12px; margin-top: 6px; }
.site-sparkline-legend[hidden] { display: none !important; }
.ssl-seo, .ssl-geo { font-size: 11px; display: inline-flex; align-items: center; }
.ssl-seo { color: var(--primary); }
.ssl-geo { color: var(--terracotta); }
.ssl-seo::before, .ssl-geo::before { content: ""; display: inline-block; width: 14px; height: 0; border-top: 2px solid currentColor; margin-right: 5px; }
.ssl-geo::before { border-top-style: dashed; }
/* Fase 6.6 P4: assi e valori del grafico Andamento (leggibili senza hover). */
.site-sparkline-svg .spk-grid { stroke: var(--border); stroke-width: 1; opacity: 0.55; }
.site-sparkline-svg .spk-axis { fill: var(--ink-muted); font-size: 9px; }
.site-sparkline-svg .spk-val { font-family: var(--font-head); font-size: 11px; font-weight: 700; }
.site-sparkline-empty {
  font-size: 12px;
  color: var(--ink-muted);
  padding: 8px 0;
  font-style: italic;
}
.site-sparkline-empty[hidden] { display: none !important; }

/* ── Fase 5.86: GSC non configurato (coming soon) ── */
.gsc-coming-soon { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-muted); padding: 8px 0; }
.badge-soon {
  font-size: 10px; background: var(--cream-deep); color: var(--ink-muted);
  padding: 2px 8px; border-radius: 99px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.05em;
}

/* ── Fase 5.86: cronologia modifiche formattata (griglia, font Inter) ── */
.history-item {
  display: grid;
  grid-template-columns: 80px 1fr auto auto;
  gap: 8px;
  align-items: center;
  padding: 8px 0;
  border-bottom: 1px solid var(--border);
  font-family: "Inter", sans-serif;
  font-size: 13px;
}
.history-item:last-child { border-bottom: none; }
.history-date { color: var(--ink-muted); font-size: 12px; flex-shrink: 0; }
.history-url { color: var(--primary); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.history-type {
  font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--ink-muted); background: var(--cream-deep); padding: 2px 8px; border-radius: 99px;
  flex-shrink: 0; white-space: nowrap;
}
.history-value { color: var(--ink-muted); font-style: italic; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.history-empty { font-family: "Inter", sans-serif; font-size: 13px; color: var(--ink-muted); padding: 12px 0; margin: 0; }
@media (max-width: 640px) {
  .history-item { grid-template-columns: auto 1fr; }
  .history-type { justify-self: start; }
}


/* Fase 5.73: blocco SEO Locale nel report (Panoramica). */
.local-score-block { margin: 0 0 28px; }
.local-score-block[hidden] { display: none !important; }
.local-score-card {
  display: flex;
  align-items: center;
  gap: 16px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 18px 20px;
}
/* Fase 5.77 review: dark mode (il bianco hardcoded restava chiaro in dark). */
[data-theme="dark"] .local-score-card { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .local-score-card { background: var(--cream-soft); }
}
.local-score-pin {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(161, 77, 58, 0.12);
  color: var(--terracotta);
}
.local-score-body { flex: 1; min-width: 0; }
.local-score-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.local-score-head h3 {
  font-family: var(--font-head);
  font-size: 19px;
  font-weight: 700;
  margin: 0;
  color: var(--ink);
}
.local-score-badge {
  display: inline-flex;
  align-items: center;
  font-size: 12.5px;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 99px;
}
.local-score-badge.good { background: rgba(94, 124, 90, 0.14); color: #4f7049; }
.local-score-badge.warn { background: rgba(184, 115, 46, 0.16); color: #9a6020; }
.local-score-badge.bad { background: rgba(161, 77, 58, 0.14); color: var(--terracotta); }
[data-theme="dark"] .local-score-badge.good { color: #8fc187; }
[data-theme="dark"] .local-score-badge.warn { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .local-score-badge.good { color: #8fc187; }
  :root:not([data-theme="light"]) .local-score-badge.warn { color: #e0a463; }
}
.local-score-desc {
  font-size: 13.5px;
  color: var(--ink-muted);
  margin: 6px 0 0;
}
.local-score-sector {
  font-size: 12.5px;
  color: var(--ink-muted);
  margin: 8px 0 0;
}
.local-score-sector[hidden] { display: none !important; }
.local-score-sector .local-sector-change {
  color: var(--terracotta);
  font-weight: 600;
  text-decoration: none;
  margin-left: 4px;
}
.local-score-sector .local-sector-change:hover { text-decoration: underline; }
.local-score-num-wrap { flex-shrink: 0; text-align: center; min-width: 64px; }
.local-score-num {
  font-family: var(--font-head);
  font-size: 34px;
  font-weight: 900;
  line-height: 1;
  color: var(--primary);
}
.local-score-num-label {
  font-size: 11px;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-top: 4px;
}
.local-score-num.good { color: #4f7049; }
.local-score-num.warn { color: #9a6020; }
.local-score-num.bad { color: var(--terracotta); }
[data-theme="dark"] .local-score-num.good { color: #8fc187; }
[data-theme="dark"] .local-score-num.warn { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .local-score-num.good { color: #8fc187; }
  :root:not([data-theme="light"]) .local-score-num.warn { color: #e0a463; }
}
@media (max-width: 560px) {
  .local-score-card { flex-wrap: wrap; }
  .local-score-num-wrap { order: -1; }
}
/* Icona pin accanto al titolo delle issue SEO Locale. */
.issue-local-pin { vertical-align: middle; margin-right: 6px; color: var(--terracotta); }

/* ═══════════ Fase 5.74: Content Brief AI ═══════════ */
.brief-tool-card {
  display: flex;
  align-items: center;
  gap: 16px;
  background: white;
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 18px 20px;
}
.brief-tool-icon {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--primary-fondo);
  color: #fafaf7;
}
.brief-tool-body { flex: 1; min-width: 0; }
.brief-tool-eyebrow {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--terracotta);
  margin-bottom: 2px;
}
.brief-tool-title { font-family: var(--font-head); font-size: 19px; font-weight: 700; margin: 0; color: var(--ink); }
.brief-tool-desc { font-size: 13.5px; color: var(--ink-muted); margin: 4px 0 0; }
.brief-tool-btn {
  flex-shrink: 0;
  background: var(--terracotta);
  color: #fafaf7;
  border: none;
  border-radius: 11px;
  padding: 11px 18px;
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  transition: transform 0.12s ease, opacity 0.12s ease;
}
.brief-tool-btn:hover { transform: translateY(-1px); opacity: 0.94; }
@media (max-width: 560px) {
  .brief-tool-card { flex-wrap: wrap; }
  .brief-tool-btn { width: 100%; }
}

/* Modale brief */
.brief-modal-card { max-width: 640px; width: 100%; text-align: left; max-height: 88vh; overflow-y: auto; }
.brief-modal-title { font-family: var(--font-head); font-size: 22px; font-weight: 700; margin: 0 0 4px; color: var(--ink); }
.brief-modal-sub { font-size: 13.5px; color: var(--ink-muted); margin: 0 0 18px; }
.brief-field { margin-bottom: 14px; }
.brief-field label { display: block; font-size: 13px; font-weight: 600; color: var(--ink); margin-bottom: 6px; }
.brief-field input, .brief-field select {
  width: 100%;
  padding: 11px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  font-size: 14px;
  font-family: "Inter", sans-serif;
  background: var(--cream);
  color: var(--ink);
}
.brief-field input:focus, .brief-field select:focus { outline: none; border-color: var(--terracotta); }
.brief-field-row { display: flex; gap: 12px; }
.brief-field-row .brief-field { flex: 1; }
@media (max-width: 480px) { .brief-field-row { flex-wrap: wrap; } }
.brief-form-actions { display: flex; align-items: center; gap: 12px; margin-top: 4px; }
.brief-generate-btn {
  background: var(--terracotta);
  color: #fafaf7;
  border: none;
  border-radius: 11px;
  padding: 11px 20px;
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
}
.brief-generate-btn:disabled { opacity: 0.6; cursor: default; }
.brief-cost-note { font-size: 12px; color: var(--ink-muted); }
.brief-form-err {
  background: rgba(161, 77, 58, 0.1);
  color: var(--terracotta);
  border-radius: 10px;
  padding: 10px 12px;
  font-size: 13px;
  margin-bottom: 12px;
}
.brief-form-err[hidden] { display: none !important; }
.brief-loading { text-align: center; padding: 28px 0; color: var(--ink-muted); }
.brief-loading[hidden] { display: none !important; }
.brief-spinner {
  width: 32px; height: 32px;
  border: 3px solid var(--border);
  border-top-color: var(--terracotta);
  border-radius: 50%;
  margin: 0 auto 12px;
  animation: brief-spin 0.8s linear infinite;
}
@keyframes brief-spin { to { transform: rotate(360deg); } }
.brief-result[hidden] { display: none !important; }
.brief-block { margin-bottom: 18px; }
.brief-block-label {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--ink-muted); margin-bottom: 6px; display: block;
}
.brief-h1-box {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-left: 4px solid var(--terracotta);
  border-radius: 12px;
  padding: 14px 16px;
}
.brief-h1-badge {
  display: inline-block; font-size: 11px; font-weight: 700; color: var(--terracotta);
  text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px;
}
.brief-h1-text { font-family: var(--font-head); font-size: 20px; font-weight: 700; color: var(--ink); line-height: 1.25; }
.brief-fieldline {
  display: flex; align-items: flex-start; gap: 10px;
  background: var(--cream-soft); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px; margin-bottom: 8px;
}
.brief-fieldline-text { flex: 1; min-width: 0; font-size: 13.5px; color: var(--ink); word-break: break-word; }
.brief-fieldline-text .brief-len { color: var(--ink-muted); font-size: 11.5px; margin-left: 6px; }
.brief-copy-btn {
  flex-shrink: 0; background: var(--cream); border: 1px solid var(--border);
  border-radius: 8px; padding: 5px 10px; font-size: 12px; cursor: pointer; color: var(--ink); font-weight: 600;
}
.brief-copy-btn:hover { border-color: var(--terracotta); color: var(--terracotta); }
.brief-kw-focus {
  display: inline-block; background: rgba(161,77,58,0.12); color: var(--terracotta);
  font-weight: 700; padding: 4px 12px; border-radius: 99px; font-size: 14px;
}
.brief-kw-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.brief-kw-chip { background: var(--cream-soft); border: 1px solid var(--border); border-radius: 99px; padding: 4px 11px; font-size: 12.5px; color: var(--ink-muted); }
.brief-struct-list { list-style: none; margin: 0; padding: 0; counter-reset: bstep; }
.brief-struct-item {
  position: relative; padding: 10px 0 10px 34px; border-bottom: 1px solid var(--border);
}
.brief-struct-item:last-child { border-bottom: none; }
.brief-struct-item::before {
  counter-increment: bstep; content: counter(bstep);
  position: absolute; left: 0; top: 10px;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--primary-fondo); color: #fafaf7; font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.brief-struct-type { font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--terracotta); margin-right: 6px; }
.brief-struct-text { font-weight: 600; color: var(--ink); font-size: 14px; }
.brief-struct-note { font-size: 12.5px; color: var(--ink-muted); margin-top: 3px; }
.brief-struct-faq { margin: 6px 0 0; padding-left: 18px; }
.brief-struct-faq li { font-size: 13px; color: var(--ink); margin-bottom: 3px; }
.brief-tips { list-style: none; margin: 0; padding: 0; }
.brief-tips li { position: relative; padding: 5px 0 5px 22px; font-size: 13.5px; color: var(--ink); }
.brief-tips li::before { content: ""; position: absolute; left: 4px; top: 11px; width: 6px; height: 6px; border-radius: 50%; background: var(--terracotta); }
.brief-schema-pill { display: inline-block; font-family: "JetBrains Mono", monospace, monospace; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 8px; padding: 5px 10px; font-size: 13px; color: var(--primary); font-weight: 600; }
.brief-result-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--border); }
.brief-result-actions[hidden] { display: none !important; }
.brief-wp-keyrow { margin-top: 12px; }
.brief-wp-keyrow[hidden] { display: none !important; }
.brief-wp-keyrow-label { font-size: 12.5px; color: var(--ink-muted); margin: 0 0 6px; }
.brief-wp-keyrow-input { display: flex; gap: 8px; }
.brief-wp-keyrow-input input { flex: 1; padding: 9px 11px; border: 1px solid var(--border); border-radius: 10px; font-size: 13px; background: var(--cream); color: var(--ink); }
/* Dark mode: i box bianchi/cream del brief seguono le variabili, qui solo i
   contenitori che usano white esplicito. */
[data-theme="dark"] .brief-tool-card { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .brief-tool-card { background: var(--cream-soft); }
}

/* ═══════════ Fase 5.75: Test visibilità AI ═══════════ */
.vis-tool-icon { background: var(--terracotta); }
.vis-history { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.vis-history[hidden] { display: none !important; }
.vis-history-item {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--cream-soft); border: 1px solid var(--border);
  border-radius: 99px; padding: 3px 10px; font-size: 12px; color: var(--ink-muted);
}
.vis-history-score { font-weight: 700; }
.vis-history-score.good { color: #4f7049; }
.vis-history-score.warn { color: #9a6020; }
.vis-history-score.bad { color: var(--terracotta); }
/* Dark: verde/giallo scuro sarebbero scuro-su-scuro nella cronologia (badge su
   --cream-soft). Schiarisco come i fratelli .vis-score-label/.vis-score-circle. */
[data-theme="dark"] .vis-history-score.good { color: #8fc187; }
[data-theme="dark"] .vis-history-score.warn { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .vis-history-score.good { color: #8fc187; }
  :root:not([data-theme="light"]) .vis-history-score.warn { color: #e0a463; }
}
.vis-modal-card { max-width: 620px; width: 100%; text-align: left; max-height: 88vh; overflow-y: auto; }
/* Fase 5.97: modali brief/visibilità più larghe per dare respiro al contenuto
   (risposta AI, struttura). Doppia classe = specificità > .modal-card{580px}. */
.modal-card.brief-modal-card, .modal-card.vis-modal-card { max-width: 880px; }
/* Riga selettore sito (quando l'utente ha più siti) + indicazione sito corrente. */
.vis-site-row, .brief-site-row {
  display: flex; flex-direction: column; gap: 6px; margin: 0 0 16px;
}
.vis-site-row[hidden], .brief-site-row[hidden] { display: none !important; }
.vis-site-label, .brief-site-label {
  font-size: 12.5px; font-weight: 600; color: var(--ink-soft); letter-spacing: 0.01em;
}
.vis-site-select, .brief-site-select {
  width: 100%; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--border);
  background: var(--cream-soft); color: var(--ink); font: inherit; font-size: 14px; cursor: pointer;
}
.vis-site-select:focus, .brief-site-select:focus { outline: none; border-color: var(--primary); }
.vis-site-current, .brief-site-current {
  font-size: 13px; color: var(--ink-muted); margin: 0 0 14px;
}
.vis-site-current[hidden], .brief-site-current[hidden] { display: none !important; }
.vis-site-current strong, .brief-site-current strong { color: var(--ink); }
/* Fase 5.97.1: query reale usata, mostrata nel risultato. */
.vis-query-used { font-size: 13px; color: var(--ink-muted); margin: 0 0 14px; text-align: center; }
.vis-query-used[hidden] { display: none !important; }
.vis-query-used strong { color: var(--ink); }
/* Render markdown leggibile della risposta AI nel test visibilità. */
.vis-airesp h4 { font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); margin: 14px 0 6px; }
.vis-airesp h4:first-child { margin-top: 0; }
.vis-airesp p { margin: 0 0 8px; }
.vis-airesp ul { margin: 0 0 10px; padding-left: 18px; }
.vis-airesp li { margin: 2px 0; }
.vis-airesp strong { color: var(--ink); font-weight: 700; }
.vis-query-preview {
  background: var(--cream-soft); border: 1px solid var(--border); border-left: 4px solid var(--primary);
  border-radius: 12px; padding: 12px 14px; font-size: 14.5px; color: var(--ink); margin: 0 0 14px;
}
.vis-query-preview strong { color: var(--primary); }
.vis-cooldown-note { font-size: 12.5px; color: var(--ink-muted); margin: 10px 0 0; }
.vis-cooldown-note[hidden] { display: none !important; }
.vis-result[hidden] { display: none !important; }
.vis-score-wrap { text-align: center; margin: 4px 0 20px; }
.vis-score-circle {
  width: 110px; height: 110px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 8px; font-family: var(--font-head); font-weight: 900; font-size: 38px;
  border: 6px solid var(--ink-muted); color: var(--ink);
}
.vis-score-circle.good { border-color: #5e7c5a; color: #4f7049; }
.vis-score-circle.warn { border-color: #b8732e; color: #9a6020; }
.vis-score-circle.bad { border-color: var(--terracotta); color: var(--terracotta); }
.vis-score-label { font-family: var(--font-head); font-weight: 700; font-size: 17px; }
.vis-score-label.good { color: #4f7049; }
.vis-score-label.warn { color: #9a6020; }
.vis-score-label.bad { color: var(--terracotta); }
[data-theme="dark"] .vis-score-circle.good, [data-theme="dark"] .vis-score-label.good { color: #8fc187; border-color: #8fc187; }
[data-theme="dark"] .vis-score-circle.warn, [data-theme="dark"] .vis-score-label.warn { color: #e0a463; border-color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .vis-score-circle.good, :root:not([data-theme="light"]) .vis-score-label.good { color: #8fc187; border-color: #8fc187; }
  :root:not([data-theme="light"]) .vis-score-circle.warn, :root:not([data-theme="light"]) .vis-score-label.warn { color: #e0a463; border-color: #e0a463; }
}
.vis-airesp, .vis-knows {
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 12px;
  padding: 12px 14px; font-size: 13.5px; line-height: 1.55; color: var(--ink); white-space: pre-wrap;
}
.vis-airesp mark { background: #fff2a8; color: inherit; padding: 0 2px; border-radius: 3px; font-weight: 600; }
[data-theme="dark"] .vis-airesp mark { background: #6b5d1a; color: #fff; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .vis-airesp mark { background: #6b5d1a; color: #fff; }
}
.vis-recs li .vis-rec-link { color: var(--terracotta); font-weight: 600; text-decoration: none; margin-left: 4px; white-space: nowrap; }
.vis-recs li .vis-rec-link:hover { text-decoration: underline; }
.vis-rerun-note { font-size: 12.5px; color: var(--ink-muted); align-self: center; }
.vis-rerun-note[hidden] { display: none !important; }
#visRerunBtn:disabled { opacity: 0.5; cursor: default; }

/* ═══════════ Fase 5.77: card cannibalizzazione keyword ═══════════ */
.cannib-issue .issue-prio.warning { background: var(--warning); }
.cannib-badge {
  display: inline-block; font-size: 10.5px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.04em; color: #9a6020; background: rgba(184, 115, 46, 0.16);
  padding: 2px 8px; border-radius: 99px; margin-right: 6px; vertical-align: middle;
}
[data-theme="dark"] .cannib-badge { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cannib-badge { color: #e0a463; }
}
.cannib-pages { list-style: none; margin: 8px 0 0; padding: 0; }
.cannib-page {
  position: relative; padding: 7px 0 7px 18px; font-size: 13.5px; color: var(--ink);
  border-bottom: 1px solid var(--border);
}
.cannib-page:last-child { border-bottom: none; }
.cannib-page::before { content: "→"; position: absolute; left: 0; top: 7px; color: var(--terracotta); }
.cannib-page a { color: var(--primary); font-weight: 600; text-decoration: none; word-break: break-word; }
.cannib-page a:hover { text-decoration: underline; }
.cannib-kw { color: var(--ink-muted); font-size: 12.5px; margin-left: 4px; }
.cannib-genkw {
  margin-left: 8px; background: var(--cream); border: 1px solid var(--border);
  border-radius: 8px; padding: 3px 9px; font-size: 12px; font-weight: 600; color: var(--terracotta); cursor: pointer;
}
.cannib-genkw:hover { border-color: var(--terracotta); }
.cannib-genkw:disabled { opacity: 0.6; cursor: default; }
.cannib-resolve {
  margin-top: 12px; padding: 12px 14px; background: var(--cream-soft);
  border: 1px solid var(--border); border-radius: 10px; font-size: 13.5px;
}
.cannib-resolve strong { color: var(--ink); }
.cannib-resolve p { margin: 6px 0 0; }

/* ═══════════ Fase 5.78: Google Search Console ═══════════ */
.dashboard-gsc { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border); }
.dashboard-gsc[hidden] { display: none !important; }
.dashboard-gsc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.dashboard-gsc-title { font-size: 13px; font-weight: 700; color: var(--ink-muted); text-transform: uppercase; letter-spacing: 0.04em; }
/* Fase 5.99.11 (#2): il sito di cui si mostrano i dati ben leggibile. */
.dashboard-gsc-sub { font-size: 12.5px; color: var(--ink); font-weight: 600; }
/* Revisione 2026-07: respiro attorno al bottone Connetti (era schiacciato
   contro il blocco successivo, es. "Pagine analizzate" nel report). */
.gsc-connect-cta { text-align: left; padding-bottom: 6px; }
.gsc-connect-cta p { font-size: 13px; color: var(--ink-muted); margin: 0 0 12px; }
.gsc-connect-btn {
  display: inline-flex; align-items: center; gap: 8px; background: var(--primary-fondo); color: var(--on-dark);
  border: none; border-radius: 10px; padding: 9px 16px; font-weight: 600; font-size: 13.5px; cursor: pointer; text-decoration: none;
}
.gsc-connect-btn:hover { opacity: 0.93; }
/* Fase 5.99.13: nella card WordPress il blocco GSC era schiacciato contro la
   nota "I suggerimenti qui sotto...": aggiungo respiro sotto il pulsante. */
#wpGsc { padding-bottom: 18px; }
/* Fase 5.99.11 (#3): griglia metriche più ordinata (4 affiancate su largo,
   responsive su stretto) + card centrate e numeri più marcati. */
.gsc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 12px; }
.gsc-metric { background: var(--cream-soft); border: 1px solid var(--border); border-radius: 14px; padding: 14px 12px; text-align: center; }
.gsc-metric-num { font-family: var(--font-head); font-size: 26px; font-weight: 700; color: var(--primary); line-height: 1.05; }
.gsc-metric-label { font-size: 11px; color: var(--ink-muted); margin-top: 5px; text-transform: uppercase; letter-spacing: 0.03em; }
.gsc-queries { margin-top: 12px; }
.gsc-queries-title { font-size: 12px; font-weight: 700; color: var(--ink-muted); text-transform: uppercase; letter-spacing: 0.03em; margin-bottom: 6px; }
.gsc-qrow { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
.gsc-qrow:last-child { border-bottom: none; }
.gsc-qrow-q { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); }
.gsc-qrow-meta { flex-shrink: 0; color: var(--ink-muted); font-size: 12px; }
.gsc-qrow-clicks { color: var(--terracotta); font-weight: 700; }
.gsc-seeall { display: inline-block; margin-top: 10px; font-size: 12.5px; color: var(--terracotta); font-weight: 600; text-decoration: none; }
.gsc-seeall:hover { text-decoration: underline; }
/* S5: piede del widget GSC. "Vedi tutto" resta l'azione principale a sinistra,
   "Scollega questo sito" è secondaria e defilata a destra (azione rara). */
.gsc-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.gsc-disconnect {
  margin-top: 10px; border: none; background: none; padding: 0;
  font-family: var(--font-body); font-size: 12px; font-weight: 600;
  color: var(--ink-muted); cursor: pointer; text-decoration: underline;
}
.gsc-disconnect:hover { color: var(--ink); }
.gsc-disconnect:disabled { opacity: 0.5; cursor: default; }
/* Riga GSC dentro le issue del report (impatto reale) */
.issue-gsc {
  margin-top: 8px; font-size: 12.5px; color: var(--ink); background: rgba(26, 58, 92, 0.06);
  border-left: 3px solid var(--primary); border-radius: 6px; padding: 7px 10px;
}
[data-theme="dark"] .issue-gsc { background: rgba(107, 127, 150, 0.14); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .issue-gsc { background: rgba(107, 127, 150, 0.14); }
}

/* ═══════════ Fase 5.83: design system icone ═══════════ */
.trv-icon { display: inline-block; vertical-align: middle; flex-shrink: 0; }
/* Scudo Trovavio: navy pieno su tema chiaro, traslucido+stroke su scuro
   (così non sembra un buco nero). Override in entrambe le forme dark. */
.trv-icon-shield { fill: #1a3a5c; stroke: none; }
[data-theme="dark"] .trv-icon-shield {
  fill: rgba(91, 155, 213, 0.18);
  stroke: #5b9bd5;
  stroke-width: 1.5px;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .trv-icon-shield {
    fill: rgba(91, 155, 213, 0.18);
    stroke: #5b9bd5;
    stroke-width: 1.5px;
  }
}
/* Cerchio del check llms.txt: bianco su chiaro, superficie scura su dark
   (deve matchare lo sfondo della card, altrimenti sembra un buco). */
.trv-icon-llms-circle { fill: white; }
[data-theme="dark"] .trv-icon-llms-circle { fill: var(--surface, #1b2026); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .trv-icon-llms-circle { fill: var(--surface, #1b2026); }
}

/* ═══════════ Fase 5.80: programma referral ═══════════ */
.referral-example { font-size: 13px; color: var(--ink-muted); margin: 0 0 14px; }
.referral-link-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 16px; }
.referral-url-field {
  flex: 1; min-width: 0; max-width: calc(100% - 220px);
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 13px; color: var(--ink);
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 8px;
  padding: 10px 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@media (max-width: 600px) {
  .referral-link-row { flex-direction: column; align-items: stretch; }
  .referral-url-field { max-width: 100%; }
  .referral-link-row .account-save-btn, .referral-link-row .referral-share-btn { width: 100%; text-align: center; justify-content: center; }
}
.referral-share-btn {
  display: inline-flex; align-items: center; background: #0a66c2; color: #fff; text-decoration: none;
  border-radius: 10px; padding: 9px 14px; font-weight: 600; font-size: 13.5px; white-space: nowrap;
}
.referral-share-btn:hover { opacity: 0.93; }
.referral-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.referral-stat { background: var(--cream-soft); border: 1px solid var(--border); border-radius: 12px; padding: 14px; text-align: center; }
.referral-stat-num { font-family: var(--font-head); font-size: 26px; font-weight: 800; color: var(--primary); line-height: 1; }
.referral-stat-num.referral-stat-reward { color: var(--terracotta); }
.referral-stat-lbl { font-size: 11.5px; color: var(--ink-muted); margin-top: 4px; }
.referral-banner {
  background: rgba(94, 124, 90, 0.14); color: #4f7049; border-radius: 12px; padding: 12px 16px;
  font-weight: 600; font-size: 14px; margin-bottom: 14px;
}
.referral-banner[hidden] { display: none !important; }
[data-theme="dark"] .referral-banner { color: #8fc187; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .referral-banner { color: #8fc187; }
}
@media (max-width: 560px) { .referral-stats { grid-template-columns: repeat(2, 1fr); } }

/* Fase 5.84: blocco pagamento referral (Stripe Connect) */
.referral-pay { margin-top: 16px; }
.referral-pay-connect {
  border: 1px dashed var(--border); border-radius: 14px; padding: 20px;
  display: flex; align-items: flex-start; gap: 14px;
}
.referral-pay-connect .trv-icon, .referral-pay-connect svg { flex-shrink: 0; color: var(--primary); }
.referral-pay-connect h4 { font-family: var(--font-head); font-size: 16px; margin: 0 0 4px; color: var(--ink); }
.referral-pay-connect p { font-size: 13.5px; color: var(--ink-muted); margin: 0 0 12px; }
.referral-pay-connected {
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 14px;
  padding: 16px 18px; display: flex; align-items: center; gap: 12px;
}
.referral-pay-check { color: #4f7049; flex-shrink: 0; }
[data-theme="dark"] .referral-pay-check { color: #8fc187; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .referral-pay-check { color: #8fc187; } }
.referral-pay-connected-text { flex: 1; font-size: 13.5px; color: var(--ink); }
.referral-pay-disconnect { background: none; border: none; color: var(--ink-muted); font-size: 12.5px; cursor: pointer; text-decoration: underline; }
.referral-payouts { margin-top: 16px; }
.referral-payouts[hidden] { display: none !important; }
.referral-payouts-title { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-muted); margin-bottom: 8px; }
.referral-payout-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
.referral-payout-row:last-child { border-bottom: none; }
.referral-payout-amount { font-weight: 700; color: var(--ink); }
.referral-payout-status-paid { color: #4f7049; font-weight: 600; }
.referral-payout-status-pending { color: #9a6020; font-weight: 600; }
.referral-payout-status-noacct { color: var(--ink-muted); }
[data-theme="dark"] .referral-payout-status-paid { color: #8fc187; }
[data-theme="dark"] .referral-payout-status-pending { color: #e0a463; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .referral-payout-status-paid { color: #8fc187; }
  :root:not([data-theme="light"]) .referral-payout-status-pending { color: #e0a463; }
}
.referral-legal { font-size: 12px; color: var(--ink-muted); margin-top: 16px; line-height: 1.5; }

/* ═══════════ Fase 5.85: accordion + toggle switch coerenti ═══════════ */
.trv-accordion > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-family: "Inter", sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-soft, var(--ink));
  padding: 8px 0;
}
.trv-accordion > summary::-webkit-details-marker { display: none; }
.trv-accordion > summary::marker { content: ""; }
.trv-accordion-chevron { color: var(--ink-muted); transition: transform 200ms ease; flex-shrink: 0; }
.trv-accordion[open] > summary .trv-accordion-chevron { transform: rotate(180deg); }

/* Toggle switch (input checkbox nascosto + track/thumb). */
.trv-switch-row { display: flex; align-items: center; gap: 10px; cursor: pointer; }
/* Revisione bug 2026-07: senza questa regola l'attributo hidden perde contro
   display:flex e il toggle notifiche resta sempre visibile (gotcha CLAUDE.md). */
.trv-switch-row[hidden] { display: none !important; }
.trv-switch-input { position: absolute; opacity: 0; width: 0; height: 0; }
.trv-switch-track {
  position: relative; width: 36px; height: 20px; border-radius: 99px;
  background: var(--border); transition: background 200ms ease; flex-shrink: 0;
}
.trv-switch-thumb {
  position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%;
  background: #fff; transition: transform 200ms ease; box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.trv-switch-input:checked + .trv-switch-track { background: var(--primary-fondo); }
.trv-switch-input:checked + .trv-switch-track .trv-switch-thumb { transform: translateX(16px); }
.trv-switch-input:focus-visible + .trv-switch-track { box-shadow: 0 0 0 3px rgba(26,58,92,0.25); }
.trv-switch-label { font-size: 13.5px; color: var(--ink); }

/* ═══════════ Fase 5.85: header + stati grafico andamento ═══════════ */
.score-graph-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.score-graph-header[hidden] { display: none !important; }
.score-graph-site { display: flex; align-items: baseline; flex-wrap: wrap; }
.score-graph-domain { font-family: var(--font-head); font-size: 16px; color: var(--ink); font-weight: 600; }
.score-graph-period { font-size: 12px; color: var(--ink-muted); margin-left: 8px; }
.score-graph-empty { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 32px; text-align: center; color: var(--ink-muted); }
.score-graph-empty[hidden] { display: none !important; }
.score-graph-empty p { font-size: 14px; margin: 0; }
.score-graph-empty p.muted { font-size: 12.5px; color: var(--ink-muted); }
.score-graph-stable { font-size: 12.5px; color: var(--ink-muted); margin: 10px 0 0; text-align: center; }
.score-graph-stable[hidden] { display: none !important; }
.score-graph-site-sel {
  font-size: 13px; color: var(--ink); background: var(--cream-soft);
  border: 1px solid var(--border); border-radius: 8px; padding: 5px 10px; max-width: 200px;
}
.score-graph-site-sel[hidden] { display: none !important; }

/* ═══════════ Fase 5.85/5.91: guida rapida "Cosa puoi fare" ═══════════
   Fase 5.91: la sezione è un fold .dashboard-account-fold come "Strumenti" e
   "WordPress" (coerenza). Niente animazione entry (lasciava le card a opacity 0
   quando non scattava): le card sono visibili appena il fold è aperto, la
   collassabilita' è gestita dal fold (max-height/opacity sul body). */
.quick-guide-sub { font-size: 13px; color: var(--ink-muted); margin: 0 0 16px; }
.guide-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
@media (max-width: 980px) { .guide-cards { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .guide-cards { grid-template-columns: 1fr; } }
.guide-card {
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 14px;
  padding: 20px; display: flex; flex-direction: column; gap: 12px;
  transition: transform 200ms, box-shadow 200ms; cursor: default;
}
.guide-card:hover { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(15,37,61,0.08); }
.guide-card-icon {
  width: 40px; height: 40px; background: var(--cream-deep); border-radius: 10px;
  display: flex; align-items: center; justify-content: center; color: var(--primary);
}
.guide-card-title { font-family: var(--font-head); font-size: 16px; color: var(--ink); font-weight: 600; }
.guide-card-desc { font-family: "Inter", sans-serif; font-size: 13px; color: var(--ink-muted); line-height: 1.5; flex: 1; }
.guide-card-footer { display: flex; justify-content: space-between; align-items: center; margin-top: auto; gap: 8px; }
.guide-card-cta { font-size: 13px; color: var(--primary); font-weight: 500; text-decoration: none; background: none; border: none; cursor: pointer; padding: 0; }
.guide-card-cta:hover { text-decoration: underline; }
.guide-card-badge { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-muted); background: var(--cream-deep); padding: 2px 8px; border-radius: 99px; white-space: nowrap; }

.sub {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 18px;
  text-align: center;
}
/* Fase 2.20: card subscore cliccabili per filtrare i problemi.
   Quando renderizzata come <button>, applico stile cliccabile con hover/focus. */
/* Fase 2.20: chip filtro subcat in cima alla lista issue.
   Comunica all'utente cosa sta vedendo + permette di rimuovere il filtro. */
.subcat-filter-chip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 10px 14px;
  background: var(--cream-deep);
  border: 1px solid var(--border);
  border-radius: 10px;
  margin-bottom: 18px;
  font-size: 13px;
  color: var(--ink-soft);
}
.subcat-filter-chip-label strong { color: var(--ink); }
.subcat-filter-chip-count {
  color: var(--ink-muted);
  font-size: 12px;
}
.subcat-filter-chip-reset {
  background: transparent;
  border: none;
  color: var(--terracotta);
  font-size: 12.5px;
  cursor: pointer;
  font-weight: 500;
  padding: 2px 6px;
  border-radius: 6px;
  transition: background 0.15s var(--ease);
}
.subcat-filter-chip-reset:hover {
  background: rgba(161, 77, 58, 0.08);
}

button.sub-clickable {
  font: inherit;
  cursor: pointer;
  width: 100%;
  display: block;
  transition: border-color 0.18s var(--ease), transform 0.18s var(--ease), box-shadow 0.18s var(--ease);
  position: relative;
}
button.sub-clickable:hover {
  border-color: var(--terracotta);
  transform: translateY(-2px);
  box-shadow: 0 4px 14px rgba(161, 77, 58, 0.10);
}
button.sub-clickable:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
}
.sub-cta {
  font-size: 11px;
  color: var(--ink-muted);
  margin-top: 8px;
  transition: color 0.2s var(--ease);
}
button.sub-clickable:hover .sub-cta,
button.sub-clickable:focus-visible .sub-cta {
  color: var(--terracotta);
}
.sub-label {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 6px;
}
.sub-val {
  font-family: var(--font-head);
  font-size: 28px;
  font-weight: 700;
  color: var(--ink);
}
.sub-val.good { color: var(--success); }
.sub-val.warn { color: var(--warning); }
.sub-val.bad  { color: var(--danger); }

.issues {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 32px;
  margin-bottom: 40px;
}
.issues h3 {
  font-size: 22px;
  margin-bottom: 8px;
}
.issues p.subtitle {
  color: var(--ink-muted);
  font-size: 14px;
  margin-bottom: 24px;
}
.issues-group {
  margin-bottom: 32px;
}
.issues-group:last-child {
  margin-bottom: 0;
}
.issues-group-header {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  background: var(--cream-soft);
  border-left: 4px solid var(--primary);
  border-radius: 10px;
  margin-bottom: 16px;
}
.issues-group:nth-child(2) .issues-group-header {
  border-left-color: var(--terracotta);
}
.issues-group-icon {
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 18px;
  letter-spacing: -0.02em;
  padding: 6px 12px;
  border-radius: 8px;
  color: white;
  flex-shrink: 0;
}
.issues-group-icon.seo {
  background: var(--primary-fondo);
}
.issues-group-icon.geo {
  background: var(--terracotta);
}
/* Fase 5.73: gruppo SEO Locale. Navy con pin, distinto da SEO/GEO. */
.issues-group-icon.local {
  background: var(--terracotta);
  font-size: 15px;
}
.issues-group-text {
  flex: 1;
  min-width: 0;
}
.issues-group-text h3 {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 17px;
  letter-spacing: -0.01em;
  color: var(--ink);
  margin: 0 0 2px 0;
}
.issues-group-text p {
  font-size: 13px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.45;
}
.issues-group-count {
  font-family: var(--font-head);
  font-weight: 900;
  font-size: 24px;
  color: var(--ink);
  flex-shrink: 0;
  padding: 4px 12px;
  border-radius: 8px;
  /* Fase 5.66: era `white` hardcoded -> in dark restava un riquadro bianco.
     var(--surface) si adatta (bianco in light, scuro in dark). */
  background: var(--surface);
  border: 1px solid var(--border);
}

.issue {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 16px;
  padding: 16px 0;
  border-bottom: 1px solid var(--border);
  align-items: start;
  animation: issueIn 0.4s var(--ease) backwards;
  /* Hover sobrio: il bordo superiore della riga si colora con la severity.
     Vantaggi vs versione precedente:
     - non si sovrappone al puntino di severity (era a sinistra, lo schiacciava)
     - funziona anche in mobile (la sidebar verticale era invisibile a viewport stretti)
     - asimmetrico verso l'alto: dà sensazione di "questa riga si è attivata" */
  transition: box-shadow 0.2s var(--ease);
  box-shadow: inset 0 2px 0 transparent;
  border-radius: 4px;
}
.issue:hover {
  box-shadow: inset 0 2px 0 var(--ink-muted);
}
/* Il colore del bordo superiore segue la severity */
.issue:hover:has(.issue-prio.high)   { box-shadow: inset 0 2px 0 var(--danger); }
.issue:hover:has(.issue-prio.medium) { box-shadow: inset 0 2px 0 var(--warning); }
.issue:hover:has(.issue-prio.low)    { box-shadow: inset 0 2px 0 var(--success); }
.issue:hover h4 {
  color: var(--ink);
  transition: color 0.2s var(--ease);
}
.issue:last-child { border: none; }

@keyframes issueIn {
  from { opacity: 0; transform: translateX(-8px); }
  to   { opacity: 1; transform: translateX(0); }
}
.issue:nth-child(1) { animation-delay: 0.05s; }
.issue:nth-child(2) { animation-delay: 0.10s; }
.issue:nth-child(3) { animation-delay: 0.15s; }
.issue:nth-child(4) { animation-delay: 0.20s; }
.issue:nth-child(5) { animation-delay: 0.25s; }
.issue:nth-child(6) { animation-delay: 0.30s; }
.issue:nth-child(n+7) { animation-delay: 0.35s; }

.issue-prio {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  margin-top: 8px;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.issue:hover .issue-prio {
  transform: scale(1.4);
}
.issue:hover .issue-prio.high { box-shadow: 0 0 0 4px rgba(161, 77, 58, 0.18); }
.issue:hover .issue-prio.medium { box-shadow: 0 0 0 4px rgba(184, 115, 46, 0.18); }
.issue:hover .issue-prio.low { box-shadow: 0 0 0 4px rgba(94, 124, 90, 0.18); }
.issue-prio.high { background: var(--danger); }
.issue-prio.medium { background: var(--warning); }
.issue-prio.low { background: var(--success); }
.issue-content h4 {
  font-family: var(--font-body);
  font-size: 15.5px;
  font-weight: 600;
  margin-bottom: 4px;
  color: var(--ink);
}
.issue-content p {
  font-size: 13.5px;
  color: var(--ink-soft);
}
.issue-pages {
  margin-top: 10px;
  padding: 8px 12px;
  background: var(--cream-soft);
  border-left: 3px solid var(--primary);
  border-radius: 4px;
  font-size: 12.5px;
  line-height: 1.5;
}
.issue-pages-label {
  color: var(--ink-muted);
}
.issue-pages-label strong {
  color: var(--ink);
}
.issue-pages-list {
  display: inline;
}

/* Per-page details (Fix #2 Fase 2.5): toggle per vedere i titoli H1 di ogni pagina */
.pd-toggle {
  margin-top: 10px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: white;
  overflow: hidden;
}
.pd-toggle summary {
  padding: 8px 12px;
  cursor: pointer;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--primary);
  list-style: none;
  user-select: none;
  transition: background 0.15s var(--ease);
}
.pd-toggle summary::-webkit-details-marker { display: none; }
.pd-toggle summary::before {
  content: "▸";
  display: inline-block;
  margin-right: 6px;
  transition: transform 0.25s var(--ease);
  font-size: 10px;
}
.pd-toggle[open] summary::before { transform: rotate(90deg); }
.pd-toggle summary:hover { background: var(--cream-soft); }
/* Animazione apertura/chiusura del contenuto.
   <details> nativo non è animabile in CSS perché passa tra display:none e visibile.
   Workaround: il contenuto viene WRAPPATO in un div .pd-content che usa
   max-height + opacity. JS toggla la classe .open per attivare la transizione
   e setta una max-height calcolata dallo scrollHeight per evitare che la
   transizione si fermi prima del contenuto. */
.pd-content {
  padding: 0 12px;
  border-top: 1px solid var(--border);
  background: var(--cream);
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  transition: max-height 0.4s cubic-bezier(.4, 0, .2, 1), opacity 0.3s var(--ease), padding 0.3s var(--ease);
}
.pd-toggle[open] .pd-content,
.pd-content.open {
  padding: 8px 12px 12px;
  opacity: 1;
  /* max-height calcolata dinamicamente da JS in base a scrollHeight */
}
.pd-row {
  margin: 10px 0;
  padding: 8px 12px;
  background: white;
  border-radius: 6px;
  border: 1px solid var(--border);
}
.pd-row:first-child { margin-top: 4px; }
.pd-page {
  font-size: 12.5px;
  font-weight: 600;
  margin-bottom: 6px;
}
.pd-page a {
  color: var(--primary);
  text-decoration: none;
}
.pd-page a:hover { text-decoration: underline; }
.pd-count {
  font-weight: 400;
  color: var(--ink-muted);
  font-size: 11.5px;
}
.pd-h1-list {
  margin: 4px 0 0;
  padding-left: 22px;
  font-size: 12.5px;
  color: var(--ink-soft);
  line-height: 1.5;
}
.pd-h1-list li {
  margin-bottom: 3px;
}
.issue-page-link {
  display: inline-block;
  padding: 2px 8px;
  margin: 2px 4px 2px 0;
  /* Fase 5.66: era `white` hardcoded -> pill bianche in dark mode.
     var(--surface) si adatta al tema. */
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 99px;
  color: var(--primary);
  text-decoration: none;
  font-size: 11.5px;
  font-weight: 500;
  transition: all 0.15s var(--ease);
}
.issue-page-link:hover {
  background: var(--primary-fondo);
  color: white;
  border-color: var(--primary);
}
/* Fase 2.18: ogni riga pagina con value (es. title attuale) */
.issue-page-row {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 2px 6px 2px 0;
  max-width: 100%;
}
.issue-page-row.issue-page-row-full {
  display: flex;
  margin: 4px 0;
}
.issue-page-value {
  font-size: 11.5px;
  color: var(--ink-muted);
  font-style: italic;
  padding: 2px 8px;
  background: var(--cream-soft);
  border-radius: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 280px;
}
/* Fase 5.61: blocco "WordPress connesso" nelle issue card */
.wp-issue-box {
  margin-top: 12px; padding: 12px 14px;
  background: var(--cream-soft); border: 1px solid var(--border); border-radius: 10px;
}
.wp-issue-box-head { font-size: 13px; font-weight: 700; color: var(--primary); display: flex; align-items: center; gap: 6px; }
.wp-issue-box-spark { width: 14px; height: 14px; }
.wp-issue-box-text { font-size: 12.5px; color: var(--ink-soft); margin: 4px 0 10px; }
.wp-issue-apply {
  background: var(--primary-fondo); color: var(--on-dark, #fafaf7); border: none;
  border-radius: 10px; padding: 8px 16px; font-family: var(--font-body);
  font-size: 13px; font-weight: 600; cursor: pointer; transition: background 0.15s var(--ease);
}
.wp-issue-apply:hover { background: var(--primary-deep); }
.wp-issue-apply:disabled { opacity: 0.75; cursor: default; }
.wp-issue-apply-done { background: transparent; color: var(--success, #5e7c5a); border: 1px solid var(--success, #5e7c5a); }
.wp-issue-hint { margin-top: 10px; font-size: 12.5px; color: var(--ink-muted); }
.wp-issue-hint a { color: var(--terracotta); font-weight: 600; }
/* Fase 5.61: banner WordPress sopra i tab del report */
.wp-report-banner {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  background: var(--cream-soft); border-left: 3px solid var(--primary);
  border-radius: 10px; padding: 12px 16px; margin: 0 0 16px; font-size: 13.5px; color: var(--ink-soft);
}
.wp-report-banner[hidden] { display: none !important; }
.wp-report-banner-text { flex: 1; min-width: 200px; }
.wp-report-banner-text strong { color: var(--ink); }
.wp-report-banner-cta { color: var(--terracotta); font-weight: 600; text-decoration: none; white-space: nowrap; }
.wp-report-banner-cta:hover { text-decoration: underline; }
.wp-report-banner-x { background: none; border: none; font-size: 20px; line-height: 1; color: var(--ink-muted); cursor: pointer; padding: 0 4px; }
.wp-report-banner-x:hover { color: var(--terracotta); }
/* Fase 5.67: variante "collega WordPress" (utente non connesso) con accento terracotta. */
.wp-report-banner-connect { border-left-color: var(--terracotta); }
.wp-report-banner-ic { width: 18px; height: 18px; flex-shrink: 0; color: var(--terracotta); }
[data-theme="dark"] .wp-issue-box { background: var(--cream-soft); border-color: var(--border); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-issue-box { background: var(--cream-soft); border-color: var(--border); }
}
/* Fase 5.61b punto 6: barra "Applica tutte" sopra la lista issue (multi-pagina). */
.wp-batch-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  background: var(--cream-soft); border: 1px solid var(--border); border-left: 3px solid var(--primary);
  border-radius: 12px; padding: 12px 16px; margin: 0 0 16px; font-size: 13.5px; color: var(--ink-soft);
}
.wp-batch-spark { width: 16px; height: 16px; flex-shrink: 0; color: var(--terracotta); }
.wp-batch-text { flex: 1; min-width: 180px; }
.wp-batch-text strong { color: var(--ink); }
.wp-batch-progress { font-size: 12.5px; color: var(--ink-muted); font-style: italic; }
.wp-batch-progress[hidden] { display: none !important; }
.wp-batch-btn {
  background: var(--primary-fondo); color: var(--on-dark, #fafaf7); border: none;
  border-radius: 10px; padding: 8px 16px; font-family: var(--font-body);
  font-size: 13px; font-weight: 600; cursor: pointer; white-space: nowrap;
  transition: background 0.15s var(--ease);
}
.wp-batch-btn:hover { background: var(--primary-deep); }
.wp-batch-btn:disabled { opacity: 0.7; cursor: default; }
[data-theme="dark"] .wp-batch-bar { background: var(--cream-soft); border-color: var(--border); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .wp-batch-bar { background: var(--cream-soft); border-color: var(--border); }
}
/* Fase 5.61b punto 6: link "Applica" discreto accanto a ogni pagina dell'elenco. */
.issue-page-apply {
  font-size: 11.5px; font-weight: 600; color: var(--terracotta);
  text-decoration: none; cursor: pointer; white-space: nowrap; margin-left: 2px;
}
.issue-page-apply:hover { text-decoration: underline; }
.issue-page-apply-done { color: var(--success, #5e7c5a); cursor: default; pointer-events: none; }
.issue-page-more {
  display: inline-block;
  padding: 2px 8px;
  margin: 2px 0;
  font-size: 11.5px;
  color: var(--ink-muted);
  font-style: italic;
}
/* Fase 2.15 Fix #8: details espandibile con tutte le pagine in cui ricorre l'issue */
.issue-pages-more {
  margin-top: 8px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: white;
  overflow: hidden;
}
.issue-pages-more summary {
  padding: 7px 12px;
  cursor: pointer;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--primary);
  list-style: none;
  user-select: none;
  transition: background 0.15s var(--ease);
}
.issue-pages-more summary::-webkit-details-marker { display: none; }
.issue-pages-more summary::before {
  content: "▸";
  display: inline-block;
  margin-right: 6px;
  transition: transform 0.25s var(--ease);
  font-size: 10px;
}
.issue-pages-more[open] summary::before { transform: rotate(90deg); }
.issue-pages-more summary:hover { background: var(--cream-soft); }
.issue-pages-all {
  padding: 8px 12px 10px;
  border-top: 1px solid var(--border);
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.issue-page-link-full { font-size: 12.5px; }
.issue-tag {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--ink-muted);
  background: var(--cream-soft);
  padding: 4px 8px;
  border-radius: 4px;
  white-space: nowrap;
}

/* Fase 2.15: card "lock" per indicare problemi nascosti nel free trial */
.issue.trial-lock {
  background: linear-gradient(135deg, rgba(26, 58, 92, 0.04) 0%, rgba(161, 77, 58, 0.06) 100%);
  border: 1px dashed var(--border);
  position: relative;
}
.issue.trial-lock::before {
  /* Fase 2.5.64: SVG lock inline (era emoji 🔒). */
  content: "";
  position: absolute;
  top: 18px;
  right: 100px;
  width: 18px;
  height: 18px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231a3a5c' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='11' width='18' height='11' rx='2'/><path d='M7 11V7a5 5 0 0 1 10 0v4'/></svg>");
  background-repeat: no-repeat;
  background-size: contain;
  opacity: 0.6;
}
.issue.trial-lock .issue-tag {
  background: var(--terracotta);
  color: var(--on-dark);
}
.issue.trial-lock h4 {
  color: var(--ink-muted);
}

.ai-section {
  background: var(--primary-deep);
  color: var(--on-dark);
  border-radius: var(--r-lg);
  padding: 32px;
  margin-bottom: 40px;
}
.ai-section h3 { color: var(--on-dark); margin-bottom: 8px; }
.ai-section .subtitle { color: rgba(250, 250, 247, 0.65); margin-bottom: 24px; font-size: 14.5px; }

/* Wizard banner: visibile solo in modalità test, dice all'utente che AI Lab è interattivo */
.ai-wizard-banner {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 18px;
  margin-bottom: 20px;
  background: linear-gradient(135deg, rgba(161, 77, 58, 0.20) 0%, rgba(94, 124, 90, 0.18) 100%);
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-left: 3px solid var(--terracotta);
  border-radius: 12px;
  color: var(--on-dark);
}
.ai-wizard-banner .aiwb-icon {
  font-family: var(--font-head);
  font-size: 28px;
  color: var(--terracotta);
  font-weight: 900;
}
.ai-wizard-banner .aiwb-text {
  display: flex;
  flex-direction: column;
  gap: 3px;
  font-size: 13.5px;
  line-height: 1.5;
}
.ai-wizard-banner .aiwb-text strong {
  color: var(--on-dark);
  font-size: 14.5px;
}
.ai-wizard-banner .aiwb-text span {
  color: rgba(250, 250, 247, 0.75);
}

/* Wizard step: card che appare in #aiOutput durante il flusso interattivo */
.ai-wizard-step {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 12px;
  padding: 20px;
  margin-bottom: 14px;
  color: var(--on-dark);
}
.ai-wizard-step .wz-progress {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgba(250, 250, 247, 0.55);
  margin-bottom: 8px;
}
.ai-wizard-step .wz-page {
  font-family: var(--font-head);
  font-size: 18px;
  margin-bottom: 6px;
  color: var(--on-dark);
}
.ai-wizard-step .wz-url {
  font-family: 'SF Mono', Courier, monospace;
  font-size: 12px;
  color: rgba(250, 250, 247, 0.55);
  margin-bottom: 14px;
  word-break: break-all;
}
.ai-wizard-step .wz-current {
  font-size: 13px;
  color: rgba(250, 250, 247, 0.60);
  margin-bottom: 12px;
}
.ai-wizard-step .wz-current b {
  color: var(--on-dark);
}
.ai-wizard-step .wz-proposal {
  background: rgba(0, 0, 0, 0.35);
  padding: 14px 16px;
  border-radius: 8px;
  margin-bottom: 16px;
  font-size: 14px;
  line-height: 1.55;
}
.ai-wizard-step .wz-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.ai-wizard-step .wz-btn {
  padding: 9px 16px;
  border-radius: 8px;
  font-size: 13.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.15s var(--ease);
  border: 1px solid transparent;
}
.ai-wizard-step .wz-btn.primary {
  background: var(--terracotta);
  color: white;
}
.ai-wizard-step .wz-btn.primary:hover {
  background: #b25a48;
}
.ai-wizard-step .wz-btn.ghost {
  background: transparent;
  color: rgba(250, 250, 247, 0.85);
  border-color: rgba(255, 255, 255, 0.20);
}
.ai-wizard-step .wz-btn.ghost:hover {
  background: rgba(255, 255, 255, 0.08);
}
.ai-wizard-step.done {
  border-color: var(--success);
  border-left: 3px solid var(--success);
}
.ai-wizard-step.skipped {
  opacity: 0.5;
}

/* Page picker: lista di bottoni con prettyPath + URL piccolo sotto */
.wz-page-picker {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 8px;
  margin: 14px 0 18px;
  max-height: 320px;
  overflow-y: auto;
  padding: 4px;
}
.wz-page-pick {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 10px 14px;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 8px;
  text-align: left;
  cursor: pointer;
  transition: all 0.15s var(--ease);
}
.wz-page-pick:hover {
  background: rgba(161, 77, 58, 0.18);
  border-color: var(--terracotta);
  transform: translateY(-1px);
}
.wz-page-pick-name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--on-dark);
}
.wz-page-pick-url {
  font-family: 'SF Mono', Courier, monospace;
  font-size: 10.5px;
  color: rgba(250, 250, 247, 0.50);
  word-break: break-all;
}

/* Wizard 2.13: stato della pagina nel picker (Approvata/Saltata) */
.wz-page-pick.is-done {
  border-color: rgba(94, 124, 90, 0.5);
  background: rgba(94, 124, 90, 0.10);
}
.wz-page-pick.is-skipped {
  opacity: 0.62;
}
.wz-page-pick-badge {
  display: inline-block;
  margin-left: 8px;
  padding: 1px 8px;
  border-radius: 99px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.02em;
  vertical-align: middle;
}
.wz-page-pick-badge.done {
  background: rgba(94, 124, 90, 0.35);
  color: var(--on-dark);
}
.wz-page-pick-badge.skipped {
  background: rgba(184, 115, 46, 0.30);
  color: rgba(250, 250, 247, 0.85);
}

/* Wizard 2.13: counter inline nel progress (n approvate/saltate) */
.ai-wizard-step .wz-progress .wz-counters {
  color: rgba(250, 250, 247, 0.55);
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
}
.ai-wizard-step .wz-progress .wz-counters b {
  color: var(--success);
  font-weight: 700;
}

/* Wizard 2.13: nota informativa quando alcune proposte sono state filtrate */
.ai-wizard-step .wz-filter-note {
  font-size: 12px;
  color: rgba(250, 250, 247, 0.6);
  margin-bottom: 10px;
  font-style: italic;
}

/* Wizard 2.13: lista proposte con radio selezionabili */
.ai-wizard-step .wz-proposals {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 16px;
}
.ai-wizard-step .wz-prop {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 12px 14px;
  background: rgba(0, 0, 0, 0.30);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 10px;
  cursor: pointer;
  transition: background 0.15s var(--ease), border-color 0.15s var(--ease);
}
.ai-wizard-step .wz-prop:hover {
  background: rgba(0, 0, 0, 0.42);
  border-color: rgba(255, 255, 255, 0.18);
}
.ai-wizard-step .wz-prop.selected {
  border-color: var(--terracotta);
  background: rgba(161, 77, 58, 0.18);
}
.ai-wizard-step .wz-prop input[type="radio"] {
  margin-top: 4px;
  accent-color: var(--terracotta);
  flex-shrink: 0;
  cursor: pointer;
}
.ai-wizard-step .wz-prop-body {
  display: flex;
  flex-direction: column;
  gap: 5px;
  flex: 1;
  min-width: 0;
}
.ai-wizard-step .wz-prop-text {
  font-weight: 600;
  color: var(--on-dark);
  font-size: 14px;
  line-height: 1.45;
  word-break: break-word;
}
.ai-wizard-step .wz-prop-chars {
  display: inline-block;
  align-self: flex-start;
  padding: 1px 8px;
  border-radius: 99px;
  background: rgba(94, 124, 90, 0.25);
  color: rgba(250, 250, 247, 0.85);
  font-size: 10.5px;
  font-weight: 600;
}
.ai-wizard-step .wz-prop-reasoning {
  font-size: 12px;
  color: rgba(250, 250, 247, 0.55);
  font-style: italic;
  line-height: 1.45;
}

/* Wizard 2.13: bottone primary disabilitato (nessuna selezione) */
.ai-wizard-step .wz-btn.primary[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}
.ai-wizard-step .wz-btn.primary[disabled]:hover {
  background: var(--terracotta);
}

/* Wizard 2.13: linea informativa sotto le proposte (es. "Hai gi approvato...") */
.ai-wizard-step .wz-status-line {
  font-size: 12.5px;
  color: rgba(250, 250, 247, 0.65);
  font-style: italic;
  margin: 0 0 12px;
  padding: 8px 12px;
  background: rgba(255, 255, 255, 0.05);
  border-left: 2px solid rgba(255, 255, 255, 0.20);
  border-radius: 0 6px 6px 0;
}

/* Wizard 2.13: recap finale con riga per pagina (Approvate / Saltate) */
.ai-wizard-step .wz-recap-section {
  margin-top: 14px;
}
.ai-wizard-step .wz-recap-label {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgba(250, 250, 247, 0.55);
  margin-bottom: 8px;
}
.ai-wizard-step .wz-recap-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  background: rgba(0, 0, 0, 0.25);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  flex-wrap: wrap;
  margin-bottom: 6px;
}
.ai-wizard-step .wz-recap-row.skipped {
  opacity: 0.65;
}
.ai-wizard-step .wz-recap-info {
  flex: 1;
  min-width: 0;
}
/* Fase 6.4: con due bottoni nella row (Pubblica sul sito + Rivedi) niente
   compressione del testo: i bottoni restano interi e, se serve, la row wrappa. */
.ai-wizard-step .wz-recap-row .wz-btn {
  flex-shrink: 0;
  white-space: nowrap;
}
.ai-wizard-step .wz-recap-page {
  font-size: 13px;
  color: var(--on-dark);
  font-weight: 600;
  margin-bottom: 2px;
}
.ai-wizard-step .wz-recap-value {
  font-size: 12.5px;
  color: rgba(250, 250, 247, 0.65);
  word-break: break-word;
  line-height: 1.45;
}

/* Wizard 2.13: badge stato sui bottoni del page picker (gi approvata / saltata) */
.wz-page-pick.is-done {
  border-color: rgba(94, 124, 90, 0.45);
  background: rgba(94, 124, 90, 0.10);
}
.wz-page-pick.is-done:hover {
  background: rgba(94, 124, 90, 0.20);
  border-color: var(--success);
}
.wz-page-pick.is-skipped {
  opacity: 0.65;
}
.wz-page-pick-badge {
  display: inline-block;
  margin-left: 8px;
  padding: 1px 8px;
  border-radius: 99px;
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  vertical-align: middle;
}
.wz-page-pick-badge.done {
  background: rgba(94, 124, 90, 0.30);
  color: var(--on-dark);
}
.wz-page-pick-badge.skipped {
  background: rgba(255, 255, 255, 0.10);
  color: rgba(250, 250, 247, 0.65);
}

/* Fase 2.5.51: sottosezione GEO nell'AI Lab con 3 nuove action specifiche
   per la visibilità sull'AI. Bordo soft terracotta per distinguerla dalla
   sezione SEO classica sopra. */
.ai-geo-section {
  margin-top: 22px;
  padding: 18px 18px 16px;
  background: rgba(161, 77, 58, 0.05);
  border: 1px solid rgba(161, 77, 58, 0.22);
  border-radius: var(--r, 14px);
}
.ai-geo-section-head {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 14px;
}
.ai-geo-section-icon {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--terracotta);
  color: #fff;
  border-radius: 8px;
  font-size: 16px;
  flex-shrink: 0;
}
.ai-geo-section-title {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 700;
  color: var(--on-dark);
  margin: 0;
  letter-spacing: -0.01em;
}
.ai-geo-section-sub {
  font-size: 12.5px;
  color: rgba(250, 250, 247, 0.65);
  margin: 2px 0 0;
}
.ai-buttons-geo { margin: 0; }
.ai-btn-geo {
  background: rgba(161, 77, 58, 0.18);
  border-color: rgba(161, 77, 58, 0.4);
}
.ai-btn-geo:hover { background: var(--terracotta); border-color: var(--terracotta); }

/* Box output raw per schema_org, faq_schema, llms_txt: monospace, scrollabile,
   bottone Copia in alto a destra. */
.ai-raw-output {
  position: relative;
  margin-top: 16px;
  background: var(--cream-soft, #f5f3ec);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px 14px;
}
.ai-raw-output-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}
.ai-raw-output-title {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.ai-raw-output-copy {
  background: var(--primary-fondo);
  color: #fff;
  border: none;
  padding: 6px 12px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 12px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: background 0.18s var(--ease);
}
.ai-raw-output-copy:hover { background: #142e49; }
.ai-raw-output-copy.copied { background: var(--success, #5e7c5a); }
.ai-raw-output pre {
  margin: 0;
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--ink);
  white-space: pre-wrap;
  word-break: break-word;
  max-height: 420px;
  overflow-y: auto;
}

.ai-buttons {
  display: flex;
  flex-wrap: wrap;
  /* Fase 2.5.42: row-gap aumentato a 18px per dare spazio al badge "SOLO/PRO"
     (::after top:-8px) dei bottoni .free-locked / .free-other-chosen della
     seconda riga, che prima si sovrapponeva ai bottoni della prima riga. */
  column-gap: 8px;
  row-gap: 18px;
  margin-bottom: 24px;
  margin-top: 8px;
}
/* Fase 2.5.46: flash highlight quando il bottone AI viene aperto da deep-link
   "Risolvi con AI" dalla dashboard (sessionStorage.pendingOpenAi). */
@keyframes aiBtnFlash {
  0%, 100% { box-shadow: 0 0 0 0 rgba(161, 77, 58, 0); }
  20% { box-shadow: 0 0 0 6px rgba(161, 77, 58, 0.45); }
  60% { box-shadow: 0 0 0 12px rgba(161, 77, 58, 0); }
}
.ai-btn-flash { animation: aiBtnFlash 1.8s ease-out 1; }
.ai-btn {
  background: rgba(255,255,255,0.08);
  color: var(--on-dark);
  padding: 10px 16px;
  border-radius: 999px;
  font-size: 13.5px;
  font-weight: 500;
  transition: background 0.15s var(--ease), border-color 0.15s var(--ease), color 0.15s var(--ease), opacity 0.12s var(--ease);
  border: 1px solid rgba(255,255,255,0.15);
  position: relative;
}
.ai-btn:hover { background: rgba(255,255,255,0.15); }
/* Fase 2.5.20 bugfix: durante l'hover il tooltip pseudo-element esce dai
   confini del .ai-btn (position:relative) e finisce sotto al bottone fratello
   adiacente, perché ogni fratello ha il proprio stacking context. Alzando lo
   z-index del bottone in hover/focus, il suo ::after passa sopra ai fratelli. */
.ai-btn:hover,
.ai-btn:focus-visible,
.ai-btn:focus-within { z-index: 10; }
.ai-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* Fase 2.15: indicatore visivo del bottone AI Lab cliccato/attivo */
.ai-btn.is-active {
  background: var(--terracotta);
  border-color: var(--terracotta);
  color: var(--on-dark);
  font-weight: 600;
  box-shadow: 0 0 0 2px rgba(161, 77, 58, 0.25);
}
.ai-btn.is-active:hover {
  background: var(--terracotta);
}

/* Fase 2.18 free assaggio: bottoni bloccati con badge */
.ai-btn.free-locked,
.ai-btn.free-other-chosen {
  opacity: 0.5;
  cursor: not-allowed;
  background: rgba(255,255,255,0.04);
}
.ai-btn.free-locked::after,
.ai-btn.free-other-chosen::after {
  content: "Solo / Pro";
  position: absolute;
  top: -8px;
  right: 8px;
  background: var(--terracotta);
  color: var(--on-dark);
  font-size: 9px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 99px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.ai-btn.free-locked:hover,
.ai-btn.free-other-chosen:hover {
  background: rgba(255,255,255,0.04);
}
/* Fase 2.5.65: bug overlap badge "Solo / Pro" + tooltip data-tooltip.
   Entrambi usavano ::after sullo stesso elemento -> il tooltip ereditava
   top:-8px / right:8px / text-transform:uppercase del badge e finiva in
   mezzo al bottone in MAIUSCOLO. Override completo dello ::after su hover
   per riportarlo alla forma tooltip (sopra al bottone, lowercase, centrato). */
.ai-btn.free-locked:hover::after,
.ai-btn.free-other-chosen:hover::after,
.ai-btn.free-locked:focus-visible::after,
.ai-btn.free-other-chosen:focus-visible::after {
  content: attr(data-tooltip);
  top: auto;
  right: auto;
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  background: var(--ink);
  color: var(--on-dark);
  font-size: 11.5px;
  font-weight: 500;
  padding: 8px 12px;
  border-radius: 8px;
  text-transform: none;
  letter-spacing: normal;
  width: max-content;
  max-width: 220px;
  white-space: normal;
  text-align: center;
  line-height: 1.4;
  z-index: 100;
  pointer-events: none;
  box-shadow: 0 6px 18px rgba(0,0,0,0.25);
}

/* Fase 2.18: modale di conferma scelta AI nel free */
.modal-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(20, 25, 35, 0.6);
  backdrop-filter: blur(4px);
  z-index: 9999;
  align-items: center;
  justify-content: center;
  padding: 20px;
  animation: modalFadeIn 0.2s var(--ease);
}
.modal-backdrop.show { display: flex; }
/* Fase 5.96: #briefModal e #visModal vengono aperti togglando l'attributo
   hidden (modal.hidden = false), NON aggiungendo la classe .show come gli
   altri modali. Senza questa regola .modal-backdrop{display:none} vince anche
   con hidden rimosso, e la modale resta invisibile: il bottone sembra "non
   funzionare". Mostriamo questi due quando l'attributo hidden non c'è. */
#briefModal:not([hidden]), #visModal:not([hidden]), #contentFixModal:not([hidden]) { display: flex; }
/* Fase 5.98: blocchi della proposta di contenuto (Migliora contenuto AI). */
.cfix-summary { font-size: 14px; color: var(--ink); margin: 0 0 16px; }
.cfix-block { background: var(--cream-soft); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; margin: 0 0 12px; }
.cfix-block-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 8px; }
.cfix-block-heading { font-family: var(--font-head); font-size: 15px; font-weight: 700; color: var(--ink); margin: 0; }
.cfix-block-body { white-space: pre-wrap; font-size: 13.5px; line-height: 1.55; color: var(--ink); margin: 0; }
.cfix-block-why { font-size: 12.5px; color: var(--ink-muted); margin: 8px 0 0; font-style: italic; }
.cfix-copy { flex-shrink: 0; font-size: 12px; padding: 5px 12px; border-radius: 8px; border: 1px solid var(--border); background: var(--cream); color: var(--primary); font-weight: 600; cursor: pointer; }
.cfix-copy:hover { background: var(--cream-deep); }
.cfix-tips { margin: 6px 0 0; padding-left: 18px; }
.cfix-tips li { font-size: 13px; color: var(--ink-soft); margin: 3px 0; }
.cfix-tips-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-muted); margin: 14px 0 4px; }
@keyframes modalFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.modal-card {
  background: var(--cream);
  border-radius: 16px;
  max-width: 440px;
  width: 100%;
  padding: 28px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.25);
  animation: modalCardIn 0.25s var(--ease);
}
@keyframes modalCardIn {
  from { opacity: 0; transform: translateY(12px) scale(0.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ═══ Modale "Novità" (#newsModal) + annuncio Sonnet 5 (#sonnetModal) ═══
   Riusano .modal-backdrop + .modal-card (dark mode già gestita da quei
   selettori). Colori solo via token: nessun background fisso. Animazioni con
   guardia prefers-reduced-motion. */
#newsModal[hidden], #sonnetModal[hidden] { display: none !important; }

/* --- Novità: storico aggiornamenti --- */
.news-modal-card { max-width: 560px; text-align: left; padding: 26px 26px 22px; position: relative; }
.news-modal-head { margin: 0 0 6px; padding-right: 28px; }
.news-modal-eyebrow { display: inline-block; font-size: 12px; font-weight: 700; letter-spacing: .04em; color: var(--terracotta); margin: 0 0 8px; }
.news-modal-title { font-family: var(--font-head); font-size: 22px; font-weight: 700; color: var(--ink); margin: 0 0 6px; line-height: 1.2; }
.news-modal-sub { font-size: 13.5px; color: var(--ink-muted); margin: 0; line-height: 1.5; }
.news-modal-list { max-height: 52vh; overflow-y: auto; margin: 16px 0 0; padding: 2px 4px 2px 0; display: flex; flex-direction: column; gap: 14px; }
.news-entry { border: 1px solid var(--border); border-radius: 14px; background: var(--cream-soft); padding: 14px 16px; }
.news-entry-head { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; }
.news-entry-tag { font-size: 11px; font-weight: 700; letter-spacing: .03em; padding: 3px 9px; border-radius: 99px; }
.news-entry-tag.is-new { color: var(--terracotta); background: rgba(161,77,58,.12); }
.news-entry-tag.is-improve { color: var(--primary); background: rgba(26,58,92,.13); }
.news-entry-tag.is-fix { color: var(--ink-soft); background: var(--cream-deep); }
.news-entry-date { font-size: 12px; color: var(--ink-muted); }
.news-entry-title { font-family: var(--font-head); font-size: 16px; font-weight: 700; color: var(--ink); margin: 0 0 8px; }
.news-entry-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 7px; }
.news-entry-list li { position: relative; padding-left: 20px; font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); }
.news-entry-list li::before { content: ""; position: absolute; left: 4px; top: 8px; width: 6px; height: 6px; border-radius: 50%; background: var(--terracotta); }
.news-modal-foot { margin: 18px 0 0; display: flex; justify-content: flex-end; }

/* --- Annuncio Sonnet 5 (prima visita) --- */
.sonnet-modal-card { max-width: 480px; text-align: center; padding: 34px 30px 26px; position: relative; overflow: hidden; }
.sonnet-modal-glow { position: absolute; top: -70px; left: 50%; transform: translateX(-50%); width: 320px; height: 220px; background: radial-gradient(ellipse at center, rgba(161,77,58,.28), rgba(26,58,92,.10) 45%, transparent 70%); pointer-events: none; animation: sonnetGlow 3.6s ease-in-out infinite; }
.sonnet-modal-badge { position: relative; width: 62px; height: 62px; margin: 2px auto 16px; border-radius: 18px; display: flex; align-items: center; justify-content: center; color: #fff; background: linear-gradient(135deg, var(--primary-fondo), var(--terracotta)); box-shadow: 0 10px 26px rgba(161,77,58,.35); animation: sonnetFloat 3.2s ease-in-out infinite; }
.sonnet-modal-badge svg { width: 32px; height: 32px; }
.sonnet-modal-eyebrow { display: inline-block; font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--terracotta); margin: 0 0 8px; }
.sonnet-modal-title { font-family: var(--font-head); font-size: 25px; font-weight: 900; color: var(--ink); margin: 0 0 12px; line-height: 1.18; }
.sonnet-modal-hl { color: var(--terracotta); }
.sonnet-modal-body { font-size: 14.5px; line-height: 1.55; color: var(--ink-soft); margin: 0 auto 18px; max-width: 380px; }
.sonnet-modal-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: 0 0 22px; }
.sonnet-modal-chip { font-size: 12.5px; font-weight: 600; color: var(--primary); background: var(--cream-soft); border: 1px solid var(--border); border-radius: 99px; padding: 6px 13px; opacity: 0; animation: sonnetChipIn .5s var(--ease) forwards; }
.sonnet-modal-chip:nth-child(1) { animation-delay: .15s; }
.sonnet-modal-chip:nth-child(2) { animation-delay: .28s; }
.sonnet-modal-chip:nth-child(3) { animation-delay: .41s; }
.sonnet-modal-cta { display: block; width: 100%; font-family: var(--font-body); font-size: 15px; font-weight: 700; color: #fff; background: var(--terracotta); border: none; border-radius: 12px; padding: 14px 18px; cursor: pointer; transition: transform .15s var(--ease), box-shadow .15s var(--ease); box-shadow: 0 6px 18px rgba(161,77,58,.28); }
.sonnet-modal-cta:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(161,77,58,.36); }
.sonnet-modal-cta:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
.sonnet-modal-secondary { display: block; width: 100%; margin: 10px 0 0; font-family: var(--font-body); font-size: 13.5px; font-weight: 600; color: var(--ink-muted); background: none; border: none; cursor: pointer; padding: 6px; }
.sonnet-modal-secondary:hover { color: var(--ink); }
@keyframes sonnetFloat { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
@keyframes sonnetGlow { 0%,100% { opacity: .7; } 50% { opacity: 1; } }
@keyframes sonnetChipIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) {
  .sonnet-modal-glow, .sonnet-modal-badge { animation: none; }
  .sonnet-modal-chip { animation: none; opacity: 1; }
}
@media (max-width: 560px) {
  .news-modal-card, .sonnet-modal-card { padding: 22px 18px 18px; }
  .sonnet-modal-title { font-size: 22px; }
}

/* ── Onboarding pagamento (#planOnboarding) ─────────────────────────────
   Step guidato "Piano scelto → Dati di fatturazione → Pagamento": sostituisce
   il vecchio redirect brutale a /account#fatturazione quando manca la
   fatturazione (gate BILLING_REQUIRED). Overlay a schermo intero riusa
   .modal-backdrop + .modal-card (dark mode già gestita da quei selettori).
   Tutti i colori via token var() (flippano in dark), nessun colore fisso. */
#planOnboarding[hidden] { display: none !important; }
.plan-onb-card {
  max-width: 560px;
  width: 100%;
  max-height: 92vh;
  overflow-y: auto;
  text-align: left;
  position: relative;
  padding: 32px 32px 28px;
}
/* La X di chiusura del modale fatturazione usa il componente condiviso
   .modal-close-x (stessa dimensione, cerchio, token, hover con rotazione e
   focus visibile): qui non serve altro. Prima era una copia identica del
   componente, quindi ogni ritocco al design system la lasciava indietro. */
.plan-onb-steps {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 4px 48px 20px 0;
}
.plan-onb-step {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-body);
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-muted);
}
.plan-onb-step-dot {
  width: 20px;
  height: 20px;
  border-radius: 99px;
  background: var(--cream-deep);
  color: var(--ink-muted);
  font-size: 11px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.plan-onb-step.is-done { color: var(--ink-soft); }
.plan-onb-step.is-done .plan-onb-step-dot { background: var(--success); color: var(--on-dark); }
.plan-onb-step.is-active { color: var(--terracotta); }
.plan-onb-step.is-active .plan-onb-step-dot { background: var(--terracotta); color: var(--on-dark); }
.plan-onb-step-sep { color: var(--border); font-size: 12px; }
/* Titolo/sottotitolo scoped su .plan-onb-card: la card è anche .modal-card,
   quindi .modal-card h3 / .modal-card p (specificità 0,0,1,1) vincerebbero su
   .plan-onb-title / .plan-onb-sub (0,0,1,0) e mangerebbero size mobile e margini. */
.plan-onb-card .plan-onb-title {
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.2;
  color: var(--ink);
  margin: 0 0 6px;
}
.plan-onb-card .plan-onb-sub {
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 0 0 18px;
}
.plan-onb-sub strong { color: var(--ink); }
.plan-onb-recap {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 4px 12px;
  background: var(--cream-deep);
  border: 1px solid var(--border);
  border-left: 3px solid var(--terracotta);
  border-radius: 14px;
  padding: 13px 16px 14px;
  margin: 0 0 18px;
}
.plan-onb-recap-tag {
  grid-column: 1 / -1;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--terracotta);
  margin: 0 0 2px;
}
.plan-onb-recap-name {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
}
.plan-onb-recap-price {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--font-head);
  white-space: nowrap;
}
.plan-onb-recap-num { font-size: 28px; font-weight: 900; line-height: 1; letter-spacing: -0.02em; color: var(--primary); }
.plan-onb-recap-unit { font-size: 13px; color: var(--ink-muted); font-weight: 600; }
.plan-onb-recap-list {
  grid-column: 1 / -1;
  list-style: none;
  margin: 6px 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
}
.plan-onb-recap-list li {
  font-size: 12.5px;
  color: var(--ink-soft);
  position: relative;
  padding-left: 16px;
}
.plan-onb-recap-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--success);
  font-weight: 700;
}
/* Trust strip sotto la CTA: rassicura proprio nel momento del pagamento. */
.plan-onb-trust {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px 18px;
  margin: 14px 0 0;
}
.plan-onb-trust-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--ink-muted);
}
.plan-onb-trust-item svg { width: 14px; height: 14px; flex: 0 0 auto; color: var(--success); }
@media (max-width: 560px) {
  .plan-onb-trust { flex-direction: column; align-items: center; gap: 9px; }
}
/* Benvenuto: nome del piano in evidenza (terracotta). */
.plan-welcome-title #planWelcomePlanName { color: var(--terracotta); }
.plan-onb-form { display: flex; flex-direction: column; gap: 16px; }
.plan-onb-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.plan-onb-row-3 { grid-template-columns: 0.7fr 1.3fr 0.6fr; }
.plan-onb-card .plan-onb-note {
  font-size: 12px;
  color: var(--ink-muted);
  line-height: 1.5;
  margin: 2px 0 0;
}
.plan-onb-feedback {
  font-size: 13px;
  font-weight: 600;
  margin: 12px 0 0;
  min-height: 18px;
}
.plan-onb-feedback.ok { color: var(--primary); }
.plan-onb-feedback.err { color: var(--terracotta); }
.plan-onb-actions {
  display: flex;
  gap: 14px;
  align-items: center;
  margin: 22px 0 0;
}
.plan-onb-pay {
  flex: 1;
  background: var(--terracotta);
  color: var(--cream);
  border: none;
  border-radius: 12px;
  padding: 14px 18px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.plan-onb-pay:hover { background: var(--terracotta-hover); transform: translateY(-1px); }
.plan-onb-pay:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.plan-onb-pay:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.plan-onb-cancel {
  background: transparent;
  color: var(--ink-muted);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 13px 18px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s var(--ease), color 0.15s var(--ease);
}
.plan-onb-cancel:hover { background: var(--cream-soft); color: var(--ink); }
.plan-onb-cancel:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.plan-onb-card .plan-onb-secure {
  font-size: 12px;
  color: var(--ink-muted);
  text-align: center;
  margin: 12px 0 0;
}
@media (max-width: 560px) {
  .plan-onb-card { padding: 24px 18px 20px; }
  .plan-onb-card .plan-onb-title { font-size: 21px; }
  .plan-onb-row, .plan-onb-row-3 { grid-template-columns: 1fr; }
  .plan-onb-actions { flex-direction: column-reverse; align-items: stretch; }
  .plan-onb-cancel { width: 100%; }
}

/* ── Esperienza attivazione piano ───────────────────────────────────────
   1) Ribbon nel modale auth: con un piano in sospeso la registrazione è il
      passo 1 di 3 del percorso di attivazione, e l'utente lo vede.
   2) Overlay benvenuto (#planWelcome) al ritorno da Stripe: due atti,
      attivazione in corso -> celebrazione (check animato + sparkle nei colori
      brand), cosa hai sbloccato e CTA verso il primo risultato.
   Solo token var() (flippano in dark), reduced-motion rispettato. */
.auth-plan-ribbon {
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: var(--cream-deep);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 10px 14px;
  margin: 0 0 16px;
  text-align: left;
}
.auth-plan-ribbon[hidden] { display: none !important; }
.auth-plan-ribbon-step {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--terracotta);
}
.auth-plan-ribbon-plan { font-family: var(--font-head); font-size: 15px; color: var(--ink); }
.auth-plan-ribbon-price { color: var(--ink-muted); font-family: var(--font-body); font-size: 12.5px; font-weight: 600; margin-left: 6px; }
.auth-plan-ribbon-note { font-size: 11.5px; color: var(--ink-muted); line-height: 1.45; }

#planWelcome[hidden] { display: none !important; }
.plan-welcome-card {
  max-width: 480px;
  width: 100%;
  text-align: center;
  padding: 40px 32px 28px;
  position: relative;
}
.plan-welcome-activating[hidden], .plan-welcome-done[hidden] { display: none !important; }
.plan-welcome-spinner {
  width: 44px;
  height: 44px;
  margin: 6px auto 18px;
  border-radius: 50%;
  border: 3px solid var(--cream-deep);
  border-top-color: var(--terracotta);
  animation: planWelcomeSpin 0.8s linear infinite;
}
@keyframes planWelcomeSpin { to { transform: rotate(360deg); } }
.plan-welcome-wait-title {
  font-family: var(--font-head);
  font-size: 22px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 6px;
}
.plan-welcome-wait-sub { font-size: 14px; line-height: 1.55; color: var(--ink-soft); margin: 0; }
.plan-welcome-burst { position: relative; width: 88px; height: 88px; margin: 0 auto 18px; }
.plan-welcome-check { width: 88px; height: 88px; display: block; }
.plan-welcome-check .pw-ring {
  stroke: var(--success);
  stroke-dasharray: 202;
  stroke-dashoffset: 202;
  transform: rotate(-90deg);
  transform-origin: center;
  animation: pwRingDraw 0.6s ease-out 0.1s forwards;
}
.plan-welcome-check .pw-tick {
  stroke: var(--success);
  stroke-dasharray: 42;
  stroke-dashoffset: 42;
  animation: pwTickDraw 0.35s ease-out 0.65s forwards;
}
@keyframes pwRingDraw { to { stroke-dashoffset: 0; } }
@keyframes pwTickDraw { to { stroke-dashoffset: 0; } }
.pw-spark {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 7px;
  height: 7px;
  border-radius: 99px;
  opacity: 0;
  animation: pwSpark 0.9s ease-out 0.8s forwards;
}
@keyframes pwSpark {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.6); }
  20%  { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) scale(0.4); }
}
.pw-s1 { --dx: -46px; --dy: -30px; background: var(--terracotta); }
.pw-s2 { --dx: 46px;  --dy: -26px; background: var(--primary-fondo); }
.pw-s3 { --dx: -52px; --dy: 14px;  background: var(--success); }
.pw-s4 { --dx: 52px;  --dy: 20px;  background: var(--terracotta); }
.pw-s5 { --dx: -18px; --dy: -52px; background: var(--primary-fondo); }
.pw-s6 { --dx: 22px;  --dy: 50px;  background: var(--success); }
.plan-welcome-title {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.2;
  color: var(--ink);
  margin: 0 0 8px;
}
.plan-welcome-sub { font-size: 14.5px; line-height: 1.55; color: var(--ink-soft); margin: 0 0 16px; }
.plan-welcome-perks {
  list-style: none;
  margin: 0 auto 22px;
  padding: 14px 18px;
  max-width: 330px;
  text-align: left;
  background: var(--cream-deep);
  border: 1px solid var(--border);
  border-radius: 14px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.plan-welcome-perks[hidden] { display: none !important; }
.plan-welcome-perks li { font-size: 13.5px; color: var(--ink); position: relative; padding-left: 20px; }
.plan-welcome-perks li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--success);
  font-weight: 700;
}
.plan-welcome-cta {
  width: 100%;
  background: var(--terracotta);
  color: var(--cream);
  border: none;
  border-radius: 12px;
  padding: 14px 18px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.plan-welcome-cta:hover { background: var(--terracotta-hover); transform: translateY(-1px); }
.plan-welcome-cta:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.plan-welcome-later {
  display: block;
  margin: 10px auto 0;
  background: transparent;
  border: none;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 13px;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 3px;
  padding: 6px 10px;
}
.plan-welcome-later:hover { color: var(--ink); }
.plan-welcome-receipt { font-size: 11.5px; color: var(--ink-muted); margin: 14px 0 0; }
@media (prefers-reduced-motion: reduce) {
  .plan-welcome-check .pw-ring, .plan-welcome-check .pw-tick { animation: none; stroke-dashoffset: 0; }
  .pw-spark { animation: none; opacity: 0; }
}
@media (max-width: 560px) {
  .plan-welcome-card { padding: 32px 20px 22px; }
  .plan-welcome-title { font-size: 22px; }
}

/* Fase 5.40: modale di conferma brandizzato (sostituisce window.confirm). */
.confirm-dialog-card { max-width: 400px; text-align: center; }
.confirm-dialog-icon {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(161, 77, 58, 0.12);
  color: var(--terracotta);
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 14px;
}
.confirm-dialog-title {
  font-family: var(--font-head);
  font-size: 19px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
}
.confirm-dialog-text {
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 0;
}
.confirm-dialog-actions { justify-content: center; }
/* Modale copia (fallback clipboard). */
.copy-dialog-card { max-width: 440px; position: relative; }
.copy-dialog-input {
  width: 100%;
  margin-top: 14px;
  padding: 11px 14px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--cream-soft);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 14px;
}
.copy-dialog-input:focus { border-color: var(--primary); outline: none; }
@media (max-width: 600px) {
  .confirm-dialog-actions { flex-direction: column-reverse; }
  .confirm-dialog-actions .modal-btn { width: 100%; }
}

/* Fase 2.5.43+44: modal "Confronta piani" (compare-plans-modal).
   Layout responsive 4→2→1 colonne. Padding ridotto su mobile. */
.compare-plans-modal .compare-plans-card {
  max-width: 920px;
  padding: 28px 24px 24px;
  max-height: 88vh;
  overflow-y: auto;
  position: relative;
}
/* Fase 2.5.44: stile X di chiusura uniforme per TUTTI i modali.
   Una classe singola .modal-close-x con dimensione/colore/hover/focus standard.
   Le classi specifiche dei singoli modal (.compare-plans-close, .avatar-picker-close,
   .auth-modal-close, .guide-help-close) ora si limitano al positioning + ereditano
   questo stile attraverso lo stesso pattern. */
.modal-close-x,
.compare-plans-close,
.avatar-picker-close,
.auth-modal-close,
.guide-help-close {
  position: absolute;
  top: 12px;
  right: 12px;
  /* Fase 5.33: era 34x34px, sotto il minimo touch 44px. Portato a 40px
     (compromesso tra accessibilita' touch e ingombro visivo del tasto X). */
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--cream);
  color: var(--ink-soft);
  /* Fase 2.6.1: il glifo × (U+00D7) è centrato sull'asse matematico, non sul
     centro del cerchio: restava ~1.3px basso (2.6px a 2x), disallineato. Lo
     nascondo e disegno la × con due barre pseudo-elemento centrate con
     translate(-50%,-50%): centratura pixel-perfect indipendente dal font e dallo
     zoom. L'aria-label resta per l'accessibilita'. */
  font-size: 0;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: background 0.15s var(--ease), color 0.15s var(--ease),
              border-color 0.15s var(--ease), transform 0.15s var(--ease);
}
/* Le due barre della × disegnata. currentColor segue il colore del bottone
   (var(--ink-soft), var(--ink) su hover), quindi vale anche in dark. */
.modal-close-x::before,
.modal-close-x::after,
.compare-plans-close::before,
.compare-plans-close::after,
.avatar-picker-close::before,
.avatar-picker-close::after,
.auth-modal-close::before,
.auth-modal-close::after,
.guide-help-close::before,
.guide-help-close::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 15px;
  height: 1.6px;
  border-radius: 2px;
  background: currentColor;
}
.modal-close-x::before,
.compare-plans-close::before,
.avatar-picker-close::before,
.auth-modal-close::before,
.guide-help-close::before { transform: translate(-50%, -50%) rotate(45deg); }
.modal-close-x::after,
.compare-plans-close::after,
.avatar-picker-close::after,
.auth-modal-close::after,
.guide-help-close::after { transform: translate(-50%, -50%) rotate(-45deg); }
/* Fase 2.6.1: stessa × disegnata anche sugli ALTRI tasti di chiusura a glifo,
   per allinearli tutti: checklist onboarding e dismiss CTA post-audit (40px),
   rimozione logo agenzia (30px, barre più corte). I due statici prendono
   position: relative così i pseudo si posizionano rispetto al bottone. */
.onboarding-checklist-close,
.post-audit-cta-soft-close { position: relative; }
.onboarding-checklist-close,
.post-audit-cta-soft-close,
.agency-logo-remove { font-size: 0; }
.onboarding-checklist-close::before, .onboarding-checklist-close::after,
.post-audit-cta-soft-close::before, .post-audit-cta-soft-close::after,
.agency-logo-remove::before, .agency-logo-remove::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  height: 1.6px;
  border-radius: 2px;
  background: currentColor;
}
.onboarding-checklist-close::before, .onboarding-checklist-close::after,
.post-audit-cta-soft-close::before, .post-audit-cta-soft-close::after { width: 15px; }
.agency-logo-remove::before, .agency-logo-remove::after { width: 11px; height: 1.5px; }
.onboarding-checklist-close::before,
.post-audit-cta-soft-close::before,
.agency-logo-remove::before { transform: translate(-50%, -50%) rotate(45deg); }
.onboarding-checklist-close::after,
.post-audit-cta-soft-close::after,
.agency-logo-remove::after { transform: translate(-50%, -50%) rotate(-45deg); }

/* Fase 2.6.2: stessa × disegnata sui due tasti di chiusura dei banner
   (demo-banner e wp-report-banner). Erano il glifo × grezzo (font-size 20px),
   otticamente basso di ~1px come ogni glifo ×. currentColor segue il tema, quindi
   niente override dark separato: il colore lo eredita dalle regole già esistenti. */
.demo-banner-close,
.wp-report-banner-x { position: relative; font-size: 0; }
/* wp-report-banner-x era display:block senza box: a font-size:0 collasserebbe.
   Gli do una casella centrata come agli altri tasti icona (il banner è flex,
   align-items:center, quindi si allinea da solo). */
.wp-report-banner-x {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  padding: 0;
}
.demo-banner-close::before, .demo-banner-close::after,
.wp-report-banner-x::before, .wp-report-banner-x::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  height: 1.6px;
  border-radius: 2px;
  background: currentColor;
}
.demo-banner-close::before, .demo-banner-close::after { width: 15px; }
.wp-report-banner-x::before, .wp-report-banner-x::after { width: 13px; }
.demo-banner-close::before, .wp-report-banner-x::before { transform: translate(-50%, -50%) rotate(45deg); }
.demo-banner-close::after, .wp-report-banner-x::after { transform: translate(-50%, -50%) rotate(-45deg); }
.modal-close-x:hover,
.compare-plans-close:hover,
.avatar-picker-close:hover,
.auth-modal-close:hover,
.guide-help-close:hover {
  background: var(--cream-soft);
  color: var(--ink);
  border-color: var(--ink-muted);
  transform: rotate(90deg);
}
.modal-close-x:focus-visible,
.compare-plans-close:focus-visible,
.avatar-picker-close:focus-visible,
.auth-modal-close:focus-visible,
.guide-help-close:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.compare-plans-title {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin: 0 0 6px;
  text-align: center;
}
.compare-plans-sub {
  text-align: center;
  font-size: 14px;
  color: var(--ink-muted);
  margin: 0 0 24px;
}
/* Fase 2.5.45: header rinnovato + pillola "Sei su X" */
.compare-plans-header { text-align: center; margin-bottom: 22px; }
.compare-plans-current-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cream-soft, #f5f3ec);
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 6px 14px;
  font-size: 12.5px;
  color: var(--ink-muted);
  margin-top: 4px;
}
.compare-plans-current-pill[hidden] { display: none !important; }
.compare-plans-current-pill strong { color: var(--primary); font-weight: 700; }

/* Fase 2.5.45: grid a 3 colonne (Free rimosso dalla griglia, diventa pillola).
   I 3 piani paid hanno più spazio e respirano meglio. */
.compare-plans-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.compare-plan-tagline {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--terracotta);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: -2px;
}
.compare-plan-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 4px;
  margin: 8px 0;
  padding: 10px 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
}
.cp-stat { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.cp-stat strong {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1;
}
.cp-stat span {
  font-size: 10.5px;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.compare-plan {
  /* Fase 5.20.2: era "white" hardcoded -> in dark restava bianco con
     titoli/prezzi cream invisibili. Override gia in 5.10 ma il source
     vinceva per cascade. cream-soft adatta entrambi i temi. */
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 16px 14px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  position: relative;
  transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease);
  animation: comparePlanIn 0.4s var(--ease) both;
}
.compare-plan:nth-child(1) { animation-delay: 0.05s; }
.compare-plan:nth-child(2) { animation-delay: 0.12s; }
.compare-plan:nth-child(3) { animation-delay: 0.19s; }
.compare-plan:nth-child(4) { animation-delay: 0.26s; }
@keyframes comparePlanIn {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
.compare-plan:hover {
  transform: translateY(-3px);
  box-shadow: 0 10px 24px rgba(15, 37, 61, 0.1);
}
.compare-plan-featured {
  border-color: var(--primary);
  background: var(--cream);
}
.compare-plan-badge {
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--primary-fondo);
  color: var(--on-dark);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  padding: 3px 10px;
  border-radius: 99px;
  white-space: nowrap;
}
.compare-plan-name {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
}
.compare-plan-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--font-head);
}
.compare-plan-num {
  font-size: 26px;
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
}
.compare-plan-price span:last-child {
  font-size: 13px;
  color: var(--ink-muted);
  font-weight: 600;
}
.compare-plan-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12.5px;
  color: var(--ink-soft);
  flex: 1;
}
.compare-plan-list li {
  padding-left: 14px;
  position: relative;
}
.compare-plan-list li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--success, #5e7c5a);
  font-weight: 700;
}
.compare-plan-list strong { color: var(--ink); }
.compare-plan-btn {
  margin-top: 6px;
  background: var(--ink);
  color: var(--on-dark);
  border: 0;
  padding: 10px 14px;
  border-radius: var(--r-sm);
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.compare-plan-btn:hover { background: var(--primary-fondo); transform: translateY(-1px); }
.compare-plan-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.compare-plan-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.compare-plan-btn-primary { background: var(--terracotta); }
.compare-plan-btn-primary:hover { background: var(--primary-fondo); }

/* Fase 6.7: trigger di upgrade mirato per il Free a crediti esauriti.
   Diverso dal modale a 3 card: un solo passo (Solo), spiega cosa aveva gratis
   e cosa sblocca. Aperto da handlePlanExhausted solo quando plan === "free". */
.free-upsell-modal .free-upsell-card {
  position: relative;
  width: 100%;
  max-width: 440px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 18px;
  padding: 32px 28px 24px;
  text-align: center;
  box-shadow: 0 24px 60px rgba(15, 37, 61, 0.22);
}
.free-upsell-close {
  position: absolute;
  top: 12px;
  right: 12px;
}
.free-upsell-icon {
  width: 52px;
  height: 52px;
  margin: 0 auto 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--cream-deep);
  color: var(--primary);
}
.free-upsell-icon svg { width: 26px; height: 26px; }
.free-upsell-tag {
  display: inline-block;
  font-family: var(--font-body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--terracotta);
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 99px;
  padding: 4px 12px;
  margin-bottom: 12px;
}
.free-upsell-title {
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--ink);
  margin: 0 0 10px;
}
.free-upsell-body {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-soft);
  margin: 0 auto 18px;
  max-width: 360px;
}
.free-upsell-list {
  list-style: none;
  margin: 0 0 22px;
  padding: 16px 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 14px;
  text-align: left;
}
.free-upsell-list li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 1.4;
  color: var(--ink);
  padding: 7px 0;
}
.free-upsell-list li + li { border-top: 1px solid var(--border); }
.free-upsell-check {
  flex-shrink: 0;
  font-weight: 700;
  color: var(--success);
  line-height: 1.4;
}
.free-upsell-cta {
  display: block;
  width: 100%;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 700;
  color: var(--cream);
  background: var(--terracotta);
  border: none;
  border-radius: 12px;
  padding: 14px 18px;
  cursor: pointer;
  transition: background 0.15s var(--ease), transform 0.15s var(--ease);
}
.free-upsell-cta:hover { background: var(--terracotta-hover); transform: translateY(-1px); }
.free-upsell-cta:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.free-upsell-cta:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
.free-upsell-secondary {
  display: block;
  width: 100%;
  margin-top: 12px;
  font-family: var(--font-body);
  font-size: 13.5px;
  font-weight: 500;
  color: var(--ink-muted);
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px;
}
.free-upsell-secondary:hover { color: var(--ink); text-decoration: underline; }
.free-upsell-secondary:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 6px; }
@media (max-width: 560px) {
  .free-upsell-modal .free-upsell-card { padding: 28px 20px 20px; border-radius: 16px; }
  .free-upsell-title { font-size: 21px; }
  .free-upsell-body { font-size: 13.5px; }
}

.compare-plan-current {
  margin-top: 6px;
  text-align: center;
  font-size: 12px;
  font-weight: 700;
  color: var(--success, #5e7c5a);
  background: rgba(94, 124, 90, 0.08);
  border: 1px solid rgba(94, 124, 90, 0.25);
  padding: 8px;
  border-radius: var(--r-sm);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
@media (max-width: 820px) {
  .compare-plans-grid { grid-template-columns: 1fr; gap: 12px; }
  .compare-plans-modal .compare-plans-card { max-width: 480px; }
}
@media (max-width: 540px) {
  .compare-plans-grid { grid-template-columns: 1fr; }
  .compare-plans-modal .compare-plans-card { padding: 24px 18px; }
  .compare-plans-title { font-size: 22px; }
  .cp-stat strong { font-size: 15px; }
}

/* Fase 2.5.43: guida "Cosa puoi fare" nella dashboard. 4 card con animazione
   d'ingresso stagger + hover lift + icona micro-bounce. */
.dashboard-guide-section { animation: dashboardGuideSectionIn 0.5s var(--ease) both; }
/* Fase 2.5.45: sezione guida nella dashboard rimossa (sostituita da floating ?).
   Hidden permanente via CSS, tenuto in DOM per compatibilita JS. */
.dashboard-guide-section[hidden] { display: none !important; }
.dashboard-widget[hidden] { display: none !important; }
.dashboard-section[hidden] { display: none !important; }

/* Fase 5: banner contestuale post-onboarding. Sfondo cream-soft, bordo
   border, dismissible. Compare per 24h dopo il primo audit. */
.onboarding-banner {
  /* Il fondo DEVE ribaltarsi col tema. Con un colore chiaro fisso il titolo,
     che usa var(--ink), diventava chiaro anche lui: contrasto 1.0, cioè
     invisibile. Un fondo che non si ribalta può portare sopra solo valori
     fissi, mai token (README, isole chiare fisse). */
  background: var(--cream-deep);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 18px 22px;
  margin: 0 0 22px;
}
.onboarding-banner[hidden] { display: none !important; }
.onboarding-banner-content {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}
.onboarding-banner-text { flex: 1; min-width: 0; }
.onboarding-banner-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}
.onboarding-banner-body {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-soft);
  margin: 0;
  line-height: 1.55;
}
.onboarding-banner-close {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 99px;
  background: transparent;
  border: 1px solid transparent;
  color: var(--ink-muted);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 0.18s var(--ease), color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.onboarding-banner-close:hover {
  background: rgba(15, 37, 61, 0.06);
  color: var(--ink);
  border-color: var(--border);
}
@media (max-width: 540px) {
  .onboarding-banner { padding: 14px 16px; margin-bottom: 16px; }
  .onboarding-banner-title { font-size: 16px; }
  .onboarding-banner-body { font-size: 13px; }
}

/* Fase 2.5.45: floating help button (sostituisce sezione guida dashboard). */
.floating-help-btn {
  position: fixed;
  bottom: 24px;
  right: 24px;
  left: auto;
  width: 52px;
  height: 52px;
  border-radius: 99px;
  background: var(--primary-fondo);
  color: #fff;
  border: none;
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 10px 28px rgba(26, 58, 92, 0.28), 0 2px 6px rgba(26, 58, 92, 0.16);
  z-index: 999;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease), background 0.2s var(--ease);
}
.floating-help-btn:hover {
  transform: translateY(-3px) scale(1.05);
  background: #142e49;
  box-shadow: 0 14px 32px rgba(26, 58, 92, 0.34), 0 4px 10px rgba(26, 58, 92, 0.2);
}
.floating-help-btn:focus-visible {
  outline: 3px solid var(--terracotta);
  outline-offset: 3px;
}
.floating-help-btn[hidden] { display: none !important; }
.floating-help-btn-label {
  position: absolute;
  right: 60px;
  top: 50%;
  transform: translateY(-50%);
  background: var(--ink);
  color: #fff;
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 500;
  padding: 6px 10px;
  border-radius: 8px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s var(--ease);
}
.floating-help-btn:hover .floating-help-btn-label { opacity: 1; }

/* Fase 5.1: scroll-to-top button. A sinistra del floating help, stesso
   spazio orizzontale ma offset. Hidden di default (opacity 0 + pointer-events
   none), visible via classe .is-visible aggiunta da JS al scroll > 400px. */
.scroll-top-btn {
  position: fixed;
  bottom: 24px;
  right: 88px; /* 24 + 44 + 20 di gap a sinistra del help button (52px) */
  left: auto;
  width: 44px;
  height: 44px;
  border-radius: 99px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  border: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 22px rgba(26, 58, 92, 0.22), 0 2px 6px rgba(26, 58, 92, 0.14);
  z-index: 998;
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity 0.2s var(--ease), transform 0.2s var(--ease), background 0.2s var(--ease);
}
.scroll-top-btn.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.scroll-top-btn:hover { background: #15304d; }
.scroll-top-btn svg { display: block; stroke: var(--cream); }
@media (max-width: 760px) {
  /* Mobile: 40x40 + bottom 80px quando bottom-nav è visibile a logged-in.
     Per anonimi su mobile resta a 24px (no bottom-nav).
     Fase 5.99.16: +safe-area-inset così su iPhone con home-indicator il
     bottone resta SOPRA la bottom-nav (56px + safe-area) e non la copre. */
  .scroll-top-btn { width: 40px; height: 40px; right: 76px; }
  body.is-logged-in .scroll-top-btn { bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
}
@media (max-width: 760px) {
  /* Fase 5.1: floating "?" torna a destra. Su mobile con bottom-nav presente
     il bottom passa a 80px (era 70px e sovrapponeva la nav stessa).
     Allineato a destra come da spec utente; padding-bottom 160px sul body
     loggato evita comunque overlap sui bottoni Azioni delle card. */
  .floating-help-btn { width: 44px; height: 44px; font-size: 21px; bottom: 24px; right: 24px; left: auto; }
  .floating-help-btn-label { display: none; }
}

/* Fase 2.5.51: bottom nav bar mobile per utenti loggati. Hidden di default
   (anche su desktop), visibile solo se body.is-logged-in E viewport <768px. */
/* Fase 2.5.55 fix: bottom nav passa da sfondo --ink scuro a --cream con
   border-top. Icone --ink-muted normali, --terracotta in stato attivo.
   Label Inter 11px (era 10.5px) come da spec. */
.mobile-bottom-nav {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: var(--cream);
  border-top: 1px solid var(--border);
  /* Fase 5.14 bug-sweep #2: safe-area-inset-bottom per iOS gesture bar (home
     indicator). Senza, l'ultimo paio di px della nav era sotto la barra di
     sistema su iPhone X+ e le icone risultavano troncate. */
  height: calc(56px + env(safe-area-inset-bottom, 0px));
  padding-bottom: env(safe-area-inset-bottom, 0px);
  display: none; /* mostrato via media query + body class */
  align-items: stretch;
  z-index: 9000;
  box-shadow: 0 -4px 16px rgba(15, 37, 61, 0.06);
}
.mobile-bottom-nav[hidden] { display: none !important; }
.mbn-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  color: var(--ink-muted);
  text-decoration: none;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.02em;
  transition: color 0.18s var(--ease), background 0.18s var(--ease);
}
.mbn-item svg { display: block; }
.mbn-item:hover { background: rgba(15, 37, 61, 0.04); color: var(--ink); }
.mbn-item.active { color: var(--terracotta); }
.mbn-item.active svg { stroke: var(--terracotta); }

/* Fase 2.5.52 fix: breakpoint 760px coerente con il resto del progetto
   (era 768px, creava limbo 761-768 con bottom nav visibile e desktop layout). */
@media (max-width: 760px) {
  body.is-logged-in .mobile-bottom-nav { display: flex; }
  /* Fase 2.5.93: padding-bottom aumentato da 56px a 130px per evitare che
     il floating help button (bottom:72px, 46px altezza) copra le azioni
     dell'ultima card nella lista siti dashboard. 56 nav + 16 gap + 46 btn
     + 12 breathing = 130px. */
  body.is-logged-in { padding-bottom: calc(160px + env(safe-area-inset-bottom, 0px)); }
  /* Fase 5.1: quando bottom-nav (56px) è visibile, il floating "?" sta a 80px
     da fondo (24px gap + 56px nav). Spec utente: right:24px sempre, mai
     left. Padding-bottom body 160px garantisce che l'ultima card scrolli
     sopra il bottone senza overlap visivo sui bottoni Azioni.
     Fase 5.99.16: +safe-area-inset (vedi scroll-top-btn). */
  body.is-logged-in .floating-help-btn { bottom: calc(80px + env(safe-area-inset-bottom, 0px)); right: 24px; left: auto; }
}

/* ═══════════ Fase 5.99.16: accessibilita globale ═══════════ */
/* Focus visibile e coerente su TUTTI i controlli interattivi (tastiera).
   Usa :focus-visible così non disturba il click col mouse. Colore terracotta
   ben visibile sia su cream sia in dark; nessun background (no regola CSS-1). */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 2px;
  border-radius: 6px;
}
/* Rispetta chi ha attivato "riduci animazioni" a livello di OS: niente
   transizioni/animazioni vistose, niente smooth-scroll forzato. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ═══════════ Fase 5.99.17: skeleton di caricamento ═══════════ */
/* Placeholder animati mentre i dati arrivano (GSC, lista siti, pagine WP):
   l'app sembra più veloce e non "vuota". Sfondo da variabili (regola CSS-1);
   lo shimmer è disattivato da prefers-reduced-motion (blocco globale sopra). */
.skel { position: relative; overflow: hidden; background: var(--cream-deep); border-radius: 8px; }
.skel::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.45), transparent);
  transform: translateX(-100%); animation: skelShimmer 1.2s ease-in-out infinite;
}
[data-theme="dark"] .skel { background: var(--surface-deep, rgba(255,255,255,0.06)); }
[data-theme="dark"] .skel::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.10), transparent); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .skel { background: var(--surface-deep, rgba(255,255,255,0.06)); }
  :root:not([data-theme="light"]) .skel::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.10), transparent); }
}
.skel-line { height: 12px; margin: 0 0 9px; }
.skel-line.sk-sm { width: 40%; }
.skel-line.sk-md { width: 65%; }
.skel-line.sk-lg { width: 90%; }
.skel-row { height: 52px; border-radius: 12px; margin: 0 0 10px; }
.skel-metric { height: 78px; border-radius: 14px; }
.skel-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 12px; }
@keyframes skelShimmer { 100% { transform: translateX(100%); } }

/* Fase 5.99.17: stato di errore inline coerente con bottone "Riprova". */
.inline-error { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 14px; border-radius: 10px; background: rgba(161,77,58,0.08); border: 1px solid rgba(161,77,58,0.28); font-size: 13px; color: var(--ink-soft); }
.inline-error-retry { background: none; border: 1px solid var(--terracotta); color: var(--terracotta); border-radius: 8px; padding: 5px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer; }
.inline-error-retry:hover { background: rgba(161,77,58,0.10); }
[data-theme="dark"] .inline-error { background: rgba(200,110,86,0.14); border-color: rgba(200,110,86,0.34); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .inline-error { background: rgba(200,110,86,0.14); border-color: rgba(200,110,86,0.34); }
}

/* Fase 5.99.20: micro-interazione coerente quando un fix va "in coda".
   Tutti i bottoni di conferma (top3, issue, per-pagina, AI, cannibalizzazione)
   fanno un breve "pop" quando passano a stato applicato. Disattivato da
   prefers-reduced-motion (blocco globale sopra). */
.top3-wp-apply-done,
.wp-issue-apply-done,
.issue-page-apply-done,
.ai-wp-apply-done,
.cannib-genkw-done { animation: queuedPop 0.32s var(--ease, ease-out) 1; }
@keyframes queuedPop { 0% { transform: scale(0.94); } 60% { transform: scale(1.05); } 100% { transform: scale(1); } }

/* FIX 5: stile base dei bottoni "Pubblica sul sito" dell'AI Lab (title,
   description, schema, FAQ, llms.txt). Var-based, niente colori hardcoded; il
   testo chiaro fisso su navy segue il pattern dei CTA primari. */
.ai-wp-apply {
  padding: 7px 14px;
  background: var(--primary-fondo);
  color: #fafaf7;
  border: none;
  border-radius: 9px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
}
.ai-wp-apply:hover { background: var(--primary-deep); }
.ai-wp-apply.ai-wp-apply-done {
  background: transparent;
  color: var(--success);
  border: 1px solid var(--success);
  cursor: default;
}
.proposal .ai-wp-apply { margin-top: 10px; }
.ai-raw-output-apply { margin-top: 12px; }

/* FIX 4: box "Pubblica sul sito" nelle risposte della chat AI (marker WP_APPLY). */
.chat-wp-apply-wrap {
  margin-top: 10px;
  padding: 10px 12px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  gap: 7px;
}
.chat-wp-apply-val { font-size: 13px; color: var(--ink-soft); }
.chat-wp-apply-btn {
  align-self: flex-start;
  padding: 5px 12px;
  background: var(--primary-fondo);
  color: #fafaf7;
  border: none;
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  font-family: inherit;
}
.chat-wp-apply-btn:hover { background: var(--primary-deep); }
.chat-wp-apply-btn.ai-wp-apply-done {
  background: transparent;
  color: var(--success);
  border: 1px solid var(--success);
  cursor: default;
}

/* Fase 2.5.45: tour onboarding spotlight overlay */
.tour-overlay {
  position: fixed;
  inset: 0;
  z-index: 9500;
  pointer-events: auto;
}
.tour-overlay[hidden] { display: none !important; }
.tour-spotlight {
  position: absolute;
  border-radius: 12px;
  box-shadow: 0 0 0 9999px rgba(10, 20, 32, 0.72);
  transition: top 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              height 0.35s cubic-bezier(0.4, 0, 0.2, 1);
  pointer-events: none;
  border: 2px solid rgba(255, 255, 255, 0.55);
}
.tour-tooltip {
  position: absolute;
  background: #fff;
  border-radius: 14px;
  padding: 20px 22px;
  width: 320px;
  max-width: calc(100vw - 32px);
  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.28), 0 4px 12px rgba(0, 0, 0, 0.12);
  transition: top 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.25s var(--ease);
  font-family: var(--font-body);
  z-index: 1;
}
.tour-progress {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}
.tour-step-counter {
  font-size: 11px;
  font-weight: 600;
  color: var(--terracotta);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.tour-skip {
  background: none;
  border: none;
  font-size: 12px;
  color: var(--ink-muted);
  cursor: pointer;
  font-family: var(--font-body);
  padding: 4px 6px;
}
.tour-skip:hover { color: var(--ink); text-decoration: underline; }
.tour-title {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
}
.tour-text {
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--ink-soft);
  margin: 0 0 16px;
}
.tour-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}
.tour-btn {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  padding: 8px 14px;
  border-radius: 10px;
  border: none;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.tour-btn-primary {
  background: var(--primary-fondo);
  color: #fff;
}
.tour-btn-primary:hover {
  background: #142e49;
  transform: translateY(-1px);
}
.tour-btn-secondary {
  background: transparent;
  color: var(--ink-muted);
  border: 1px solid var(--border);
}
.tour-btn-secondary:hover {
  background: var(--cream-soft, #f5f3ec);
  color: var(--ink);
}
@media (max-width: 540px) {
  .tour-tooltip { width: calc(100vw - 24px); padding: 16px 18px; }
  .tour-title { font-size: 16px; }
}

/* Fase 2.5.45: sezione "Account e piano" collassabile (wrappa subscription + upgrade) */
.dashboard-account-fold {
  margin-top: 26px;
  border: 1px solid var(--border);
  border-radius: var(--r);
  /* Fase 5.18.2: era #fff hardcoded -> in dark restava bianco con testi
     cream invisibili. Cream-soft adatta entrambi i temi via var. */
  background: var(--cream);
  overflow: hidden;
}
.dashboard-account-fold-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  padding: 16px 20px;
  background: var(--cream-soft, #f5f3ec);
  border: none;
  cursor: pointer;
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  text-align: left;
}
.dashboard-account-fold-head:hover { background: var(--cream-deep); }
.dashboard-account-fold-chevron {
  flex-shrink: 0;
  transition: transform 0.25s var(--ease);
}
.dashboard-account-fold[data-open="true"] .dashboard-account-fold-chevron { transform: rotate(180deg); }
.dashboard-account-fold-body {
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.dashboard-account-fold[data-open="true"] .dashboard-account-fold-body {
  max-height: 3000px;
  opacity: 1;
  transition: max-height 0.45s cubic-bezier(0.4, 0, 0.2, 1),
              opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
}
.dashboard-account-fold-body-inner {
  padding: 18px 20px 22px;
  transform: translateY(-6px);
  transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}
.dashboard-account-fold[data-open="true"] .dashboard-account-fold-body-inner {
  transform: translateY(0);
}
.dashboard-account-fold-body-inner > .dashboard-section { margin-top: 0; }
.dashboard-account-fold-body-inner > .dashboard-section + .dashboard-section { margin-top: 22px; }
@keyframes dashboardGuideSectionIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
.dashboard-guide-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}
.dashboard-guide-card {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 22px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease);
  opacity: 0;
  animation: dashboardGuideCardIn 0.55s cubic-bezier(.22, 1, .36, 1) forwards;
  cursor: default;
}
.dashboard-guide-grid > .dashboard-guide-card:nth-child(1) { animation-delay: 0.10s; }
.dashboard-guide-grid > .dashboard-guide-card:nth-child(2) { animation-delay: 0.20s; }
.dashboard-guide-grid > .dashboard-guide-card:nth-child(3) { animation-delay: 0.30s; }
.dashboard-guide-grid > .dashboard-guide-card:nth-child(4) { animation-delay: 0.40s; }
@keyframes dashboardGuideCardIn {
  from { opacity: 0; transform: translateY(16px) scale(0.97); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
.dashboard-guide-card:hover {
  transform: translateY(-3px);
  border-color: var(--primary);
  box-shadow: 0 8px 22px rgba(15, 37, 61, 0.08);
}
.dashboard-guide-card:hover .dashboard-guide-icon {
  background: var(--primary-fondo);
  color: var(--on-dark);
  transform: rotate(-4deg) scale(1.05);
}
.dashboard-guide-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--cream-soft);
  color: var(--primary);
  transition: background 0.3s var(--ease), color 0.3s var(--ease), transform 0.3s cubic-bezier(.34, 1.56, .64, 1);
}
.dashboard-guide-card h4 {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.dashboard-guide-card p {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.5;
  margin: 0;
}
/* Fase 2.5.44: card guida ora sono button → reset stile button + CTA "Come si fa" */
button.dashboard-guide-card {
  font-family: inherit;
  text-align: left;
  cursor: pointer;
  width: 100%;
}
.dashboard-guide-cta {
  margin-top: 6px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--terracotta);
  display: inline-block;
  transition: transform 0.2s var(--ease);
}
.dashboard-guide-card:hover .dashboard-guide-cta {
  transform: translateX(4px);
}

/* Fase 2.5.44: modal "Guida: come si fa" */
.guide-help-modal .guide-help-card {
  /* Fase 5.92: più largo per leggibilita' (indice + tutorial passo-passo). */
  max-width: 720px;
  padding: 32px 32px 28px;
  position: relative;
}
.guide-help-icon {
  /* Fase 2.5.46: display flex (block-level) per non collassare a fianco di
     altri elementi inline come .guide-help-back */
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  margin-bottom: 16px;
}
.guide-help-icon svg { width: 28px; height: 28px; }
.guide-help-title {
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin: 0 0 8px;
}
.guide-help-intro {
  font-size: 15px;
  color: var(--ink-soft);
  line-height: 1.55;
  margin: 0 0 18px;
}
.guide-help-steps {
  margin: 0 0 18px;
  padding-left: 0;
  list-style: none;
  counter-reset: guideSteps;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.guide-help-steps li {
  counter-increment: guideSteps;
  padding-left: 38px;
  position: relative;
  font-size: 14px;
  color: var(--ink);
  line-height: 1.5;
}
.guide-help-steps li::before {
  content: counter(guideSteps);
  position: absolute;
  left: 0;
  top: 0;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--terracotta);
  color: var(--on-dark);
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.guide-help-tip {
  margin: 0;
  padding: 12px 14px;
  background: rgba(94, 124, 90, 0.08);
  border: 1px solid rgba(94, 124, 90, 0.25);
  border-radius: var(--r-sm);
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.5;
}
.guide-help-tip strong { color: var(--ink); }

/* Fase 2.5.45: indice guide (4 voci nel modal aperto dal floating ?) */
.guide-help-index[hidden] { display: none !important; }
.guide-help-content[hidden] { display: none !important; }
.guide-help-index-list {
  display: flex;
  flex-direction: column;
  /* 8px tra card di ~76px con bordo apparivano appiccicate: 12px da' respiro,
     coerente con le altre pile di card del design system. */
  gap: 12px;
  margin-top: 18px;
}
.guide-help-index-item {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 14px 16px;
  background: var(--cream-soft, #f5f3ec);
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  cursor: pointer;
  text-align: left;
  transition: transform 0.18s var(--ease), border-color 0.18s var(--ease), background 0.18s var(--ease);
}
.guide-help-index-item:hover {
  transform: translateX(4px);
  border-color: var(--primary);
  /* Fase 5.92: era #fff -> in dark mode il testo chiaro spariva su bianco. */
  background: var(--cream-deep);
}
.guide-help-index-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: 10px;
  background: var(--primary-fondo);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.guide-help-index-text { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.guide-help-index-text strong { font-family: var(--font-head); font-size: 15px; color: var(--ink); font-weight: 700; }
.guide-help-index-text span { font-size: 12.5px; color: var(--ink-muted); }
.guide-help-index-arrow {
  color: var(--terracotta);
  font-weight: 700;
  font-size: 18px;
  flex-shrink: 0;
  transition: transform 0.18s var(--ease);
}
.guide-help-index-item:hover .guide-help-index-arrow { transform: translateX(4px); }

.guide-help-tour-btn {
  margin-top: 14px;
  width: 100%;
  padding: 12px;
  background: transparent;
  border: 1px dashed var(--terracotta);
  border-radius: var(--r-sm);
  color: var(--terracotta);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  transition: background 0.18s var(--ease);
}
.guide-help-tour-btn:hover { background: rgba(161, 77, 58, 0.06); }

/* Bottone "Indietro" nel contenuto guida */
.guide-help-back {
  background: none;
  border: none;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  padding: 4px 0;
  margin: 0 0 18px;
  /* Fase 2.5.46: display flex (block-level) così va su riga propria, l'icona
     della guida non si sovrappone sopra di lui */
  display: flex;
  align-items: center;
  gap: 4px;
  width: fit-content;
  transition: color 0.18s var(--ease);
}
.guide-help-back:hover { color: var(--primary); }

/* Mockup visivo dentro la guida (HTML inline, simula UI reale) */
.guide-help-mockup {
  margin: 14px 0 18px;
  padding: 16px;
  background: var(--cream-soft, #f5f3ec);
  border: 1px dashed var(--border);
  border-radius: var(--r-sm);
}
.guide-help-mockup[hidden] { display: none !important; }
.gh-mock-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0 0 8px;
}
.gh-mock-form {
  display: flex;
  gap: 6px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 6px;
}
.gh-mock-form-input {
  flex: 1;
  padding: 8px 10px;
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--ink);
  background: transparent;
  border: none;
  outline: none;
}
.gh-mock-form-btn {
  background: var(--terracotta);
  color: #fff;
  border: none;
  padding: 8px 14px;
  border-radius: 8px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 12.5px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
@keyframes ghMockPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(161, 77, 58, 0.0); }
  50% { box-shadow: 0 0 0 6px rgba(161, 77, 58, 0.18); }
}
.gh-mock-pulse { animation: ghMockPulse 2s var(--ease) infinite; border-radius: 10px; }
.gh-mock-toggle {
  display: inline-flex;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 4px;
  gap: 4px;
  margin-top: 8px;
}
.gh-mock-toggle-btn {
  padding: 6px 12px;
  font-size: 12px;
  font-weight: 600;
  border: none;
  background: transparent;
  color: var(--ink-muted);
  border-radius: 7px;
  font-family: var(--font-body);
}
.gh-mock-toggle-btn.active { background: var(--primary-fondo); color: #fff; }
.gh-mock-priority-card {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-left: 4px solid var(--terracotta);
  border-radius: 10px;
  padding: 12px 14px;
}
.gh-mock-priority-badge {
  background: var(--terracotta);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 99px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  flex-shrink: 0;
}
.gh-mock-priority-text { font-size: 13px; color: var(--ink); }
/* Fase 5.94: i mockup rappresentano la UI in LIGHT mode: restano chiari anche
   in dark (altrimenti var(--cream) li rende quasi neri e illeggibili). */
[data-theme="dark"] .gh-mock-form,
[data-theme="dark"] .gh-mock-toggle,
[data-theme="dark"] .gh-mock-priority-card,
[data-theme="dark"] .gh-mock-chat-ai {
  background: #f4f1ea;
  border-color: #d9d4ca;
}
[data-theme="dark"] .gh-mock-priority-text,
[data-theme="dark"] .gh-mock-form-input,
[data-theme="dark"] .gh-mock-toggle-btn {
  color: #3a3a38;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .gh-mock-form,
  :root:not([data-theme="light"]) .gh-mock-toggle,
  :root:not([data-theme="light"]) .gh-mock-priority-card,
  :root:not([data-theme="light"]) .gh-mock-chat-ai {
    background: #f4f1ea;
    border-color: #d9d4ca;
  }
  :root:not([data-theme="light"]) .gh-mock-priority-text,
  :root:not([data-theme="light"]) .gh-mock-form-input,
  :root:not([data-theme="light"]) .gh-mock-toggle-btn {
    color: #3a3a38;
  }
}
.gh-mock-ai-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: linear-gradient(135deg, var(--primary-fondo), #2d557d);
  color: #fff;
  padding: 10px 16px;
  border-radius: 10px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  border: none;
}
.gh-mock-ai-sparkle { display: inline-block; animation: ghMockSpin 3s linear infinite; }
@keyframes ghMockSpin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
.gh-mock-chat {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.gh-mock-chat-bubble {
  max-width: 80%;
  padding: 8px 12px;
  border-radius: 14px;
  font-size: 12.5px;
  line-height: 1.4;
}
.gh-mock-chat-user {
  align-self: flex-end;
  background: var(--primary-fondo);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.gh-mock-chat-ai {
  align-self: flex-start;
  background: var(--cream);
  border: 1px solid var(--border);
  color: var(--ink);
  border-bottom-left-radius: 4px;
}

/* Fase 2.5.49: demo score per la guida "Come si calcola il punteggio" */
.gh-mock-score-demo {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 14px 0 6px;
}
.gh-mock-score-num {
  font-family: var(--font-head);
  font-size: 48px;
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.02em;
}
.gh-mock-score-good { color: var(--success, #5e7c5a); }
.gh-mock-score-meta {
  font-size: 12.5px;
  color: var(--ink-muted);
  font-family: var(--font-body);
}

@media (max-width: 540px) {
  .guide-help-modal .guide-help-card { padding: 28px 22px 22px; }
  .guide-help-title { font-size: 20px; }
  .guide-help-index-item { padding: 12px 14px; gap: 10px; }
  .guide-help-index-icon { width: 32px; height: 32px; }
  .guide-help-mockup { padding: 12px; }
}
@media (max-width: 920px) {
  .dashboard-guide-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 540px) {
  .dashboard-guide-grid { grid-template-columns: 1fr; gap: 10px; }
  .dashboard-guide-card { padding: 18px 16px; }
}

/* Fase 2.5.43: overlay di transizione post-login. Fade-in + spinner + nome
   utente come welcome message, poi redirect a /dashboard dopo 900ms. */
.login-transition-overlay {
  position: fixed;
  inset: 0;
  background: var(--cream);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10000;
  opacity: 0;
  transition: opacity 0.3s var(--ease);
}
.login-transition-overlay.show { opacity: 1; }
.login-transition-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  text-align: center;
  animation: loginTransitionCardIn 0.5s cubic-bezier(.34, 1.4, .64, 1) both;
}
@keyframes loginTransitionCardIn {
  from { opacity: 0; transform: translateY(20px) scale(0.95); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
.login-transition-spinner {
  width: 48px;
  height: 48px;
  border: 3px solid var(--border);
  border-top-color: var(--terracotta);
  border-radius: 50%;
  animation: loginTransitionSpin 0.8s linear infinite;
}
@keyframes loginTransitionSpin { to { transform: rotate(360deg); } }
.login-transition-text {
  font-family: var(--font-head);
  font-size: 28px;
  font-weight: 700;
  color: var(--ink);
  letter-spacing: -0.02em;
}
.login-transition-text strong {
  font-style: italic;
  font-weight: 900;
  color: var(--terracotta);
}
.login-transition-sub {
  font-size: 14px;
  color: var(--ink-muted);
}
.modal-card h3 {
  margin: 0 0 12px;
  font-size: 20px;
  color: var(--ink);
}
.modal-card p {
  color: var(--ink-soft);
  font-size: 14.5px;
  line-height: 1.55;
  margin: 0 0 8px;
}
.modal-card strong { color: var(--ink); }
.modal-actions {
  display: flex;
  /* Fase 5.42: 10px -> 14px. Più respiro tra i bottoni modale; vale anche
     come gap verticale quando vanno in colonna su mobile. */
  gap: 14px;
  margin-top: 22px;
  flex-wrap: wrap;
}
.modal-btn {
  flex: 1;
  padding: 11px 18px;
  border-radius: 99px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  border: 1px solid transparent;
  transition: all 0.15s var(--ease);
  min-width: 130px;
}
.modal-btn-primary {
  background: var(--terracotta);
  color: var(--on-dark);
  border-color: var(--terracotta);
}
.modal-btn-primary:hover { background: #8c3f30; }
.modal-btn-secondary {
  /* Fase 5.40: era background:white fisso -> in dark mode il bottone restava
     bianco con testo var(--ink) chiaro = invisibile. var(--cream) si inverte
     col tema (chiaro in light, scuro in dark) e contrasta sempre con --ink. */
  background: var(--cream);
  color: var(--ink);
  border-color: var(--border);
}
.modal-btn-secondary:hover { background: var(--cream-deep); }

/* Fase 2.18: tab Chat e bottone PDF in stato lock nel free */
.tab-lock-card {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 28px;
  text-align: center;
  margin: 24px 0;
}
.tab-lock-card .lock-icon {
  font-size: 32px;
  margin-bottom: 12px;
  color: var(--terracotta);
  /* Fase 2.5.70: dopo aver sostituito emoji 🔒 con <svg> inline, l'icona
     si allineava a sinistra per via di display block default. Centra. */
  display: flex;
  align-items: center;
  justify-content: center;
}
.tab-lock-card .lock-icon svg { display: block; }
.tab-lock-card h3 {
  margin: 0 0 8px;
  color: var(--ink);
  font-size: 18px;
}
.tab-lock-card p {
  color: var(--ink-soft);
  font-size: 14px;
  margin: 0 0 6px;
}

/* Fase 2.15: toggle lingua proposte AI Lab (Semplice/Tecnico) */
.ai-lang-toggle {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 16px;
  padding: 12px 14px;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: 10px;
}
.ai-lang-label {
  font-size: 12.5px;
  font-weight: 600;
  color: rgba(250, 250, 247, 0.65);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-right: 4px;
}
.ai-lang-btn {
  padding: 6px 14px;
  font-size: 13px;
  font-weight: 500;
  border-radius: 999px;
  background: transparent;
  color: rgba(250, 250, 247, 0.75);
  border: 1px solid rgba(255,255,255,0.18);
  cursor: pointer;
  transition: all 0.15s var(--ease);
}
.ai-lang-btn:hover {
  background: rgba(255,255,255,0.06);
  color: var(--on-dark);
}
.ai-lang-btn.active {
  background: var(--cream);
  color: var(--ink);
  border-color: var(--on-dark);
  font-weight: 600;
}
/* Fase 2.5.86: AI Lab toggle Semplice/Tecnico - approccio bulletproof.
   I 2 buttons sono sempre dentro .ai-lang-buttons che è un flex inline
   block con flex-wrap:nowrap = impossibile wrap. Su mobile label sopra,
   pill-pair sotto, hint sotto a tutto width. */
.ai-lang-buttons { display: inline-flex; flex-wrap: nowrap; gap: 8px; align-items: center; }
.ai-lang-buttons .ai-lang-btn { white-space: nowrap; flex-shrink: 0; }
@media (max-width: 540px) {
  .ai-lang-toggle {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
    padding: 10px 12px;
  }
  .ai-lang-toggle .ai-lang-label { width: 100%; margin-right: 0; font-size: 11px; }
  .ai-lang-toggle .ai-lang-buttons { width: 100%; justify-content: flex-start; }
  .ai-lang-hint { margin-left: 0 !important; width: 100%; font-size: 11.5px; }
}
.ai-lang-hint {
  font-size: 12.5px;
  font-style: italic;
  color: rgba(250, 250, 247, 0.55);
  margin-left: auto;
  max-width: 50%;
  line-height: 1.4;
}

/* Fase 2.5.16: riga del toggle linguaggio Semplice/Tecnico nel panel Panoramica */
.overview-lang-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 24px 0 12px;
  flex-wrap: wrap;
}
.overview-lang-left {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.overview-lang-label {
  font-size: 13.5px;
  color: var(--ink-muted);
  font-weight: 500;
}
.overview-lang-hint {
  font-size: 11.5px;
  color: var(--ink-muted);
  font-style: italic;
  opacity: 0.85;
}
@media (max-width: 540px) {
  .overview-lang-row { gap: 8px; margin: 18px 0 10px; }
  .overview-lang-label { font-size: 12.5px; }
  .overview-lang-hint { font-size: 11px; }
}

/* Fase 2.17 Fix #3: hint dinamico sotto i toggle dei Problemi (sfondo chiaro) */
.issues-lang-hint {
  font-size: 13px;
  color: var(--ink-muted);
  font-style: italic;
  margin: 0 0 14px 0;
  line-height: 1.5;
  transition: opacity 0.2s var(--ease);
}
.issues-lang-hint strong {
  color: var(--terracotta);
  font-style: normal;
  font-weight: 600;
}

/* Fase 2.15: tooltip custom per data-tooltip su qualsiasi elemento.
   Sostituisce title="" per avere stile coerente con il brand e niente delay 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(--ink);
  color: var(--on-dark);
  font-size: 11.5px;
  font-weight: 500;
  padding: 8px 12px;
  border-radius: 8px;
  /* Fase 2.5.20: ridotto a 220px (era 240, con duplicato 280 che vinceva).
     Wrap multi-riga sempre attivo, niente più regole duplicate confondenti. */
  width: max-content;
  max-width: 220px;
  white-space: normal;
  text-align: center;
  line-height: 1.4;
  z-index: 100;
  pointer-events: none;
  animation: tooltipIn 0.15s var(--ease) both;
  box-shadow: 0 6px 18px rgba(0,0,0,0.25);
}
[data-tooltip]:hover::before,
[data-tooltip]:focus-visible::before {
  content: "";
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 4px solid transparent;
  border-top-color: var(--ink);
  pointer-events: none;
  z-index: 100;
  animation: tooltipIn 0.15s var(--ease) both;
}
@keyframes tooltipIn {
  from { opacity: 0; transform: translateX(-50%) translateY(2px); }
  to   { opacity: 1; transform: translateX(-50%) translateY(0); }
}

.ai-output {
  background: rgba(0,0,0,0.25);
  border-radius: var(--r);
  padding: 20px;
  font-size: 14px;
  line-height: 1.6;
  color: rgba(250, 250, 247, 0.92);
  min-height: 60px;
  display: none;
}
.ai-output.show { display: block; }
.ai-output strong { color: var(--on-dark); }

/* Fase 5.8: contenitore deve poter ospitare overlay assoluto */
.ai-output { position: relative; }
/* Fase 5.8.1: margin-top per staccare il box risultati dai bottoni AI sopra
   (prima la card gate/output sembrava attaccata alla griglia azioni). */
.ai-output.show { margin-top: 20px; }

/* Fase 5.8.1: stato loading senza emoji. Spinner CSS puro (rotating arc)
   con cream-on-midnight per matchare il bg del box .ai-output. */
.ai-output-loading {
  display: flex;
  align-items: center;
  gap: 10px;
  color: rgba(250, 250, 247, 0.85);
  font-family: var(--font-body);
  font-size: 14px;
}
.ai-output-spinner {
  width: 16px;
  height: 16px;
  border-radius: 99px;
  border: 2px solid rgba(250, 250, 247, 0.2);
  border-top-color: var(--on-dark);
  animation: aiOutputSpin 0.8s linear infinite;
  display: inline-block;
  flex-shrink: 0;
}
@keyframes aiOutputSpin {
  to { transform: rotate(360deg); }
}

/* Fase 5.8: bottone Copia (loggati). Piccolo, ghost. Appende in fondo. */
.ai-output-controls {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  display: flex;
  justify-content: flex-end;
}
.ai-copy-btn {
  border: 1px solid var(--border);
  color: var(--ink-muted);
  background: transparent;
  border-radius: 8px;
  padding: 6px 12px;
  font-size: 13px;
  font-family: var(--font-body);
  font-weight: 600;
  cursor: pointer;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease), background 0.18s var(--ease);
}
.ai-copy-btn:hover:not(:disabled) {
  color: var(--on-dark);
  border-color: var(--on-dark);
}
.ai-copy-btn:disabled { opacity: 0.7; cursor: default; }

/* Fase 5.8.2: bottone Copia inline dentro ogni .proposal / .wz-prop.
   Posizionato in alto a destra della card proposta così non spinge il testo.
   Su sfondo midnight scuro del box AI -> chip ghost cream. */
.ai-output .proposal,
.ai-output .wz-prop { position: relative; }
.ai-copy-btn-inline {
  position: absolute;
  top: 10px;
  right: 10px;
  padding: 4px 10px;
  font-size: 12px;
  border: 1px solid rgba(250, 250, 247, 0.25);
  color: rgba(250, 250, 247, 0.8);
  background: rgba(250, 250, 247, 0.06);
  border-radius: 6px;
  z-index: 2;
}
.ai-copy-btn-inline:hover:not(:disabled) {
  color: var(--on-dark);
  border-color: var(--on-dark);
  background: rgba(250, 250, 247, 0.12);
}
/* Spazio in alto-destra così il bottone non copre il testo della proposta */
.ai-output .proposal,
.ai-output .wz-prop { padding-right: 68px; }
@media (max-width: 540px) {
  .ai-copy-btn-inline { top: 8px; right: 8px; padding: 3px 8px; font-size: 11px; }
  .ai-output .proposal,
  .ai-output .wz-prop { padding-right: 60px; }
}

/* Fase 5.8: gate registrazione per anonimi. Output visibile sotto blur,
   overlay sopra con CTA. Il contenuto NON viene nascosto: è leggibile
   "in trasparenza" come teaser. */
.ai-output.is-gated > *:not(.ai-output-gate) {
  filter: blur(5px);
  user-select: none;
  pointer-events: none;
}
.ai-output-gate {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(250, 250, 247, 0.85);
  border-radius: 14px;
  z-index: 5;
  padding: 24px;
}
.ai-output-gate-card {
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  padding: 20px 24px;
  max-width: 360px;
  width: 100%;
  text-align: center;
  box-shadow: 0 10px 28px rgba(15, 37, 61, 0.12);
}
.ai-output-gate-text {
  font-family: var(--font-body);
  font-size: 14.5px;
  color: var(--ink);
  margin: 0 0 14px;
  line-height: 1.5;
}
.ai-output-gate-cta {
  display: inline-block;
  padding: 10px 20px;
  border-radius: 10px;
  border: 1px solid var(--primary);
  background: var(--primary-fondo);
  color: #fff;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  transition: background 0.18s var(--ease);
}
.ai-output-gate-cta:hover { background: #142e49; }
@media (max-width: 540px) {
  .ai-output-gate-card { padding: 16px 18px; }
  .ai-output-gate-text { font-size: 14px; }
}
/* Fase 2.15 Fix #4: code inline su sfondo midnight era nero default e illeggibile */
.ai-output code {
  background: rgba(255, 255, 255, 0.12);
  color: var(--on-dark);
  padding: 2px 7px;
  border-radius: 4px;
  font-size: 0.92em;
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
}
.ai-output .proposal {
  padding: 12px 0;
  border-bottom: 1px solid rgba(255,255,255,0.1);
}
.ai-output .proposal:last-child { border: none; padding-bottom: 0; }
.ai-output .proposal:first-child { padding-top: 0; }
.ai-output pre {
  background: rgba(0,0,0,0.3);
  padding: 12px;
  border-radius: 6px;
  font-size: 12px;
  overflow-x: auto;
  white-space: pre-wrap;
  word-break: break-word;
}

.trial-banner {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 16px 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: 32px;
  font-size: 14px;
}
.trial-banner .info {
  color: var(--ink-soft);
}
.trial-banner strong { color: var(--ink); }
.trial-banner.warn {
  background: rgba(184, 115, 46, 0.08);
  border-color: var(--warning);
}
.trial-banner.exhausted {
  background: rgba(161, 77, 58, 0.08);
  border-color: var(--terracotta);
}

/* ═══════════════════════════════════════════════════════════════
   Fase 2.5.4: Post-audit CTA per utenti anonimi
   ═══════════════════════════════════════════════════════════════ */

/* Banner soft sopra i risultati: poco invasivo, dismissible */
.post-audit-cta-soft {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 18px;
  background: rgba(26, 58, 92, 0.06);
  border: 1px solid rgba(26, 58, 92, 0.18);
  border-radius: var(--r);
  margin-bottom: 22px;
  font-size: 13.5px;
  color: var(--ink-soft);
  line-height: 1.5;
}
.post-audit-cta-soft[hidden] { display: none; }
.post-audit-cta-soft-icon {
  display: inline-flex;
  width: 32px;
  height: 32px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--primary-fondo);
  color: var(--on-dark);
  flex-shrink: 0;
}
.post-audit-cta-soft-text {
  flex: 1;
  min-width: 0;
}
.post-audit-cta-soft-text strong { color: var(--ink); font-weight: 600; }
.post-audit-cta-soft-btn {
  padding: 8px 16px;
  background: var(--ink);
  color: var(--on-dark);
  border: none;
  border-radius: 10px;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  transition: background 0.18s var(--ease);
  flex-shrink: 0;
}
.post-audit-cta-soft-btn:hover { background: var(--primary-fondo); }
.post-audit-cta-soft-close {
  background: transparent;
  border: none;
  color: var(--ink-muted);
  /* Fase 2.6.2: era 22px e vinceva sul font-size:0 del fix-barre (che sta prima
     nel file per fonte, stessa specificità): il glifo × tornava a mostrarsi SOPRA
     le due barre, sdoppiato e basso. A 0 il glifo sparisce, restano solo le barre. */
  font-size: 0;
  line-height: 1;
  cursor: pointer;
  min-width: 40px;
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  flex-shrink: 0;
  transition: color 0.15s;
}
.post-audit-cta-soft-close:hover { color: var(--ink); }

/* Nascondo entrambi se utente loggato */
body.is-logged-in .post-audit-cta-soft,
body.is-logged-in .post-audit-cta-card {
  display: none !important;
}
/* Il banner trial è SOLO per anonimi: un utente loggato (qualsiasi piano) non
   deve vedere "crediti gratuiti rimanenti / l'audit scompare se non crei un
   account" (bug: appariva anche ai paganti, con 9999 dal server). */
body.is-logged-in .trial-banner {
  display: none !important;
}
/* Hamburger e menu mobile sono la nav della LANDING (Prezzi, Come funziona...):
   per i loggati non funzionano e c'è già la bottom nav. Nascosti. */
body.is-logged-in .nav-hamburger,
body.is-logged-in .nav-mobile-menu {
  display: none !important;
}

@media (max-width: 600px) {
  .post-audit-cta-soft { flex-wrap: wrap; }
  .post-audit-cta-soft-btn { width: 100%; order: 3; }
}

/* Card "Crea account" a fine risultati: più presente, decisionale */
.post-audit-cta-card {
  margin: 48px 0 24px;
  padding: 32px 36px;
  background: linear-gradient(135deg, #1a3a5c 0%, #a14d3a 100%);
  color: var(--on-dark);
  border-radius: var(--r-lg);
  position: relative;
  overflow: hidden;
}
.post-audit-cta-card[hidden] { display: none; }
.post-audit-cta-card-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 12px;
  background: rgba(250, 250, 247, 0.16);
  border-radius: 99px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 14px;
  color: var(--on-dark);
}
.post-audit-cta-card-eyebrow .dot {
  width: 7px; height: 7px;
  background: var(--cream);
  border-radius: 50%;
}
.post-audit-cta-card-title {
  font-family: var(--font-head);
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 10px;
  color: var(--on-dark);
  line-height: 1.15;
}
.post-audit-cta-card-lead {
  font-size: 15px;
  line-height: 1.55;
  color: rgba(250, 250, 247, 0.88);
  margin: 0 0 22px;
  max-width: 580px;
}
.post-audit-cta-card-list {
  list-style: none;
  padding: 0;
  margin: 0 0 26px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.post-audit-cta-card-list li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: 14.5px;
  line-height: 1.5;
  color: rgba(250, 250, 247, 0.94);
}
.post-audit-cta-card-list li strong { color: var(--on-dark); font-weight: 600; }
.post-audit-cta-card-list svg {
  flex-shrink: 0;
  margin-top: 2px;
  color: rgba(250, 250, 247, 0.7);
}
.post-audit-cta-card-actions {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 14px;
}
.post-audit-cta-card-btn-primary {
  background: var(--cream);
  color: var(--ink);
  border: none;
  padding: 13px 26px;
  border-radius: 10px;
  font-family: inherit;
  font-size: 14.5px;
  font-weight: 700;
  cursor: pointer;
  transition: all 0.18s var(--ease);
}
.post-audit-cta-card-btn-primary:hover {
  background: white;
  transform: translateY(-1px);
}
.post-audit-cta-card-btn-secondary {
  background: transparent;
  color: var(--on-dark);
  border: 1px solid rgba(250, 250, 247, 0.4);
  padding: 13px 22px;
  border-radius: 10px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.18s var(--ease);
}
.post-audit-cta-card-btn-secondary:hover {
  background: rgba(250, 250, 247, 0.1);
  border-color: var(--on-dark);
}
.post-audit-cta-card-foot {
  font-size: 12px;
  color: rgba(250, 250, 247, 0.65);
  font-style: italic;
}

@media (max-width: 600px) {
  .post-audit-cta-card { padding: 24px 22px; }
  .post-audit-cta-card-title { font-size: 26px; }
  .post-audit-cta-card-actions { flex-direction: column; }
  .post-audit-cta-card-btn-primary, .post-audit-cta-card-btn-secondary { width: 100%; }
}

/* ═══════════════════════ LOADING ═══════════════════════ */
/* Fase 2.17 Fix #1: loader rifatto con card centrale, orbit animato, progress bar, step list */
.loading {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 150;
  align-items: center;
  justify-content: center;
  padding: 60px 24px;
  background: rgba(250, 250, 247, 0.96);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.loading.show { display: flex; }
.loading-card {
  max-width: 460px;
  width: 100%;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 40px 32px;
  text-align: center;
  box-shadow: 0 8px 32px rgba(15, 15, 15, 0.04);
}
.loading-card h3 {
  margin: 0 0 8px;
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.01em;
  color: var(--ink);
}
.loading-card p {
  margin: 0 0 24px;
  color: var(--ink-muted);
  font-size: 14px;
  min-height: 22px;
  transition: opacity 0.2s var(--ease);
}

/* Orbit: 2 anelli concentrici + nucleo terracotta */
.loading-orbit {
  position: relative;
  width: 80px;
  height: 80px;
  margin: 0 auto 24px;
}
.loading-orbit-ring {
  position: absolute;
  inset: 0;
  border: 2px solid transparent;
  border-top-color: var(--terracotta);
  border-right-color: rgba(161, 77, 58, 0.3);
  border-radius: 50%;
  animation: orbit-spin 1.4s cubic-bezier(0.5, 0, 0.5, 1) infinite;
}
.loading-orbit-ring.r2 {
  inset: 14px;
  border-top-color: var(--primary);
  border-right-color: rgba(26, 58, 92, 0.25);
  animation: orbit-spin 1.8s cubic-bezier(0.5, 0, 0.5, 1) infinite reverse;
}
.loading-orbit-core {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  background: var(--terracotta);
  border-radius: 50%;
  animation: orbit-pulse 1.6s ease-in-out infinite;
}
@keyframes orbit-spin {
  to { transform: rotate(360deg); }
}
@keyframes orbit-pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(0.6); opacity: 0.6; }
}

/* Progress bar sotto i testi */
.loading-progress {
  width: 100%;
  height: 4px;
  background: var(--cream-deep);
  border-radius: 99px;
  overflow: hidden;
  margin: 0 0 24px;
}
.loading-progress-bar {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, var(--primary-fondo), var(--terracotta));
  border-radius: 99px;
  transition: width 0.6s var(--ease);
}

/* Step list: ogni step ha icona (vuota → spinning → check) e label */
.loading-steps {
  list-style: none;
  margin: 0;
  padding: 0;
  text-align: left;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.loading-steps li {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 13.5px;
  color: var(--ink-muted);
  transition: color 0.3s var(--ease);
}
.loading-steps li .ls-icon {
  display: inline-block;
  width: 18px;
  height: 18px;
  border: 1.5px solid var(--border);
  border-radius: 50%;
  flex-shrink: 0;
  position: relative;
  transition: all 0.3s var(--ease);
}
.loading-steps li.active {
  color: var(--ink);
  font-weight: 500;
}
.loading-steps li.active .ls-icon {
  border-color: var(--terracotta);
  border-top-color: transparent;
  animation: spin 0.8s linear infinite;
}
.loading-steps li.done {
  color: var(--ink-soft);
}
.loading-steps li.done .ls-icon {
  background: var(--success);
  border-color: var(--success);
  animation: none;
}
.loading-steps li.done .ls-icon::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 9px;
  height: 5px;
  border-left: 2px solid var(--cream);
  border-bottom: 2px solid var(--cream);
  transform: translate(-50%, -65%) rotate(-45deg);
}

/* Un passo che non è riuscito resta acceso e dice perché, invece di
   sparire o di spuntarsi come gli altri. Tono terracotta: è un fermo,
   non un allarme. */
.loading-steps li.is-fallito { opacity: 1; color: var(--terracotta); font-weight: 600; }
.loading-steps li.is-fallito .ls-icon {
  border-color: var(--terracotta);
  background: rgba(161, 77, 58, 0.14);
  animation: none;
}
.ls-esito { margin-left: auto; font-size: 12px; color: var(--ink-muted); text-align: right; }
.loading-steps li.is-fallito .ls-esito { color: var(--terracotta); }

[data-theme="dark"] .loading-steps li.is-fallito { color: var(--terracotta); }
[data-theme="dark"] .loading-steps li.is-fallito .ls-esito { color: var(--terracotta); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .loading-steps li.is-fallito { color: var(--terracotta); }
  :root:not([data-theme="light"]) .loading-steps li.is-fallito .ls-esito { color: var(--terracotta); }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* ═══════════════════════ MODAL (PALETTE PDF) ═══════════════════════ */
.modal-bg {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(15, 15, 15, 0.55);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: 200;
  align-items: center;
  justify-content: center;
  padding: 24px;
  animation: fadeIn 0.2s var(--ease);
}
.modal-bg.show { display: flex; }
.modal-card {
  /* Fase 5.97: position relative così la X (.modal-close-x, absolute) si
     ancora alla card e non al backdrop (prima finiva nell'angolo schermo). */
  position: relative;
  background: var(--cream);
  border-radius: var(--r-lg);
  padding: 32px;
  max-width: 580px;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  box-shadow: var(--shadow-lg);
  animation: scaleIn 0.25s var(--ease);
}
.modal-card h3 {
  font-size: 24px;
  letter-spacing: -0.015em;
}
.palette-options {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-bottom: 24px;
}
.palette-option {
  display: flex;
  gap: 12px;
  padding: 16px;
  border: 1.5px solid var(--border);
  border-radius: var(--r);
  cursor: pointer;
  background: var(--cream);
  transition: border-color 0.15s var(--ease), background 0.15s var(--ease);
}
.palette-option:hover {
  background: var(--cream-soft);
}
.palette-option.selected {
  border-color: var(--primary);
  background: var(--cream);
  box-shadow: 0 0 0 3px rgba(26, 58, 92, 0.08);
}
.po-radio {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1.5px solid var(--border);
  flex-shrink: 0;
  margin-top: 2px;
  position: relative;
  transition: border-color 0.15s var(--ease);
}
.palette-option.selected .po-radio {
  border-color: var(--primary);
}
.palette-option.selected .po-radio::after {
  content: "";
  position: absolute;
  inset: 3px;
  background: var(--primary-fondo);
  border-radius: 50%;
}
.po-content { flex: 1; }
.po-title {
  font-weight: 600;
  font-size: 15px;
  color: var(--ink);
  margin-bottom: 4px;
}
.po-desc {
  font-size: 13px;
  color: var(--ink-soft);
  line-height: 1.45;
  margin-bottom: 10px;
}
.po-swatches {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
}
.po-swatches .swatch {
  width: 26px;
  height: 26px;
  border-radius: 6px;
  border: 1px solid var(--border);
}
.po-swatches .swatch-loading {
  font-size: 12px;
  color: var(--ink-muted);
  font-style: italic;
}
.po-swatches .swatch-empty {
  font-size: 12px;
  color: var(--ink-muted);
  font-style: italic;
}
.po-swatches .swatch-error {
  font-size: 12px;
  color: var(--danger);
}
.po-swatches .swatch-warning {
  margin-top: 12px;
  padding: 10px 12px;
  /* Non è uno swatch di colore: è un riquadro di avviso, e il testo sopra usa
     var(--ink-soft), che si ribalta col tema. Con un giallino fisso in scuro
     diventava testo chiaro su fondo chiaro. La tinta semantica a bassa
     opacità funziona su entrambi i fondi, come nei badge di punteggio. */
  background: rgba(184, 115, 46, 0.12);
  border-left: 3px solid var(--warning);
  border-radius: 4px;
  font-size: 12.5px;
  color: var(--ink-soft);
  line-height: 1.5;
}
.po-swatches .swatch-warning strong {
  color: var(--warning);
}
.po-swatches .swatch-warning-hint {
  display: inline-block;
  margin-top: 4px;
  color: var(--ink-muted);
  font-style: italic;
}
.po-extract-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  padding: 8px 14px;
  background: white;
  color: var(--primary);
  border: 1px solid var(--primary);
  border-radius: 8px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s var(--ease);
}
.po-extract-btn:hover {
  background: var(--primary-fondo);
  color: white;
}
.po-extract-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
.po-extract-btn .extract-icon {
  font-size: 16px;
  line-height: 1;
}
.po-extract-btn.loading {
  pointer-events: none;
}
.po-extract-btn.loading .extract-icon {
  animation: spin 1s linear infinite;
  display: inline-block;
}
@keyframes spin { to { transform: rotate(360deg); } }
.po-pickers {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
  align-items: center;
}
.po-pickers label {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 13px;
  color: var(--ink-soft);
  cursor: pointer;
}
.po-pickers input[type="color"] {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  width: 40px;
  height: 32px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: 8px;
  cursor: pointer;
  background: transparent;
  overflow: hidden;
  transition: border-color 0.15s var(--ease), transform 0.15s var(--ease);
}
.po-pickers input[type="color"]:hover {
  border-color: var(--primary);
  transform: scale(1.05);
}
/* Webkit/Blink: rimuove i bordi interni del color picker */
.po-pickers input[type="color"]::-webkit-color-swatch-wrapper {
  padding: 0;
  border: none;
  border-radius: 6px;
}
.po-pickers input[type="color"]::-webkit-color-swatch {
  border: none;
  border-radius: 6px;
}
/* Firefox */
.po-pickers input[type="color"]::-moz-color-swatch {
  border: none;
  border-radius: 6px;
}
.modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding-top: 16px;
  border-top: 1px solid var(--border);
}
.modal-btn {
  padding: 10px 20px;
  border-radius: 10px;
  font-weight: 600;
  font-size: 14px;
  transition: all 0.15s var(--ease);
}
.modal-btn.ghost {
  background: transparent;
  color: var(--ink-soft);
  border: 1px solid var(--border);
}
.modal-btn.ghost:hover {
  background: var(--cream-soft);
}
.modal-btn.primary {
  background: var(--ink);
  color: var(--on-dark);
}
.modal-btn.primary:hover {
  background: var(--primary-fondo);
}
.modal-btn.primary:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ═══════════════════════ TOAST ═══════════════════════ */
.toast {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%) translateY(100px);
  background: var(--ink);
  color: var(--on-dark);
  padding: 12px 24px;
  border-radius: var(--r);
  font-size: 14px;
  z-index: 100;
  transition: transform 0.3s var(--ease);
  box-shadow: var(--shadow-lg);
}
.toast.show { transform: translateX(-50%) translateY(0); }
.toast.error { background: var(--terracotta); }
/* Fase 2.5.83: su mobile la bottom-nav (56px) sovrapponeva il toast.
   Spostato sopra la bottom nav per utenti loggati su <760px. */
@media (max-width: 760px) {
  body.is-logged-in .toast { bottom: calc(72px + env(safe-area-inset-bottom, 0px)); max-width: calc(100vw - 32px); text-align: center; }
}

/* ═══════════════════════ ERROR STATE ═══════════════════════ */
.error-box {
  background: rgba(161, 77, 58, 0.08);
  border: 1px solid var(--terracotta);
  border-radius: var(--r);
  padding: 24px;
  margin-top: 16px;
}
.error-box h4 {
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  color: var(--terracotta);
  margin-bottom: 4px;
}
.error-box p {
  font-size: 14px;
  color: var(--ink-soft);
}

/* ═══════════════════════ AUDIT TYPE TOGGLE ═══════════════════════ */
.audit-type-toggle {
  display: inline-flex;
  background: var(--cream-soft);
  padding: 4px;
  border-radius: 999px;
  box-shadow: inset 0 0 0 1px var(--border);
  margin-bottom: 16px;
  font-size: 13px;
  position: relative;
  /* Indicatore mobile per l'effetto "scorrimento" tra le opzioni del toggle */
  isolation: isolate;
}
.audit-type-toggle::before {
  content: "";
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 0;
  width: var(--indicator-w, 0);
  background: var(--ink);
  border-radius: 999px;
  transform: translateX(var(--indicator-x, 0));
  transition: transform 0.32s cubic-bezier(.34, 1.2, .64, 1), width 0.32s cubic-bezier(.34, 1.2, .64, 1);
  z-index: 0;
  pointer-events: none;
  opacity: 0;
}
.audit-type-toggle.has-indicator::before {
  opacity: 1;
}
.audit-type-toggle button {
  padding: 8px 16px;
  border-radius: 999px;
  font-weight: 500;
  color: var(--ink-muted);
  transition: color 0.25s var(--ease);
  background: transparent;
  position: relative;
  z-index: 1;
  /* Niente background sul button: l'effetto è dato dall'indicatore mobile */
}
/* Fase 2.5.19: hover e focus-visible mancavano su .audit-type-toggle button. */
.audit-type-toggle button:not(.active):hover { color: var(--ink); }
.audit-type-toggle button:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
/* Bottone attivo: crema (bianco caldo) SOLO quando l'indicatore è davvero
   posizionato sotto. Altrimenti il testo crema si vedrebbe su sfondo crema-soft
   (quasi invisibile). Lego il colore alla classe .has-indicator del genitore. */
.audit-type-toggle.has-indicator button.active {
  color: var(--on-dark);
}
/* Fallback: se JS non ha calcolato l'indicatore (browser molto vecchi),
   il vecchio comportamento col background diretto è ancora in vigore */
.audit-type-toggle:not(.has-indicator) button.active {
  background: var(--ink);
  color: var(--on-dark);
}

/* Fase 2.5.10: toggle "Complessivo / Solo SEO / Solo GEO" dentro la card score
   andava a capo su schermi piccoli (320-380px). Soluzione: label doppia
   (lbl-long mostrata di default, lbl-short attiva sotto 540px) + padding/font
   ridotti. "Complessivo" diventa "Tutto", "Solo SEO" diventa "SEO", "Solo GEO"
   diventa "GEO". */
.score-view-toggle .lbl-short { display: none; }
@media (max-width: 540px) {
  .score-view-toggle .lbl-long { display: none; }
  .score-view-toggle .lbl-short { display: inline; }
  .score-view-toggle button { padding: 8px 14px; font-size: 12.5px; }
}

/* ═══════════════════════ VERTICAL SELECTOR ═══════════════════════ */
.vertical-selector {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  padding: 18px 20px;
  margin-bottom: 24px;
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.vertical-selector .label {
  font-size: 13.5px;
  color: var(--ink-soft);
  font-weight: 500;
}
.vertical-selector .label strong { color: var(--ink); }
.vertical-options {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.vertical-options button {
  padding: 7px 14px;
  background: var(--cream-soft);
  border: 1px solid transparent;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--ink-soft);
  transition: all 0.15s var(--ease);
}
.vertical-options button:hover {
  background: var(--cream-deep);
}
.vertical-options button.active {
  background: var(--primary-fondo);
  color: white;
  border-color: var(--primary);
}

/* ═══════════════════════ TABS ═══════════════════════ */
.tabs {
  display: flex;
  gap: 4px;
  border-bottom: 1px solid var(--border);
  margin-bottom: 32px;
  overflow-x: auto;
  scrollbar-width: none;
}
.tabs::-webkit-scrollbar { display: none; }
.tab {
  padding: 14px 20px;
  font-size: 14.5px;
  font-weight: 500;
  color: var(--ink-muted);
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  white-space: nowrap;
  transition: color 0.15s var(--ease), border-color 0.15s var(--ease);
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.tab:hover { color: var(--ink); }
.tab.active {
  color: var(--ink);
  border-bottom-color: var(--terracotta);
  font-weight: 600;
}
.tab .badge {
  background: var(--terracotta);
  /* Fase 5.32: testo del badge. Sul badge attivo lo sfondo diventa var(--ink),
     chiaro in dark mode: un numero bianco su pillola chiara sarebbe invisibile.
     var(--cream) contrasta in entrambe le modalita' sia su terracotta (badge
     non attivo) sia su --ink (badge attivo). */
  color: var(--cream);
  font-size: 10px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 999px;
  min-width: 18px;
  text-align: center;
}
.tab.active .badge { background: var(--ink); color: var(--cream); }

.tab-panel {
  display: none;
  animation: fadeIn 0.3s var(--ease);
}
.tab-panel.active { display: block; }

/* ═══════════════════════ PDF BUTTON ═══════════════════════ */
.pdf-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: white;
  border: 1px solid var(--border);
  padding: 10px 18px;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  transition: all 0.15s var(--ease);
}
.pdf-btn:hover {
  background: var(--cream-soft);
  border-color: var(--primary);
}
.pdf-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ═══════════════════════ CHAT ═══════════════════════ */
.chat-wrap {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 400px;
}
.chat-header {
  background: var(--primary-deep);
  color: var(--on-dark);
  padding: 16px 24px;
  font-size: 14px;
}
.chat-header strong { color: var(--on-dark); font-weight: 600; }
.chat-header .small {
  font-size: 12px;
  color: rgba(250, 250, 247, 0.65);
  margin-top: 2px;
}
.chat-messages {
  flex: 1;
  padding: 24px;
  /* Fase 2.14: niente più scroll interno + max-height fisso.
     Il container cresce con il contenuto (pattern ChatGPT/Claude/Perplexity).
     Lo scroll è quello della pagina, non del box interno.
     Risolve il bug "la risposta parte da più giù" causato da box.scrollTop = scrollHeight
     che andava in fondo prima che il browser avesse calcolato il layout del nuovo bubble. */
  min-height: 200px;
}
.chat-msg {
  display: flex;
  gap: 12px;
  margin-bottom: 18px;
  animation: fadeInUp 0.4s var(--ease);
}
.chat-msg.user { flex-direction: row-reverse; }
.chat-avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--primary-fondo);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 700;
  flex-shrink: 0;
}
.chat-msg.user .chat-avatar { background: var(--terracotta); }
.chat-bubble {
  background: var(--cream-soft);
  padding: 12px 16px;
  border-radius: 12px;
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink);
  max-width: 85%;
}
.chat-msg.user .chat-bubble {
  background: var(--ink);
  color: var(--on-dark);
}
.chat-bubble p { margin: 0; color: inherit; }
.chat-bubble p + p { margin-top: 8px; }
.chat-bubble strong { color: inherit; font-weight: 600; }
.chat-bubble ul, .chat-bubble ol {
  margin-top: 6px;
  padding-left: 20px;
}
.chat-bubble li { margin-bottom: 4px; }
.chat-typing {
  display: inline-flex;
  gap: 4px;
}
.chat-typing span {
  width: 6px;
  height: 6px;
  background: var(--ink-muted);
  border-radius: 50%;
  animation: typing 1.2s ease-in-out infinite;
}
.chat-typing span:nth-child(2) { animation-delay: 0.15s; }
.chat-typing span:nth-child(3) { animation-delay: 0.3s; }
@keyframes typing {
  0%, 80%, 100% { opacity: 0.3; transform: scale(1); }
  40% { opacity: 1; transform: scale(1.2); }
}
.chat-input {
  display: flex;
  gap: 8px;
  padding: 16px 20px;
  border-top: 1px solid var(--border);
  background: var(--cream-soft);
}
.chat-input input {
  flex: 1;
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 14px;
  font-size: 14px;
  background: white;
  outline: none;
  transition: border-color 0.15s var(--ease);
}
.chat-input input:focus { border-color: var(--primary); }
.chat-input button {
  background: var(--terracotta);
  color: white;
  padding: 10px 18px;
  border-radius: 10px;
  font-size: 13.5px;
  font-weight: 600;
  transition: background 0.15s var(--ease);
}
.chat-input button:hover { background: var(--terracotta-hover); }
.chat-input button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ═══════════════════════ SITE AUDIT (multi-pagina) ═══════════════════════ */
.pages-list {
  background: white;
  border: 1px solid var(--border);
  border-radius: var(--r);
  margin-top: 16px;
  overflow: hidden;
}
.page-row {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 16px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--border);
  align-items: center;
  font-size: 13.5px;
}
.page-row:last-child { border: none; }
.page-row .url {
  font-family: 'SF Mono', Menlo, Consolas, monospace;
  font-size: 12.5px;
  color: var(--ink-soft);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.page-row .score {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 18px;
  color: var(--ink);
}
.page-row .score.good { color: var(--success); }
.page-row .score.warn { color: var(--warning); }
.page-row .score.bad  { color: var(--danger); }
.page-row .issues-count {
  font-size: 12px;
  color: var(--ink-muted);
}
.page-row .issues-count.is-zero {
  color: var(--success);
}
/* Fase 2.17 Fix #4: page-row espandibile con dropdown delle issues.
   IMPORTANTE: il <details> deve essere block, NON grid. Il grid è solo sul summary.
   Senza questo, la <ul> dei problemi finisce nella seconda colonna del grid invece che sotto. */
.page-row-expandable {
  display: block;
  border-bottom: 1px solid var(--border);
}
.page-row-expandable:last-child { border-bottom: none; }
.page-row-expandable > summary {
  list-style: none;
  cursor: pointer;
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 16px;
  padding: 14px 18px;
  align-items: center;
  font-size: 13.5px;
  transition: background 0.15s var(--ease);
}
.page-row-expandable > summary::-webkit-details-marker { display: none; }
.page-row-expandable > summary:hover { background: var(--cream-soft); }
.page-row-chevron {
  display: inline-block;
  margin-left: 8px;
  color: var(--ink-muted);
  transition: transform 0.25s var(--ease);
  font-size: 16px;
  line-height: 1;
}
.page-row-expandable[open] .page-row-chevron {
  transform: rotate(90deg);
  color: var(--terracotta);
}
.page-row-expandable[open] > summary {
  background: var(--cream-soft);
}
.page-issues-list {
  list-style: none;
  margin: 0;
  padding: 8px 18px 14px 18px;
  background: var(--cream-soft);
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.page-issue-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 10px;
  background: var(--cream);
  border-radius: 6px;
  border-left: 3px solid var(--border);
  font-size: 13px;
}
.page-issue-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  background: var(--ink-muted);
}
.page-issue-dot.high { background: var(--danger); }
.page-issue-dot.medium { background: var(--warning); }
.page-issue-dot.low { background: var(--ink-muted); }
.page-issue-title {
  color: var(--ink);
  font-weight: 500;
  flex: 1;
  min-width: 0;
}

/* ═══════════════════════════════════════════════════════
   LANDING REFRESH: nuove sezioni
   ═══════════════════════════════════════════════════════ */
/* Come funziona */
.come-funziona {
  padding: 80px 0;
  background: var(--cream-soft);
}
.cf-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
  margin-top: 48px;
}
@media (max-width: 768px) {
  .cf-steps { grid-template-columns: 1fr; gap: 20px; }
}
.cf-step {
  text-align: center;
  padding: 32px 24px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}
.cf-step-num {
  font-family: var(--font-head);
  font-size: 52px;
  font-weight: 900;
  color: var(--primary);
  opacity: 0.18;
  line-height: 1;
  margin-bottom: 4px;
}
.cf-step-icon {
  color: var(--primary);
  margin-bottom: 4px;
}
.cf-step h3 {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  margin: 4px 0 0;
}
.cf-step p {
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
}
/* Chat AI */
.chat-ai-section {
  padding: 80px 0;
  /* Banda "spotlight" scura fissa (come .referral-section, eccezione CSS-1
     approvata): NON segue il tema. In dark mode var(--primary-deep) diventava
     azzurrino chiaro e il testo crema hardcoded restava illeggibile. #0f253d è
     identico al valore light di --primary-deep, quindi la resa light non cambia. */
  background: #0f253d;
}
.chat-ai-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
}
@media (max-width: 768px) {
  .chat-ai-grid { grid-template-columns: 1fr; gap: 40px; }
}
.chat-ai-eyebrow {
  display: inline-block;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(250,250,247,0.5);
  margin-bottom: 12px;
}
.chat-ai-text h2 {
  font-family: var(--font-head);
  font-size: clamp(24px, 4vw, 40px);
  font-weight: 700;
  /* Fisso chiaro: la banda è sempre scura, non seguire il tema (in dark
     var(--cream) diventava quasi nero -> h2 illeggibile sullo sfondo scuro). */
  color: #fafaf7;
  line-height: 1.2;
  margin: 0 0 16px;
}
.chat-ai-text p {
  font-size: 16px;
  color: rgba(250,250,247,0.72);
  line-height: 1.7;
  margin: 0 0 20px;
}
.chat-ai-list { margin: 20px 0 28px; }
.chat-ai-list li {
  color: rgba(250,250,247,0.75);
  display: flex;
  gap: 10px;
  align-items: baseline;
  padding: 7px 0;
  font-size: 15px;
  line-height: 1.5;
}
.chat-ai-list li::before {
  content: "→";
  color: var(--terracotta);
  font-weight: 600;
  flex-shrink: 0;
}
.chat-ai-mockup {
  background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: var(--r-lg);
  overflow: hidden;
}
.cam-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-bottom: 1px solid rgba(255,255,255,0.07);
}
.cam-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--terracotta);
  flex-shrink: 0;
}
.cam-title {
  font-size: 12px;
  color: rgba(250,250,247,0.45);
  font-family: var(--font-body);
}
.cam-messages {
  padding: 20px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.cam-msg {
  max-width: 84%;
  padding: 12px 15px;
  font-size: 14px;
  line-height: 1.55;
  border-radius: 14px;
}
.cam-user {
  background: rgba(255,255,255,0.09);
  color: rgba(250,250,247,0.9);
  align-self: flex-end;
  border-radius: 14px 14px 4px 14px;
}
.cam-ai {
  background: rgba(26,58,92,0.7);
  color: rgba(250,250,247,0.85);
  align-self: flex-start;
  border-radius: 14px 14px 14px 4px;
  border: 1px solid rgba(255,255,255,0.05);
}
.cam-typing {
  display: flex;
  align-items: center;
  gap: 5px;
  padding: 14px 15px;
}
.cam-typing span {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgba(250,250,247,0.4);
  animation: camTyping 1.3s infinite;
}
.cam-typing span:nth-child(2) { animation-delay: 0.2s; }
.cam-typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes camTyping {
  0%, 100% { transform: translateY(0); opacity: 0.4; }
  50%       { transform: translateY(-4px); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .cam-typing span { animation: none; }
}
/* AI Lab */
.ailab-section {
  padding: 80px 0;
  background: var(--cream);
}
.ailab-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 20px;
  margin-top: 48px;
}
@media (max-width: 640px) {
  .ailab-grid { grid-template-columns: 1fr; }
}
.ailab-card {
  padding: 28px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: box-shadow 0.2s var(--ease), transform 0.2s var(--ease);
}
.ailab-card:hover {
  box-shadow: var(--shadow);
  transform: translateY(-2px);
}
.ailab-card-icon {
  color: var(--primary);
  width: 24px;
  height: 24px;
  flex-shrink: 0;
}
.ailab-card h3 {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.ailab-card p {
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
  flex: 1;
}
.ailab-example {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-top: 6px;
  padding: 12px;
  background: var(--cream);
  border-radius: var(--r-sm);
  font-size: 12px;
  flex-wrap: wrap;
}
.ailab-before {
  color: var(--ink-muted);
  text-decoration: line-through;
  flex-shrink: 0;
}
.ailab-arrow {
  color: var(--border);
  flex-shrink: 0;
}
.ailab-after {
  color: var(--success);
  font-weight: 500;
}
.ailab-badge {
  display: inline-block;
  padding: 4px 10px;
  background: rgba(26,58,92,0.08);
  color: var(--primary);
  border-radius: 99px;
  font-size: 12px;
  font-weight: 500;
  margin-top: auto;
  align-self: flex-start;
}
/* Prova senza rischio (sostituisce social proof) */
.prova-grid {
  display: grid;
  grid-template-columns: 1.2fr 0.8fr;
  gap: 60px;
  align-items: center;
}
@media (max-width: 768px) {
  .prova-grid { grid-template-columns: 1fr; gap: 40px; }
}
.prova-text h2 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 16px;
}
.prova-text p {
  font-size: 17px;
  color: var(--ink-soft);
  line-height: 1.7;
  max-width: 480px;
  margin: 0;
}
.prova-trust {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.prova-trust-item {
  padding: 20px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
}
.prova-trust-num {
  font-family: var(--font-head);
  font-size: 42px;
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
  margin-bottom: 6px;
}
.prova-trust-label {
  font-size: 12px;
  color: var(--ink-muted);
  line-height: 1.4;
}
/* dark mode override per le nuove sezioni */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cf-step {
    background: var(--cream-soft);
  }
  :root:not([data-theme="light"]) .ailab-example {
    background: var(--cream-deep);
  }
  :root:not([data-theme="light"]) .prova-trust-item {
    background: var(--cream-soft);
  }
}
[data-theme="dark"] .cf-step { background: var(--cream-soft); }
[data-theme="dark"] .ailab-example { background: var(--cream-deep); }
[data-theme="dark"] .prova-trust-item { background: var(--cream-soft); }

/* ── Demo Live (Landing Refresh v2) ─────────────────────── */
.demo-live {
  padding: 80px 0;
  background: var(--cream);
}
.dl-head { margin-bottom: 40px; }

/* ── Sezione Agenzie ──────────────────────────────────── */
.agenzia-section {
  padding: 80px 0;
  background: var(--cream-soft);
}
.agenzia-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
}
@media (max-width: 820px) {
  .agenzia-grid { grid-template-columns: 1fr; gap: 40px; }
}
.agenzia-text h2 {
  font-family: var(--font-head);
  font-size: clamp(24px, 3.5vw, 38px);
  font-weight: 700;
  color: var(--ink);
  line-height: 1.2;
  margin: 0 0 16px;
}
.agenzia-text p {
  font-size: 16px;
  color: var(--ink-soft);
  line-height: 1.7;
  margin: 0 0 20px;
  max-width: 480px;
}
.agenzia-text .feature-list { margin: 0 0 8px; }
.agenzia-text .feature-list li {
  position: relative;
  padding: 7px 0 7px 24px;
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink-soft);
}
.agenzia-text .feature-list li::before {
  content: "→";
  position: absolute;
  left: 0;
  top: 7px;
  color: var(--terracotta);
  font-weight: 700;
}
.agenzia-text .feature-list li strong { color: var(--ink); font-weight: 600; }
.agenzia-cta {
  display: inline-block;
  background: var(--primary-fondo);
  color: var(--on-dark);
  border-radius: 12px;
  padding: 13px 24px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  margin-top: 8px;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.agenzia-cta:hover         { background: var(--primary-deep); transform: translateY(-1px); }
.agenzia-cta:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
/* visual mockup */
.agenzia-visual {
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.av-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 13px 18px;
  border-bottom: 1px solid var(--border);
  background: var(--cream-soft);
}
.av-logo {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: var(--primary);
}
.av-scan-btn {
  font-size: 11px;
  font-weight: 600;
  font-family: var(--font-body);
  color: var(--terracotta);
  border: 1px solid var(--terracotta);
  border-radius: 6px;
  padding: 4px 10px;
}
.av-metrics {
  display: flex;
  border-bottom: 1px solid var(--border);
}
.av-metric {
  flex: 1;
  text-align: center;
  padding: 14px 8px;
  border-right: 1px solid var(--border);
}
.av-metric:last-child { border-right: none; }
.av-metric-num {
  font-family: var(--font-head);
  font-size: 26px;
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
}
.av-metric-warn .av-metric-num { color: var(--warning); }
.av-metric-good .av-metric-num { color: var(--success); }
.av-metric-lbl {
  font-size: 10px;
  color: var(--ink-muted);
  margin-top: 4px;
  line-height: 1.3;
}
.av-table { width: 100%; }
.av-row {
  display: grid;
  grid-template-columns: 2fr 0.7fr 0.6fr 1fr;
  gap: 6px;
  padding: 9px 16px;
  border-bottom: 1px solid var(--border);
  align-items: center;
  font-size: 12px;
}
.av-row:last-child { border-bottom: none; }
.av-head {
  background: var(--cream-soft);
  font-size: 10px;
  font-weight: 600;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 7px 16px;
}
.av-client       { color: var(--ink); font-weight: 500; overflow: hidden;
                   white-space: nowrap; text-overflow: ellipsis; }
.av-score        { font-weight: 700; color: var(--ink); }
.av-score-warn   { color: var(--warning); }
.av-score-bad    { color: var(--danger); }
.av-delta        { font-weight: 600; }
.av-up           { color: var(--success); }
.av-down         { color: var(--danger); }
.av-status {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 99px;
  font-size: 10px;
  font-weight: 600;
  white-space: nowrap;
}
.av-ok   { background: rgba(94,124,90,.12);  color: var(--success); }
.av-warn { background: rgba(184,115,46,.10); color: var(--warning); }
.av-bad  { background: rgba(161,77,58,.10);  color: var(--danger);  }
/* dark: il mockup è near-black, alzo l'opacita' del tint così la pill resta
   un badge riconoscibile (testo già leggibile). CSS-2. */
[data-theme="dark"] .av-ok   { background: rgba(136,178,130,.18); }
[data-theme="dark"] .av-warn { background: rgba(217,156,94,.18); }
[data-theme="dark"] .av-bad  { background: rgba(214,138,114,.18); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .av-ok   { background: rgba(136,178,130,.18); }
  :root:not([data-theme="light"]) .av-warn { background: rgba(217,156,94,.18); }
  :root:not([data-theme="light"]) .av-bad  { background: rgba(214,138,114,.18); }
}
/* Contrasto del testo nel mock (font 9-11px su sfondo chiaro): in LIGHT mode
   i token --success #5e7c5a (4.45/3.86:1) e --warning #b8732e (3.63/3.26:1)
   non raggiungono 4.5:1, quindi nel solo mockup uso varianti scure. aria-hidden
   non basta: axe color-contrast valuta comunque il testo visibile. In dark mode
   i token sono già chiari (#88b282/#d99c5e): doppia forma (CSS-2). */
.av-up, .av-ok { color: #3f6038; }
.av-score-warn, .av-warn { color: #87521c; }
[data-theme="dark"] .av-up,
[data-theme="dark"] .av-ok { color: var(--success); }
[data-theme="dark"] .av-score-warn,
[data-theme="dark"] .av-warn { color: var(--warning); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .av-up,
  :root:not([data-theme="light"]) .av-ok { color: var(--success); }
  :root:not([data-theme="light"]) .av-score-warn,
  :root:not([data-theme="light"]) .av-warn { color: var(--warning); }
}
/* mobile: la tabella mockup a 4 colonne si stringe; riduco font/gap/padding e
   la pill di stato così non schiaccia/clippa il contenuto a 375px. */
@media (max-width: 480px) {
  .av-row { grid-template-columns: 1.7fr 0.6fr 0.6fr auto; gap: 4px; padding: 8px 12px; font-size: 11px; }
  .av-head { padding: 6px 12px; }
  .av-client { min-width: 0; }
  .av-status { padding: 2px 6px; font-size: 9px; }
}
.av-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 9px 16px;
  border-top: 1px solid var(--border);
  background: var(--cream-soft);
}
.av-footer span {
  font-size: 11px;
  color: var(--ink-muted);
  font-weight: 500;
}
.av-brand {
  font-family: var(--font-head) !important;
  font-style: italic;
  color: var(--primary) !important;
}

/* ═══════════════════════════════════════════════════════
   PAGINA /agenzie: ristrutturazione conversione
   ═══════════════════════════════════════════════════════ */
.agenzie-panel { display: none; }
.agenzie-panel.show { display: block; }
.ag-page { background: var(--cream); }

/* sezioni */
.ag-section { padding: 80px 0; }
.ag-section-h2 {
  font-family: var(--font-head);
  font-size: clamp(24px, 3.5vw, 40px);
  font-weight: 700;
  color: var(--ink);
  text-align: center;
  margin: 8px 0 48px;
  line-height: 1.2;
}

/* hero (banda navy FISSA: var(--primary-deep)/var(--cream) si invertono in dark) */
.ag-hero-section {
  background: #0f253d;
  padding: 72px 0 80px;
}
.ag-hero-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
}
@media (max-width: 860px) {
  .ag-hero-grid { grid-template-columns: 1fr; gap: 40px; }
}
.ag-h1 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4.5vw, 54px);
  font-weight: 900;
  color: #fafaf7;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin: 0 0 20px;
}
.ag-h1 em { color: var(--terracotta); font-style: normal; }
/* Contrasto su navy #0f253d (#a14d3a pieno = 2.69:1): la hero agenzie usa una
   terracotta chiara per eyebrow ed em, che resta calda e raggiunge >=4.5:1. */
.ag-hero-section .h-eyebrow.warm,
.ag-hero-section .ag-h1 em { color: #d68a72; }
.ag-lead {
  font-size: 17px;
  color: rgba(250,250,247,0.72);
  line-height: 1.7;
  margin: 0 0 28px;
  max-width: 440px;
}
.ag-hero-actions {
  display: flex;
  align-items: center;
  gap: 20px;
  flex-wrap: wrap;
  margin-bottom: 14px;
}
.ag-hero-note {
  font-size: 12px;
  /* Contrasto su navy #0f253d: 0.4 dava 3.53:1 (axe). 0.55 -> ~5.4:1. */
  color: rgba(250,250,247,0.55);
  margin: 0;
}

/* btn */
.ag-btn-primary {
  display: inline-block;
  background: var(--terracotta);
  color: #fff;
  border-radius: 12px;
  padding: 14px 28px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.ag-btn-primary:hover {
  background: var(--terracotta-hover);
  transform: translateY(-1px);
}
.ag-btn-primary:focus-visible {
  outline: 2px solid var(--terracotta);
  outline-offset: 3px;
}
.ag-btn-ghost {
  font-size: 14px;
  /* Contrasto su navy #0f253d: 0.45 dava 4.12:1 (axe). 0.6 -> ~6:1. */
  color: rgba(250,250,247,0.6);
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: color 0.15s;
}
.ag-btn-ghost:hover { color: rgba(250,250,247,0.8); }
/* mobile: link ghost con target tattile sufficiente (>=44px) */
@media (max-width: 600px) {
  .ag-btn-ghost, .ag-final-ghost {
    display: inline-block;
    padding: 11px 0;
    min-height: 44px;
  }
}

/* ROI */
.ag-roi-section { background: var(--cream-soft); }
.ag-roi-lead {
  text-align: center;
  font-size: 16px;
  color: var(--ink-muted);
  max-width: 520px;
  margin: -28px auto 40px;
}
.ag-roi-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  max-width: 900px;
  margin: 0 auto;
}
@media (max-width: 720px) {
  .ag-roi-grid { grid-template-columns: 1fr; }
}
.ag-roi-card {
  padding: 28px 24px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  text-align: center;
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.ag-roi-card-highlight {
  border-color: var(--primary);
  border-width: 2px;
}
.ag-roi-num {
  font-family: var(--font-head);
  font-size: 56px;
  font-weight: 900;
  color: var(--primary);
  line-height: 1;
  margin-bottom: 4px;
}
.ag-roi-card-highlight .ag-roi-num { color: var(--terracotta); }
.ag-roi-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
  margin-bottom: 12px;
}
.ag-roi-card p {
  font-size: 13px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
}
.ag-roi-note {
  text-align: center;
  font-size: 12px;
  color: var(--ink-muted);
  margin-top: 24px;
}

/* how */
.ag-how-section { background: var(--cream); }
.ag-how-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 40px;
  max-width: 900px;
  margin: 0 auto;
}
@media (max-width: 760px) {
  .ag-how-steps { grid-template-columns: 1fr; gap: 28px; }
}
.ag-how-step {
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.ag-how-step.scroll-reveal:nth-child(2) { transition-delay: 0.1s; }
.ag-how-step.scroll-reveal:nth-child(3) { transition-delay: 0.2s; }
.ag-how-num {
  font-family: var(--font-head);
  font-size: 48px;
  font-weight: 900;
  color: var(--primary);
  opacity: 0.2;
  line-height: 1;
}
.ag-how-step h3 {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.ag-how-step p {
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
}

/* prodotto (banda navy FISSA) */
.ag-product-section { padding: 80px 0; background: var(--cream-soft); }
.ag-product-dark { background: #0f253d; }
.ag-product-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
}
@media (max-width: 820px) {
  .ag-product-grid { grid-template-columns: 1fr; gap: 36px; }
}
.ag-product-title {
  font-family: var(--font-head);
  font-size: clamp(22px, 3vw, 34px);
  font-weight: 700;
  margin: 8px 0 16px;
  line-height: 1.2;
}
.ag-product-desc {
  font-size: 15px;
  line-height: 1.7;
  margin: 0 0 20px;
}
.ag-product-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ag-product-list li {
  font-size: 14px;
  color: rgba(250,250,247,0.75);
  display: flex;
  align-items: center;
  gap: 8px;
}
.ag-product-list li::before {
  content: "\2192";
  color: var(--terracotta);
  font-weight: 700;
  flex-shrink: 0;
}
.ag-product-visual {
  background: rgba(255,255,255,0.05);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: var(--r-lg);
  overflow: hidden;
}

/* Plugin WordPress nel pannello agenzie (sezione CHIARA, theme-safe via token:
   le ag-product-list/visual sono tarate per il navy, qui servono classi dedicate) */
.ag-wp-section { background: var(--cream); }
.ag-wp-list { list-style: none; padding: 0; margin: 18px 0 0; display: grid; gap: 10px; }
.ag-wp-list li { font-size: 14.5px; color: var(--ink-soft); display: flex; align-items: flex-start; gap: 10px; line-height: 1.55; }
.ag-wp-list li::before { content: "\2713"; color: var(--success); font-weight: 700; flex-shrink: 0; }
.ag-wp-link { display: inline-block; margin-top: 20px; font-weight: 600; font-size: 14.5px; color: var(--terracotta); text-decoration: none; }
.ag-wp-link:hover { text-decoration: underline; }
.ag-wp-mock { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg); padding: 18px; box-shadow: var(--shadow-sm); }
.ag-wp-mock-head { font-size: 13px; font-weight: 600; color: var(--ink-soft); padding-bottom: 12px; border-bottom: 1px solid var(--border); margin-bottom: 6px; }
.ag-wp-site { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-top: 1px solid var(--border); }
.ag-wp-site:first-of-type { border-top: none; }
.ag-wp-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--success); flex-shrink: 0; }
.ag-wp-site-name { font-size: 13.5px; color: var(--ink); }
.ag-wp-badge { margin-left: auto; font-size: 11px; font-weight: 700; border-radius: 99px; padding: 2px 9px; white-space: nowrap; }
.ag-wp-badge-ok { color: var(--success); background: rgba(94,124,90,0.14); }
.ag-wp-badge-queue { color: var(--terracotta); background: rgba(161,77,58,0.12); }
.ag-wp-mock-btn { display: block; text-align: center; margin-top: 14px; background: var(--primary-fondo); color: var(--on-dark); border-radius: 10px; padding: 11px; font-size: 14px; font-weight: 600; }

/* pricing */
.ag-pricing-section { background: var(--cream); }
.ag-pricing-wrap {
  display: grid;
  grid-template-columns: 1.4fr 0.6fr;
  gap: 24px;
  max-width: 820px;
  margin: 0 auto;
}
@media (max-width: 680px) {
  .ag-pricing-wrap { grid-template-columns: 1fr; }
}
.ag-pricing-card {
  background: var(--cream-soft);
  border: 2px solid var(--primary);
  border-radius: var(--r-lg);
  overflow: hidden;
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
/* header card pricing: navy FISSO in entrambi i temi */
.ag-pricing-header {
  background: #1a3a5c;
  padding: 24px 28px;
}
.ag-pricing-name {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: rgba(250,250,247,0.7);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 4px;
}
.ag-pricing-price {
  font-family: var(--font-head);
  font-size: 48px;
  font-weight: 900;
  color: #fafaf7;
  line-height: 1;
}
.ag-pricing-mo {
  font-size: 16px;
  font-weight: 400;
  font-family: var(--font-body);
  color: rgba(250,250,247,0.6);
}
.ag-pricing-roi {
  font-size: 12px;
  color: rgba(250,250,247,0.55);
  margin-top: 6px;
}
.ag-pricing-features {
  list-style: none;
  padding: 24px 28px;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 9px;
  border-bottom: 1px solid var(--border);
}
.ag-pricing-features li {
  font-size: 14px;
  color: var(--ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
}
.ag-pricing-features li::before {
  content: "\2713";
  color: var(--success);
  font-weight: 700;
  font-size: 12px;
  flex-shrink: 0;
}
.ag-pricing-cta {
  display: block;
  margin: 20px 28px;
  text-align: center;
  background: var(--primary-fondo);
  color: var(--on-dark);
  border-radius: 10px;
  padding: 13px 20px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.18s var(--ease);
}
.ag-pricing-cta:hover { background: var(--primary-deep); }
.ag-pricing-note {
  text-align: center;
  font-size: 11px;
  color: var(--ink-muted);
  padding: 0 28px 20px;
}
.ag-pricing-extra {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.ag-pricing-extra h3 {
  font-family: var(--font-head);
  font-size: 16px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.ag-pricing-extra p {
  font-size: 13px;
  color: var(--ink-muted);
  margin: 0;
  line-height: 1.5;
}
.ag-credits-list { display: flex; flex-direction: column; gap: 7px; }
.ag-credit-item {
  display: flex;
  justify-content: space-between;
  font-size: 13px;
  color: var(--ink-soft);
  padding: 6px 0;
  border-bottom: 1px solid var(--border);
}
.ag-credit-item:last-child { border-bottom: none; }
.ag-credit-price { font-weight: 700; color: var(--ink); }
.ag-pricing-note-box {
  padding: 12px;
  background: rgba(26,58,92,0.06);
  border-radius: var(--r-sm);
  font-size: 12px;
  color: var(--ink-muted);
  line-height: 1.5;
}
.ag-pricing-note-box strong {
  display: block;
  color: var(--primary);
  margin-bottom: 4px;
}

/* faq */
.ag-faq-section {
  background: var(--cream);
  max-width: 100%;
  padding-top: 40px;    /* override: era 80px da .ag-section */
  padding-bottom: 80px;
}
.ag-faq-section .ag-section-h2 { margin-bottom: 28px; }
.ag-faq-section > .container { max-width: 820px; }

/* finale (banda navy FISSA) */
.ag-final-section {
  background: #0f253d;
  padding: 80px 0;
}
.ag-final-h2 {
  font-family: var(--font-head);
  font-size: clamp(22px, 3.5vw, 38px);
  font-weight: 700;
  color: #fafaf7;
  line-height: 1.2;
  margin: 0 0 32px;
}
.ag-final-btn { margin-bottom: 14px; }
.ag-final-note {
  display: block;
  font-size: 12px;
  /* Contrasto su navy #0f253d: 0.4 dava 3.53:1. 0.55 -> ~5.4:1. */
  color: rgba(250,250,247,0.55);
  margin-bottom: 4px;
}

/* chat mockup interno (.cam-*) - condiviso con product-detail della landing */
.cam-header {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 12px 16px;
  border-bottom: 1px solid rgba(255,255,255,0.1);
}
.cam-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--terracotta);
  flex-shrink: 0;
}
.cam-title {
  font-size: 12px;
  font-weight: 600;
  color: rgba(250,250,247,0.6);
}
.cam-messages {
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cam-msg {
  font-size: 13px;
  line-height: 1.55;
  padding: 10px 13px;
  border-radius: 12px;
  max-width: 88%;
}
.cam-user {
  align-self: flex-end;
  background: var(--terracotta);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.cam-ai {
  align-self: flex-start;
  background: rgba(255,255,255,0.08);
  color: rgba(250,250,247,0.88);
  border-bottom-left-radius: 4px;
}
.cam-typing {
  display: inline-flex;
  gap: 5px;
  align-items: center;
}
.cam-typing span {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: rgba(250,250,247,0.5);
  animation: camBlink 1.2s infinite ease-in-out;
}
.cam-typing span:nth-child(2) { animation-delay: 0.2s; }
.cam-typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes camBlink {
  0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
  40% { opacity: 1; transform: translateY(-3px); }
}
@media (prefers-reduced-motion: reduce) {
  .cam-typing span { animation: none; opacity: 0.6; }
}

/* dark mode overrides (sezioni chiare; le bande navy sono fisse) - doppia forma CSS-2 */
[data-theme="dark"] .ag-roi-section { background: var(--cream-soft); }
[data-theme="dark"] .ag-roi-card { background: var(--cream); }
[data-theme="dark"] .ag-pricing-section { background: var(--cream-soft); }
[data-theme="dark"] .ag-pricing-card { background: var(--cream); }
[data-theme="dark"] .ag-pricing-extra { background: var(--cream); }
[data-theme="dark"] .ag-pricing-note-box { background: rgba(130,160,196,0.10); }
[data-theme="dark"] .ag-pricing-note-box strong { color: var(--primary-deep); }
[data-theme="dark"] .ag-page { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .ag-roi-section { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .ag-roi-card { background: var(--cream); }
  :root:not([data-theme="light"]) .ag-pricing-section { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .ag-pricing-card { background: var(--cream); }
  :root:not([data-theme="light"]) .ag-pricing-extra { background: var(--cream); }
  :root:not([data-theme="light"]) .ag-pricing-note-box { background: rgba(130,160,196,0.10); }
  :root:not([data-theme="light"]) .ag-pricing-note-box strong { color: var(--primary-deep); }
  :root:not([data-theme="light"]) .ag-page { background: var(--cream-soft); }
}

/* Agenzie: padding ridotto su mobile */
@media (max-width: 640px) {
  .ag-section       { padding: 48px 0; }
  .ag-hero-section  { padding: 48px 0 52px; }
  .ag-final-section { padding: 56px 0; }
  .ag-faq-section   { padding-top: 28px; padding-bottom: 56px; }
  /* Griglie: colonna singola con gap ridotto */
  .ag-hero-grid    { gap: 28px; }
  .ag-roi-grid     { gap: 14px; }
  .ag-how-steps    { gap: 20px; }
  .ag-pricing-wrap { gap: 14px; }
  .ag-product-grid { gap: 28px; }
  /* Pricing card: bordi e padding più compatti */
  .ag-pricing-card   { border-radius: var(--r); }
  .ag-pricing-header { padding: 20px 20px; }
  .ag-pricing-features,
  .ag-pricing-cta    { padding-left: 20px; padding-right: 20px; }
  .ag-pricing-cta    { margin: 14px 20px; }
  .ag-pricing-note   { padding: 0 20px 16px; }
  /* Chat AI section scura: padding ridotto */
  .pd-feature-dark { padding: 28px 20px; }
}
/* FAQ agenzie: stessa larghezza della card developers sopra (allineamento) +
   padding laterale su mobile */
.ag-faq-section > .container {
  max-width: 820px;
  padding-left: 20px;
  padding-right: 20px;
  box-sizing: border-box;
}
@media (min-width: 720px) {
  .ag-faq-section > .container {
    padding-left: 0;
    padding-right: 0;
  }
}
/* Sezione h2 agenzie: dimensione ridotta su mobile */
@media (max-width: 640px) {
  .ag-section-h2 { font-size: clamp(20px, 5vw, 28px); margin-bottom: 32px; }
  .ag-h1         { font-size: clamp(26px, 7vw, 38px); }
  .ag-roi-num    { font-size: 44px; }
}

/* Link developers nella pagina agenzie */
.ag-dev-link-section { padding: 48px 0; background: var(--cream-soft); }
.ag-dev-link-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 36px 40px;
  background: var(--cream);
  border: 1.5px solid var(--primary);
  border-radius: var(--r-lg);
  max-width: 820px;
  margin: 0 auto;
}
@media (max-width: 680px) {
  .ag-dev-link-card { flex-direction: column; padding: 28px 24px; align-items: flex-start; }
  .ag-dev-link-section { padding: 36px 0; }
}
.ag-dev-link-h3 {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 6px 0 8px;
}
.ag-dev-link-desc {
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
  max-width: 420px;
}
[data-theme="dark"] .ag-dev-link-card { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .ag-dev-link-card { background: var(--cream-soft); }
}

/* Hero trust line compatta (sostituisce price-hint + hero-trust) */
.hero-trust-line {
  font-size: 13px;
  color: var(--ink-muted);
  margin-top: 6px;
}
/* Il link va distinguibile dal testo circostante senza fare affidamento sul
   colore (axe link-in-text-block): sottolineatura sempre presente. */
.hero-trust-line a { color: var(--primary); text-decoration: underline; text-underline-offset: 3px; }
/* Link "Sei un'agenzia?" sotto la hero */
.hero-agency-link { font-size: 13px; margin-top: 6px; }
.hero-agency-link a {
  color: var(--ink-muted);
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: color 0.15s;
}
.hero-agency-link a:hover { color: var(--primary); }
[data-theme="dark"] .hero-trust-line,
[data-theme="dark"] .hero-agency-link { color: rgba(250,250,247,0.5); }
[data-theme="dark"] .hero-agency-link a:hover { color: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .hero-trust-line,
  :root:not([data-theme="light"]) .hero-agency-link { color: rgba(250,250,247,0.5); }
  :root:not([data-theme="light"]) .hero-agency-link a:hover { color: var(--cream); }
}

/* ═══════════════════════════════════════════════
   LANDING RISTRUTTURAZIONE (8 sezioni)
   ═══════════════════════════════════════════════ */

/* ── Selettore pubblico ───────────────────────────────── */
.audience-split {
  padding: 64px 0;
  background: var(--cream-soft);
  border-bottom: 1px solid var(--border);
}
.audience-split-label {
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin: 0 0 28px;
}
.audience-split-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  max-width: 760px;
  margin: 0 auto;
}
@media (max-width: 640px) {
  .audience-split-grid { grid-template-columns: 1fr; }
}
.audience-card {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 32px 28px;
  border-radius: var(--r-lg);
  border: 1.5px solid var(--border);
  text-decoration: none;
  transition: border-color 0.18s var(--ease), box-shadow 0.18s var(--ease),
              transform 0.18s var(--ease), opacity 0.6s var(--ease);
  cursor: pointer;
  background: var(--cream);
}
.audience-card:hover {
  border-color: var(--primary);
  box-shadow: 0 4px 24px rgba(26,58,92,0.1);
  transform: translateY(-3px);
}
.audience-agency:hover { border-color: var(--terracotta); }
.audience-card-icon { color: var(--primary); }
.audience-agency .audience-card-icon { color: var(--terracotta); }
.audience-card h2,
.audience-card h3 {
  font-family: var(--font-head);
  font-size: 19px;
  font-weight: 700;
  color: var(--ink);
  margin: 0;
}
.audience-card p {
  font-size: 14px;
  color: var(--ink-muted);
  line-height: 1.6;
  margin: 0;
  flex: 1;
}
.audience-card-cta {
  font-size: 14px;
  font-weight: 600;
  color: var(--primary);
  margin-top: 4px;
}
.audience-agency .audience-card-cta { color: var(--terracotta); }
[data-theme="dark"] .audience-pro,
[data-theme="dark"] .audience-agency { background: var(--cream-soft); }
[data-theme="dark"] .audience-split   { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .audience-pro,
  :root:not([data-theme="light"]) .audience-agency { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .audience-split   { background: var(--cream); }
}

/* ── Comparazione visiva (banda navy FISSA: niente var di tema invertibili) ── */
.vs-section {
  padding: 80px 0;
  background: #0f253d;
}
.vs-eyebrow { margin-bottom: 8px; }
.vs-headline {
  font-family: var(--font-head);
  font-size: clamp(28px, 4.5vw, 52px);
  font-weight: 900;
  color: #fafaf7;
  text-align: center;
  letter-spacing: -0.02em;
  line-height: 1.1;
  margin: 0 0 52px;
}
.vs-grid {
  display: flex;
  align-items: stretch;
  gap: 0;
  max-width: 780px;
  margin: 0 auto 48px;
}
@media (max-width: 640px) {
  .vs-grid { flex-direction: column; max-width: 380px; }
  .vs-divider { flex-direction: row; width: 100%; height: auto; padding: 16px 0; }
  .vs-divider-line { flex: 1; height: 1px; width: auto; }
}
.vs-card {
  flex: 1;
  padding: 32px 28px;
  border-radius: var(--r-lg);
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.vs-ok  { background: rgba(94,124,90,0.1);  border: 1px solid rgba(94,124,90,0.25); }
.vs-bad { background: rgba(161,77,58,0.1); border: 1px solid rgba(161,77,58,0.25); }
.vs-card-source {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 600;
  color: rgba(250,250,247,0.6);
}
.vs-card-status {
  font-family: var(--font-head);
  font-size: 28px;
  font-weight: 900;
  letter-spacing: -0.01em;
}
.vs-ok-status  { color: var(--success); }
.vs-bad-status { color: var(--danger); }
.vs-card-check { align-self: flex-start; }
.vs-card-desc {
  font-size: 14px;
  color: rgba(250,250,247,0.65);
  line-height: 1.6;
  margin: 0;
}
.vs-divider {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 0 24px;
  gap: 12px;
}
.vs-divider-line {
  flex: 1;
  width: 1px;
  background: rgba(250,250,247,0.1);
}
.vs-divider-label {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  /* Contrasto: su navy #0f253d (costante in entrambi i temi) serve >=4.5:1.
     0.25 dava 2.19:1 (axe). 0.55 porta a ~5.4:1 restando un'etichetta muta. */
  color: rgba(250,250,247,0.55);
}
.vs-stats {
  display: flex;
  justify-content: center;
  gap: 0;
  max-width: 600px;
  margin: 0 auto 40px;
}
.vs-stat {
  flex: 1;
  text-align: center;
  padding: 20px 16px;
  border-right: 1px solid rgba(250,250,247,0.08);
}
.vs-stat:last-child { border-right: none; }
.vs-stat-num {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 42px);
  font-weight: 900;
  color: #fafaf7;
  line-height: 1;
  margin-bottom: 6px;
}
.vs-stat-label {
  font-size: 12px;
  color: rgba(250,250,247,0.45);
  line-height: 1.4;
}
.vs-cta { text-align: center; }
.vs-cta-btn {
  display: inline-block;
  background: var(--terracotta);
  color: #fff;
  border-radius: 12px;
  padding: 14px 32px;
  font-family: var(--font-body);
  font-size: 16px;
  font-weight: 600;
  text-decoration: none;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.vs-cta-btn:hover { background: var(--terracotta-hover); transform: translateY(-1px); }
.vs-cta-btn:focus-visible { outline: 2px solid var(--terracotta); outline-offset: 3px; }
.vs-cta-note {
  font-size: 12px;
  color: rgba(250,250,247,0.4);
  margin-top: 10px;
}

/* ── Come funziona: layout step + visual (override del vecchio .cf-step card) ── */
.cf-steps {
  display: flex;
  flex-direction: column;
  gap: 64px;
  margin-top: 48px;
}
.cf-step {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
  text-align: left;
  padding: 0;
  background: transparent;
  border: none;
}
.cf-step:nth-child(even) { direction: rtl; }
.cf-step:nth-child(even) > * { direction: ltr; }
.cf-step-content { display: flex; flex-direction: column; gap: 12px; }
.cf-step-visual {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  overflow: hidden;
  box-shadow: 0 4px 24px rgba(15,15,15,0.06);
}
@media (max-width: 768px) {
  .cf-step { grid-template-columns: 1fr; direction: ltr; gap: 28px; }
  .cf-step:nth-child(even) { direction: ltr; }
}
[data-theme="dark"] .cf-step { background: transparent; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cf-step { background: transparent; }
}

/* cf-step visual previews */
.cf-preview-form {
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cf-preview-input {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 10px 14px;
  background: var(--cream);
  border: 1.5px solid var(--border);
  border-radius: 10px;
  font-size: 14px;
}
.cf-preview-prefix { color: var(--ink-muted); }
.cf-preview-url { color: var(--ink); font-weight: 500; }
.cf-preview-btn {
  padding: 10px 14px;
  background: var(--primary-fondo);
  color: #fff;
  border-radius: 10px;
  font-size: 13px;
  font-weight: 600;
  text-align: center;
  font-family: var(--font-body);
}
.cf-preview-progress { padding: 0 20px 20px; }
.cf-preview-pb {
  height: 4px;
  background: var(--border);
  border-radius: 99px;
  overflow: hidden;
  margin-bottom: 10px;
}
.cf-preview-pb-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--primary-fondo), var(--terracotta));
  border-radius: 99px;
}
.cf-preview-step {
  font-size: 12px;
  color: var(--ink-muted);
  display: flex;
  align-items: center;
  gap: 6px;
}
.cf-preview-step.active { color: var(--primary); font-weight: 500; }
.cf-preview-step.active::before {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--primary-fondo);
  flex-shrink: 0;
}
.cf-preview-score-wrap { padding: 20px; display: flex; flex-direction: column; gap: 12px; }
.cf-preview-score { display: flex; align-items: baseline; gap: 4px; }
.cf-preview-score-num {
  font-family: var(--font-head);
  font-size: 42px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
}
.cf-preview-score-total { font-size: 16px; color: var(--ink-muted); }
.cf-preview-subscores { display: flex; flex-direction: column; gap: 8px; }
.cf-sub-row { display: flex; align-items: center; gap: 8px; font-size: 12px; }
.cf-sub-lbl { width: 28px; font-weight: 700; color: var(--ink); }
.cf-sub-bar {
  flex: 1;
  height: 5px;
  background: var(--border);
  border-radius: 99px;
  overflow: hidden;
}
.cf-sub-fill { height: 100%; background: var(--primary-fondo); border-radius: 99px; }
.cf-sub-fill.geo { background: var(--warning); }
.cf-sub-val { font-weight: 700; color: var(--ink); font-size: 12px; }
.cf-sub-val.warn { color: var(--warning); }
.cf-preview-issue {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--ink-soft);
  padding: 6px 10px;
  background: var(--cream);
  border-radius: var(--r-sm);
}
.cf-issue-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.cf-issue-dot.high { background: var(--danger); }
.cf-issue-dot.medium { background: var(--warning); }
.cf-preview-ailab { padding: 20px; display: flex; flex-direction: column; gap: 10px; }
.cf-ailab-header { display: flex; gap: 6px; }
.cf-ailab-tag {
  display: inline-block;
  padding: 2px 8px;
  background: rgba(26,58,92,0.1);
  color: var(--primary);
  border-radius: 99px;
  font-size: 10px;
  font-weight: 700;
}
.cf-ailab-tag.geo { background: rgba(161,77,58,0.1); color: var(--terracotta); }
.cf-ailab-action {
  font-family: var(--font-head);
  font-size: 14px;
  font-weight: 700;
  color: var(--ink);
}
.cf-ailab-example {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px;
  background: var(--cream);
  border-radius: var(--r-sm);
  font-size: 11px;
}
.cf-ex-before { color: var(--ink-muted); text-decoration: line-through; }
.cf-ex-arrow { color: var(--border); }
.cf-ex-after { color: var(--success); font-weight: 600; }
.cf-ailab-badge {
  display: inline-block;
  padding: 3px 8px;
  background: rgba(94,124,90,0.1);
  color: var(--success);
  border-radius: 99px;
  font-size: 10px;
  font-weight: 600;
  align-self: flex-start;
}
[data-theme="dark"] .cf-step-visual { background: var(--cream); border-color: var(--border); }
[data-theme="dark"] .cf-preview-input,
[data-theme="dark"] .cf-preview-issue,
[data-theme="dark"] .cf-ailab-example,
[data-theme="dark"] .cf-preview-score-wrap { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .cf-step-visual { background: var(--cream); border-color: var(--border); }
  :root:not([data-theme="light"]) .cf-preview-input,
  :root:not([data-theme="light"]) .cf-preview-issue,
  :root:not([data-theme="light"]) .cf-ailab-example,
  :root:not([data-theme="light"]) .cf-preview-score-wrap { background: var(--cream-soft); }
}

/* ── F1: test lampo "Come ti vedono le AI" + badge (acquisizione Free) ──── */
.aivis { padding: 76px 0; background: var(--cream-soft); }
.aivis-head { margin-bottom: 28px; }
/* Consolidamento "Provalo adesso": la demo di esempio e il test reale (#ai-visibility)
   sono un unico flusso a due passi. Stesso fondo, giuntura ravvicinata, niente doppia
   intestazione. Solo token di tema: il dark si ribalta da se'. */
.demo-live { padding-bottom: 44px; }
.aivis { padding-top: 10px; background: var(--cream); }
.dl-substep { display: flex; align-items: center; justify-content: center; gap: 10px; font-family: var(--font-head); font-weight: 700; font-size: 18px; color: var(--ink); margin: 6px 0 20px; }
.dl-substep-n { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 99px; background: var(--primary-fondo); color: var(--on-dark); font-family: var(--font-body); font-size: 13px; font-weight: 700; flex-shrink: 0; }
.aivis-sub { text-align: center; max-width: 520px; margin: 0 auto 22px; color: var(--ink-muted); font-size: 15px; line-height: 1.55; }
.aivis-form {
  display: flex;
  gap: 10px;
  max-width: 480px;
  margin: 0 auto;
}
.aivis-form input {
  flex: 1;
  min-width: 0;
  padding: 14px 16px;
  border: 1px solid var(--border);
  border-radius: 12px;
  background: var(--cream);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 16px;
}
.aivis-form input:focus {
  outline: none;
  border-color: var(--primary);
  box-shadow: 0 0 0 3px rgba(26,58,92,0.12);
}
.aivis-form button {
  padding: 14px 22px;
  border: none;
  border-radius: 12px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 15px;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.16s var(--ease, ease), transform 0.16s var(--ease, ease);
}
.aivis-form button:hover { background: var(--primary-deep, #12293f); }
.aivis-form button:disabled { opacity: 0.6; cursor: default; }
.aivis-hint {
  text-align: center;
  font-size: 13px;
  color: var(--ink-muted);
  margin: 12px auto 0;
  max-width: 480px;
}
.aivis-loading {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 28px auto 0;
  color: var(--ink-muted);
  font-size: 14px;
}
.aivis-loading[hidden] { display: none !important; }
.aivis-spinner {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid var(--cream-deep);
  border-top-color: var(--primary);
  animation: aivisSpin 0.8s linear infinite;
}
@keyframes aivisSpin { to { transform: rotate(360deg); } }
.aivis-error {
  max-width: 480px;
  margin: 22px auto 0;
  text-align: center;
  padding: 12px 16px;
  border-radius: 12px;
  background: rgba(178,59,59,0.08);
  color: var(--danger, #b23b3b);
  font-size: 14px;
  border: 1px solid rgba(178,59,59,0.2);
}
.aivis-error[hidden] { display: none !important; }
.aivis-result { max-width: 680px; margin: 32px auto 0; }
.aivis-result[hidden] { display: none !important; }
.aivis-card {
  display: flex;
  gap: 26px;
  align-items: center;
  padding: 24px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 18px;
}
.aivis-score-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}
.aivis-ring {
  width: 108px;
  height: 108px;
  border-radius: 50%;
  background: conic-gradient(var(--aivis-ring, var(--primary-fondo)) calc(var(--pct, 0) * 1%), var(--cream-deep) 0);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
}
.aivis-ring::before {
  content: '';
  position: absolute;
  inset: 10px;
  border-radius: 50%;
  background: var(--cream);
}
.aivis-ring.band-buono { --aivis-ring: #2e7d54; }
.aivis-ring.band-migliorabile { --aivis-ring: var(--terracotta); }
.aivis-ring.band-critico { --aivis-ring: #b23b3b; }
.aivis-ring-num {
  position: relative;
  font-family: var(--font-head);
  font-size: 34px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
}
.aivis-ring-lbl { position: relative; font-size: 11px; color: var(--ink-muted); margin-top: 3px; }
.aivis-verdict {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 15px;
  text-transform: capitalize;
}
.aivis-verdict.band-buono { color: #2e7d54; }
.aivis-verdict.band-migliorabile { color: var(--terracotta); }
.aivis-verdict.band-critico { color: #b23b3b; }
/* Verde/rosso pieni non si leggono sul fondo scuro (3.5:1 e 3.05:1, sotto AA).
   Uso le varianti chiare già in uso nel resto del file. Doppia forma. */
[data-theme="dark"] .aivis-verdict.band-buono,
[data-theme="dark"] .aivis-sig.ok .aivis-sig-ico { color: #8fc187; }
[data-theme="dark"] .aivis-verdict.band-critico { color: var(--danger, #d68a72); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .aivis-verdict.band-buono,
  :root:not([data-theme="light"]) .aivis-sig.ok .aivis-sig-ico { color: #8fc187; }
  :root:not([data-theme="light"]) .aivis-verdict.band-critico { color: var(--danger, #d68a72); }
}
.aivis-host { font-size: 12px; color: var(--ink-muted); word-break: break-all; text-align: center; }
.aivis-signals { flex: 1; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
/* Intestazione "Le basi: N su M" + nota che spiega perché il punteggio può
   essere basso con tutte le spunte verdi (il voto pesa più controlli di quelli
   elencati). Solo token del tema: il dark si ribalta da sé. */
.aivis-sig-head { margin: 0; font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--ink-muted); }
.aivis-sig-note { margin: 4px 0 0; padding: 11px 14px; background: var(--cream); border: 1px solid var(--border); border-left: 3px solid var(--terracotta); border-radius: 10px; font-size: 13px; line-height: 1.55; color: var(--ink-soft); }
.aivis-sig { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; color: var(--ink); }
.aivis-sig-ico {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 700;
  margin-top: 1px;
}
.aivis-sig.ok .aivis-sig-ico { background: rgba(46,125,84,0.14); color: #2e7d54; }
.aivis-sig.no .aivis-sig-ico { background: rgba(161,77,58,0.14); color: var(--terracotta); }
.aivis-sig-body { min-width: 0; }
.aivis-sig-label { font-weight: 600; display: block; }
.aivis-sig-hint { display: block; color: var(--ink-muted); font-size: 12px; margin-top: 3px; line-height: 1.45; }
.aivis-sig.ok .aivis-sig-hint { display: none; }
.aivis-badge-block {
  display: flex;
  gap: 22px;
  align-items: center;
  flex-wrap: wrap;
  margin-top: 18px;
  padding: 22px 24px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 18px;
}
.aivis-badge-preview { flex-shrink: 0; }
.aivis-badge-img { display: block; width: 300px; max-width: 100%; height: auto; border-radius: 14px; }
.aivis-badge-actions { flex: 1; min-width: 220px; }
.aivis-badge-title { font-family: var(--font-head); font-weight: 700; font-size: 18px; color: var(--ink); margin: 0 0 6px; }
.aivis-badge-desc { font-size: 13px; color: var(--ink-muted); margin: 0 0 14px; }
.aivis-badge-btns { display: flex; gap: 10px; flex-wrap: wrap; }
.aivis-copy-btn {
  padding: 10px 16px;
  border-radius: 10px;
  border: 1px solid var(--primary);
  background: var(--primary-fondo);
  color: var(--on-dark);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  transition: opacity 0.16s var(--ease, ease);
}
.aivis-copy-btn:hover { opacity: 0.9; }
.aivis-copy-ghost { background: transparent; color: var(--primary); }
.aivis-cta { text-align: center; margin-top: 22px; }
.aivis-cta-text { font-size: 14px; color: var(--ink-muted); max-width: 480px; margin: 0 auto 14px; }
.aivis-cta-btn {
  padding: 13px 26px;
  border-radius: 12px;
  border: none;
  background: var(--terracotta);
  color: var(--cream);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 15px;
  cursor: pointer;
  transition: opacity 0.16s var(--ease, ease);
}
.aivis-cta-btn:hover { opacity: 0.92; }
@media (max-width: 640px) {
  .aivis-form { flex-direction: column; }
  .aivis-card { flex-direction: column; text-align: center; }
  .aivis-sig { text-align: left; }
  .aivis-badge-block { flex-direction: column; text-align: center; }
  .aivis-badge-actions { min-width: 0; }
  .aivis-badge-btns { justify-content: center; }
}
/* Dark mode in doppia forma (REGOLA CSS-2) */
[data-theme="dark"] .aivis-form input,
[data-theme="dark"] .aivis-card,
[data-theme="dark"] .aivis-badge-block { background: var(--cream); border-color: var(--border); }
[data-theme="dark"] .aivis-ring::before { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .aivis-form input,
  :root:not([data-theme="light"]) .aivis-card,
  :root:not([data-theme="light"]) .aivis-badge-block { background: var(--cream); border-color: var(--border); }
  :root:not([data-theme="light"]) .aivis-ring::before { background: var(--cream); }
}

/* ── Prodotto in azione ───────────────────────────────── */
.product-detail { padding: 80px 0; background: var(--cream); }
.pd-h2 {
  font-family: var(--font-head);
  font-size: clamp(28px, 4vw, 44px);
  font-weight: 700;
  color: var(--ink);
  text-align: center;
  margin: 8px 0 56px;
}
.pd-feature {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
  margin-bottom: 64px;
}
.pd-feature:last-child { margin-bottom: 0; }
/* banda navy FISSA (niente var di tema invertibili) */
.pd-feature-dark {
  background: #0f253d;
  border-radius: var(--r-lg);
  padding: 48px;
  gap: 40px;
}
@media (max-width: 820px) {
  .pd-feature { grid-template-columns: 1fr; gap: 32px; }
  .pd-feature-dark { padding: 28px 24px; }
}
.pd-feature-title {
  font-family: var(--font-head);
  font-size: clamp(20px, 2.5vw, 28px);
  font-weight: 700;
  color: var(--ink);
  margin: 8px 0 12px;
}
.pd-feature-desc {
  font-size: 15px;
  color: var(--ink-soft);
  line-height: 1.7;
  margin: 0;
}
.pd-feature-link {
  display: inline-block;
  margin-top: 18px;
  font-weight: 600;
  font-size: 14.5px;
  color: var(--terracotta);
  text-decoration: none;
}
.pd-feature-link:hover { text-decoration: underline; }
.pd-feature-dark .pd-feature-link { color: #d68a72; } /* terracotta schiarita su navy fisso */
/* mock pannello wp-admin nella feature plugin (banda navy fissa). Colori in CSS,
   non inline, così il check contrasto dell'audit non accoppia coppie a basso
   contrasto (testo/sfondo stesso colore con alpha). */
.pdwp-note { font-size: 12.5px; color: rgba(250,250,247,0.6); margin-bottom: 12px; }
.pdwp-fix { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid rgba(250,250,247,0.12); border-radius: 10px; margin-bottom: 8px; background: rgba(250,250,247,0.04); }
.pdwp-fix-last { margin-bottom: 14px; }
.pdwp-fix-dot { width: 8px; height: 8px; border-radius: 50%; background: #88b282; flex-shrink: 0; }
.pdwp-fix-name { font-size: 13px; color: rgba(250,250,247,0.85); }
.pdwp-fix-badge { margin-left: auto; font-size: 11px; font-weight: 700; color: #d68a72; background: rgba(214,138,114,0.16); border-radius: 99px; padding: 2px 9px; white-space: nowrap; }
.pdwp-btn { display: block; text-align: center; background: #a14d3a; color: #fafaf7; border-radius: 10px; padding: 11px; font-size: 14px; font-weight: 600; }
/* mock "Come migliorare la pagina" nella feature consigli (fondo chiaro, solo token
   di tema: il dark si ribalta da se', nessun colore hardcoded). */
.pdimp-card { padding: 18px 20px; }
.pdimp-label { font-size: 11.5px; font-weight: 700; letter-spacing: .04em; color: var(--ink-muted); text-transform: uppercase; margin-bottom: 12px; }
.pdimp-rk { font-size: 11.5px; color: var(--ink-muted); margin-bottom: 3px; }
.pdimp-old { font-size: 14px; color: var(--ink-muted); text-decoration: line-through; }
.pdimp-new { font-size: 15.5px; font-weight: 700; color: var(--ink); line-height: 1.42; margin-top: 6px; }
.pdimp-meta { display: flex; align-items: center; gap: 12px; margin: 10px 0 14px; }
.pdimp-pill { font-size: 12px; font-weight: 700; color: var(--success); white-space: nowrap; }
.pdimp-why { font-size: 12.5px; color: var(--ink-soft); line-height: 1.5; }
.pdimp-btn { display: block; text-align: center; background: var(--primary-fondo); color: var(--on-dark); border-radius: 10px; padding: 10px; font-size: 13.5px; font-weight: 600; margin-top: 14px; }
.pd-feature-visual {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  overflow: hidden;
}
.pd-feature-dark .pd-feature-visual {
  background: rgba(255,255,255,0.05);
  border-color: rgba(255,255,255,0.1);
}
.pd-gsc-visual { background: var(--cream); }
[data-theme="dark"] .product-detail { background: var(--cream-soft); }
[data-theme="dark"] .pd-gsc-visual { background: var(--cream-soft); }
[data-theme="dark"] .pd-feature-visual { background: var(--cream); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .product-detail { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .pd-gsc-visual { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .pd-feature-visual { background: var(--cream); }
}

/* ── CTA finale (banda navy FISSA) ────────────────────── */
.landing-cta-final {
  padding: 80px 0;
  background: #0f253d;
  text-align: center;
}
.lcf-h2 {
  font-family: var(--font-head);
  font-size: clamp(22px, 3.5vw, 38px);
  font-weight: 700;
  color: #fafaf7;
  line-height: 1.2;
  margin: 0 0 36px;
}
.lcf-form { max-width: 480px; margin: 0 auto; }
.lcf-note {
  font-size: 13px;
  /* Contrasto: su navy #0f253d serve >=4.5:1. 0.4 dava 3.53:1 (axe).
     0.55 porta a ~5.4:1 restando una nota secondaria. */
  color: rgba(250,250,247,0.55);
  margin-top: 12px;
}


/* Revisione mobile: su mobile 80+80 = 160px di vuoto tra le sezioni landing,
   troppo. Riduco il padding verticale così lo stacco resta arioso ma non
   cavernoso, e accorcio lo spazio in cima a demo-live. */
@media (max-width: 768px) {
  .trust-strip,
  .problem,
  .come-funziona,
  .seogeo-explainer,
  .demo-live,
  .solution,
  .chat-ai-section,
  .social-proof,
  .ailab-section,
  .agenzia-section,
  .piani,
  .faq { padding-top: 52px; padding-bottom: 52px; }
  .demo-scan { padding-top: 44px; padding-bottom: 52px; }
  .dl-head { margin-bottom: 28px; }
}
/* trigger */
.dl-trigger {
  max-width: 580px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--cream-soft);
  border: 1.5px solid var(--border);
  border-radius: 14px;
  padding: 14px 14px 14px 22px;
  box-shadow: var(--shadow-sm);
}
.dl-trigger[hidden] { display: none !important; }
.dl-fake-input {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 3px;
  font-family: var(--font-body);
  font-size: 15px;
  overflow: hidden;
  white-space: nowrap;
}
.dl-fake-prefix { color: var(--ink-muted); }
.dl-fake-url    { color: var(--ink); font-weight: 500; }
.dl-run-btn {
  flex-shrink: 0;
  background: var(--primary-fondo);
  color: #fff;
  border: none;
  border-radius: 10px;
  padding: 10px 20px;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.dl-run-btn:hover         { background: var(--primary-deep); transform: translateY(-1px); }
.dl-run-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
/* progress */
.dl-progress {
  max-width: 580px;
  margin: 0 auto;
  padding: 28px 24px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
}
.dl-progress[hidden] { display: none !important; }
.dl-prog-track {
  height: 4px;
  background: var(--border);
  border-radius: 99px;
  overflow: hidden;
  margin-bottom: 22px;
}
.dl-prog-bar {
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, var(--primary-fondo) 0%, var(--terracotta) 100%);
  border-radius: 99px;
  transition: width 0.55s var(--ease);
}
.dl-prog-steps { display: flex; flex-direction: column; gap: 11px; }
.dl-pstep {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 14px;
  color: var(--ink-muted);
  transition: color 0.2s;
}
.dl-pstep::before {
  content: '';
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--border);
  flex-shrink: 0;
  transition: background 0.2s;
}
.dl-pstep.active { color: var(--primary); font-weight: 500; }
.dl-pstep.active::before { background: var(--primary-fondo); }
.dl-pstep.done   { color: var(--success); }
.dl-pstep.done::before   { background: var(--success); }
/* result */
.dl-result { max-width: 640px; margin: 0 auto; }
.dl-result[hidden] { display: none !important; }
.dl-result-top {
  display: flex;
  gap: 36px;
  align-items: center;
  padding: 28px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  margin-bottom: 18px;
}
@media (max-width: 540px) {
  .dl-result-top { flex-direction: column; gap: 20px; }
}
.dl-circle {
  width: 84px;
  height: 84px;
  border-radius: 50%;
  background: conic-gradient(var(--warning) 62%, var(--cream-deep) 0);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  flex-shrink: 0;
}
.dl-circle::before {
  content: '';
  position: absolute;
  inset: 9px;
  border-radius: 50%;
  background: var(--cream-soft);
}
.dl-circle-num {
  position: relative;
  font-family: var(--font-head);
  font-size: 24px;
  font-weight: 900;
  color: var(--ink);
  line-height: 1;
}
.dl-circle-lbl {
  position: relative;
  font-size: 10px;
  color: var(--ink-muted);
  margin-top: 2px;
}
.dl-subscores { flex: 1; display: flex; flex-direction: column; gap: 11px; }
.dl-subscore  { display: flex; align-items: center; gap: 10px; font-size: 13px; }
.dl-sub-lbl   { width: 30px; font-weight: 700; color: var(--ink); flex-shrink: 0; }
.dl-sub-track {
  flex: 1;
  height: 6px;
  background: var(--cream-deep);
  border-radius: 99px;
  overflow: hidden;
}
.dl-sub-fill {
  height: 100%;
  width: 0;
  border-radius: 99px;
  transition: width 0.9s var(--ease);
}
.dl-sub-fill.filled { width: var(--pct); }
.dl-sub-fill.dl-seo { background: var(--primary-fondo); }
.dl-sub-fill.dl-geo { background: var(--warning); }
.dl-sub-val      { width: 24px; text-align: right; font-weight: 700; color: var(--ink); }
.dl-sub-warn     { color: var(--warning); }
.dl-sub-context  { font-size: 11px; color: var(--ink-muted); line-height: 1.4; margin-top: 2px; }
.dl-issues-head { margin-bottom: 12px; }
.dl-issues-head h3 {
  font-family: var(--font-head);
  font-size: 17px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 4px;
}
.dl-issues-head p { font-size: 13px; color: var(--ink-muted); margin: 0; }
.dl-issue {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  padding: 15px 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r);
  margin-bottom: 8px;
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.35s var(--ease), transform 0.35s var(--ease);
}
.dl-issue.visible { opacity: 1; transform: translateY(0); }
.dl-issue-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-top: 5px;
}
.dl-issue-dot.dl-high   { background: var(--danger); }
.dl-issue-dot.dl-medium { background: var(--warning); }
.dl-issue-body         { flex: 1; font-size: 14px; }
.dl-issue-body strong  { color: var(--ink); display: block; margin-bottom: 4px; }
.dl-issue-body p       { margin: 0; color: var(--ink-muted); font-size: 13px; line-height: 1.5; }
.dl-tag {
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 9px;
  border-radius: 99px;
  align-self: flex-start;
}
.dl-tag.dl-tag-high   { background: rgba(161,77,58,.1); color: var(--danger); }
.dl-tag.dl-tag-medium { background: rgba(184,115,46,.1); color: var(--warning); }
.dl-result-cta {
  text-align: center;
  margin-top: 28px;
  padding: 28px 24px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
}
.dl-result-cta p {
  font-size: 16px;
  color: var(--ink-soft);
  margin: 0 0 16px;
}
.dl-cta-btn {
  display: inline-block;
  background: var(--terracotta);
  color: #fff;
  border: none;
  border-radius: 12px;
  padding: 13px 28px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.18s var(--ease), transform 0.15s var(--ease);
}
.dl-cta-btn:hover         { background: var(--terracotta-hover); transform: translateY(-1px); }
.dl-cta-btn:focus-visible { outline: 2px solid var(--terracotta); outline-offset: 3px; }
.dl-cta-note {
  display: block;
  font-size: 12px;
  color: var(--ink-muted);
  margin-top: 10px;
}
/* dark mode overrides */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dl-circle::before {
    background: var(--cream-soft);
  }
}
[data-theme="dark"] .dl-circle::before { background: var(--cream-soft); }
/* reduced motion */
@media (prefers-reduced-motion: reduce) {
  .dl-issue        { transition: none; opacity: 1; transform: none; }
  .dl-sub-fill     { transition: none; }
  .dl-prog-bar     { transition: none; }
}

/* ═══════════════════════════════════════════════════════
   ANIMAZIONI APPLE : scroll-reveal direzionale + stagger
   ═══════════════════════════════════════════════════════ */
:root {
  --ease-spring: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
}
/* Override easing su scroll-reveal esistente */
.scroll-reveal {
  transition:
    opacity  0.65s var(--ease-spring),
    transform 0.65s var(--ease-spring);
}
/* ── Direzioni specifiche per sezioni ──────────────────── */
/* vs-section: card Google da sinistra, ChatGPT da destra */
.vs-ok.scroll-reveal  { transform: translateX(-36px) translateY(12px); }
.vs-bad.scroll-reveal { transform: translateX(36px)  translateY(12px); }
.vs-ok.scroll-reveal.visible,
.vs-bad.scroll-reveal.visible { transform: translateX(0) translateY(0); }
/* audience-split: stagger + direzioni opposte */
.audience-pro.scroll-reveal    { transform: translateX(-28px) translateY(10px); }
.audience-agency.scroll-reveal {
  transform: translateX(28px) translateY(10px);
  transition-delay: 0.12s;
}
.audience-pro.scroll-reveal.visible,
.audience-agency.scroll-reveal.visible { transform: translateX(0) translateY(0); }
/* cf-step: stagger progressivo */
.cf-step.scroll-reveal:nth-child(1) { transition-delay: 0s;    }
.cf-step.scroll-reveal:nth-child(2) { transition-delay: 0.15s; }
.cf-step.scroll-reveal:nth-child(3) { transition-delay: 0.30s; }
/* pd-feature: alterni sinistra/destra + scala leggera */
.pd-feature.scroll-reveal:nth-child(odd) {
  transform: translateX(-28px) scale(0.98);
}
.pd-feature.scroll-reveal:nth-child(even) {
  transform: translateX(28px) scale(0.98);
}
.pd-feature.scroll-reveal.visible {
  transform: translateX(0) scale(1);
}
/* vs-stats: stagger sui div figli */
.vs-stat { transition: opacity 0.5s var(--ease-spring), transform 0.5s var(--ease-spring); }
.vs-stats.scroll-reveal .vs-stat:nth-child(1) { transition-delay: 0s;    }
.vs-stats.scroll-reveal .vs-stat:nth-child(2) { transition-delay: 0.12s; }
.vs-stats.scroll-reveal .vs-stat:nth-child(3) { transition-delay: 0.24s; }
.vs-stats.scroll-reveal:not(.visible) .vs-stat { opacity: 0; transform: translateY(16px); }
.vs-stats.scroll-reveal.visible .vs-stat { opacity: 1; transform: translateY(0); }
/* ag-roi-card: stagger (già parzialmente presente, aggiorna) */
.ag-roi-card.scroll-reveal:nth-child(1) { transition-delay: 0s;    }
.ag-roi-card.scroll-reveal:nth-child(2) { transition-delay: 0.12s; transform: translateY(28px) scale(0.98); }
.ag-roi-card.scroll-reveal:nth-child(3) { transition-delay: 0.24s; }
.ag-roi-card.scroll-reveal.visible { transform: translateY(0) scale(1); }
/* ── Mobile: disabilita translateX per evitare overflow ── */
@media (max-width: 760px) {
  .vs-ok.scroll-reveal,
  .vs-bad.scroll-reveal,
  .audience-pro.scroll-reveal,
  .audience-agency.scroll-reveal,
  .pd-feature.scroll-reveal:nth-child(odd),
  .pd-feature.scroll-reveal:nth-child(even) {
    transform: translateY(20px);
  }
}
/* ── Stato iniziale messaggi Chat AI (per animazione sequenziale) ── */
.pd-feature-dark  .cam-msg,
.ag-product-dark  .cam-msg {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.4s var(--ease-spring), transform 0.4s var(--ease-spring);
}
/* ── Counter: nasconde il testo finché non è pronto ── */
[data-count-up] { display: inline-block; }
/* ── Hero fade on scroll (Proposta E) ── */
.hero-content-wrap {
  transition: opacity 0.1s linear;
  will-change: opacity;
}
@media (prefers-reduced-motion: reduce) {
  .vs-ok.scroll-reveal, .vs-bad.scroll-reveal,
  .audience-pro.scroll-reveal, .audience-agency.scroll-reveal,
  .pd-feature.scroll-reveal:nth-child(odd),
  .pd-feature.scroll-reveal:nth-child(even),
  .cf-step.scroll-reveal,
  .vs-stats.scroll-reveal .vs-stat,
  .ag-roi-card.scroll-reveal,
  .pd-feature-dark .cam-msg,
  .ag-product-dark .cam-msg {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    transition-delay: 0s !important;
  }
  /* hero fade: disabilita la transizione (il JS è già guardato da _reduceMotion) */
  .hero-content-wrap { transition: none !important; }
}

/* ── Mobile nav: hamburger + menu ───────────────────────── */
/* Hamburger button: visibile solo su mobile */
.nav-hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 6px;
  border-radius: 8px;
  transition: background 0.15s var(--ease);
  flex-shrink: 0;
}
.nav-hamburger:hover  { background: var(--cream-soft); }
.nav-hamburger:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.ham-bar {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--ink);
  border-radius: 99px;
  transition: transform 0.25s var(--ease), opacity 0.2s ease, width 0.2s ease;
  transform-origin: center;
}
/* Animazione X quando menu aperto */
body.nav-menu-open .ham-bar:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
body.nav-menu-open .ham-bar:nth-child(2) {
  opacity: 0;
  width: 0;
}
body.nav-menu-open .ham-bar:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}
/* Stessa soglia dei .nav-links (900px): se le due soglie divergono, nella
   fascia in mezzo spariscono i link E l'hamburger, cioe' niente menu. */
@media (max-width: 960px) {
  .nav-hamburger { display: flex; }
  /* Su mobile nasconde i bottoni auth dal nav bar:
     entrano nel menu hamburger */
  #navAuthLoggedOut { display: none !important; }
  /* Il chip utente (loggato) rimane visibile nel nav bar */
}
/* Menu mobile dropdown */
.nav-mobile-menu {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: var(--cream);
  border-bottom: 1px solid var(--border);
  box-shadow: 0 8px 24px rgba(15,15,15,0.1);
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  pointer-events: none;
  transition: max-height 0.3s var(--ease), opacity 0.2s ease;
  z-index: 49;
  display: block; /* sempre nel DOM, controllato da max-height */
}
body.nav-menu-open .nav-mobile-menu {
  /* 2026-07-25, bug segnalato da Riccardo: il pulsante "Accedi" risultava
     TAGLIATO su mobile. Causa: max-height fisso a 480px. Aggiungendo la voce
     "Provalo" il contenuto ha superato quel limite e overflow:hidden lo ha
     mozzato. Un'altezza fissa si rompe a ogni voce nuova, quindi ora si adatta:
     al massimo l'altezza dello schermo meno la navbar, e se serve si scorre.
     100dvh (non 100vh) tiene conto delle barre del browser mobile. */
  max-height: calc(100vh - 64px);
  max-height: calc(100dvh - 64px);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  /* spazio per la barra gesti di iPhone, altrimenti l'ultima voce ci finisce sotto */
  padding-bottom: env(safe-area-inset-bottom, 0px);
  opacity: 1;
  pointer-events: auto;
}
@media (min-width: 961px) {
  /* Su desktop il menu mobile non compare mai */
  .nav-mobile-menu { display: none !important; }
}
.nav-mobile-links {
  display: flex;
  flex-direction: column;
}
.nav-mobile-links a {
  display: block;
  padding: 16px 24px;
  font-family: var(--font-body);
  font-size: 17px;
  font-weight: 500;
  color: var(--ink-soft);
  text-decoration: none;
  border-bottom: 1px solid var(--border);
  transition: background 0.12s, color 0.12s;
}
.nav-mobile-links a:active { background: var(--cream-soft); }
.nav-mobile-links a:hover  { background: var(--cream-soft); color: var(--ink); }
.nav-mobile-agency {
  color: var(--terracotta) !important;
  font-weight: 600 !important;
}
.nav-mobile-cta {
  padding: 20px 24px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.nav-mobile-register {
  width: 100%;
  padding: 14px;
  font-size: 16px;
  border-radius: 12px;
  text-align: center;
}
.nav-mobile-login {
  width: 100%;
  padding: 12px;
  background: none;
  border: 1.5px solid var(--border);
  border-radius: 12px;
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 500;
  color: var(--ink-soft);
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
}
.nav-mobile-login:hover { border-color: var(--primary); color: var(--primary); }
/* Dark mode. NB: .ham-bar usa var(--ink) che si inverte già in chiaro nel tema
   scuro (visibile su navbar scura); NON va forzato a var(--cream) (sarebbe scuro
   su scuro = invisibile). */
[data-theme="dark"] .nav-mobile-menu  { background: var(--cream-soft); }
[data-theme="dark"] .nav-mobile-login { border-color: var(--border); color: rgba(250,250,247,0.6); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav-mobile-menu { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .nav-mobile-login { border-color: var(--border); color: rgba(250,250,247,0.6); }
}
/* ---- Selettore lingua (navbar desktop + menu mobile) ---- */
.nav-lang { position: relative; margin-right: 4px; flex: none; }
.nav-lang-breve { display: none; }

/* ---- Navbar che si misura da sola ----------------------------------------
   Le soglie in pixel non funzionano con quattro lingue: le stesse sei voci
   occupano 508px in inglese e 678px in spagnolo, e con un font leggermente
   diverso cambiano ancora. Scegliere un numero significa sbagliarlo per
   qualcuno. Quindi il JS misura la larghezza naturale delle quattro zone
   (marchio, voci, lingua, bottoni) e mette una di queste classi sul body:

     .nav-lingua-breve  il nome della lingua diventa il codice (IT/EN/ES/FR)
     .nav-compressa     si passa al menu hamburger

   I media query restano sotto come rete per chi ha JavaScript disattivato,
   tarati sulla lingua più larga.
   .nav-misura è lo stato forzato usato solo per leggere le misure: dura un
   frame, non viene mai dipinto. */
body.nav-misura .nav-links { display: flex !important; }
body.nav-misura .nav-lang { display: block !important; }
body.nav-misura .nav-lang-nome { display: inline !important; }
body.nav-misura .nav-lang-breve { display: none !important; }
body.nav-misura #navAuthLoggedOut { display: flex !important; }

body.nav-lingua-breve .nav-lang-nome { display: none; }
body.nav-lingua-breve .nav-lang-breve { display: inline; }

body.nav-compressa .nav-links { display: none; }
body.nav-compressa .nav-lang { display: none !important; }
body.nav-compressa .nav-hamburger { display: flex; }
body.nav-compressa #navAuthLoggedOut { display: none !important; }
body.nav-compressa .nav-mobile-menu { display: block !important; }
.nav-lang-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 13px;
  border-radius: 99px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.15s var(--ease), color 0.15s var(--ease);
}
.nav-lang-btn:hover { border-color: var(--primary); color: var(--ink); }
.nav-lang-chev { flex: none; opacity: 0.55; }
.nav-lang-menu {
  position: absolute;
  right: 0;
  top: calc(100% + 8px);
  min-width: 172px;
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 14px 34px rgba(15,15,15,0.14);
  padding: 6px;
  z-index: 60;
  /* Apertura e chiusura.
     Il menu nasce dall'angolo in alto a destra, cioe' da sotto il bottone che
     lo apre: è da li' che l'occhio lo sta già guardando. Entra in 200ms con
     una curva che decelera (parte deciso, si posa piano) ed esce in 130ms
     lineare: uscire più in fretta di quanto si entra è quello che fa
     sembrare l'interfaccia reattiva invece che lenta.
     Il display resta governato da [hidden], che però non si può animare:
     per questo il JS toglie prima hidden e aggiunge .is-open al frame dopo. */
  transform-origin: top right;
  opacity: 0;
  transform: translateY(-8px) scale(0.97);
  transition: opacity 0.13s linear, transform 0.13s cubic-bezier(0.4, 0, 1, 1);
  will-change: opacity, transform;
}
.nav-lang-menu.is-open {
  opacity: 1;
  transform: translateY(0) scale(1);
  transition: opacity 0.14s linear, transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}
.nav-lang-menu[hidden] { display: none !important; }
.nav-lang-menu a {
  display: block;
  padding: 9px 12px;
  border-radius: 10px;
  color: var(--ink-soft);
  text-decoration: none;
  font-size: 14.5px;
  /* Le voci entrano una dopo l'altra, sfalsate di 35ms: è quel che distingue
     un menu che "si apre" da un blocco che "compare". In chiusura no: uscire
     scaglionati fa sembrare che l'interfaccia esiti. */
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 0.12s linear, transform 0.12s ease-out, background 0.15s var(--ease), color 0.15s var(--ease);
}
.nav-lang-menu.is-open a { opacity: 1; transform: translateY(0); }
.nav-lang-menu.is-open a:nth-child(1) { transition-delay: 0.04s, 0.04s, 0s, 0s; }
.nav-lang-menu.is-open a:nth-child(2) { transition-delay: 0.075s, 0.075s, 0s, 0s; }
.nav-lang-menu.is-open a:nth-child(3) { transition-delay: 0.11s, 0.11s, 0s, 0s; }
.nav-lang-menu.is-open a:nth-child(4) { transition-delay: 0.145s, 0.145s, 0s, 0s; }
/* REGOLA del progetto (README, lezione Fase 2.5.5): l'attributo hidden PERDE
   contro un display esplicito. Qui sopra c’è `display: block` sulle voci,
   quindi senza questa riga la lingua corrente resterebbe visibile nel menu pur
   avendo hidden=true. Ci sono cascato: la mia verifica leggeva l'attributo
   invece del display calcolato, e diceva che era nascosta. */
.nav-lang-menu a[hidden],
.nav-mobile-lang-links a[hidden] { display: none !important; }
.nav-lang-menu a:hover { background: var(--cream-soft); color: var(--ink); }
.nav-lang-menu a:focus-visible { background: var(--cream-soft); color: var(--ink); outline: 2px solid var(--terracotta); outline-offset: -2px; }

/* La freccetta segue l'apertura: se il menu si muove e lei no, sembrano due
   componenti diversi. */
.nav-lang-chev { transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.15s var(--ease); }
.nav-lang-btn[aria-expanded="true"] .nav-lang-chev { transform: rotate(180deg); opacity: 0.9; }
.nav-lang-btn[aria-expanded="true"] { border-color: var(--primary); color: var(--ink); }

/* Chi ha chiesto meno animazioni riceve il menu, non lo spettacolo. */
@media (prefers-reduced-motion: reduce) {
  .nav-lang-menu, .nav-lang-menu a, .nav-lang-chev { transition: none !important; }
  .nav-lang-menu { transform: none; }
  .nav-lang-menu.is-open a { transition-delay: 0s !important; }
}
/* Sopra i 768px il selettore sta nella navbar, sotto sta nel menu hamburger:
   averlo in tutti e due i posti raddoppia il rumore senza aggiungere nulla. */
@media (max-width: 960px) { .nav-lang { display: none !important; } }
body.is-logged-in .nav-lang { display: none; }

.nav-mobile-lang { padding: 14px 24px 4px; }
.nav-mobile-lang-label {
  display: block;
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 8px;
}
.nav-mobile-lang-links { display: flex; flex-wrap: wrap; gap: 8px; }
.nav-mobile-lang-links a {
  padding: 7px 13px;
  border-radius: 99px;
  border: 1px solid var(--border);
  color: var(--ink-soft);
  text-decoration: none;
  font-size: 14px;
  font-weight: 600;
}
[data-theme="dark"] .nav-lang-menu { background: var(--cream-soft); }
[data-theme="dark"] .nav-lang-btn { border-color: var(--border); color: var(--ink-soft); }
[data-theme="dark"] .nav-mobile-lang-links a { border-color: var(--border); color: var(--ink-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav-lang-menu { background: var(--cream-soft); }
  :root:not([data-theme="light"]) .nav-lang-btn { border-color: var(--border); color: var(--ink-soft); }
  :root:not([data-theme="light"]) .nav-mobile-lang-links a { border-color: var(--border); color: var(--ink-soft); }
}

/* ---- Proposta lingua del browser ---- */
/* Una riga, non un popup: chi arriva da Google deve poter leggere la pagina. */
.lang-suggest {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 11px 20px;
  background: var(--cream-soft);
  border-bottom: 1px solid var(--border);
  font-size: 14.5px;
  color: var(--ink-soft);
}
.lang-suggest[hidden] { display: none !important; }
.lang-suggest-txt { flex: 1 1 auto; min-width: 190px; }
.lang-suggest-go {
  flex: none;
  padding: 7px 15px;
  border-radius: 10px;
  background: var(--primary-fondo);
  color: var(--on-dark);
  text-decoration: none;
  font-weight: 600;
  font-size: 14px;
}
.lang-suggest-x {
  flex: none;
  width: 32px;
  height: 32px;
  border: none;
  background: none;
  color: var(--ink-muted);
  cursor: pointer;
  border-radius: 99px;
  position: relative;
}
.lang-suggest-x::before,
.lang-suggest-x::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  width: 13px; height: 1.6px;
  background: currentColor;
  border-radius: 2px;
}
.lang-suggest-x::before { transform: translate(-50%,-50%) rotate(45deg); }
.lang-suggest-x::after  { transform: translate(-50%,-50%) rotate(-45deg); }
[data-theme="dark"] .lang-suggest { background: var(--cream-soft); border-bottom-color: var(--border); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .lang-suggest { background: var(--cream-soft); border-bottom-color: var(--border); }
}

/* Back-to-top: fix iPhone home indicator per utenti anonimi */
@media (max-width: 760px) {
  .scroll-top-btn {
    right: 24px;
    bottom: calc(24px + env(safe-area-inset-bottom, 0px));
  }
  body.is-logged-in .scroll-top-btn {
    right: 24px;
    bottom: calc(80px + env(safe-area-inset-bottom, 0px));
  }
}

/* ---- Banda promo plugin WordPress (tra product-detail e CTA finale) ---- */
.wp-promo-band {
  background: var(--cream-soft);
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  padding: 20px 0;
}
.wp-promo-inner {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.wp-promo-icon { flex-shrink: 0; }
.wp-promo-text {
  flex: 1;
  font-size: 14px;
  color: var(--ink-soft);
  min-width: 200px;
}
.wp-promo-cta { display: flex; gap: 10px; flex-shrink: 0; flex-wrap: wrap; }
.wp-promo-link {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--primary);
  text-decoration: none;
  padding: 6px 14px;
  border: 1.5px solid var(--primary);
  border-radius: 8px;
  white-space: nowrap;
}
.wp-promo-link:hover { background: rgba(26,58,92,0.07); }
.wp-promo-link--primary {
  background: var(--primary-fondo);
  color: var(--on-dark);
  border-color: var(--primary);
}
.wp-promo-link--primary:hover { background: var(--primary-deep); }
[data-theme="dark"] .wp-promo-link--primary { color: var(--cream); }
:root:not([data-theme="light"]) .wp-promo-link--primary { color: var(--cream); }

/* ═══════════ Lead Agent (solo admin) ═══════════ */
.nav-account-dropdown-item[hidden] { display: none !important; }
#leadAgentPanel[hidden] { display: none !important; }
.la-wrap { max-width: 1000px; margin: 0 auto; padding: 28px 24px 72px; }
.la-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 22px; }
.la-title { font-family: var(--font-head); font-size: 30px; font-weight: 900; color: var(--ink); margin: 0; letter-spacing: -0.02em; }
.la-head-actions { display: flex; gap: 10px; }
.la-btn { font-family: var(--font-body); font-weight: 600; font-size: 14px; border-radius: 10px; padding: 10px 16px; cursor: pointer; border: 1.5px solid var(--border); background: var(--surface); color: var(--ink); transition: border-color .15s, background .15s; }
.la-btn:hover { border-color: var(--primary); }
.la-btn-primary { background: var(--primary-fondo); color: var(--on-dark); border-color: var(--primary); }
.la-btn-primary:hover { background: var(--primary-deep); }
.la-btn-danger { color: var(--terracotta); }
.la-btn-danger:hover { border-color: var(--terracotta); }
.la-btn:disabled { opacity: .55; cursor: not-allowed; }
.la-counters { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 22px; }
.la-counter { background: var(--surface); border: 1.5px solid var(--border); border-radius: 14px; padding: 16px; text-align: center; cursor: pointer; transition: border-color .15s; }
.la-counter:hover { border-color: var(--primary); }
.la-counter.active { border-color: var(--primary); }
.la-counter-num { font-family: var(--font-head); font-size: 30px; font-weight: 900; color: var(--primary); line-height: 1; }
.la-counter-label { font-size: 13px; color: var(--ink-muted); margin-top: 4px; }
.la-search { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; background: var(--cream-soft); border: 1px solid var(--border); border-radius: 14px; padding: 16px; margin-bottom: 22px; }
.la-field { display: flex; flex-direction: column; gap: 5px; }
.la-field label { font-size: 12px; font-weight: 600; color: var(--ink-muted); }
.la-field select, .la-field input { font-family: var(--font-body); font-size: 14px; padding: 9px 12px; border: 1.5px solid var(--border); border-radius: 10px; background: var(--surface); color: var(--ink); min-width: 190px; }
.la-list { display: flex; flex-direction: column; gap: 14px; }
.la-lead { background: var(--surface); border: 1px solid var(--border); border-radius: 14px; padding: 18px; }
.la-lead-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.la-lead-name { font-family: var(--font-head); font-weight: 700; font-size: 17px; color: var(--ink); }
.la-lead-site { font-size: 13px; color: var(--primary); text-decoration: underline; text-underline-offset: 2px; word-break: break-all; }
.la-badge { font-size: 11px; font-weight: 700; padding: 3px 9px; border-radius: 99px; white-space: nowrap; }
.la-badge-A { background: rgba(26,58,92,.10); color: var(--primary); }
.la-badge-B { background: rgba(161,77,58,.10); color: var(--terracotta); }
.la-badge-C { background: rgba(94,124,90,.14); color: #46603e; }
.la-lead-problema { font-size: 13px; color: var(--ink-muted); margin: 8px 0; }
.la-lead-msg { font-size: 14px; color: var(--ink-soft); line-height: 1.55; white-space: pre-wrap; background: var(--cream-soft); border-radius: 10px; padding: 12px; margin: 8px 0 12px; }
.la-lead-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.la-lead-actions select { font-size: 13px; padding: 7px 10px; border: 1.5px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--ink); }
.la-state { text-align: center; padding: 48px 16px; color: var(--ink-muted); font-size: 15px; }
.la-error { background: rgba(161,77,58,.08); border: 1px solid var(--terracotta); border-radius: 12px; padding: 14px; color: var(--terracotta); margin-bottom: 16px; font-size: 14px; }
.la-spinner { display: inline-block; width: 18px; height: 18px; border: 2px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.7s linear infinite; vertical-align: middle; margin-right: 8px; }
[data-theme="dark"] .la-badge-C { color: #88b282; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .la-badge-C { color: #88b282; }
}
.la-lead-badges { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.la-lead-meta { font-size: 12px; color: var(--ink-muted); }
.la-badge-followup { background: rgba(184,115,46,.14); color: var(--warning); }
/* Riga "Cerca su LinkedIn": testo 12px, ink al 50%, nessun bordo. */
.la-linkedin { margin-top: 4px; font-size: 12px; color: var(--ink); opacity: .5; display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.la-linkedin-hint { font-weight: 600; }
.la-lk-copy, .la-notes-edit { background: none; border: 0; padding: 2px; cursor: pointer; color: inherit; display: inline-flex; }
.la-lk-copy:hover, .la-notes-edit:hover { color: var(--primary); }
/* Dropdown stato colorato per stato (colori badge corrispondenti). */
.la-status { font-weight: 600; }
.la-status-da_contattare { color: var(--ink-muted); background: rgba(107,103,92,.08); }
.la-status-inviato { color: var(--primary); background: rgba(26,58,92,.08); }
.la-status-followup_inviato { color: var(--warning); background: rgba(184,115,46,.10); }
.la-status-risposto_interessato { color: #46603e; background: rgba(94,124,90,.12); }
.la-status-risposto_non_ora { color: #8a6d1f; background: rgba(201,160,80,.14); }
.la-status-risposto_non_interessato { color: var(--ink-soft); background: rgba(90,90,90,.10); }
.la-status-in_trattativa { color: var(--terracotta); background: rgba(161,77,58,.10); }
.la-status-convertito { color: #2e6b3e; background: rgba(46,107,62,.14); }
/* Follow-up generato inline. */
.la-followup-box { margin-top: 10px; }
.la-followup-text { font-size: 14px; color: var(--ink-soft); line-height: 1.55; white-space: pre-wrap; background: var(--cream-soft); border-radius: 10px; padding: 12px; margin-bottom: 8px; }
/* Note libere. */
.la-notes { margin-top: 10px; }
.la-notes-add { background: none; border: 0; padding: 0; cursor: pointer; color: var(--primary); font-size: 13px; font-family: var(--font-body); text-decoration: underline; }
.la-notes-view { display: flex; align-items: flex-start; gap: 6px; font-size: 13px; color: var(--ink-soft); }
.la-notes-text { white-space: pre-wrap; flex: 1; }
.la-notes-input { width: 100%; box-sizing: border-box; font-family: var(--font-body); font-size: 13px; color: var(--ink); background: var(--cream-soft); border: 1px solid color-mix(in srgb, var(--ink) 20%, transparent); border-radius: 6px; padding: 8px; min-height: 60px; resize: vertical; }
.la-notes-save { margin-top: 6px; }
[data-theme="dark"] .la-status-risposto_interessato { color: #88b282; }
[data-theme="dark"] .la-status-risposto_non_ora { color: #d4b15e; }
[data-theme="dark"] .la-status-convertito { color: #7bbf8a; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .la-status-risposto_interessato { color: #88b282; }
  :root:not([data-theme="light"]) .la-status-risposto_non_ora { color: #d4b15e; }
  :root:not([data-theme="light"]) .la-status-convertito { color: #7bbf8a; }
}
@media (max-width: 640px) {
  .la-field select, .la-field input { min-width: 0; width: 100%; }
  .la-search { flex-direction: column; align-items: stretch; }
  .la-search .la-btn { width: 100%; }
}


    /* ── Barra sezioni della dashboard (blocco 1 del ridisegno) ──────────
       Desktop: barra appiccicata sotto l'intestazione. Telefono: barra in
       basso, dove arriva il pollice. Nessun colore fuori dai token: vale la
       REGOLA CSS-1. Dark mode in doppia forma, come impone la REGOLA CSS-2. */
    /* Dove si ferma la pagina quando salti a una sezione. Deve stare sotto
       TUTTO quello che resta appiccicato in alto, altrimenti il titolo che hai
       chiesto di vedere finisce nascosto proprio dalle barre. Le due altezze
       le misura misuraBarre(); i 12px sono l'aria che separa il titolo dal
       bordo della barra. */
    .dash-ancora, .dash-bersaglio {
      scroll-margin-top: calc(var(--h-nav, 73px) + var(--h-barrasezioni, 49px) + 12px);
    }
    .dash-ancora { display: block; height: 0; }

    .dash-nav {
      display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none;
      border-bottom: 1px solid var(--linea, rgba(26,58,92,.12));
      margin-bottom: 20px; position: sticky; z-index: 20;
      background: var(--cream);
      /* L'intestazione è sticky sopra di noi: questa barra si ferma esattamente
         sotto il suo bordo. L'altezza vera la misura misuraBarre() e la scrive
         in --h-nav, perché dipende da logo, padding e larghezza dello schermo:
         un numero fisso qui si scollava e la barra spariva sotto l'intestazione
         (che ha z-index maggiore). Il valore di riserva serve solo al primo
         frame, prima che il JS misuri. */
      top: var(--h-nav, 73px);
    }
    .dash-nav::-webkit-scrollbar { display: none; }
    .dash-nav-voce {
      display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
      padding: 12px 14px; min-height: 44px; text-decoration: none;
      font-family: var(--font-body); font-size: 14px; font-weight: 600;
      color: var(--ink-muted); border-bottom: 2px solid transparent;
      transition: color .15s ease, border-color .15s ease;
    }
    .dash-nav-voce:hover { color: var(--ink); }
    .dash-nav-voce.is-attiva { color: var(--ink); border-bottom-color: var(--terracotta); }
    .dash-nav-voce:focus-visible { outline: 2px solid var(--terracotta); outline-offset: -2px; border-radius: 10px; }
    .dash-nav-ico { width: 18px; height: 18px; flex: 0 0 auto; }
    /* hidden perde contro un display esplicito: senza questa riga una voce
       nascosta resterebbe visibile (README, lezione Fase 2.5.5). */
    .dash-nav-voce[hidden] { display: none !important; }

    /* Su telefono la barra NON scende in basso: quel posto è già occupato da
       .mobile-bottom-nav (fixed, bottom 0, z-index 9000), la barra del pollice
       con Dashboard, Analizza, AI Lab, Account. Una seconda barra li' sotto
       sarebbe invisibile, e il padding di compensazione si sommerebbe al suo.
       Qui resta una striscia che scorre in orizzontale, sotto l'intestazione. */
    @media (max-width: 760px) {
      .dash-nav {
        position: static; margin-bottom: 16px; padding-bottom: 1px;
        scroll-snap-type: x proximity;
      }
      /* Qui la barra sezioni scorre via con la pagina: sopra il titolo resta
         solo l'intestazione, e l'ancora deve tenerne conto di quella sola. */
      .dash-ancora { scroll-margin-top: calc(var(--h-nav, 61px) + 12px); }
      .dash-nav-voce { padding: 10px 12px; font-size: 13px; gap: 6px; scroll-snap-align: start; }
      .dash-nav-ico { width: 16px; height: 16px; }
    }
    @media (max-width: 380px) { .dash-nav-voce { padding: 10px 10px; font-size: 12.5px; } }
    @media (prefers-reduced-motion: reduce) { .dash-nav-voce { transition: none; } }

    /* Nome del sito sopra l'andamento: senza, non si capisce di chi sono
       i numeri quando i siti sono più di uno. */
    .dash-andamento-sito {
      margin: 0 0 10px; font-family: var(--font-body); font-size: 13px;
      font-weight: 600; color: var(--ink-muted);
    }

    /* Media di settore sul grafico: tratteggiata e in tono muto, è un
       riferimento e non deve competere con le due curve vere. */
    .spk-settore { stroke: var(--ink-muted); stroke-width: 1.5; stroke-dasharray: 6 5; opacity: .55; }
    .spk-settore-val { font-family: var(--font-body); font-size: 10px; font-weight: 600; fill: var(--ink-muted); }

    [data-theme="dark"] .spk-settore { stroke: var(--ink-muted); }
    [data-theme="dark"] .spk-settore-val { fill: var(--ink-muted); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .spk-settore { stroke: var(--ink-muted); }
      :root:not([data-theme="light"]) .spk-settore-val { fill: var(--ink-muted); }
    }

    /* ── Grafico interattivo (dashboard e report) ───────────────────────
       Il punto si legge dove sta il dito o il fuoco, non solo l'ultimo. */
    .spk-hit { fill: transparent; cursor: pointer; }
    .spk-hit:focus-visible { outline: 2px solid var(--terracotta); outline-offset: -2px; }
    /* Nascosto per difetto e mostrato con una classe: [hidden] non si può
       usare qui perché sugli elementi SVG la proprietà .hidden non esiste. */
    .spk-hover { display: none; }
    .spk-hover.is-visibile { display: inline; }
    .spk-guida { stroke: var(--ink-muted); stroke-width: 1; stroke-dasharray: 3 3; opacity: .5; }
    .spk-hover-seo { fill: var(--primary); stroke: var(--cream); stroke-width: 2; }
    .spk-hover-geo { fill: var(--terracotta); stroke: var(--cream); stroke-width: 2; }
    .spk-tip-box { fill: var(--cream-deep, #efece2); stroke: var(--border); stroke-width: 1; }
    .spk-tip text { font-family: var(--font-body); font-size: 10.5px; }
    .spk-tip-data { fill: var(--ink-muted); font-weight: 600; }
    .spk-tip-seo { fill: var(--primary); font-weight: 700; }
    .spk-tip-geo { fill: var(--terracotta); font-weight: 700; }

    [data-theme="dark"] .spk-tip-box { fill: var(--cream-deep); stroke: var(--border); }
    [data-theme="dark"] .spk-hover-seo { stroke: var(--cream); }
    [data-theme="dark"] .spk-hover-geo { stroke: var(--cream); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .spk-tip-box { fill: var(--cream-deep); stroke: var(--border); }
      :root:not([data-theme="light"]) .spk-hover-seo { stroke: var(--cream); }
      :root:not([data-theme="light"]) .spk-hover-geo { stroke: var(--cream); }
    }

    /* ── Prima della scansione (blocco 5) ───────────────────────────────
       Il tempo stimato sotto ogni ambito, e il settore dichiarato prima di
       partire invece che scoperto dopo, leggendo i consigli. */
    .dashboard-scan-scope-tempo {
      display: block; margin-top: 2px;
      font-family: var(--font-body); font-size: 11px; font-weight: 500;
      color: var(--ink-muted); letter-spacing: .01em;
    }
    .dashboard-scan-scope-btn.active .dashboard-scan-scope-tempo { color: var(--ink); }
    .dashboard-scan-settore {
      display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
      margin: 8px 0 0; font-family: var(--font-body); font-size: 12.5px;
      color: var(--ink-muted); line-height: 1.5;
    }
    .dashboard-scan-settore[hidden] { display: none !important; }
    .dashboard-scan-settore strong { color: var(--ink); font-weight: 600; }
    .dashboard-scan-settore-cambia {
      color: var(--terracotta); font-weight: 600; text-decoration: none;
      white-space: nowrap; padding: 2px 0;
    }
    .dashboard-scan-settore-cambia:hover { text-decoration: underline; }

    [data-theme="dark"] .dashboard-scan-scope-btn.active .dashboard-scan-scope-tempo { color: var(--ink); }
    [data-theme="dark"] .dashboard-scan-settore strong { color: var(--ink); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .dashboard-scan-scope-btn.active .dashboard-scan-scope-tempo { color: var(--ink); }
      :root:not([data-theme="light"]) .dashboard-scan-settore strong { color: var(--ink); }
    }

    /* ── Striscia riassuntiva della Home (blocco 2) ──────────────────────
       Quattro tessere, una riga sola su schermo largo, due per riga sul
       telefono. Separazione col solo gap: niente bordo sul contenitore
       oltre a quello delle tessere (REGOLA CSS-3). */
    .dash-riepilogo {
      /* Le tessere sono quattro nel markup ma la quarta (la coda WordPress)
         compare solo a chi ha il plugin collegato. Con quattro colonne fisse
         quella mancante lasciava un buco largo un quarto di dashboard: con
         auto-fit le colonne vuote si chiudono e le tessere presenti si
         spartiscono tutta la riga. */
      display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px;
      margin: 0 0 20px;
    }
    .dash-riepilogo[hidden] { display: none !important; }
    .dash-riep-tessera {
      display: flex; flex-direction: column; gap: 2px;
      padding: 14px 16px; border-radius: 16px;
      border: 1px solid var(--border); background: var(--cream-soft, #f5f3ec);
    }
    .dash-riep-tessera[hidden] { display: none !important; }
    .dash-riep-etichetta {
      font-family: var(--font-body); font-size: 12px; font-weight: 600;
      letter-spacing: .02em; color: var(--ink-muted);
    }
    .dash-riep-numero {
      font-family: var(--font-head); font-size: 30px; font-weight: 900;
      line-height: 1.1; color: var(--ink); font-variant-numeric: tabular-nums;
    }
    .dash-riep-nota { font-family: var(--font-body); font-size: 12px; color: var(--ink-muted); }
    .dash-riep-nota.in-salita { color: var(--success); }
    .dash-riep-nota.in-discesa { color: var(--terracotta); }
    @media (max-width: 760px) {
      .dash-riepilogo { grid-template-columns: 1fr 1fr; gap: 10px; }
      .dash-riep-tessera { padding: 12px 14px; border-radius: 14px; }
      .dash-riep-numero { font-size: 26px; }
    }

    /* Una tessera che apre qualcosa deve sembrare premibile, e le altre no:
       se sono tutte uguali, quella cliccabile non la trova nessuno. */
    button.dash-riep-tessera {
      text-align: left; cursor: pointer; font: inherit; width: 100%;
      transition: border-color .15s ease, transform .15s ease;
    }
    button.dash-riep-tessera:hover { border-color: var(--terracotta); transform: translateY(-1px); }
    button.dash-riep-tessera:focus-visible { outline: 2px solid var(--terracotta); outline-offset: 2px; }
    .dash-riep-apri {
      font-family: var(--font-body); font-size: 12px; font-weight: 600;
      color: var(--terracotta); margin-top: 2px;
    }
    @media (prefers-reduced-motion: reduce) { button.dash-riep-tessera { transition: none; } }

    /* Stato del plugin sulla riga del sito (blocco 4). Il chip riusa
       .trv-chip del design system: qui serve solo lo spazio attorno. */
    .user-sites-wp-chip { margin-left: 8px; vertical-align: middle; }
    @media (max-width: 480px) { .user-sites-wp-chip { margin-left: 0; margin-top: 4px; display: inline-flex; } }

    /* ── Pannello dei contatori (blocco 3) ─────────────────────────────── */
    .dash-pannello-card { max-width: 560px; width: 100%; }
    .dash-pan-lista { list-style: none; margin: 14px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
    .dash-pan-voce {
      display: flex; align-items: center; justify-content: space-between; gap: 12px;
      padding: 12px 14px; border-radius: 12px; min-height: 44px;
      border: 1px solid var(--border); background: var(--cream-soft, #f5f3ec);
      /* Le voci entrano sfalsate: il ritardo lo mette il JS voce per voce. */
      animation: dashPanVoce .22s cubic-bezier(.2, .8, .3, 1) both;
    }
    .dash-pan-nome { font-family: var(--font-body); font-size: 14px; font-weight: 600; color: var(--ink); word-break: break-word; }
    .dash-pan-meta { font-family: var(--font-body); font-size: 12px; color: var(--ink-muted); }
    .dash-pan-conta {
      font-family: var(--font-head); font-size: 18px; font-weight: 900;
      color: var(--ink); font-variant-numeric: tabular-nums; flex: 0 0 auto;
    }
    .dash-pan-vuoto { font-family: var(--font-body); font-size: 14px; color: var(--ink-muted); margin: 14px 0 0; }
    .dash-pannello-azioni[hidden] { display: none !important; }
    @keyframes dashPanVoce { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
    @media (prefers-reduced-motion: reduce) {
      .dash-pan-voce { animation: none; }
    }

    [data-theme="dark"] .dash-pan-voce { background: var(--cream-soft); border-color: var(--border); }
    [data-theme="dark"] .dash-pan-conta { color: var(--ink); }
    [data-theme="dark"] button.dash-riep-tessera:hover { border-color: var(--terracotta); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .dash-pan-voce { background: var(--cream-soft); border-color: var(--border); }
      :root:not([data-theme="light"]) .dash-pan-conta { color: var(--ink); }
      :root:not([data-theme="light"]) button.dash-riep-tessera:hover { border-color: var(--terracotta); }
    }

    [data-theme="dark"] .dash-riep-tessera { background: var(--cream-soft); border-color: var(--border); }
    [data-theme="dark"] .dash-riep-numero { color: var(--ink); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .dash-riep-tessera { background: var(--cream-soft); border-color: var(--border); }
      :root:not([data-theme="light"]) .dash-riep-numero { color: var(--ink); }
    }

    [data-theme="dark"] .dash-nav { background: var(--cream); }
    [data-theme="dark"] .dash-nav-voce.is-attiva { color: var(--ink); border-bottom-color: var(--terracotta); }
    @media (prefers-color-scheme: dark) {
      :root:not([data-theme="light"]) .dash-nav { background: var(--cream); }
      :root:not([data-theme="light"]) .dash-nav-voce.is-attiva { color: var(--ink); border-bottom-color: var(--terracotta); }
    }

