[FEAT] UI V3 — flotta: chrome top-nav + design system su 32 pagine app
Migrazione UI dal V2 (Bootstrap Italia, sidebar) al V3 (top-nav mega-menu navy/oro, Inter+Lucide self-host) fedele ai mockup docs/mockup Ui/. - 32 pagine app convertite (incl. admin/*): head Inter+v3.css, chrome topnav-v3, contenuti in card V3, dati REALI preservati (id/data-* intatti), i18n/help/FAB reali invariati, nessun CDN esterno. - v3.css: aggiunti widget condivisi (modal/toast/form/btn-variant/spinner/ progress/tag/badge) + utility (.btn base, .text-muted, .sr-only) + alias variabili V2->token V3, così modali/form/toast di common.js funzionano ovunque senza style.css. - maintenance.html: finestra estesa a ~12:15. - docs/UI_V3_FLEET_BRIEF.md: ricetta operativa della flotta. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b0fc190704
commit
a4150b5389
+129
-86
@@ -3,12 +3,42 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
<title>Guida all'uso - NIS2 Agile</title>
|
||||
<!-- Bootstrap Italia v2.18.1 self-hostato (regola: MAI CDN). Caricato PRIMA di style.css
|
||||
cosi' style.css resta autorevole per la chrome (sidebar/widget). BI veste la guida. -->
|
||||
<link rel="stylesheet" href="/vendor/bootstrap-italia/dist/css/bootstrap-italia.min.css">
|
||||
<link rel="stylesheet" href="/css/style.css?v=20260618">
|
||||
<title>Guida all'uso · NIS2 Agile</title>
|
||||
<!-- UI V3: Inter self-host + design system v3.css (NO Google Fonts / NO unpkg / NO Bootstrap Italia). -->
|
||||
<link rel="stylesheet" href="/vendor/inter/inter.css?v=20260627">
|
||||
<link rel="stylesheet" href="/css/v3.css?v=20260627">
|
||||
<style>
|
||||
/* ── V3: card di base + accordion self-contained (ex Bootstrap Italia, ZERO CDN) ── */
|
||||
.content-body .card,.card-bg{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
|
||||
.content-body .card .card-body{padding:20px}
|
||||
.mb-4{margin-bottom:1.5rem} .mb-0{margin-bottom:0} .mt-3{margin-top:1rem} .mt-4{margin-top:1.5rem}
|
||||
.text-center{text-align:center} .text-muted{color:var(--muted)} .text-uppercase{text-transform:uppercase}
|
||||
.h6{font-size:.85rem;font-weight:700} .shadow-sm{box-shadow:var(--shadow)}
|
||||
.alert{padding:14px 18px;border-radius:8px;font-size:.92rem}
|
||||
.alert-warning{background:#FBF1E2;border:1px solid #EBD9B4;color:#7a5310}
|
||||
/* Accordion */
|
||||
.accordion{display:flex;flex-direction:column;gap:10px}
|
||||
.accordion-item{border:1px solid var(--line);border-radius:10px;background:var(--card);overflow:hidden;box-shadow:var(--shadow)}
|
||||
.accordion-header{margin:0}
|
||||
.accordion-button{display:flex;align-items:center;width:100%;border:0;background:#fff;
|
||||
padding:16px 18px;font:inherit;font-size:15px;font-weight:700;color:var(--ink);cursor:pointer;text-align:left}
|
||||
.accordion-button:hover{background:#F5F8FC}
|
||||
.accordion-button::after{content:"";margin-left:auto;width:10px;height:10px;border-right:2px solid var(--muted);
|
||||
border-bottom:2px solid var(--muted);transform:rotate(-45deg);transition:transform .18s;flex:0 0 auto}
|
||||
.accordion-button:not(.collapsed)::after{transform:rotate(45deg)}
|
||||
.accordion-collapse{display:none}
|
||||
.accordion-collapse.show{display:block}
|
||||
.accordion-body{padding:8px 20px 22px}
|
||||
.accordion-body h3{font-size:1.05rem;margin:18px 0 8px;color:var(--ink)}
|
||||
.accordion-body ul,.accordion-body ol{padding-left:20px} .accordion-body li{margin:4px 0}
|
||||
:root{ --c-num:#06c; }
|
||||
/* Lucide inline (ex sprite BI box-icon): dimensione coerente al testo */
|
||||
.box-icon{width:1.05em;height:1.05em;vertical-align:-3px;margin-right:6px;display:inline-block}
|
||||
.plain-box .box-icon,.callout-tip .box-icon{color:#06c}
|
||||
.example-box .box-icon{color:#a66300}
|
||||
.norm-box .box-icon{color:#5a6772}
|
||||
.alert-warning .box-icon{color:#a16207}
|
||||
|
||||
/* ── Stili specifici guida (callout normativi/esempi) ──────── */
|
||||
.guide-wrap { max-width: 940px; margin: 0 auto; }
|
||||
|
||||
@@ -103,16 +133,20 @@
|
||||
<!-- PWA:end -->
|
||||
</head>
|
||||
<body>
|
||||
<div class="app-layout">
|
||||
<aside class="sidebar" id="sidebar"></aside>
|
||||
<!-- Chrome V3 (appbar + mega-menu) iniettata da topnav-v3.js in questo host -->
|
||||
<div id="topnav"></div>
|
||||
|
||||
<main class="main-content">
|
||||
<header class="content-header">
|
||||
<h1 class="h2">Guida all'uso di NIS2 Agile</h1>
|
||||
<div class="content-header-actions">
|
||||
<span class="text-muted">Per chi inizia da zero</span>
|
||||
</div>
|
||||
</header>
|
||||
<main class="wrap">
|
||||
<nav class="crumb" aria-label="breadcrumb">
|
||||
<i data-lucide="home" class="ic"></i><a href="dashboard.html">Home</a>
|
||||
<i data-lucide="chevron-right" class="ic"></i><span>Guida all'uso</span>
|
||||
</nav>
|
||||
<div class="page-head">
|
||||
<div>
|
||||
<h1>Guida all'uso di NIS2 Agile</h1>
|
||||
<p class="sub">Per chi inizia da zero — parole semplici, esempi pratici, norma</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-body">
|
||||
<div class="guide-wrap">
|
||||
@@ -127,7 +161,7 @@
|
||||
un <strong style="color:#7a4a00;">esempio pratico</strong> e <strong style="color:#5a6772;">cosa dice la norma</strong>.
|
||||
</p>
|
||||
<div class="alert alert-warning mt-3 mb-0" role="note">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-warning-circle"></use></svg>
|
||||
<i data-lucide="alert-triangle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Avvertenza.</strong> Questa guida ha finalità operative e divulgative: spiega come usare la
|
||||
piattaforma e riassume in modo semplificato la normativa. <strong>Non costituisce un parere legale</strong>
|
||||
e non sostituisce la consulenza di un professionista né le indicazioni ufficiali dell'ACN (Agenzia per la
|
||||
@@ -143,7 +177,7 @@
|
||||
<nav class="card card-bg shadow-sm mb-4 guide-toc-card" aria-label="Indice">
|
||||
<div class="card-body">
|
||||
<h2 class="h6 text-uppercase mb-3" style="letter-spacing:.05em;">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-list"></use></svg>
|
||||
<i data-lucide="list" class="box-icon" aria-hidden="true"></i>
|
||||
Indice
|
||||
</h2>
|
||||
<ul class="guide-toc-list">
|
||||
@@ -180,7 +214,7 @@
|
||||
<div id="body-1" class="accordion-collapse collapse show" role="region" aria-labelledby="head-1" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> NIS2 è una legge europea (Direttiva UE 2022/2555, recepita in Italia
|
||||
con il D.Lgs. 138/2024) che obbliga molte aziende a proteggere bene i propri sistemi informatici.
|
||||
Lo scopo è evitare che attacchi hacker, fughe di dati o blocchi dei sistemi danneggino cittadini,
|
||||
@@ -194,7 +228,7 @@
|
||||
<li><strong>Controllare i fornitori</strong> che hanno accesso ai propri sistemi (Art. 21, lettera d).</li>
|
||||
</ol>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio reale.</strong> Una clinica privata con 250 dipendenti è "in scope" NIS2 perché
|
||||
opera nel settore sanitario (settore essenziale). Se subisce un ransomware che blocca le cartelle cliniche
|
||||
per 8 ore, deve notificarlo al CSIRT Italia entro 24 ore con una prima segnalazione e poi entro 72 ore
|
||||
@@ -220,7 +254,7 @@
|
||||
<div id="body-2" class="accordion-collapse collapse" role="region" aria-labelledby="head-2" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> "In scope" vuol dire che la legge si applica a te. Dipende da
|
||||
<em>cosa fai</em> (settore) e <em>quanto sei grande</em> (dipendenti e fatturato).
|
||||
</div>
|
||||
@@ -265,7 +299,7 @@
|
||||
<li>la <strong>Pubblica Amministrazione</strong> nei casi previsti.</li>
|
||||
</ul>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-help-circle"></use></svg>
|
||||
<i data-lucide="help-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Caso reale: Agile Technology.</strong> Una software house che eroga a terzi una piattaforma SaaS
|
||||
e servizi ICT gestiti (come NIS2 Agile stessa) rientra tipicamente tra i <strong>fornitori di servizi
|
||||
gestiti B2B</strong>: in questo caso è in ambito <em>a prescindere dal numero di dipendenti o dal
|
||||
@@ -273,7 +307,7 @@
|
||||
l'esenzione "piccola impresa" qui non si applica.
|
||||
</div>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio pratico.</strong> "Aurora Sanità S.p.A." con 480 dipendenti e 92 milioni € di fatturato,
|
||||
settore sanitario → <strong>essenziale + grande</strong> → pienamente in scope. Deve registrarsi sul portale
|
||||
ACN (Agenzia per la Cybersicurezza Nazionale) entro le scadenze.
|
||||
@@ -313,7 +347,7 @@
|
||||
esterni (Microsoft 365, Google Workspace, AWS, Azure, Identity Provider, EDR, SIEM, ticketing): sono le
|
||||
fonti da cui la piattaforma raccoglie automaticamente le evidenze di conformità.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-lock"></use></svg>
|
||||
<i data-lucide="lock" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Sicurezza dei segreti.</strong> Nella scheda inserisci solo i parametri non sensibili (es.
|
||||
tenant id, client id). Le <strong>credenziali segrete</strong> non vengono mai salvate nel prodotto:
|
||||
sono custodite separatamente nel vault cifrato. Dopo il salvataggio la piattaforma indica il
|
||||
@@ -345,7 +379,7 @@
|
||||
<li><strong>consultant</strong> — gestisce <em>più aziende clienti</em> (sezioni "Aziende" e "Connettori").</li>
|
||||
</ul>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Nota.</strong> Le sezioni <strong>Aziende</strong> e <strong>Connettori</strong> sono pensate per
|
||||
consulenti/studi che gestiscono più clienti: se sei un utente singolo potresti non vederle.
|
||||
</div>
|
||||
@@ -366,7 +400,7 @@
|
||||
<li><strong>Genera il report esecutivo</strong> dalla sezione Report — utile per il board.</li>
|
||||
</ol>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-clock"></use></svg>
|
||||
<i data-lucide="clock" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Tempi indicativi.</strong> Un primo ciclo "decente" si fa in 6–8 settimane di lavoro
|
||||
spalmate, con 2 persone (un IT e un compliance). Non puntare alla perfezione subito: meglio
|
||||
coprire <em>tutte</em> le 10 categorie al 50% che 3 al 100% e 7 a zero.
|
||||
@@ -377,7 +411,7 @@
|
||||
(top 25%, sopra/sotto la mediana) e lo scarto rispetto alla media. È un dato che i tool tradizionali
|
||||
non possono offrire, perché serve una rete multi-azienda.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-lock"></use></svg>
|
||||
<i data-lucide="lock" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Privacy.</strong> Il confronto è <strong>anonimo e aggregato</strong>: appare solo se nel
|
||||
tuo settore ci sono almeno 3 organizzazioni, e non mostra mai i dati di una singola azienda.
|
||||
</div>
|
||||
@@ -395,7 +429,7 @@
|
||||
<div id="body-5" class="accordion-collapse collapse" role="region" aria-labelledby="head-5" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> L'Art. 21 elenca 10 famiglie di "cose che devi avere".
|
||||
La Gap Analysis ti fa domande per ognuna e calcola quanto sei attrezzato. Non serve essere
|
||||
perfetti — serve <strong>sapere dove sei messo male</strong> e <strong>aver iniziato a migliorare</strong>.
|
||||
@@ -433,7 +467,7 @@
|
||||
critici. Anche SMS è meglio di nulla, app authenticator è meglio di SMS, hardware token (FIDO2)
|
||||
è il top.</p></div>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio Aurora Sanità.</strong> Punteggio iniziale 58%. I gap principali sono in
|
||||
Supply Chain (40%) e Crittografia (50%). Piano di azione: assessment dei 12 fornitori critici
|
||||
entro 6 mesi, attivare TLS 1.3 ovunque e cifratura at-rest sui DB cartelle cliniche entro 9 mesi.
|
||||
@@ -462,7 +496,7 @@
|
||||
<strong>+6 misure e +29 requisiti</strong> rispetto agli importanti.</li>
|
||||
</ul>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio (requisiti di governance).</strong> <code>GV.RR-04</code> richiede che la cybersicurezza
|
||||
sia integrata nella gestione delle risorse umane: il <strong>personale autorizzato ad accedere</strong>
|
||||
ai sistemi rilevanti e gli <strong>amministratori di sistema</strong> devono essere individuati previa
|
||||
@@ -472,7 +506,7 @@
|
||||
comunicata e applicata.
|
||||
</div>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-help-circle"></use></svg>
|
||||
<i data-lucide="help-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Come si collega alla piattaforma.</strong> Le <strong>80 domande</strong> della Gap Analysis
|
||||
(8 × 10 categorie Art. 21) danno il quadro di maturità di primo livello; le <strong>specifiche di base
|
||||
ACN</strong> (Allegati 1–2) sono il dettaglio operativo verso cui portare l'implementazione. Il modulo
|
||||
@@ -499,7 +533,7 @@
|
||||
<div id="body-5b" class="accordion-collapse collapse" role="region" aria-labelledby="head-5b" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> La Gap Analysis dell'Art. 21 (cap. 5) ti dice a grandi linee
|
||||
dove sei messo sulle 10 famiglie di misure. Ma in Italia il metro di conformità vero è la
|
||||
<strong>Determinazione ACN n. 164179 del 14/04/2025</strong>, che declina quelle famiglie in
|
||||
@@ -532,7 +566,7 @@
|
||||
(cita solo requisiti effettivamente esistenti).</li>
|
||||
</ol>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-help-circle"></use></svg>
|
||||
<i data-lucide="help-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Quale uso quando.</strong> La Gap Analysis Art. 21 (cap. 5) è un primo orientamento. La Gap Analysis
|
||||
ACN è la verifica di conformità puntuale richiesta in concreto: usala per prepararti all'autovalutazione ACN.
|
||||
Fonte: Agenzia per la Cybersicurezza Nazionale, Determinazione n. 164179 del 14/04/2025 (Allegati 1 e 2).
|
||||
@@ -551,7 +585,7 @@
|
||||
<div id="body-6" class="accordion-collapse collapse" role="region" aria-labelledby="head-6" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Il "registro dei rischi" è un elenco di cose brutte che
|
||||
<em>potrebbero</em> accadere, con quanto è probabile e quanto farebbe male. Per ognuna decidi
|
||||
cosa fare: ridurla, accettarla, assicurarla, o eliminarla.
|
||||
@@ -572,7 +606,7 @@
|
||||
<li><strong>Evitare</strong>: smetto di fare l'attività che genera il rischio.</li>
|
||||
</ul>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Rischio "Ransomware su sistema PACS" (Aurora Sanità) → probabilità 4,
|
||||
impatto 5 → punteggio inerente 20 (critico). Trattamento: mitigazione = MFA su RDP + backup
|
||||
immutabili + patch mensili. Dopo le misure: probabilità 2, impatto 4 → punteggio residuo 8 (medio).
|
||||
@@ -601,7 +635,7 @@
|
||||
piattaforma esegue una <strong>simulazione Monte Carlo</strong> e restituisce la
|
||||
<strong>Perdita Annua Attesa (ALE)</strong> con i percentili P10 / P50 / P90 e un istogramma.</p>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Ransomware: 0,5–2 attacchi/anno (probabile 1), vulnerabilità 0,3,
|
||||
perdita 50k–2M € (probabile 300k). Risultato: ALE media ≈ 175.000 € l'anno. Un numero così parla
|
||||
alla Direzione meglio di "rischio alto" e aiuta a giustificare gli investimenti di sicurezza.
|
||||
@@ -609,7 +643,7 @@
|
||||
<p>Il <strong>Registro Quantitativo</strong> somma l'ALE di tutti i rischi quantificati, dando
|
||||
l'esposizione economica complessiva del portafoglio.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-chart-line"></use></svg>
|
||||
<i data-lucide="trending-up" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Perché serve quantificare in euro.</strong> L'ALE va sempre confrontata con il <em>costo</em>
|
||||
della non-conformità, non solo con il costo delle misure. Le sanzioni NIS2 (art. 34 Direttiva (UE)
|
||||
2022/2555, recepito dal D.Lgs. 138/2024) arrivano fino a <strong>10 milioni € o il 2% del fatturato
|
||||
@@ -624,7 +658,7 @@
|
||||
due soglie (attenzione e critica): la piattaforma calcola da sola lo stato a <strong>semaforo</strong>
|
||||
– verde, ambra, rosso – in base al valore e alla direzione (se valori alti o bassi sono peggio).</p>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> KRI "% endpoint senza MFA": soglia attenzione 10%, critica 25%. Valore
|
||||
attuale 18% → semaforo <strong>ambra</strong>. Sale a 30% → <strong>rosso</strong>: intervento prioritario.
|
||||
</div>
|
||||
@@ -642,7 +676,7 @@
|
||||
<div id="body-7" class="accordion-collapse collapse" role="region" aria-labelledby="head-7" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Se hai un incidente "significativo" devi avvisare il CSIRT
|
||||
(la squadra nazionale di risposta cyber) in tre tappe: un preallarme entro 24 ore, una
|
||||
notifica entro 72 ore, e una relazione finale entro un mese.
|
||||
@@ -660,7 +694,7 @@
|
||||
e 4 (essenziali) della Determina ACN 164179/2025</strong> (e, per i fornitori digitali, dal Reg. (UE)
|
||||
2024/2690) e variano per tipologia di soggetto.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-warning-circle"></use></svg>
|
||||
<i data-lucide="alert-triangle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Indicatori usati dalla piattaforma per il triage</strong> (non sono soglie di legge, ma
|
||||
aiutano a capire se sei vicino alla significatività): ≥ 500 utenti colpiti · blocco servizi > 4 ore ·
|
||||
impatto transfrontaliero · attacco intenzionale (ransomware, DDoS, intrusione) · danni diretti
|
||||
@@ -677,7 +711,7 @@
|
||||
<p>Analisi completa: causa radice, azioni correttive, lezioni apprese, raccomandazioni per il futuro.
|
||||
<em>Termine normativo: relazione finale entro <strong>un mese dalla notifica</strong> (cioè dal momento delle 72h), non dall'incidente — art. 23 D.Lgs. 138/2024.</em></p></div>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Aurora Sanità subisce un DDoS sul portale prenotazioni alle 09:00 di lunedì.
|
||||
Sono colpiti 8.500 utenti per 4 ore → significativo. Workflow: preallarme entro martedì 09:00 →
|
||||
notifica entro giovedì 09:00 → relazione finale entro un mese <em>dalla notifica</em> (giovedì + 1 mese).
|
||||
@@ -705,7 +739,7 @@
|
||||
IS-1…IS-4, gravità) e fa partire i tempi Art. 23. Gli alert duplicati vengono riconosciuti e non
|
||||
creano doppioni.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-help-circle"></use></svg>
|
||||
<i data-lucide="help-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Per chi integra.</strong> L'endpoint è <code>POST /api/services/incidents-ingest</code>
|
||||
con una API key dedicata (scope <code>ingest:incidents</code>). Trasforma il modulo incidenti da
|
||||
reattivo a proattivo.
|
||||
@@ -724,7 +758,7 @@
|
||||
<div id="body-8" class="accordion-collapse collapse" role="region" aria-labelledby="head-8" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Una "policy" è un documento scritto che dice <em>come</em>
|
||||
si fa una cosa in azienda. Serve sia per fare bene, sia per dimostrare alle autorità che ci hai pensato.
|
||||
</div>
|
||||
@@ -740,7 +774,7 @@
|
||||
<li>Acceptable Use Policy (per i dipendenti).</li>
|
||||
</ol>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Genera con l'AI la bozza della "Politica di Crittografia": clicchi
|
||||
"Genera con AI", indichi il settore (sanità), l'AI ti propone un documento di 4–5 pagine con
|
||||
sezioni standard (algoritmi accettati, gestione chiavi, KMS, audit). Tu rivedi, adatti e fai
|
||||
@@ -753,7 +787,7 @@
|
||||
Per ogni policy approvata, i dipendenti registrano la <strong>presa visione</strong> con un clic; la
|
||||
piattaforma tiene la copertura (es. "32 su 40 hanno preso visione") e mostra chi manca.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-check-circle"></use></svg>
|
||||
<i data-lucide="check-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Importante.</strong> L'attestation è <strong>legata alla versione</strong>: se aggiorni la
|
||||
policy e la riapprovi con una nuova versione, chi aveva firmato la versione precedente deve
|
||||
prendere visione di nuovo. Così la prova di lettura è sempre sulla versione corrente.
|
||||
@@ -776,7 +810,7 @@
|
||||
<div id="body-9" class="accordion-collapse collapse" role="region" aria-labelledby="head-9" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Se un tuo fornitore IT viene bucato, l'attaccante può entrare
|
||||
in casa tua. NIS2 ti obbliga a valutare i fornitori "critici" (quelli con accesso ai tuoi sistemi
|
||||
o dati sensibili).
|
||||
@@ -791,7 +825,7 @@
|
||||
<li>Inserire clausole NIS2 nel contratto (right to audit, notifica incidenti, etc.).</li>
|
||||
</ol>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> "MedTech Manutenzione PACS S.r.l." ha accesso remoto al PACS di
|
||||
Aurora Sanità → criticità "critical". Risk score iniziale 6/10 (ha ISO 27001, ma sub-appalto
|
||||
non chiaro). Azione: clausola contrattuale che vieta sub-appalto senza autorizzazione e
|
||||
@@ -805,7 +839,7 @@
|
||||
<p>Alla consegna, il sistema calcola in automatico un <strong>punteggio</strong> e aggiorna la scheda
|
||||
del fornitore, così il suo livello di rischio si allinea da solo alle risposte ricevute.</p>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Invii il questionario al provider cloud. Compila il link entro 30 giorni:
|
||||
7 "sì" e 1 "parziale" → punteggio 94/100, requisiti di sicurezza soddisfatti.
|
||||
</div>
|
||||
@@ -826,7 +860,7 @@
|
||||
duplicarlo: utile per sincronizzazioni periodiche da un CMDB o da un gestionale aziendale. È disponibile anche
|
||||
un'<strong>API key</strong> per l'integrazione automatica dal sistema dell'azienda cliente.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Nota interpretativa sul perimetro.</strong> NIS2 non fornisce una lista chiusa di "fornitori
|
||||
da censire": l'obbligo (Direttiva (UE) 2022/2555, art. 21.2(d) — sicurezza della catena di
|
||||
approvvigionamento) richiede di valutare i fornitori in funzione del rischio che introducono, dando
|
||||
@@ -850,7 +884,7 @@
|
||||
<div id="body-10" class="accordion-collapse collapse" role="region" aria-labelledby="head-10" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> NIS2 è chiara: <em>gli amministratori (CDA, direttori)
|
||||
devono essere formati sulla cybersecurity</em>. Non è un nice-to-have, è obbligatorio. E sono
|
||||
loro che rispondono in prima persona se l'azienda non è conforme.
|
||||
@@ -863,7 +897,7 @@
|
||||
almeno annuale.</li>
|
||||
</ol>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Aurora Sanità organizza: 1 corso da 4h per CDA, 1 corso da 16h per il team
|
||||
IT, una sessione obbligatoria di 1h per tutti i dipendenti più simulazioni di phishing trimestrali.
|
||||
Tutto loggato nel modulo Formazione.
|
||||
@@ -896,7 +930,7 @@
|
||||
<div id="body-11" class="accordion-collapse collapse" role="region" aria-labelledby="head-11" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Non puoi proteggere quello che non sai di avere.
|
||||
L'inventario asset elenca tutti i sistemi, applicazioni, database e infrastrutture critiche.
|
||||
</div>
|
||||
@@ -911,7 +945,7 @@
|
||||
<li><strong>Facility</strong>: data center, sale server.</li>
|
||||
</ul>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Aurora Sanità inserisce: il PACS, il database cartelle cliniche,
|
||||
il portale prenotazioni. Per ognuno: criticità, vendor, location, owner. Quando arriva un incidente
|
||||
o un rischio, può essere associato a uno o più asset → tracciabilità totale.
|
||||
@@ -923,7 +957,7 @@
|
||||
carichi un CSV (o un export dal CMDB/cloud) e la piattaforma crea gli asset calcolando
|
||||
<strong>automaticamente</strong> il punteggio per ciascuno.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-files"></use></svg>
|
||||
<i data-lucide="files" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Niente duplicati.</strong> Se indichi un identificativo esterno (<code>external_ref</code>),
|
||||
re-importare lo stesso asset lo <strong>aggiorna</strong> invece di duplicarlo: ideale per
|
||||
sincronizzazioni periodiche dal CMDB.
|
||||
@@ -942,7 +976,7 @@
|
||||
<div id="body-12" class="accordion-collapse collapse" role="region" aria-labelledby="head-12" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Quando le autorità (ACN) verranno a chiederti conto della tua
|
||||
compliance, devi poter mostrare documenti, evidenze, registri. Qui li trovi tutti.
|
||||
</div>
|
||||
@@ -964,17 +998,17 @@
|
||||
<strong>arancio</strong> (evidenza scaduta), <strong>rosso</strong> (non conforme), grigio (non
|
||||
monitorato). La copertura indica quanti controlli sono alimentati da evidenze automatiche.</p>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-help-circle"></use></svg>
|
||||
<i data-lucide="help-circle" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Perché conta.</strong> Avvicina l'azienda a una compliance <em>continua</em> anziché
|
||||
fotografata una volta l'anno: è il modello dei migliori strumenti internazionali.
|
||||
</div>
|
||||
<div class="callout-tip">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Prerequisito.</strong> Questa vista si popola man mano che configuri i <strong>Connettori</strong>
|
||||
(vedi cap. 3): senza connettori i controlli restano "non monitorati" (grigio) e la copertura è 0%.
|
||||
</div>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Pre-audit ISO 27001: genera il report esecutivo, esporta in CSV
|
||||
rischi e controlli, scarica l'audit log certificato. L'auditor ha tutto in 5 minuti.
|
||||
</div>
|
||||
@@ -992,7 +1026,7 @@
|
||||
<div id="body-13" class="accordion-collapse collapse" role="region" aria-labelledby="head-13" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> Due cose distinte gestite in un unico modulo: la
|
||||
<strong>segnalazione anonima di vulnerabilità</strong> (prevista da NIS2, art. 12, divulgazione
|
||||
coordinata) e il <strong>whistleblowing</strong> dei dipendenti (segnalazione di illeciti),
|
||||
@@ -1006,7 +1040,7 @@
|
||||
classificate dall'AI e (opzionalmente) risolte automaticamente.</li>
|
||||
</ul>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Esempio.</strong> Un dipendente nota che le credenziali admin del CRM sono salvate in
|
||||
un foglio Excel condiviso. Invia una segnalazione anonima → il responsabile compliance la riceve
|
||||
con codice di tracciamento → il dipendente può seguire lo stato senza rivelare la propria identità.
|
||||
@@ -1025,7 +1059,7 @@
|
||||
<div id="body-14" class="accordion-collapse collapse" role="region" aria-labelledby="head-14" data-bs-parent="#guide-accordion">
|
||||
<div class="accordion-body">
|
||||
<div class="plain-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-info-circle"></use></svg>
|
||||
<i data-lucide="info" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>In parole semplici.</strong> La piattaforma usa Claude (Anthropic) per assisterti. L'AI
|
||||
è bravissima a partire dal foglio bianco, ma <strong>non sostituisce</strong> il tuo giudizio:
|
||||
rivedi sempre quello che produce prima di approvarlo.
|
||||
@@ -1042,7 +1076,7 @@
|
||||
<li><strong>Classificazione Feedback</strong>: tag automatico per le segnalazioni di bug/UX.</li>
|
||||
</ul>
|
||||
<div class="example-box">
|
||||
<svg class="icon icon-sm box-icon" aria-hidden="true"><use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-note"></use></svg>
|
||||
<i data-lucide="sticky-note" class="box-icon" aria-hidden="true"></i>
|
||||
<strong>Buona pratica.</strong> Quando l'AI suggerisce 8 rischi, non importarli tutti ciecamente.
|
||||
Scegli i 4 più rilevanti per il tuo contesto, scartane uno che è duplicato di un asset interno,
|
||||
e personalizza descrizione/probabilità per la tua realtà.
|
||||
@@ -1139,47 +1173,56 @@
|
||||
|
||||
</div><!-- /guide-wrap -->
|
||||
</div><!-- /content-body -->
|
||||
</main>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Scripts V3: api.js → common.js (helper+FAB reali) → Lucide self-host →
|
||||
topnav-v3.js (chrome, ridefinisce loadSidebar) → i18n → help -->
|
||||
<script src="/js/api.js?v=20260625d"></script>
|
||||
<script src="/js/common.js?v=20260624g"></script>
|
||||
<!-- Bootstrap Italia bundle (accordion) + override sidebar BI (common-bi.js).
|
||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI. -->
|
||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||
<script>
|
||||
if (window.bootstrap && bootstrap.loadFonts) {
|
||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||
}
|
||||
</script>
|
||||
<script src="/js/common-bi.js?v=20260625d"></script>
|
||||
<script src="/js/common.js?v=20260627v3"></script>
|
||||
<script src="/vendor/lucide/lucide.min.js"></script>
|
||||
<script src="/js/topnav-v3.js?v=20260627"></script>
|
||||
<script src="/js/i18n.js?v=20260631"></script>
|
||||
<script src="/js/help.js?v=20260625d"></script>
|
||||
<script>
|
||||
// La guida è accessibile anche da non autenticati (utile per onboarding)
|
||||
// ma se sei loggato carichi sidebar + i18n normalmente. Stessa logica
|
||||
// della guida.html originale: ZERO modifiche backend.
|
||||
if (typeof loadSidebar === 'function') loadSidebar();
|
||||
// ma se sei loggato carichi chrome + i18n normalmente. ZERO modifiche backend.
|
||||
if (typeof loadSidebar === 'function') loadSidebar(); // = loadTopnavV3()
|
||||
if (typeof I18n !== 'undefined' && I18n.init) I18n.init();
|
||||
if (typeof HelpSystem !== 'undefined' && HelpSystem.init) HelpSystem.init();
|
||||
if (window.lucide && lucide.createIcons) { try { lucide.createIcons(); } catch (e) {} }
|
||||
|
||||
// ── Accordion self-contained (sostituisce bootstrap.Collapse, ZERO CDN) ──
|
||||
function openChapter(num, doScroll) {
|
||||
var body = document.getElementById('body-' + num);
|
||||
var btn = document.querySelector('[data-bs-target="#body-' + num + '"]');
|
||||
if (!body) return;
|
||||
body.classList.add('show');
|
||||
if (btn) { btn.classList.remove('collapsed'); btn.setAttribute('aria-expanded', 'true'); }
|
||||
if (doScroll) {
|
||||
var sec = document.getElementById('cap-' + num);
|
||||
if (sec) sec.scrollIntoView({ behavior: 'smooth' });
|
||||
}
|
||||
}
|
||||
document.querySelectorAll('.accordion-button[data-bs-target]').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
var sel = btn.getAttribute('data-bs-target'); // es. #body-5
|
||||
var body = document.querySelector(sel);
|
||||
if (!body) return;
|
||||
var willOpen = !body.classList.contains('show');
|
||||
body.classList.toggle('show', willOpen);
|
||||
btn.classList.toggle('collapsed', !willOpen);
|
||||
btn.setAttribute('aria-expanded', willOpen ? 'true' : 'false');
|
||||
});
|
||||
});
|
||||
|
||||
// Apri automaticamente il capitolo se si arriva con un'ancora (#cap-N).
|
||||
(function openFromHash() {
|
||||
var h = window.location.hash;
|
||||
if (!h) return;
|
||||
var num = h.replace('#cap-', '');
|
||||
var body = document.getElementById('body-' + num);
|
||||
if (body && window.bootstrap && bootstrap.Collapse) {
|
||||
bootstrap.Collapse.getOrCreateInstance(body).show();
|
||||
document.getElementById('cap-' + num).scrollIntoView({ behavior: 'smooth' });
|
||||
}
|
||||
openChapter(h.replace('#cap-', ''), true);
|
||||
})();
|
||||
window.addEventListener('hashchange', function () {
|
||||
var num = window.location.hash.replace('#cap-', '');
|
||||
var body = document.getElementById('body-' + num);
|
||||
if (body && window.bootstrap && bootstrap.Collapse) {
|
||||
bootstrap.Collapse.getOrCreateInstance(body).show();
|
||||
}
|
||||
openChapter(window.location.hash.replace('#cap-', ''), false);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user