Files
nis2-agile/docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md
DevEnv nis2-agileandClaude Opus 4.8 06c94b3c05 [REVISIONE] Progetto revisione conformità+UI + 2 agenti esperti + correzioni R3 (audit NIS2/ISO)
Progetto di revisione unificato (docs/PROGETTO_REVISIONE_NIS2.md) che fonde:
- docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md (cyber + AI Act/GDPR/L.132 + principi AI)
- docs/VERIFICA_GAP_UI_AGID_BOOTSTRAP_ITALIA.md (gap UI vs AGID/Bootstrap Italia)
Agenti esperti: .claude/agents/nis2-expert.md + iso-27001-expert.md (read-only/advisory).

Audit R1 (NIS2) + R2 (ISO SGSI) = conformi, riserve minori. Correzioni R3 applicate
(lint + login reale OK, app su container TLS):
- IncidentController: final_report_due +30gg fissi -> +1 mese calendario, ancorato alla
  notifica reale in sendNotification (Art.23.4 lett.d).
- AIService prompt "report 30d" -> "1 mese dalla notifica 72h".
- help.js: GV.SC Allegato 2 -> Allegati 1 e 2 (Art.21.2(d)).
- nis2_sources.php: esplicitato Allegato 3=importanti / 4=essenziali.
- IsmsModelController export: nota PII.* = codifica interna (non numeri ufficiali 27018).
A4 (label whistleblowing "Art.32") DEFERITO: cita Art.32 D.Lgs.138/2024, da verificare sul testo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:54:14 +02:00

8.6 KiB

NIS2 Agile — Verifica & Gap UI vs Standard AGID / Bootstrap Italia

