/* 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;
  --surface:      #ffffff;
  --primary:      #1a3a5c;
  --primary-deep: #0f253d;
  /* --primary quando fa il TESTO: in scuro deve schiarirsi più del fondo,
     o resta a 3,98:1 su superficie scura. */
  --primary-testo: #1a3a5c;
  --terracotta:   #a14d3a;
  --success:      #557152;
  --warning:      #b8732e;
  --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 */
    --primary:      #6b7f96;   /* Fase 5.15: era #5b86b8 (aqua washed), ora navy-grigio caldo meno freddo */
    --primary-deep: #82a0c4;
    --primary-testo: #9db4cf;
    --terracotta:   #d68a72;   /* terracotta schiarita */
    --success:      #88b282;
    --warning:      #d99c5e;
    --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:      #6b7f96;
  --primary-deep: #82a0c4;
  --primary-testo: #9db4cf;
  --terracotta:   #d68a72;
  --success:      #88b282;
  --warning:      #d99c5e;
  --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.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) !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) !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);
}
[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);
  }
  :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);
}
[data-theme="dark"] { --surface-deep: #182532; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --surface-deep: #182532; }
}

/* 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);
  }
}
/* Fase 5.20: dev mockup classes, esplicito dark override per coerenza */
[data-theme="dark"] .dev-code-block,
[data-theme="dark"] .dev-params-table,
[data-theme="dark"] .dev-tab,
[data-theme="dark"] .dev-copy-btn {
  background: var(--cream-soft) !important;
  color: var(--ink);
  border-color: var(--border);
}
[data-theme="dark"] .dev-tab.active { color: var(--primary); }
[data-theme="dark"] .dev-params-table thead th { background: var(--cream-deep) !important; }
[data-theme="dark"] .dev-params-table tbody tr:nth-child(odd) td { background: var(--cream) !important; }
[data-theme="dark"] .dev-params-table tbody tr:nth-child(even) td { background: var(--cream-soft) !important; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .dev-code-block,
  :root:not([data-theme="light"]) .dev-params-table,
  :root:not([data-theme="light"]) .dev-tab,
  :root:not([data-theme="light"]) .dev-copy-btn {
    background: var(--cream-soft) !important;
    color: var(--ink);
    border-color: var(--border);
  }
  :root:not([data-theme="light"]) .dev-tab.active { color: var(--primary); }
  :root:not([data-theme="light"]) .dev-params-table thead th { background: var(--cream-deep) !important; }
  :root:not([data-theme="light"]) .dev-params-table tbody tr:nth-child(odd) td { background: var(--cream) !important; }
  :root:not([data-theme="light"]) .dev-params-table tbody tr:nth-child(even) td { background: var(--cream-soft) !important; }
}

/* 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);
  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: #fff;
  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);
  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;
}
.pdf-preview-close:hover { color: var(--ink); background: rgba(15, 37, 61, 0.06); }
.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);
  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; }
.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;
  padding: 4px;
  border-radius: 4px;
  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; }

/* 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);
}

.js-movimento .scroll-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.6s var(--ease), transform 0.6s var(--ease);
}
.js-movimento .scroll-reveal.is-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-testo);
}
.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;
}

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;
}
.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;
  gap: 32px;
}
.nav-links a {
  font-size: 14px;
  font-weight: 500;
  color: var(--ink-soft);
  transition: color 0.15s var(--ease);
}
.nav-links a:hover { color: var(--ink); }
.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); 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"] .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"] .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(--terracotta);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .nav-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"]) .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(--terracotta);
  }
}

/* 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: #fff;
  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: #f1ede3;
  border-color: var(--ink-muted);
}
.admin-test-plan-btn.is-active {
  background: var(--primary);
  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: #eff5ee;
}
.nav-test-mode.active .dot {
  background: var(--success);
  box-shadow: 0 0 0 3px rgba(94, 124, 90, 0.18);
}

@media (max-width: 768px) {
  .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: white;
  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);
  border-color: var(--primary);
  color: var(--on-dark);
}
.onboarding-progress-step.done {
  background: var(--success, #557152);
  border-color: var(--success, #557152);
  color: var(--on-dark);
}
.onboarding-progress-line {
  flex: 0 0 40px;
  height: 2px;
  background: var(--border);
}
.onboarding-step {
  background: white;
  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: white;
  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); 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; }
.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);
  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;
  padding: 100px 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);
}
.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);
  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); 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 {
  display: inline-flex;
  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 {
  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. */
