/**
 * NIS2 Agile - Contextual Help System
 *
 * Sistema di guida contestuale per pagina.
 * - Rileva automaticamente la pagina corrente dall'URL
 * - Mostra help contestuale tramite showModal()
 * - Inietta un pulsante "?" nell'header della pagina
 * - Fornisce tooltip inline riutilizzabili
 */

const HelpSystem = (function () {
    'use strict';

    // ── Icona SVG del punto interrogativo ────────────────────────────
    var HELP_ICON = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>';

    var HELP_ICON_SMALL = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>';

    // ── Contenuti di help per ogni pagina (in italiano) ──────────────

    var _helpContent = {

        // ─── Dashboard ───────────────────────────────────────────────
        'dashboard': {
            title: 'Guida - Dashboard',
            intro: 'La Dashboard fornisce una panoramica in tempo reale dello stato di conformita\' NIS2 della tua organizzazione. Da qui puoi monitorare i principali indicatori, le attivita\' recenti e le scadenze imminenti.',
            sections: [
                {
                    heading: 'Punteggio di Compliance',
                    items: [
                        'Il <strong>gauge circolare</strong> mostra il punteggio complessivo di conformita\' NIS2 (0-100%), calcolato sulla base dell\'ultimo assessment completato.',
                        'I colori indicano il livello: <span style="color:var(--danger)">rosso</span> (critico, &lt;20%), <span style="color:#f97316">arancione</span> (basso, 20-39%), <span style="color:var(--warning)">giallo</span> (medio, 40-59%), <span style="color:#84cc16">verde chiaro</span> (buono, 60-79%), <span style="color:var(--secondary)">verde</span> (eccellente, &ge;80%).',
                        'Il punteggio si aggiorna automaticamente ad ogni nuovo assessment.'
                    ]
                },
                {
                    heading: 'Statistiche Principali',
                    items: [
                        '<strong>Rischi Aperti</strong> - numero di rischi attivi nel registro dei rischi.',
                        '<strong>Incidenti Attivi</strong> - incidenti di sicurezza attualmente in gestione.',
                        '<strong>Scadenze Superate</strong> - attivita\' o task il cui termine e\' gia\' passato.',
                        'Clicca su ciascuna card per accedere direttamente alla sezione corrispondente.'
                    ]
                },
                {
                    heading: 'Attivita\' Recente e Scadenze',
                    items: [
                        'Il <strong>feed Attivita\' Recente</strong> mostra le ultime operazioni effettuate sulla piattaforma (assessment, rischi, incidenti, policy).',
                        'Le <strong>Prossime Scadenze</strong> elencano i task e le attivita\' in scadenza, evidenziando in rosso quelle urgenti.',
                        'La <strong>Mappa Rischi</strong> visualizza la distribuzione dei rischi per livello di gravita\'.'
                    ]
                },
                {
                    heading: 'Azioni Rapide',
                    items: [
                        'Utilizza le <strong>Azioni Rapide</strong> per avviare operazioni comuni senza navigare nel menu.',
                        'La funzione <strong>Genera Policy con AI</strong> permette di creare bozze di policy conformi NIS2 tramite intelligenza artificiale.',
                        'Puoi avviare un nuovo assessment, registrare un incidente o aggiungere un rischio con un solo clic.'
                    ]
                }
            ],
            references: [
                'Direttiva (UE) 2022/2555 (NIS2) - Considerando generale sulla gestione del rischio',
                'Art. 21 - Misure di gestione dei rischi di cibersicurezza',
                'Art. 23 - Obblighi di segnalazione'
            ]
        },

        // ─── Assessment / Gap Analysis ───────────────────────────────
        'assessment': {
            title: 'Guida - Gap Analysis NIS2',
            intro: 'La Gap Analysis NIS2 ti permette di valutare il livello di conformita\' della tua organizzazione rispetto ai requisiti dell\'Art. 21 della Direttiva NIS2. Il wizard guida l\'utente attraverso 10 categorie di misure di sicurezza.',
            sections: [
                {
                    heading: 'Wizard di Assessment',
                    items: [
                        'L\'assessment e\' strutturato in <strong>10 categorie</strong> derivate dall\'Art. 21.2 della Direttiva NIS2.',
                        'Ogni categoria contiene domande specifiche sulle misure di sicurezza implementate.',
                        'Puoi compilare l\'assessment in piu\' sessioni: il progresso viene salvato automaticamente.',
                        'Utilizza la barra di avanzamento in alto per monitorare il completamento.'
                    ]
                },
                {
                    heading: 'Sistema di Valutazione',
                    items: [
                        '<strong>Non Implementato</strong> (0%) - la misura non e\' presente.',
                        '<strong>Parzialmente Implementato</strong> (50%) - la misura e\' presente ma incompleta o non formalizzata.',
                        '<strong>Implementato</strong> (100%) - la misura e\' completamente implementata e documentata.',
                        '<strong>Non Applicabile</strong> - la misura non si applica al contesto dell\'organizzazione.'
                    ]
                },
                {
                    heading: 'Analisi AI',
                    items: [
                        'Al completamento dell\'assessment, puoi richiedere un\'<strong>analisi basata su AI</strong> dei risultati.',
                        'L\'AI identifica le aree critiche, suggerisce priorita\' di intervento e fornisce raccomandazioni specifiche.',
                        'L\'analisi tiene conto del settore e della classificazione NIS2 dell\'organizzazione.'
                    ]
                },
                {
                    heading: 'Generazione Non Conformita\' (NCR)',
                    items: [
                        'Dalla pagina dei risultati, puoi <strong>generare automaticamente NCR</strong> (Non Conformity Reports) dai gap individuati.',
                        'Ogni NCR viene creata con priorita\', descrizione e suggerimenti di rimedio.',
                        'Le NCR generate possono essere esportate o collegate al registro dei rischi.'
                    ]
                }
            ],
            references: [
                'Art. 21.1 - Obbligo di adottare misure tecniche, operative e organizzative adeguate e proporzionate',
                'Art. 21.2 (a-j) - Le 10 categorie di misure di sicurezza minime',
                'Art. 21.3 - Valutazione della proporzionalita\' delle misure',
                'Art. 21.4 - Conformita\' con norme europee e internazionali'
            ]
        },

        // ─── Risk Management ─────────────────────────────────────────
        'risks': {
            title: 'Guida - Gestione Rischi',
            intro: 'Il modulo di Gestione Rischi consente di identificare, valutare e trattare i rischi di sicurezza informatica in conformita\' con l\'Art. 21 della Direttiva NIS2. Include una matrice di rischio interattiva e strumenti per il monitoraggio continuo.',
            sections: [
                {
                    heading: 'Matrice di Rischio',
                    items: [
                        'La <strong>matrice Probabilita\' x Impatto</strong> (5x5) classifica automaticamente i rischi in base alla loro gravita\'.',
                        'I livelli di probabilita\' vanno da <em>Molto Bassa</em> a <em>Molto Alta</em>.',
                        'I livelli di impatto vanno da <em>Trascurabile</em> a <em>Critico</em>.',
                        'Il punteggio di rischio risultante determina il colore e la priorita\' del rischio.'
                    ]
                },
                {
                    heading: 'Livelli di Gravita\'',
                    items: [
                        '<span style="color:var(--secondary)"><strong>Basso</strong></span> - rischio accettabile, monitoraggio periodico.',
                        '<span style="color:var(--warning)"><strong>Medio</strong></span> - richiede attenzione, pianificare azioni di mitigazione.',
                        '<span style="color:#f97316"><strong>Alto</strong></span> - richiede intervento prioritario.',
                        '<span style="color:var(--danger)"><strong>Critico</strong></span> - richiede intervento immediato, escalation al management.'
                    ]
                },
                {
                    heading: 'Opzioni di Trattamento',
                    items: [
                        '<strong>Mitigare</strong> - implementare controlli per ridurre probabilita\' o impatto.',
                        '<strong>Accettare</strong> - accettare consapevolmente il rischio (documentando la decisione).',
                        '<strong>Trasferire</strong> - trasferire il rischio a terzi (es. assicurazione, outsourcing).',
                        '<strong>Evitare</strong> - eliminare l\'attivita\' o la condizione che genera il rischio.'
                    ]
                },
                {
                    heading: 'Registro e Monitoraggio',
                    items: [
                        'Ogni rischio registrato include: descrizione, categoria, asset coinvolti, owner e piano di trattamento.',
                        'Lo stato di ogni rischio e\' tracciato nel tempo con lo storico delle modifiche.',
                        'I rischi possono essere collegati ad asset, incidenti e controlli di compliance.',
                        'La <strong>Matrice Rischi</strong> si aggiorna in tempo reale: eliminando un rischio dalla vista dettaglio, la matrice si ricalcola automaticamente senza richiedere un refresh manuale.'
                    ]
                },
                {
                    heading: 'Analisi Quantitativa FAIR (vista "Quantitativo")',
                    items: [
                        'Affianca alla matrice qualitativa la stima economica della <strong>Perdita Annua Attesa (ALE)</strong> in EUR.',
                        'Inserisci la frequenza eventi minaccia (TEF min/probabile/max), la vulnerabilita\' (0-1) e la magnitudo di perdita (min/probabile/max).',
                        'Il motore esegue una simulazione <strong>Monte Carlo</strong> e restituisce i percentili P10/P50/P90 + l\'istogramma della distribuzione delle perdite.',
                        'Il <strong>Registro Quantitativo</strong> aggrega l\'ALE di portafoglio per prioritizzare gli investimenti di sicurezza sul ritorno economico.'
                    ]
                },
                {
                    heading: 'Key Risk Indicators - KRI (vista "KRI")',
                    items: [
                        'Definisci indicatori misurabili (es. % endpoint senza MFA, n. vulnerabilita\' critiche aperte) con soglie di warning e critica.',
                        'Lo stato semaforo (<strong>verde/ambra/rosso</strong>) e\' calcolato automaticamente confrontando il valore corrente con le soglie e la direzione (valori alti o bassi = peggio).',
                        'La dashboard KRI offre alla Direzione una vista sintetica dell\'esposizione al rischio in tempo reale.'
                    ]
                }
            ],
            references: [
                'Art. 21.1 - Approccio basato sulla valutazione dei rischi (risk-based approach)',
                'FAIR (Factor Analysis of Information Risk) - The Open Group, standard O-RA per il rischio quantitativo',
                'Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
                'Art. 21.2 (f) - Politiche e procedure per valutare l\'efficacia delle misure',
                'Considerando 79 - Proporzionalita\' delle misure rispetto ai rischi'
            ]
        },

        // ─── Incident Management ─────────────────────────────────────
        'incidents': {
            title: 'Guida - Gestione Incidenti',
            intro: 'Il modulo di Gestione Incidenti supporta l\'intero ciclo di vita degli incidenti di sicurezza, dalla rilevazione alla chiusura, nel rispetto dei tempi di notifica previsti dall\'Art. 23 della Direttiva NIS2.',
            sections: [
                {
                    heading: 'Timeline di Notifica NIS2',
                    items: [
                        '<strong>Early Warning (24 ore)</strong> - preallarme al CSIRT/autorita\' competente entro 24 ore dalla conoscenza dell\'incidente significativo.',
                        '<strong>Notifica (72 ore)</strong> - notifica completa entro 72 ore con valutazione iniziale, gravita\', impatto e indicatori di compromissione.',
                        '<strong>Report Finale (30 giorni)</strong> - relazione finale dettagliata entro un mese dalla notifica, con descrizione, causa, misure adottate e impatto transfrontaliero.',
                        'La piattaforma traccia automaticamente le scadenze e invia promemoria per ciascuna fase.'
                    ]
                },
                {
                    heading: 'Livelli di Gravita\'',
                    items: [
                        '<strong>Bassa</strong> - impatto limitato, nessuna interruzione di servizio significativa.',
                        '<strong>Media</strong> - impatto moderato su operazioni o dati, richiede intervento pianificato.',
                        '<strong>Alta</strong> - impatto significativo su servizi essenziali o dati sensibili.',
                        '<strong>Critica</strong> - interruzione grave di servizi essenziali, compromissione massiva di dati, impatto transfrontaliero.'
                    ]
                },
                {
                    heading: 'Ciclo di Vita dell\'Incidente',
                    items: [
                        '<strong>Rilevazione</strong> - identificazione e registrazione iniziale dell\'incidente.',
                        '<strong>Analisi</strong> - valutazione di gravita\', impatto e perimetro.',
                        '<strong>Contenimento</strong> - azioni immediate per limitare il danno.',
                        '<strong>Risoluzione</strong> - eliminazione della causa e ripristino dei servizi.',
                        '<strong>Chiusura</strong> - documentazione delle lezioni apprese e miglioramenti.'
                    ]
                },
                {
                    heading: 'Funzionalita\' Avanzate',
                    items: [
                        'Collegamento automatico con il registro dei rischi e gli asset coinvolti.',
                        'Timeline visuale con tutti gli aggiornamenti e le comunicazioni.',
                        'Esportazione del report per la notifica alle autorita\' competenti.'
                    ]
                }
            ],
            references: [
                'Direttiva (UE) 2022/2555 - Art. 23.1 - Obbligo di notifica degli incidenti significativi',
                'Direttiva (UE) 2022/2555 - Art. 23.4 (a) - Early warning entro 24 ore',
                'Direttiva (UE) 2022/2555 - Art. 23.4 (b) - Notifica entro 72 ore',
                'Direttiva (UE) 2022/2555 - Art. 23.4 (d) - Relazione finale entro un mese',
                'D.Lgs. 4 settembre 2024, n. 138 - Art. 23 - Notifica degli incidenti (recepimento NIS2)',
                'Determinazione ACN n. 164179 del 14/04/2025 - Classificazione incidenti significativi (Allegato 3 soggetti essenziali, Allegato 4 soggetti importanti) e tipologie IS-1/IS-2/IS-3/IS-4',
                'Determinazione ACN n. 333017/2025 - Piattaforma digitale ACN per le notifiche'
            ]
        },

        // ─── Policy Management ───────────────────────────────────────
        'policies': {
            title: 'Guida - Gestione Policy',
            intro: 'Il modulo di Gestione Policy consente di creare, gestire e mantenere aggiornate le policy di sicurezza informatica richieste dalla Direttiva NIS2. Include un generatore di policy basato su intelligenza artificiale.',
            sections: [
                {
                    heading: 'Ciclo di Vita delle Policy',
                    items: [
                        '<strong>Bozza</strong> - la policy e\' in fase di stesura, modificabile liberamente.',
                        '<strong>In Revisione</strong> - la policy e\' stata sottoposta a revisione da parte dei responsabili.',
                        '<strong>Approvata</strong> - la policy e\' stata approvata dal management.',
                        '<strong>Pubblicata</strong> - la policy e\' attiva e comunicata a tutto il personale.'
                    ]
                },
                {
                    heading: 'Generazione con AI',
                    items: [
                        'La funzione <strong>Genera con AI</strong> crea automaticamente bozze di policy conformi NIS2.',
                        'L\'AI utilizza il contesto della tua organizzazione (settore, dimensione, classificazione) per personalizzare il contenuto.',
                        'Le policy generate includono: obiettivo, ambito di applicazione, responsabilita\', procedure e riferimenti normativi.',
                        'Le bozze AI sono contrassegnate da un <strong>banner arancione di avviso</strong> che ricorda l\'obbligo di revisione prima dell\'approvazione. Il banner puo\' essere chiuso premendo la X.'
                    ]
                },
                {
                    heading: 'Framework di Compliance NIS2',
                    items: [
                        'Ogni policy e\' collegata a una o piu\' categorie dell\'Art. 21.2 della Direttiva NIS2.',
                        'Il sistema tiene traccia della copertura delle policy rispetto ai requisiti normativi.',
                        'Le policy scadute o non aggiornate vengono evidenziate automaticamente.'
                    ]
                },
                {
                    heading: 'Gestione Versioni',
                    items: [
                        'Ogni modifica crea una nuova versione della policy con data e autore.',
                        'E\' possibile confrontare versioni e ripristinare versioni precedenti.',
                        'Lo storico completo e\' disponibile per finalita\' di audit.'
                    ]
                }
            ],
            references: [
                'Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
                'Art. 21.2 (e) - Sicurezza nell\'acquisizione, sviluppo e manutenzione dei sistemi',
                'Art. 21.2 (j) - Uso di crittografia e cifratura',
                'Art. 20 - Governance - Responsabilita\' degli organi di gestione'
            ]
        },

        // ─── Supply Chain Security ───────────────────────────────────
        'supply-chain': {
            title: 'Guida - Sicurezza Supply Chain',
            intro: 'Il modulo di Sicurezza della Supply Chain consente di gestire e valutare i rischi legati a fornitori e terze parti, in conformita\' con l\'Art. 21.2 (d) della Direttiva NIS2.',
            sections: [
                {
                    heading: 'Registro Fornitori',
                    items: [
                        'Il <strong>registro fornitori</strong> centralizza tutte le informazioni sui fornitori critici.',
                        'Per ogni fornitore sono registrati: servizi forniti, dati di contatto, contratti attivi e livello di criticita\'.',
                        'I fornitori possono essere classificati per tipologia (ICT, servizi, consulenza, etc.).'
                    ]
                },
                {
                    heading: 'Valutazione del Rischio Fornitore',
                    items: [
                        'Ogni fornitore puo\' essere sottoposto a una <strong>valutazione del rischio</strong> strutturata.',
                        'La valutazione copre: sicurezza informatica, continuita\' operativa, conformita\' normativa e dipendenza.',
                        'Il <strong>punteggio di rischio</strong> viene calcolato automaticamente sulla base delle risposte.',
                        'I fornitori ad alto rischio vengono evidenziati per un monitoraggio rafforzato.'
                    ]
                },
                {
                    heading: 'Monitoraggio Continuo',
                    items: [
                        'La piattaforma traccia scadenze contrattuali e revisioni periodiche.',
                        'Le variazioni di rischio vengono segnalate automaticamente.',
                        'E\' possibile associare requisiti di sicurezza specifici a ciascun contratto.'
                    ]
                },
                {
                    heading: 'Panoramica Rischi',
                    items: [
                        'La <strong>Panoramica Rischi</strong> mostra la distribuzione dei fornitori per livello di rischio.',
                        'Statistiche aggregate su: numero di fornitori, valutazioni scadute, fornitori ad alto rischio.',
                        'Esportazione dei dati per reporting e audit.'
                    ]
                }
            ],
            references: [
                'Art. 21.2 (d) - Sicurezza della catena di approvvigionamento',
                'Art. 21.3 - Valutazione dei rischi specifici per ciascun fornitore diretto',
                'Considerando 85 - Qualita\' e resilienza dei prodotti e servizi ICT',
                'Considerando 86 - Gestione dei rischi della supply chain'
            ]
        },

        // ─── Training & Awareness ────────────────────────────────────
        'training': {
            title: 'Guida - Formazione e Awareness',
            intro: 'Il modulo di Formazione gestisce i programmi di sensibilizzazione e formazione sulla sicurezza informatica, come richiesto dall\'Art. 20.2 della Direttiva NIS2 che impone la formazione obbligatoria per gli organi di gestione.',
            sections: [
                {
                    heading: 'Formazione Obbligatoria NIS2',
                    items: [
                        'L\'Art. 20.2 della Direttiva NIS2 richiede che i <strong>membri degli organi di gestione</strong> seguano una formazione specifica.',
                        'La formazione deve consentire di individuare i rischi e valutare le pratiche di gestione del rischio.',
                        'La piattaforma traccia la conformita\' a questo obbligo per ciascun membro del management.'
                    ]
                },
                {
                    heading: 'Gestione Corsi',
                    items: [
                        'Crea e gestisci <strong>corsi di formazione</strong> su tematiche NIS2 e sicurezza informatica.',
                        'Ogni corso include: titolo, descrizione, durata stimata, contenuti e materiali.',
                        'I corsi possono essere categorizzati per argomento e livello di difficolta\'.',
                        'Supporto per corsi interni ed esterni con tracciamento unificato.'
                    ]
                },
                {
                    heading: 'Assegnazione e Tracciamento',
                    items: [
                        'Assegna corsi a singoli utenti o gruppi con <strong>scadenze personalizzate</strong>.',
                        'La dashboard mostra lo stato di completamento per ciascun assegnatario.',
                        'I corsi scaduti vengono evidenziati e possono generare notifiche automatiche.',
                        'Lo storico di completamento e\' disponibile per audit e compliance.'
                    ]
                },
                {
                    heading: 'Report di Compliance',
                    items: [
                        'Visualizza il tasso di completamento complessivo della formazione.',
                        'Identifica gli utenti con formazione scaduta o mancante.',
                        'Genera report per dimostrare la conformita\' all\'Art. 20.2 in sede di audit.'
                    ]
                }
            ],
            references: [
                'Art. 20.2 - Formazione obbligatoria per gli organi di gestione',
                'Art. 20.1 - Responsabilita\' degli organi di gestione nell\'approvazione delle misure',
                'Art. 21.2 (g) - Pratiche di igiene informatica di base e formazione in materia di cibersicurezza',
                'Considerando 89 - Formazione regolare per dipendenti e management'
            ]
        },

        // ─── Asset Inventory ─────────────────────────────────────────
        'assets': {
            title: 'Guida - Inventario Asset',
            intro: 'Il modulo Inventario Asset consente di catalogare e gestire tutti gli asset ICT dell\'organizzazione, fondamentale per la gestione dei rischi e la sicurezza delle reti e dei sistemi informativi ai sensi dell\'Art. 21 della Direttiva NIS2.',
            sections: [
                {
                    heading: 'Categorizzazione degli Asset',
                    items: [
                        '<strong>Hardware</strong> - server, workstation, dispositivi di rete, dispositivi mobili, apparati di sicurezza.',
                        '<strong>Software</strong> - applicativi, sistemi operativi, database, middleware, servizi cloud.',
                        '<strong>Rete</strong> - reti LAN/WAN, collegamenti internet, VPN, segmenti di rete.',
                        '<strong>Dati</strong> - archivi, database, backup, dati personali, dati critici per il business.'
                    ]
                },
                {
                    heading: 'Livelli di Criticita\'',
                    items: [
                        'Ogni asset ha un <strong>livello di criticita\'</strong> che ne determina la priorita\' nella gestione del rischio.',
                        'La criticita\' viene valutata in base a: impatto sulla continuita\' operativa, dati trattati, esposizione esterna.',
                        'Gli asset critici sono soggetti a controlli di sicurezza rafforzati.',
                        'Il livello di criticita\' influenza la valutazione dei rischi associati.'
                    ]
                },
                {
                    heading: 'Rilevanza NIS2 (scoring 0-100)',
                    items: [
                        'Il pulsante <strong>Valuta Rilevanza NIS2</strong> applica una metodologia di scoring documentata a 6 criteri pesati: Criticita Operativa (0-25), Impatto Interruzione (0-25), Dati Trattati (0-20), Dipendenze (0-15), Esposizione (0-10), Obblighi Normativi (0-5).',
                        'Un sistema e considerato <strong>rilevante NIS2 quando il punteggio &ge; 40</strong>. Classi: &ge;80 Critico, 60-79 Alto, 40-59 Medio, 20-39 Basso, &lt;20 Trascurabile.',
                        'Il punteggio aggiorna automaticamente anche la criticita dell\'asset e alimenta il registro formale dei <strong>Sistemi Rilevanti</strong>.',
                        'La metodologia supporta il requisito di censimento e classificazione dei sistemi informativi e di rete rilevanti, da approvare a livello di Direzione.'
                    ]
                },
                {
                    heading: 'Mappa delle Dipendenze',
                    items: [
                        'La <strong>Mappa Dipendenze</strong> visualizza le relazioni tra gli asset.',
                        'Identifica le dipendenze critiche e i singoli punti di guasto (SPOF).',
                        'Utile per la valutazione dell\'impatto in caso di incidente o indisponibilita\'.'
                    ]
                },
                {
                    heading: 'Gestione del Ciclo di Vita',
                    items: [
                        'Tracciamento dello stato dell\'asset: attivo, in manutenzione, dismesso.',
                        'Registrazione di proprietario, ubicazione, fornitore e contratti di supporto.',
                        'Alert automatici per asset con supporto in scadenza o fine vita.'
                    ]
                },
                {
                    heading: 'Import da CMDB / Cloud (pulsante "Importa")',
                    items: [
                        'Importa asset in blocco da un file <strong>CSV</strong> o da un export CMDB/cloud, invece di inserirli manualmente.',
                        'Colonne riconosciute: <code>name, asset_type, criticality, data_classification, internet_facing, dependencies_count, regulated, external_ref, vendor, location</code>.',
                        'Lo <strong>scoring di rilevanza NIS2 (GV.OC-04)</strong> viene calcolato automaticamente per ogni asset importato, classificandolo critico/alto/medio/basso.',
                        'Il campo <code>external_ref</code> abilita la deduplica: re-importare lo stesso ID aggiorna l\'asset invece di duplicarlo.',
                        'Gli stessi dati possono arrivare via connettore automatico (API <code>POST /api/services/assets-ingest</code>, scope ingest:assets).'
                    ]
                }
            ],
            references: [
                'Direttiva (UE) 2022/2555 - Art. 21.2 (i) - Sicurezza delle risorse umane, controllo degli accessi e gestione degli attivi',
                'Direttiva (UE) 2022/2555 - Art. 21.2 (a) - Politiche di analisi dei rischi e di sicurezza dei sistemi informatici',
                'Direttiva (UE) 2022/2555 - Art. 21.2 (c) - Continuita\' operativa, gestione dei backup e ripristino',
                'D.Lgs. 4 settembre 2024, n. 138 - Art. 24 - Obblighi in materia di misure di gestione del rischio',
                'Identificazione e classificazione dei sistemi rilevanti - metodologia di scoring 0-100 approvata dalla Direzione'
            ]
        },

        // ─── Reports / Audit ─────────────────────────────────────────
        'reports': {
            title: 'Guida - Audit & Report',
            intro: 'Il modulo Audit & Report fornisce strumenti per monitorare lo stato dei controlli di compliance, gestire le evidenze e generare report per le autorita\' competenti e per gli audit interni.',
            sections: [
                {
                    heading: 'Controlli di Compliance',
                    items: [
                        'Ogni controllo rappresenta un requisito specifico della Direttiva NIS2.',
                        'Lo stato di ciascun controllo e\' tracciato: <strong>Conforme</strong>, <strong>Parzialmente Conforme</strong>, <strong>Non Conforme</strong>, <strong>Non Valutato</strong>.',
                        'I controlli sono organizzati per categoria secondo l\'Art. 21.2.',
                        'La percentuale di conformita\' complessiva e\' calcolata automaticamente.'
                    ]
                },
                {
                    heading: 'Gestione Evidenze',
                    items: [
                        'Per ogni controllo e\' possibile allegare <strong>evidenze</strong> (documenti, screenshot, log).',
                        'Le evidenze supportano la dimostrazione di conformita\' in sede di audit.',
                        'Il sistema traccia la data di caricamento e la validita\' di ogni evidenza.',
                        'Le evidenze scadute o mancanti vengono segnalate automaticamente.'
                    ]
                },
                {
                    heading: 'Log di Audit',
                    items: [
                        'Il <strong>log di audit</strong> registra automaticamente tutte le operazioni effettuate sulla piattaforma.',
                        'Ogni voce include: utente, azione, data/ora, oggetto e dettagli.',
                        'I log sono immutabili e disponibili per verifiche ispettive.',
                        'Supporto per filtri avanzati e ricerca nei log.'
                    ]
                },
                {
                    heading: 'Esportazione Report',
                    items: [
                        'Genera report completi in formato esportabile per audit e autorita\'.',
                        'Report disponibili: stato di compliance, registro rischi, incidenti, formazione.',
                        'I report possono essere personalizzati per periodo e ambito.'
                    ]
                },
                {
                    heading: 'Monitoraggio Continuo dei Controlli (tab "Monitoraggio Continuo")',
                    items: [
                        'Mostra lo stato di <strong>freschezza</strong> di ogni controllo alimentato dalle evidenze raccolte automaticamente dai connettori (Evidence Automation).',
                        'Semafori: <strong>Sano</strong> (evidenza valida), <strong>Attenzione</strong>, <strong>Evidenza scaduta</strong> (oltre la soglia di freschezza), <strong>Non conforme</strong> (ultimo check fallito), <strong>Non monitorato</strong>.',
                        'La <strong>copertura</strong> indica la quota di controlli alimentati da evidenze automatiche: avvicina il modello alla compliance continua (vs assessment puntuale).',
                        'Le evidenze arrivano via API <code>POST /api/services/evidence-ingest</code> (scope ingest:evidence) dai collector M365/AWS/EDR/SIEM.'
                    ]
                }
            ],
            references: [
                'Art. 21 - Misure di gestione dei rischi di cibersicurezza',
                'Art. 32 - Misure di vigilanza e di esecuzione per i soggetti essenziali',
                'Art. 33 - Misure di vigilanza e di esecuzione per i soggetti importanti',
                'Art. 34 - Condizioni generali per l\'imposizione di sanzioni amministrative pecuniarie'
            ]
        },

        // ─── Settings ────────────────────────────────────────────────
        'settings': {
            title: 'Guida - Impostazioni',
            intro: 'La sezione Impostazioni consente di configurare il profilo dell\'organizzazione, la classificazione NIS2, gestire il team e le impostazioni di sicurezza dell\'account.',
            sections: [
                {
                    heading: 'Profilo Organizzazione',
                    items: [
                        'Configura i dati della tua organizzazione: nome, settore, dimensione, codice fiscale/P.IVA.',
                        'Questi dati vengono utilizzati per personalizzare i report e le analisi AI.',
                        'Il settore e la dimensione influenzano la classificazione NIS2.'
                    ]
                },
                {
                    heading: 'Classificazione NIS2',
                    items: [
                        '<strong>Soggetto Essenziale</strong> - organizzazione che rientra nell\'Allegato I della Direttiva e supera le soglie dimensionali (grandi imprese). Soggetta a vigilanza proattiva.',
                        '<strong>Soggetto Importante</strong> - organizzazione che rientra nell\'Allegato I o II ma non raggiunge le soglie per "essenziale" (medie imprese). Soggetta a vigilanza reattiva.',
                        '<strong>Non Applicabile</strong> - organizzazione che non rientra nell\'ambito di applicazione della Direttiva.',
                        '<strong>Adesione Volontaria</strong> - organizzazione non obbligata che sceglie volontariamente di adottare il framework NIS2.'
                    ]
                },
                {
                    heading: 'Gestione Team',
                    items: [
                        'Aggiungi e gestisci i <strong>membri del team</strong> con ruoli e permessi differenziati.',
                        'Ruoli disponibili: Amministratore (accesso completo) e Utente (accesso limitato).',
                        'Ogni membro puo\' essere associato a specifiche responsabilita\' (risk owner, incident manager, etc.).'
                    ]
                },
                {
                    heading: 'Sicurezza Account',
                    items: [
                        'Modifica la password del tuo account in qualsiasi momento dal pulsante "Cambia password".',
                        'La piattaforma applica un <strong>timeout di sessione automatico</strong> dopo 30 minuti di inattivita\'. Un avviso con countdown appare 5 minuti prima del logout per permetterti di rimanere connesso.',
                        'Il logout automatico protegge le informazioni sensibili in caso di postazione incustodita.',
                        'La sezione <strong>Sessioni Attive</strong> elenca tutti i dispositivi attualmente loggati al tuo account (browser, sistema operativo, indirizzo IP, ultimo accesso). Puoi disconnettere un singolo dispositivo con "Disconnetti" oppure tutti tranne questo con "Disconnetti gli altri" — utile se sospetti accessi non autorizzati.'
                    ]
                },
                {
                    heading: 'Preferenze utente',
                    items: [
                        'Nel tab <strong>Preferenze</strong> puoi personalizzare la tua esperienza individuale (non condivisa con altri membri dell\'organizzazione).',
                        '<strong>Lingua</strong>: italiano, inglese, francese o tedesco — applicata a tutti i menu e messaggi.',
                        '<strong>Tema</strong>: chiaro, scuro o automatico (segue le impostazioni del sistema operativo).',
                        '<strong>Timezone</strong>: usata per visualizzare date e ore. Default Europe/Rome (CET/CEST). Cambia se lavori da un altro fuso.',
                        '<strong>Notifiche email</strong>: ricevi via email gli avvisi per incidenti, scadenze e training.',
                        '<strong>Notifiche in-app</strong>: mostra badge contatori nella sidebar per nuove notifiche.'
                    ]
                },
                {
                    heading: 'Password dimenticata',
                    items: [
                        'Dalla pagina di login clicca su "Password dimenticata?" per richiedere un link di reset.',
                        'Inserisci la tua email: se registrata riceverai un messaggio con un link valido <strong>30 minuti</strong>.',
                        'Il link è single-use: una volta cliccato e impostata la nuova password, non potra\' essere riusato.',
                        'Per motivi di sicurezza, la pagina mostra sempre lo stesso messaggio sia che l\'email sia registrata sia che non lo sia (anti-enumeration).',
                        'Dopo il reset, tutte le sessioni attive precedenti vengono disconnesse automaticamente.'
                    ]
                },
                {
                    heading: 'Cambio organizzazione (multi-tenant)',
                    items: [
                        'Se sei membro di piu\' organizzazioni (es. consulente), nella sidebar appare un <strong>dropdown azienda</strong> in alto.',
                        'Click sul dropdown per vedere tutte le organizzazioni a cui hai accesso e quale è quella attualmente attiva (✓).',
                        'Selezionando un\'altra organizzazione il sistema emette un nuovo token con il contesto aggiornato e ricarica la pagina.',
                        'Il cambio è registrato nell\'audit log come <em>context_switch</em>.'
                    ]
                },
                {
                    heading: 'Branding white-label (solo consulenti / super admin)',
                    items: [
                        'Il tab <strong>Branding</strong> consente a uno studio di consulenza di personalizzare l\'interfaccia che vedranno i suoi clienti.',
                        '<strong>Nome prodotto custom</strong>: sostituisce "NIS2 Agile" con il branding dello studio (es. "Studio Rossi NIS2 Suite").',
                        '<strong>URL Logo</strong>: link assoluto al logo dello studio (es. https://www.tuosito.it/logo.svg). Verra\' mostrato nella sidebar e nelle pagine di login.',
                        '<strong>Colori</strong>: il primario sostituisce il blu di default (intestazioni, pulsanti principali); il secondario sostituisce il ciano (badge, accenti).',
                        'Le modifiche vengono applicate automaticamente a tutti gli utenti del firm al ricaricamento della pagina.'
                    ]
                }
            ],
            references: [
                'Art. 2 - Ambito di applicazione',
                'Art. 3 - Soggetti essenziali e soggetti importanti',
                'Allegato I - Settori ad alta criticita\'',
                'Allegato II - Altri settori critici',
                'Art. 20 - Governance'
            ]
        },

        // ─── Compliance Journey / Workflow ───────────────────────────
        'workflow': {
            title: 'Guida - Compliance Journey',
            intro: 'La pagina Compliance Journey visualizza l\'intero percorso di conformita\' NIS2 come una roadmap interattiva a 6 fasi. Mostra lo stato reale di ogni modulo con dati live, guida verso la prossima azione da completare e permette di navigare direttamente a ciascun modulo.',
            sections: [
                {
                    heading: 'Roadmap a 6 Fasi',
                    items: [
                        '<strong>Fase 1 - Preparazione</strong>: onboarding, configurazione organizzazione, definizione team e ruoli.',
                        '<strong>Fase 2 - Valutazione</strong>: gap assessment Art.21 (80 domande), inventario asset, valutazione supply chain.',
                        '<strong>Fase 3 - Rischi</strong>: risk register, piano di trattamento, suggerimenti AI per settore.',
                        '<strong>Fase 4 - Implementazione</strong>: policy approvate, formazione completata, controlli ISO 27001 implementati.',
                        '<strong>Fase 5 - Monitoraggio</strong>: gestione incidenti Art.23, NCR/CAPA, aggiornamenti normativi, whistleblowing.',
                        '<strong>Fase 6 - Reportistica</strong>: report esecutivo, audit chain SHA-256, export certificato.'
                    ]
                },
                {
                    heading: 'Come Leggere il Percorso',
                    items: [
                        '<span style="color:var(--secondary)"><strong>Completato</strong></span> - la fase ha raggiunto gli obiettivi minimi di compliance.',
                        '<span style="color:var(--warning)"><strong>In corso</strong></span> - la fase e\' stata avviata ma non ancora completata.',
                        '<span style="color:var(--primary)"><strong>Attivo</strong></span> - fase di monitoraggio continuo, sempre attiva una volta avviata.',
                        '<span style="color:var(--gray-400)"><strong>Da iniziare</strong></span> - fase non ancora avviata.',
                        'La <strong>percentuale</strong> su ogni fase mostra il livello di completamento basato sui dati reali della piattaforma.'
                    ]
                },
                {
                    heading: 'Prossima Azione Consigliata',
                    items: [
                        'Il <strong>banner blu</strong> in cima alla pagina indica sempre la prossima azione piu\' urgente da completare.',
                        'Il suggerimento si aggiorna automaticamente in base allo stato reale dei moduli.',
                        'Clicca sul link nel banner per navigare direttamente al modulo corrispondente.'
                    ]
                },
                {
                    heading: 'Card di Dettaglio Fase',
                    items: [
                        'Clicca su una <strong>fase nella roadmap</strong> per espandere il dettaglio degli step.',
                        'Ogni card mostra: stato badge (Completato/In corso/Da iniziare), metrica numerica reale, link diretto al modulo.',
                        'Le metriche sono calcolate in tempo reale interrogando tutti i moduli della piattaforma.',
                        'Clicca direttamente sulla card per accedere al modulo corrispondente.'
                    ]
                },
                {
                    heading: 'Differenza con la Dashboard',
                    items: [
                        'La <strong>Dashboard</strong> mostra KPI numerici e attivita\' recenti — risponde a "come sto?".',
                        'Il <strong>Compliance Journey</strong> mostra il processo sequenziale — risponde a "dove sono nel percorso?" e "cosa devo fare dopo?".',
                        'Usa il Journey per pianificare le priorita\' di intervento e comunicare lo stato al board.'
                    ]
                }
            ],
            references: [
                'Art. 21 - Misure di gestione dei rischi di cibersicurezza (10 categorie)',
                'Art. 20 - Governance e responsabilita\' degli organi di gestione',
                'Art. 23 - Obblighi di segnalazione degli incidenti significativi',
                'D.Lgs. 138/2024 - Recepimento NIS2 in Italia',
                'ACN - Linee guida attuative per i soggetti NIS2'
            ]
        },

        // ─── Segnalazioni (Feedback) ─────────────────────────────────
        'feedback': {
            title: 'Guida - Segnalazioni & Feedback',
            intro: 'Il sistema di segnalazioni ti permette di comunicare direttamente con il team tecnico di NIS2 Agile. Puoi segnalare bug, proporre miglioramenti, fare domande o richiedere nuove funzionalita\'. L\'intelligenza artificiale analizza ogni segnalazione in tempo reale e tenta la risoluzione autonoma.',
            sections: [
                {
                    heading: 'Come aprire una segnalazione',
                    items: [
                        'Clicca il <strong>pulsante rosso</strong> <i class="fas fa-comment-alt"></i> in basso a destra — visibile su tutte le pagine quando sei autenticato.',
                        'Scegli il <strong>tipo</strong>: Bug/Errore, Miglioramento interfaccia, Nuova funzionalita\', Domanda o Altro.',
                        'Indica la <strong>priorita\' percepita</strong>: Alta (blocca il lavoro), Media (workaround disponibile) o Bassa (miglioria).',
                        'Descrivi il problema in modo dettagliato: cosa hai fatto, cosa ti aspettavi, cosa e\' successo invece.',
                        'Puoi allegare uno <strong>screenshot</strong> trascinandolo nell\'area dedicata (max 1.5 MB).',
                        'L\'URL della pagina viene catturato automaticamente — non devi copiarlo.'
                    ]
                },
                {
                    heading: 'Risposta AI immediata',
                    items: [
                        'Dopo l\'invio, l\'<strong>AI analizza la segnalazione</strong> entro pochi secondi e mostra una risposta personalizzata.',
                        'La risposta AI include suggerimenti su come procedere o conferma che il problema e\' stato registrato.',
                        'L\'AI assegna automaticamente la categoria (es. rischi, incidenti, interfaccia) e la priorita\' tecnica.',
                        'Se il suggerimento AI ha gia\' risolto il tuo problema, puoi confermarlo con <strong>"Si\', problema risolto"</strong>.'
                    ]
                },
                {
                    heading: 'Conferma risoluzione (Password Gate)',
                    items: [
                        'Quando clicchi <strong>"Si\', problema risolto"</strong> viene richiesta una <strong>password di conferma</strong>.',
                        'La password previene chiusure accidentali dei ticket — assicurandosi che la risoluzione sia intenzionale.',
                        'Se la segnalazione non e\' risolta, scegli <strong>"No, il problema persiste"</strong>: il ticket rimane aperto e il team lo prende in carico.',
                        'Puoi monitorare lo stato nella tab <strong>"Le mie segnalazioni"</strong>.'
                    ]
                },
                {
                    heading: 'Le mie segnalazioni',
                    items: [
                        'La tab <strong>"Le mie segnalazioni"</strong> mostra le ultime 20 segnalazioni inviate per questa organizzazione.',
                        'I badge colorati indicano lo stato: <span style="color:#64748b">Aperto</span>, <span style="color:#f59e0b">In lavorazione</span>, <span style="color:#22c55e">Risolto</span>, <span style="color:#3b82f6">Chiuso</span>.',
                        'La risposta AI e\' sempre visibile sotto ogni segnalazione.'
                    ]
                },
                {
                    heading: 'Risoluzione autonoma AI (Worker)',
                    items: [
                        'I ticket marcati <strong>"In lavorazione"</strong> vengono processati automaticamente ogni 30 minuti da un worker AI.',
                        'Il worker utilizza <strong>Claude Code CLI</strong> per analizzare il codice e applicare correzioni in autonomia.',
                        'Se la correzione ha successo, il ticket viene marcato come <strong>Risolto</strong> e tutti i membri dell\'organizzazione ricevono una notifica email.',
                        'I ticket non risolvibili automaticamente rimangono in lavorazione per l\'intervento manuale del team.'
                    ]
                },
                {
                    heading: 'Consigli per segnalazioni efficaci',
                    items: [
                        '<strong>Sii specifico</strong>: "Il bottone Salva nella pagina Rischi non risponde" e\' meglio di "qualcosa non funziona".',
                        '<strong>Includi i passi</strong>: "1. Apro la pagina Rischi, 2. Clicco Nuovo Rischio, 3. Compilo il modulo, 4. Il salvataggio da\' errore 500".',
                        '<strong>Allega screenshot</strong> quando possibile: accelera enormemente la diagnosi.',
                        'Usa il tipo <strong>Domanda</strong> per richieste di chiarimento sull\'utilizzo della piattaforma.'
                    ]
                }
            ],
            references: [
                'Sistema ispirato a alltax.it/docs/sistema-segnalazioni-standard.html',
                'Risoluzione autonoma tramite Anthropic Claude Code CLI'
            ]
        }
    };

    // ── Mappa tra filename nell'URL e chiave di help ─────────────────

    var _pageMap = {
        'dashboard.html': 'dashboard',
        'dashboard': 'dashboard',
        'assessment.html': 'assessment',
        'assessment': 'assessment',
        'risks.html': 'risks',
        'risks': 'risks',
        'incidents.html': 'incidents',
        'incidents': 'incidents',
        'policies.html': 'policies',
        'policies': 'policies',
        'supply-chain.html': 'supply-chain',
        'supply-chain': 'supply-chain',
        'training.html': 'training',
        'training': 'training',
        'assets.html': 'assets',
        'assets': 'assets',
        'reports.html': 'reports',
        'audit.html': 'reports',
        'reports': 'reports',
        'audit': 'reports',
        'settings.html': 'settings',
        'settings': 'settings',
        'workflow.html': 'workflow',
        'workflow': 'workflow',
        'feedback': 'feedback'
    };

    // ── Stili CSS (iniettati una sola volta) ─────────────────────────

    var _stylesInjected = false;

    function _injectStyles() {
        if (_stylesInjected) return;
        _stylesInjected = true;

        var style = document.createElement('style');
        style.textContent = [
            /* Pulsante help nell'header */
            '.help-btn {',
            '    display: inline-flex;',
            '    align-items: center;',
            '    justify-content: center;',
            '    width: 36px;',
            '    height: 36px;',
            '    padding: 0;',
            '    background: var(--gray-100);',
            '    border: 1px solid var(--gray-300);',
            '    border-radius: 50%;',
            '    cursor: pointer;',
            '    color: var(--gray-500);',
            '    transition: all var(--transition-fast);',
            '}',
            '.help-btn:hover {',
            '    background: var(--primary-bg);',
            '    border-color: var(--primary);',
            '    color: var(--primary);',
            '}',
            '.help-btn:focus-visible {',
            '    box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.3);',
            '    outline: none;',
            '}',
            '.help-btn svg {',
            '    width: 18px;',
            '    height: 18px;',
            '}',

            /* Contenuto del modale help */
            '.help-content {',
            '    font-size: 0.875rem;',
            '    color: var(--gray-700);',
            '    line-height: 1.7;',
            '}',
            '.help-content .help-intro {',
            '    margin-bottom: 20px;',
            '    padding: 14px 18px;',
            '    background: var(--primary-bg);',
            '    border-radius: var(--border-radius);',
            '    border-left: 4px solid var(--primary);',
            '    color: var(--gray-700);',
            '}',
            '.help-content h4 {',
            '    font-size: 0.9375rem;',
            '    font-weight: 700;',
            '    color: var(--gray-900);',
            '    margin: 20px 0 10px 0;',
            '    padding-bottom: 6px;',
            '    border-bottom: 1px solid var(--gray-100);',
            '}',
            '.help-content h4:first-of-type {',
            '    margin-top: 0;',
            '}',
            '.help-content ul {',
            '    list-style: none;',
            '    padding: 0;',
            '    margin: 0 0 8px 0;',
            '}',
            '.help-content ul li {',
            '    position: relative;',
            '    padding: 5px 0 5px 20px;',
            '    line-height: 1.6;',
            '}',
            '.help-content ul li::before {',
            '    content: "";',
            '    position: absolute;',
            '    left: 0;',
            '    top: 13px;',
            '    width: 6px;',
            '    height: 6px;',
            '    background: var(--primary);',
            '    border-radius: 50%;',
            '}',
            '.help-content .help-references {',
            '    margin-top: 24px;',
            '    padding: 14px 18px;',
            '    background: var(--gray-50);',
            '    border-radius: var(--border-radius);',
            '    border: 1px solid var(--gray-200);',
            '}',
            '.help-content .help-references h4 {',
            '    font-size: 0.8125rem;',
            '    color: var(--gray-600);',
            '    text-transform: uppercase;',
            '    letter-spacing: 0.04em;',
            '    margin: 0 0 10px 0;',
            '    padding-bottom: 6px;',
            '    border-bottom: 1px solid var(--gray-200);',
            '}',
            '.help-content .help-references ul li {',
            '    font-size: 0.8125rem;',
            '    color: var(--gray-600);',
            '    padding: 3px 0 3px 20px;',
            '}',
            '.help-content .help-references ul li::before {',
            '    width: 5px;',
            '    height: 5px;',
            '    background: var(--gray-400);',
            '    top: 11px;',
            '}',

            /* Inline help tooltip */
            '.inline-help {',
            '    display: inline-flex;',
            '    align-items: center;',
            '    justify-content: center;',
            '    width: 16px;',
            '    height: 16px;',
            '    margin-left: 4px;',
            '    vertical-align: middle;',
            '    color: var(--gray-400);',
            '    cursor: help;',
            '    position: relative;',
            '}',
            '.inline-help:hover {',
            '    color: var(--primary);',
            '}',
            '.inline-help .inline-help-text {',
            '    position: absolute;',
            '    bottom: calc(100% + 8px);',
            '    left: 50%;',
            '    transform: translateX(-50%) scale(0.95);',
            '    background: var(--gray-800);',
            '    color: #fff;',
            '    padding: 8px 12px;',
            '    border-radius: var(--border-radius-sm);',
            '    font-size: 0.75rem;',
            '    font-weight: 500;',
            '    line-height: 1.5;',
            '    white-space: normal;',
            '    width: max-content;',
            '    max-width: 260px;',
            '    pointer-events: none;',
            '    opacity: 0;',
            '    transition: opacity var(--transition-fast), transform var(--transition-fast);',
            '    z-index: 60;',
            '    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);',
            '}',
            '.inline-help .inline-help-text::after {',
            '    content: "";',
            '    position: absolute;',
            '    top: 100%;',
            '    left: 50%;',
            '    transform: translateX(-50%);',
            '    border: 5px solid transparent;',
            '    border-top-color: var(--gray-800);',
            '}',
            '.inline-help:hover .inline-help-text {',
            '    opacity: 1;',
            '    transform: translateX(-50%) scale(1);',
            '}'
        ].join('\n');

        document.head.appendChild(style);
    }

    // ── Rilevamento pagina corrente dall'URL ─────────────────────────

    function _detectPage() {
        var pathname = window.location.pathname;
        var filename = pathname.split('/').pop() || '';
        // Rimuovi eventuale query string
        filename = filename.split('?')[0];
        // Rimuovi eventuale hash
        filename = filename.split('#')[0];

        // Prova match diretto
        if (_pageMap[filename]) {
            return _pageMap[filename];
        }

        // Prova senza estensione
        var withoutExt = filename.replace(/\.html?$/, '');
        if (_pageMap[withoutExt]) {
            return _pageMap[withoutExt];
        }

        // Fallback: prova a cercare nel pathname
        var segments = pathname.replace(/\.html?$/, '').split('/').filter(Boolean);
        for (var i = segments.length - 1; i >= 0; i--) {
            if (_pageMap[segments[i]]) {
                return _pageMap[segments[i]];
            }
        }

        return null;
    }

    // ── Rendering del contenuto HTML di help ─────────────────────────

    // Mapping pageId -> ancora capitolo nella Guida completa (guida.html)
    var _guideAnchor = {
        'dashboard':    'cap-4',
        'assessment':   'cap-5',
        'risks':        'cap-6',
        'incidents':    'cap-7',
        'policies':     'cap-8',
        'supply-chain': 'cap-9',
        'training':     'cap-10',
        'assets':       'cap-11',
        'reports':      'cap-12',
        'feedback':     'cap-13',
        'workflow':     'cap-4',
        'settings':     'cap-3'
    };

    function _renderHelpContent(pageId) {
        var data = _helpContent[pageId];
        if (!data) return null;

        var html = '<div class="help-content">';

        // Intro
        html += '<div class="help-intro">' + data.intro + '</div>';

        // Sezioni
        for (var i = 0; i < data.sections.length; i++) {
            var section = data.sections[i];
            html += '<h4>' + section.heading + '</h4>';
            html += '<ul>';
            for (var j = 0; j < section.items.length; j++) {
                html += '<li>' + section.items[j] + '</li>';
            }
            html += '</ul>';
        }

        // Riferimenti NIS2
        if (data.references && data.references.length > 0) {
            html += '<div class="help-references">';
            html += '<h4>Riferimenti NIS2</h4>';
            html += '<ul>';
            for (var k = 0; k < data.references.length; k++) {
                html += '<li>' + data.references[k] + '</li>';
            }
            html += '</ul>';
            html += '</div>';
        }

        // Link alla guida completa (per utenti che vogliono approfondire)
        var anchor = _guideAnchor[pageId] || '';
        var guideHref = 'guida.html' + (anchor ? '#' + anchor : '');
        html += '<div style="margin-top:20px;padding:14px 18px;background:#eff6ff;border-left:4px solid #1e40af;border-radius:6px;">';
        html += '<strong style="color:#1e40af;">Sei nuovo?</strong> ';
        html += 'Apri la <a href="' + guideHref + '" style="color:#1e40af;font-weight:600;">Guida all\'uso completa</a> ';
        html += 'con spiegazioni in parole semplici, esempi pratici e cosa dice la norma.';
        html += '</div>';

        html += '</div>';

        return { title: data.title, content: html };
    }

    // ── API Pubblica ─────────────────────────────────────────────────

    /**
     * Mostra il modale di help per una pagina specifica.
     * Se pageId non e' fornito, rileva automaticamente la pagina corrente.
     * @param {string} [pageId] - Identificativo della pagina (es. 'dashboard', 'risks')
     */
    function showHelp(pageId) {
        _injectStyles();

        if (!pageId) {
            pageId = _detectPage();
        }

        if (!pageId || !_helpContent[pageId]) {
            if (typeof showNotification === 'function') {
                showNotification('Nessuna guida disponibile per questa pagina.', 'info');
            }
            return;
        }

        var rendered = _renderHelpContent(pageId);
        if (!rendered) return;

        var footer = '<button class="btn btn-primary" onclick="closeModal()">Ho capito</button>';

        showModal(rendered.title, rendered.content, {
            footer: footer,
            size: 'lg'
        });
    }

    /**
     * Inietta un pulsante "?" nell'header della pagina (.content-header-actions).
     * Se l'header non esiste o il pulsante e' gia' presente, non fa nulla.
     */
    function addHelpButton() {
        _injectStyles();

        var pageId = _detectPage();
        if (!pageId || !_helpContent[pageId]) return;

        var container = document.querySelector('.content-header-actions');
        if (!container) return;

        // Evita duplicati
        if (container.querySelector('.help-btn')) return;

        var btn = document.createElement('button');
        btn.className = 'help-btn';
        btn.setAttribute('type', 'button');
        btn.setAttribute('aria-label', 'Apri guida contestuale');
        btn.setAttribute('title', 'Guida');
        btn.innerHTML = HELP_ICON;

        btn.addEventListener('click', function () {
            showHelp(pageId);
        });

        container.appendChild(btn);
    }

    /**
     * Restituisce una stringa HTML per un'icona "?" con tooltip inline.
     * Puo' essere inserita accanto a qualsiasi elemento.
     * @param {string} text - Testo del tooltip
     * @returns {string} HTML string
     */
    function inlineHelp(text) {
        _injectStyles();

        // Escape delle virgolette nel testo per sicurezza nell'attributo
        var safeText = text
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');

        return '<span class="inline-help" tabindex="0" role="button" aria-label="Informazione">' +
            HELP_ICON_SMALL +
            '<span class="inline-help-text">' + safeText + '</span>' +
            '</span>';
    }

    /**
     * Inizializza il sistema di help: inietta gli stili e aggiunge il pulsante help
     * nell'header della pagina corrente (se applicabile).
     */
    function init() {
        _injectStyles();
        addHelpButton();
    }

    /**
     * Restituisce la lista degli ID di pagina supportati dal sistema di help.
     * @returns {string[]}
     */
    function getAvailablePages() {
        return Object.keys(_helpContent);
    }

    // ── Esposizione API ──────────────────────────────────────────────

    return {
        init: init,
        showHelp: showHelp,
        addHelpButton: addHelpButton,
        inlineHelp: inlineHelp,
        getAvailablePages: getAvailablePages
    };

})();