Decisione (utente, 2026-06-11): NIS2 deve allinearsi allo standard AGID / Bootstrap Italia, lo stesso adottato dalla Console V2 di AgileHub (NON allo standard "AGI SaaS dark" Inter/#3B82F6 del piano MIGRATION_UI_V2.md, che resta superato da questa scelta). Regola (fonti certe): i token NIS2 attuali sono letti da public/css/style.css; i token AGID/Bootstrap Italia da fonti documentate (impl. AgileHub V2 + design system ufficiale). Ciò che non è verificato sul sorgente ufficiale è marcato [da verificare]. Nessun valore inventato. Stato: v1 · 2026-06-11 · Tipo: realizzativo (audit + piano).


0. TL;DR

  • Verificato? Sì, ora: NIS2 (UI V1) NON è conforme ad AGID/Bootstrap Italia. Gap su 5 assi: palette, font, forme (radius/ombre), accessibilità WCAG AA, struttura header/footer PA.
  • Distanza: media-alta. La UI attuale usa palette Material/Google (#1a73e8) + system font; AGID richiede Blu Italia #0066CC + Titillium Web + WCAG 2.1 AA + radius 4px.
  • Strada consigliata: allineamento a livello di token in style.css (come ha fatto AgileHub con globals.css), NON riscrittura su framework — NIS2 è vanilla HTML/CSS/JS con ~20 pagine + sidebar JS-injected.
  • ⚠️ Conflitto da chiudere: esiste un piano UI V2 alternativo (docs/MIGRATION_UI_V2.md, "AGI dark") incompatibile con questa scelta → va archiviato o esplicitamente sostituito.

1. Lo standard target — AGID / Bootstrap Italia

1.1 Cos'è (fonte: Designers Italia / AGID)

Bootstrap Italia è il design system ufficiale per i servizi digitali della PA italiana (Designers Italia, AGID), basato su Bootstrap. Obbligatorio l'aspetto coerente + accessibilità WCAG 2.1 AA per la PA.

1.2 Token chiave (impl. AgileHub V2 — verificati nei doc; ufficiali [da verificare] sul sorgente)

Aspetto Valore target Fonte
Primary Blu Italia #0066CC AgileHub V2 (agid_redesign) + BI ufficiale
Font testo Titillium Web AgileHub V2 + BI ufficiale
Font headings/serif Lora [da verificare] BI ufficiale (opzionale)
Font monospace Roboto Mono [da verificare] BI ufficiale
Radius 4px (flat, poche ombre) AgileHub V2
Accessibilità WCAG 2.1 AA (contrasto testo ≥4.5:1, UI/large ≥3:1) obbligo PA
Componenti header slim+main, footer istituzionale, card, .btn-primary, form BI BI ufficiale [da verificare] esatti

Riferimento interno: AgileHub Console V2 = 167 schermate su /v2, build verde, globals.css + design token. LG231 ha il branch pilota feat/v2-pilot-bootstrap-italia. (Quindi esiste già un'implementazione suite da cui copiare i token.)


2. Stato attuale NIS2 (UI V1) — token reali (public/css/style.css, 2399 righe)

Token Valore attuale Famiglia
--primary #1a73e8 Google/Material blue (≠ Blu Italia)
--secondary #34a853 Google green
--warning #fbbc04 Google yellow
--danger #ea4335 Google red
--info #4285f4 Google blue
--font-family -apple-system, Segoe UI, Roboto… system font (no Titillium, no Google Fonts caricati)
--sidebar-bg #1e293b dark slate
--content-bg #f1f5f9 light
--card-shadow ombre morbide multiple non stile flat AGID
Neutrals --gray-50…900 (Slate/Tailwind) ok come scala, ma non i grigi BI

Struttura: ~20 pagine app, ognuna con un blocco <style> inline specifico; sidebar/topbar iniettate via JS (public/js/common.js → loadSidebar()); pagine standalone (login/register/onboarding/landing) senza sidebar. Nessun framework CSS.


3. Gap analysis (V1 → AGID/Bootstrap Italia)

# Asse Stato V1 Target AGID Gap Sforzo
1 Palette Material (#1a73e8 + Google status) Blu Italia #0066CC + palette BI 🔴 Alto — cambio primario + tutti gli stati M
2 Tipografia system font Titillium Web (+ Lora/Roboto Mono) 🔴 Alto — caricare font + applicarlo globalmente S
3 Forme radius vari + ombre morbide radius 4px, flat 🟠 Medio — normalizzare radius/ombre S
4 Accessibilità WCAG 2.1 AA non verificata (contrasti misti, es. testo grigio su bg) obbligatoria 🔴 Alto — audit contrasti + focus visibili + alt/aria M
5 Struttura PA header/sidebar custom header slim+main, footer istituzionale, componenti BI 🟠 Medio — opzionale se si resta token-level M
6 CSS inline per-pagina ~20 blocchi <style> token centralizzati 🟠 Medio — i colori hardcoded nelle pagine vanno ricondotti ai token M

⚠️ Nota: il gap su WCAG AA non è solo estetico — è un requisito (PA + coerente coi principi di docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md). Va misurato, non assunto.


4. Strategia di adeguamento — 2 opzioni

Opzione A — Allineamento a livello di TOKEN (consigliata)

Riscrivere :root di style.css con i token AGID (Blu Italia, Titillium, radius 4px, grigi BI) + caricare Titillium Web, senza introdurre la libreria Bootstrap Italia. La maggior parte delle pagine usa già le var(--…) → cambiando il :root si propaga.

  • ✅ Pro: rischio basso, zero backend (come MIGRATION_UI_V2), riusa l'impianto esistente, copiabile dai token AgileHub V2.
  • ⚠️ Contro: NON è "Bootstrap Italia certificato" al 100% (componenti/markup restano custom); è "look AGID-compliant a token". I colori hardcoded nei <style> inline (#1a73e8 ecc.) vanno bonificati uno per uno.

Opzione B — Adozione libreria bootstrap-italia

Integrare il pacchetto ufficiale bootstrap-italia (CSS/JS) e rifare i markup con i componenti BI.

  • ✅ Pro: conformità piena (componenti, accessibilità, header/footer istituzionali).
  • ⚠️ Contro: riscrittura UI estesa (~20 pagine + sidebar JS), rischio regressioni, effort alto. Coerente solo se NIS2 si rivolge davvero a PA che esigono BI "vero".

Raccomandazione: partire da A (rapido, riallinea il 80% percepito), poi valutare B mirata sulle pagine pubbliche (landing/login) se serve la conformità formale PA.


5. Piano realizzativo (Opzione A)

Fase Attività Verifica
0 Recuperare i token AGID da AgileHub V2 (globals.css/tailwind) o dal branch feat/v2-pilot-bootstrap-italia di LG231 → single source of truth token elencati
1 Font: caricare Titillium Web (self-host o Google Fonts), --font-family: 'Titillium Web', system-ui… render su 3 pagine
2 Palette: :root → --primary:#0066CC + stati BI + grigi BI; mappare i vecchi nomi (--secondary/--info/--danger/--warning) diff visivo
3 Forme: normalizzare radius→4px, ridurre ombre (flat) componenti chiave
4 Bonifica inline: grep dei colori hardcoded (#1a73e8, #4285f4, #34a853…) nelle ~20 pagine → sostituire con var(--…) grep = 0 hardcoded
5 WCAG 2.1 AA: audit contrasti (testo/grigi su bg), focus ring visibili, aria-*/alt mancanti → fix report contrasti ≥ soglie
6 Verifica: build/serve, screenshot prima/dopo, check su login + 1 dashboard + 1 form; NO modifiche backend pagine OK, 0 regressioni

Disciplina: zero backend (solo CSS/HTML/font/markup), commit incrementali, verifica visiva su pagina reale (non a memoria). Possibile farlo in worktree isolato (come il piano UI V2 esistente in /tmp/nis2-ui-v2) per non toccare la produzione finché non approvato.


6. Cosa serve da te / decisioni aperte

  1. Opzione A o B? (consiglio A per iniziare).
  2. Sorgente token: confermi che prendo i token AGID dall'implementazione AgileHub V2 (così NIS2 è identico alla suite) anziché dal Bootstrap Italia "vergine"? Se sì mi serve l'accesso al loro globals.css/tailwind (path o repo).
  3. Archiviare MIGRATION_UI_V2.md (piano "AGI dark") che ora è in conflitto con questa scelta?
  4. Scope: tutte le ~20 pagine o partire dalle pubbliche (landing/login/onboarding) + dashboard?

7. Riferimenti

  • UI attuale: public/css/style.css, public/js/common.js (loadSidebar)
  • Piano UI alternativo (in conflitto): docs/MIGRATION_UI_V2.md
  • Impl. AGID suite: agile-services/docs/ (project_dashboard_v2_agid_redesign_2026_06_06), branch LG231 feat/v2-pilot-bootstrap-italia
  • Design system ufficiale: Bootstrap Italia / Designers Italia (italia.it/designers) [da verificare] per token esatti
  • Conformità/accessibilità: docs/PRINCIPI_AI_E_CONFORMITA_NORMATIVA.md (WCAG come requisito)