.dashboard-scan-scope-btn[data-locked="true"] {
  opacity: 0.75;
  cursor: pointer;
  background: rgba(161, 77, 58, 0.06);
  border: 1px dashed rgba(161, 77, 58, 0.35);
}
.dashboard-scan-scope-btn[data-locked="true"]:hover {
  opacity: 1;
  background: rgba(161, 77, 58, 0.12);
  border-color: var(--terracotta);
}
.dashboard-scan-scope-lock {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--terracotta);
  text-transform: uppercase;
}
.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: flex;
    flex-direction: column;
    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) !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) !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);
  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); 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), 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, #557152);
  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: #b85a47; 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: 9px;
  background: var(--primary);
  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: #b85a47; 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) */
.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, #557152); }
.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);
  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: 'Inter', sans-serif;
}
.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);
  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);
  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); }

@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;
}
.account-field-readonly .account-readonly-value {
  font-family: 'Inter', sans-serif;
  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;
}

/* 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; }

.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);
}
.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;
  grid-template-columns: repeat(3, 1fr);
  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);
  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); }
.apuc-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.apuc-btn-primary { background: var(--terracotta); }
.apuc-btn-primary:hover { background: var(--primary); }

/* 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;
}
.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, #557152);
  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, #557152);
  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, #557152);
  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); color: #fff; border-color: var(--primary); }

/* 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; }
.legal-panel h1 {
  font-family: var(--font-head);
  font-size: 32px;
  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: 'Inter', sans-serif;
  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);
  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 {
  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; }

/* 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: #b85a47; }

/* 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;
  grid-template-columns: repeat(3, 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, #557152); }
.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); 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; }
.wp-card {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 24px;
}
.wp-card[hidden] { display: none !important; }
.wp-title {
  font-family: var(--font-head);
  font-size: 20px;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 8px;
}
.wp-text { font-size: 14px; line-height: 1.55; color: var(--ink-muted); margin: 0 0 16px; }
.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); 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);
  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; }
.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-head); font-weight: 600; 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, #557152); }
.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); }
.wp-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--primary); 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); }
@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); }
}
.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); } }
@media (max-width: 600px) {
  .wp-card { padding: 18px; }
  .wp-table thead { display: none; }
  .wp-table tbody td { display: block; padding: 6px 0; border-bottom: none; }
  .wp-table tbody tr { display: block; padding: 12px 0; border-bottom: 1px solid var(--border); }
}
/* Dark mode: card e input su superfici scure (entrambe le forme). */
[data-theme="dark"] .wp-card,
[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-card,
  :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);
  }
}

.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: #efece3; }
.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, #557152); }
.agency-wp-ok .agency-wp-ico { background: var(--success, #557152); }
.agency-wp-muted { color: var(--ink-muted); font-size: 12.5px; }
/* 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); color: var(--on-dark, #fafaf7); border: none; border-radius: 8px; 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;
}
.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); 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); 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%; }
  .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; }
}

/* 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: #fff; }
.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); }
.agency-logo-preview {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 120px;
  background: #fff;
  border-radius: var(--r-sm);
}
.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%;
  border: 1px solid var(--border);
  background: #fff;
  color: var(--ink-soft);
  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: var(--terracotta); color: #fff; border-color: var(--terracotta); }
.account-field-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 8px;
}
.account-save-btn {
  background: var(--primary);
  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, #557152);
  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: #b85a47; border-color: #b85a47; }
@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-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: #b85a47; }
.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: white;
  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: 'Inter', monospace;
  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: #f1ede3; }
.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);
  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);
}
.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;
}
.user-sites-score {
  font-family: var(--font-head);
  font-weight: 700;
  font-size: 16px;
  min-width: 56px;
  text-align: center;
  padding: 2px 8px;
  border-radius: 6px;
  background: var(--cream-deep);
}
.user-sites-score.good { color: var(--success); }
.user-sites-score.warn { color: var(--warning); }
.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;
  /* Fase 5.51: larghezza stabile + allineamento a destra così le date e le
     frecce delle varie righe risultano incolonnate (prima erano ragged). */
  min-width: 74px;
  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, #557152);
  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);
  color: var(--on-dark);
  font-family: 'Inter', sans-serif;
  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: 'Inter', sans-serif;
  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); }

/* ═══════════════════════════════════════════════════════════════
   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 e .nav-auth-cta stanno in nav.css, col resto della barra.
   Erano una copia, e in tema scuro vinceva questa. */

/* 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); }
.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;
  background: #efece3;
}
.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. */
/* Regola spostata in nav.css. Qui era una copia, e questa pagina non
   risolve mai l'accesso: nascondeva la barra per sempre. */

@media (max-width: 760px) {
  .nav-user-chip { font-size: 12.5px; padding: 4px 8px; }
  .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) 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; }
}

/* 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);
}

/* Fase 2.5.22: accordion unico "Cosa sono SEO e GEO?" con 2 tab interni.
   Era 2 accordion separati che occupavano troppo spazio above-the-fold. */
.hero-explain-merged {
  margin-top: 18px;
  margin-bottom: 18px;
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
}
.hero-explain-merged summary {
  cursor: pointer;
  padding: 10px 14px;
  font-size: 13.5px;
  color: var(--ink-soft);
  list-style: none;
  position: relative;
  padding-right: 30px;
  transition: color 0.2s var(--ease), background 0.2s var(--ease);
}
.hero-explain-merged summary:hover { color: var(--primary); background: rgba(26, 58, 92, 0.03); }
.hero-explain-merged summary:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: -2px;
  border-radius: 10px;
}
.hero-explain-merged summary::-webkit-details-marker { display: none; }
.hero-explain-merged summary::after {
  content: "›";
  position: absolute;
  right: 14px;
  top: 50%;
  transform: translateY(-50%) rotate(0deg);
  font-size: 18px;
  color: var(--ink-muted);
  transition: transform 0.25s var(--ease);
}
.hero-explain-merged[open] summary::after { transform: translateY(-50%) rotate(90deg); }
.hero-explain-merged summary strong { color: var(--ink); }
.hero-explain-body {
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  /* Fase 2.5.32: padding fisso anche quando chiuso (era 0 → 4/14/14 al toggle,
     non in transition list → scrollHeight misurato dal JS animator era sbagliato
     al primo open, causando un salto/lag visibile. Ora padding stabile, solo
     max-height/opacity animano. */
  padding: 0 14px;
  transition: max-height 0.35s var(--ease), opacity 0.25s var(--ease), padding 0.35s var(--ease);
}
.hero-explain-merged[open] .hero-explain-body {
  max-height: 500px;
  opacity: 1;
  padding: 4px 14px 14px;
}
/* Fase 2.5.32: stesso pattern animator di .audit-type-toggle (indicator mobile
   scorrevole) per coerenza visiva. Era swap statico .active senza animazione. */
.hero-explain-tabs {
  display: inline-flex;
  gap: 2px;
  background: white;
  padding: 3px;
  border-radius: 99px;
  box-shadow: inset 0 0 0 1px var(--border);
  margin-bottom: 10px;
  position: relative;
  isolation: isolate;
}
.hero-explain-tabs::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;
}
.hero-explain-tabs.has-indicator::before { opacity: 1; }
.hero-explain-tabs button {
  background: transparent;
  border: 0;
  color: var(--ink-muted);
  font-family: var(--font-body);
  font-size: 12.5px;
  font-weight: 600;
  padding: 5px 14px;
  border-radius: 99px;
  cursor: pointer;
  position: relative;
  z-index: 1;
  transition: color 0.25s var(--ease);
}
.hero-explain-tabs button:hover { color: var(--ink); }
.hero-explain-tabs.has-indicator button.active { color: var(--on-dark); }
/* Fallback se JS non gira: l'indicator è opacity 0 → uso background sul button */
.hero-explain-tabs:not(.has-indicator) button.active {
  background: var(--ink);
  color: var(--on-dark);
}
.hero-explain-tabs button:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.hero-explain-pane p {
  margin: 0;
  font-size: 13.5px;
  color: var(--ink-soft);
  line-height: 1.55;
}

/* 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); }
}
.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);
}
.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);
  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);
  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);
  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); 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;
}

/* 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: #fff;
  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 */
  .demo-scan-viewtoggle { width: 100%; justify-content: center; flex-wrap: wrap; }
  .demo-scan-lang-row { flex-direction: column; align-items: flex-start; }
  .demo-scan-lang-toggle { align-self: stretch; justify-content: 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);
}

/* 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);
}
.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: 80px; }
@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: 30px;
  line-height: 1.15;
  margin-bottom: 16px;
}
.solution-text p {
  font-size: 16px;
  color: var(--ink-soft);
  margin-bottom: 16px;
}
.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);
}
.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 {
  /* --surface-deep, come in app.css: --primary-deep in scuro diventa azzurro
     pallido (#82a0c4) e col testo chiaro la card del piano CONSIGLIATO stava a
     2.58 su 4.5. Questa pagina ha una COPIA del CSS inline, quindi la stessa
     regola vive in due posti: corretto app.css il 03/08, questa era rimasta e
     /wordpress continuava a mostrare la card sbagliata. */
  background: var(--surface-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, #557152);
  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;
  background: var(--cream-soft);
  color: var(--ink);
  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);
}
.plan-cta:hover { background: var(--cream-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: #b85a47;
}
.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); }
.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, dà 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: #b85a47; 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-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-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;
}

/* ═══════════════════════ Fase 5.17: PAGINA /developers ═══════════════════════ */
.developers-panel {
  display: none;
  padding: 60px 0 80px;
  background: var(--cream);
}
.developers-panel.show { display: block; }
.developers-head {
  text-align: center;
  max-width: 760px;
  margin: 0 auto 40px;
  padding: 0 20px;
}
.developers-head h1 {
  font-family: var(--font-head);
  font-size: clamp(32px, 5vw, 48px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 16px;
  letter-spacing: -0.02em;
}
.developers-head p {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.6;
  color: var(--ink-soft);
  margin: 0;
}
.developers-banner {
  max-width: 800px;
  margin: 0 auto 40px;
  padding: 16px 20px;
  background: rgba(161, 77, 58, 0.08);
  border: 1px solid rgba(161, 77, 58, 0.25);
  border-left: 3px solid var(--terracotta);
  border-radius: 8px;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--ink-soft);
}
.developers-banner a { color: var(--terracotta); font-weight: 600; }
.developers-section {
  max-width: 800px;
  margin: 0 auto 36px;
  padding: 0 20px;
}
.developers-section h2 {
  font-family: var(--font-head);
  font-size: clamp(22px, 3vw, 28px);
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 12px;
}
.developers-section h3 {
  font-family: var(--font-head);
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  margin: 24px 0 8px;
}
.developers-section p {
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.6;
  color: var(--ink-soft);
  margin: 0 0 12px;
}
.developers-endpoint {
  background: var(--cream-soft);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 18px 20px;
  margin-bottom: 20px;
}
.developers-endpoint-method {
  display: inline-block;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 12px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 4px;
  margin-right: 8px;
  text-transform: uppercase;
}
.developers-endpoint-method.get  { background: rgba(94, 124, 90, 0.18); color: var(--success); }
.developers-endpoint-method.post { background: rgba(184, 115, 46, 0.18); color: var(--warning); }
.developers-endpoint-method.del  { background: rgba(161, 77, 58, 0.18); color: var(--danger); }
.developers-endpoint-url {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 14px;
  color: var(--ink);
  font-weight: 600;
}
.developers-endpoint-desc {
  margin: 10px 0 6px !important;
  font-size: 14px !important;
}
.developers-code {
  background: var(--cream);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 14px;
  margin: 8px 0;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 12.5px;
  color: var(--ink);
  white-space: pre;
  overflow-x: auto;
  line-height: 1.5;
}
.developers-label {
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ink-muted);
  margin: 10px 0 4px;
}
[data-theme="dark"] .developers-code { background: var(--cream-soft); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .developers-code { background: var(--cream-soft); }
}

/* ═══════════════════════ Fase 5.20: dev tabs mockup ═══════════════════════ */
.dev-tabs-wrap { margin-top: 18px; }
.dev-tabs {
  display: flex;
  gap: 4px;
  border-bottom: 1px solid var(--border);
  overflow-x: auto;
  white-space: nowrap;
  scrollbar-width: none;
  margin-bottom: 22px;
}
.dev-tabs::-webkit-scrollbar { display: none; }
.dev-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);
  cursor: pointer;
  transition: color 0.15s var(--ease), border-color 0.15s var(--ease);
  white-space: nowrap;
}
.dev-tab:hover { color: var(--ink-soft); }
.dev-tab.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
  font-weight: 600;
}
.dev-tab-badge {
  display: inline-block;
  background: var(--cream-soft);
  color: var(--primary);
  font-size: 10px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 4px;
  margin-left: 6px;
  vertical-align: 1px;
}
.dev-tab-panel[hidden] { display: none !important; }

.dev-endpoint-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.dev-method-badge {
  display: inline-block;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 11.5px;
  font-weight: 700;
  padding: 4px 9px;
  border-radius: 4px;
  letter-spacing: 0.04em;
  background: var(--cream-soft);
  border: 1px solid var(--border);
}
.dev-method-badge.get  { color: var(--success); }
.dev-method-badge.post { color: var(--primary); }
.dev-endpoint-path {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 15px;
  color: var(--ink);
  font-weight: 600;
}
.dev-endpoint-desc {
  font-size: 14px !important;
  color: var(--ink-soft) !important;
  margin: 6px 0 16px !important;
  line-height: 1.55;
}
.dev-label {
  font-family: var(--font-body);
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-muted);
  margin: 16px 0 6px;
}

/* Code blocks */
.dev-code-wrap { position: relative; }
.dev-code-block {
  background: var(--cream-soft);
  color: var(--ink);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px;
  margin: 0;
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 12.5px;
  line-height: 1.55;
  overflow-x: auto;
  white-space: pre;
}
.dev-code-block code { font: inherit; color: inherit; background: none; padding: 0; }

/* Copy button */
.dev-copy-btn {
  position: absolute;
  top: 10px;
  right: 10px;
  background: var(--cream-deep);
  color: var(--ink-soft);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 4px 10px;
  font-family: var(--font-body);
  font-size: 11.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s var(--ease), color 0.15s var(--ease);
  z-index: 2;
}
.dev-copy-btn:hover { background: var(--cream-soft); color: var(--ink); }
.dev-copy-btn.is-copied { color: var(--success); }

/* Syntax highlighting JSON inline */
.j-k { color: var(--primary); font-weight: 600; }       /* keys */
.j-s { color: var(--terracotta); }                       /* string values */
.j-n { color: var(--success); }                          /* numbers */
.j-b { color: var(--warning); font-weight: 600; }        /* booleans */
.j-p { color: var(--ink-muted); }                        /* punctuation */

/* Params table */
.dev-params-table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-body);
  font-size: 13.5px;
  margin: 6px 0 4px;
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
}
.dev-params-table thead th {
  background: var(--cream-deep);
  color: var(--ink);
  text-align: left;
  font-weight: 700;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
}
.dev-params-table tbody tr:nth-child(odd) td { background: var(--cream); }
.dev-params-table tbody tr:nth-child(even) td { background: var(--cream-soft); }
.dev-params-table tbody td {
  padding: 12px 14px;
  vertical-align: top;
  color: var(--ink-soft);
  border-top: 1px solid var(--border);
}
.dev-params-table tbody td:first-child { font-family: ui-monospace, "SF Mono", Menlo, monospace; color: var(--ink); white-space: nowrap; }
.dev-params-table code {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  background: var(--cream-deep);
  padding: 1px 6px;
  border-radius: 4px;
  font-size: 12.5px;
  color: var(--ink);
}
.dev-type {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  color: var(--ink-muted);
  font-size: 12.5px;
}
.dev-required-badge {
  display: inline-block;
  background: var(--cream-soft);
  color: var(--terracotta);
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  padding: 1px 7px;
  border-radius: 4px;
  margin-left: 4px;
  vertical-align: 1px;
}

@media (max-width: 540px) {
  .dev-tab { padding: 10px 14px; font-size: 13px; }
  .dev-code-block { font-size: 11.5px; padding: 12px; }
  .dev-params-table { font-size: 12.5px; }
  .dev-params-table thead th, .dev-params-table tbody td { padding: 8px 10px; }
}

/* ═══════════════════════ 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 */
.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 {
  /* Stessa regola di app.css: questo file ne tiene una copia, e correggerne
     una sola lascia il difetto vivo su questa pagina. */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  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: 2px; }
.footer-list a {
  color: var(--ink-soft);
  text-decoration: none;
  font-size: 13.5px;
  transition: color 0.15s var(--ease);
  /* Erano righe alte 16px: col dito non si prendono. 44 di altezza, e lo
     spazio fra le voci scende da 8 a 2 perché adesso lo fa il bersaglio. */
  display: inline-flex; align-items: center; min-height: 44px;
}
.footer-list a:hover { color: var(--terracotta); }
.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-testo) !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); }
}
.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;
  opacity: 0;
  transition: opacity 0.2s var(--ease);
}
button.sub-clickable:hover .sub-cta,
button.sub-clickable:focus-visible .sub-cta {
  opacity: 1;
  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);
}
.issues-group-icon.geo {
  background: var(--terracotta);
}
.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;
  background: white;
}

.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;
  background: white;
  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);
  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); 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, #557152); border: 1px solid var(--success, #557152); }
.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); }
[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); 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, #557152); 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;
  margin-bottom: 6px;
}
.ai-wizard-step .wz-recap-row.skipped {
  opacity: 0.65;
}
.ai-wizard-step .wz-recap-info {
  flex: 1;
  min-width: 0;
}
.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);
  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, #557152); }
.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; }
@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); }
}

/* 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);
  font-size: 20px;
  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);
}
.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);
  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, #557152);
  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); 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); }
.compare-plan-current {
  margin-top: 6px;
  text-align: center;
  font-size: 12px;
  font-weight: 700;
  color: var(--success, #557152);
  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 {
  background: #efece3;
  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);
  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);
  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). */
  .scroll-top-btn { width: 40px; height: 40px; right: 76px; }
  body.is-logged-in .scroll-top-btn { bottom: 80px; }
}
@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: 160px; }
  /* 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. */
  body.is-logged-in .floating-help-btn { bottom: 80px; right: 24px; left: auto; }
}

/* 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);
  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);
  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 {
  max-width: 520px;
  padding: 32px 28px 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);
  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;
  gap: 8px;
  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);
  background: #fff;
}
.guide-help-index-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: 10px;
  background: var(--primary);
  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: #fff;
  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: #fff;
  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); color: #fff; }
.gh-mock-priority-card {
  display: flex;
  align-items: center;
  gap: 10px;
  background: #fff;
  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); }
.gh-mock-ai-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: linear-gradient(135deg, var(--primary), #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);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.gh-mock-chat-ai {
  align-self: flex-start;
  background: #fff;
  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, #557152); }
.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);
  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);
  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); }
.post-audit-cta-soft-close {
  background: transparent;
  border: none;
  color: var(--ink-muted);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  padding: 0 4px;
  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;
}

@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), 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);
}

@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 {
  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: white;
  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: white;
  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);
  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;
  background: #fdf6e8;
  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);
  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);
}
.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: 72px; 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);
  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);
  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: #b85a47; }
.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;
}
