[FEAT] UI: guida online, landing EN, mobile-conversion, ai-assistant, bug-reporter + help/i18n

- public/guida.html, index-en.html, service-continuity.html
- public/js/ai-assistant.js, bug-reporter.js (FAB supporto)
- public/mobile-conversion.css/js
- index.html, common.js, help.js, risks.html: aggiornamenti UI/help

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-05-29 15:42:00 +02:00
co-authored by Claude Opus 4.8
parent c0bf7b6c15
commit 1d934e4e63
11 changed files with 4227 additions and 19 deletions
+149 -18
View File
@@ -5,6 +5,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NIS2 Agile — Compliance NIS2 semplificata per aziende e consulenti</title>
<meta name="description" content="Piattaforma SaaS multi-tenant per la compliance alla Direttiva NIS2 (EU 2022/2555) e D.Lgs. 138/2024. Gap analysis AI, risk management, incident response Art.23, policy, formazione.">
<link rel="canonical" href="https://nis2.agile.software/">
<link rel="alternate" hreflang="it" href="https://nis2.agile.software/">
<link rel="alternate" hreflang="en" href="https://nis2.agile.software/index-en.html">
<link rel="alternate" hreflang="x-default" href="https://nis2.agile.software/">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
@@ -623,6 +627,11 @@
margin-bottom: 16px;
}
/* ── NAV TOGGLE (hamburger mobile ≤768px) ── */
.nav-toggle { display: none; background: none; border: 1px solid rgba(255,255,255,0.15); border-radius: 8px; cursor: pointer; padding: 8px 10px; color: var(--text-white); min-height: 40px; min-width: 40px; }
.nav-toggle:hover { background: rgba(255,255,255,0.08); border-color: var(--cyan); }
.nav-toggle svg { display: block; }
/* ── RESPONSIVE ── */
@media (max-width: 900px) {
nav { padding: 0 20px; }
@@ -637,11 +646,28 @@
.steps-wrap::before { display: none; }
.lg231-card { flex-direction: column; padding: 28px; }
.footer-inner { flex-direction: column; align-items: flex-start; }
.nav-actions .btn-ghost { display: none; }
.form-grid { grid-template-columns: 1fr; }
.form-box { padding: 28px 20px; }
}
@media (max-width: 768px) {
.nav-actions { display: none; }
.nav-actions.open {
display: flex; flex-direction: column; align-items: stretch;
position: fixed; top: 64px; left: 0; right: 0;
background: rgba(15,23,42,0.97); backdrop-filter: blur(16px);
padding: 20px; gap: 12px; z-index: 99;
border-bottom: 1px solid var(--border-color);
max-height: calc(100vh - 64px); overflow-y: auto;
}
.nav-actions.open .btn, .nav-actions.open .lang-switch-nis { width: 100%; justify-content: center; }
.nav-actions.open .lang-switch-nis { border-left: none; padding-left: 0; margin-left: 0; }
.nav-actions.open .evix-suite-pill { margin: 0; width: 100%; justify-content: center; }
.nav-toggle { display: inline-flex; align-items: center; justify-content: center; }
}
</style>
<link rel="stylesheet" href="mobile-conversion.css?v=20260519a">
<!-- Plausible Analytics -->
<script defer data-domain="nis2.agile.software" src="https://analytics.agile.software/js/script.js"></script>
</head>
<body>
@@ -651,14 +677,27 @@
<div class="nav-icon"><i class="fa-solid fa-shield-halved"></i></div>
<span class="nav-name">NIS2 <span>Agile</span></span>
</a>
<div class="nav-actions">
<a href="https://evix.agile.software" target="_blank" rel="noopener" class="evix-suite-pill" title="Parte della EViX Suite — Scopri tutti i moduli" style="display:inline-flex;align-items:center;gap:8px;padding:7px 14px;background:linear-gradient(135deg,rgba(227,30,36,0.18),rgba(227,30,36,0.08));border:1.5px solid rgba(227,30,36,0.5);color:#FCA5A5;border-radius:100px;font-size:12px;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;text-decoration:none;transition:all .2s;white-space:nowrap;margin-left:auto;margin-right:14px;">
<i class="fa-solid fa-layer-group" style="font-size:11px"></i>
<span class="evix-pill-label">EViX Suite</span>
<i class="fa-solid fa-arrow-up-right-from-square" style="font-size:9px;opacity:.75"></i>
</a>
<div class="nav-actions" id="navActions">
<a href="/login.html" class="btn btn-ghost btn-sm">
<i class="fa-solid fa-right-to-bracket"></i> Accedi
</a>
<a href="#richiedi-accesso" class="btn btn-primary btn-sm">
<i class="fa-solid fa-envelope"></i> Richiedi accesso
</a>
<div class="lang-switch-nis" style="display:flex;align-items:center;gap:4px;padding-left:10px;border-left:1px solid rgba(255,255,255,0.15);margin-left:6px;">
<a href="index.html" class="active" hreflang="it" style="color:#EF4444;text-decoration:none;padding:4px 8px;border-radius:5px;font-weight:700;font-size:12px;letter-spacing:0.04em;background:rgba(239,68,68,0.12);">IT</a>
<span style="color:rgba(255,255,255,0.3);font-size:12px;">|</span>
<a href="index-en.html" hreflang="en" style="color:#CBD5E1;text-decoration:none;padding:4px 8px;border-radius:5px;font-weight:700;font-size:12px;letter-spacing:0.04em;">EN</a>
</div>
</div>
<button class="nav-toggle" onclick="document.getElementById('navActions').classList.toggle('open')" aria-label="Menu">
<svg width="22" height="22" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
</button>
</nav>
<!-- HERO -->
@@ -666,6 +705,14 @@
<div class="container">
<div class="hero-wrap">
<div class="hero-left">
<a href="https://evix.agile.software" target="_blank" rel="noopener"
style="display:inline-flex;align-items:center;gap:8px;background:rgba(227,30,36,0.1);border:1px solid rgba(227,30,36,0.35);color:#E31E24;font-size:12.5px;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;padding:7px 14px;border-radius:100px;text-decoration:none;margin-bottom:14px;transition:all .2s;"
onmouseover="this.style.background='rgba(227,30,36,0.18)';this.style.borderColor='#E31E24'"
onmouseout="this.style.background='rgba(227,30,36,0.1)';this.style.borderColor='rgba(227,30,36,0.35)'">
<i class="fa-solid fa-layer-group" style="font-size:11px"></i>
Modulo della EViX Suite
<i class="fa-solid fa-arrow-up-right-from-square" style="font-size:10px;opacity:.8"></i>
</a>
<div class="hero-badge">
<i class="fa-solid fa-circle-check"></i>
D.Lgs. 138/2024 — In vigore dal 16 ottobre 2024
@@ -1013,12 +1060,23 @@
<textarea name="messaggio" placeholder="Descrivi brevemente la tua esigenza o il settore di appartenenza NIS2..."></textarea>
</div>
</div>
<div class="form-group full" style="margin-top:4px">
<label style="display:flex;gap:8px;align-items:flex-start;cursor:pointer;font-weight:400;font-size:13px;color:var(--text-light)">
<input type="checkbox" name="consent" id="ahubConsent" required style="margin-top:4px;flex-shrink:0;accent-color:var(--cyan)">
<span>Acconsento al trattamento dei miei dati ai sensi del GDPR (art. 13). I dati saranno usati esclusivamente per rispondere alla richiesta. <a href="https://agile.software/privacy" target="_blank" style="color:var(--cyan)">Privacy policy</a> <span style="color:var(--cyan)">*</span></span>
</label>
</div>
<!-- Honeypot anti-bot -->
<div style="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden" aria-hidden="true">
<label>Lascia vuoto</label>
<input type="text" name="website_url" tabindex="-1" autocomplete="off">
</div>
<button type="submit" class="btn btn-primary form-submit" id="submitBtn">
<i class="fa-solid fa-paper-plane"></i> Invia richiesta
</button>
<p class="form-note">
<i class="fa-solid fa-lock" style="color:var(--cyan);margin-right:4px;font-size:11px;"></i>
I tuoi dati sono trattati nel rispetto del GDPR. Nessuna cessione a terzi.
Risposta entro 24h lavorative · Powered by AgileHub
</p>
</form>
<div class="form-success" id="formSuccess">
@@ -1048,6 +1106,9 @@
<a href="/login.html" class="btn btn-ghost btn-lg">
<i class="fa-solid fa-right-to-bracket"></i> Accedi
</a>
<a href="https://evix.agile.software" target="_blank" rel="noopener" class="btn btn-ghost btn-lg" style="border-color:rgba(227,30,36,0.45);color:#E31E24">
<i class="fa-solid fa-layer-group"></i> Scopri tutta la EViX Suite
</a>
</div>
<p class="cta-note">Sei un consulente o MSSP? Il form di richiesta ti permette di attivare accesso per il tuo intero portfolio clienti.</p>
</div>
@@ -1065,7 +1126,13 @@
<div class="footer-links">
<a href="#richiedi-accesso">Richiedi accesso</a>
<a href="/login.html">Accedi</a>
<a href="https://lg231.agile.software/" target="_blank">231 Agile</a>
<a href="https://evix.agile.software" target="_blank" rel="noopener" style="color:#E31E24;font-weight:600">EViX Suite ↗</a>
<a href="https://lg231.agile.software/" target="_blank" rel="noopener">231 Agile</a>
<a href="https://qsa.agile.software/" target="_blank" rel="noopener">Agile QSA</a>
<a href="https://trpg.agile.software/" target="_blank" rel="noopener">TRPG Agile</a>
<a href="https://sustainai.agile.software/" target="_blank" rel="noopener">SustainAI</a>
<a href="https://platform.agile.software/" target="_blank" rel="noopener" style="color:#A78BFA;font-weight:600">Built on Agile Platform ↗</a>
<a href="https://agile.software/" target="_blank" rel="noopener">Agile Technology</a>
<a href="mailto:info@agile.software">info@agile.software</a>
</div>
<div class="footer-copy">
@@ -1075,6 +1142,39 @@
</footer>
<script>
/* AgileHub Lead Pipeline — NIS2 Agile (tenant agile-technology) */
const AHUB_PK = '02fd04c434fb5e1a83d11ee001f88e2677e8660f';
const AHUB_ENDPOINT = 'https://agilehub.agile.software/api/public/applets/' + AHUB_PK + '/submit';
/* Provenance tracking */
let __scrollMax = 0;
window.addEventListener('scroll', () => {
const h = document.documentElement;
const pct = Math.round((h.scrollTop || window.scrollY) / (h.scrollHeight - h.clientHeight) * 100);
if (pct > __scrollMax) __scrollMax = Math.min(pct, 100);
}, { passive: true });
const __pageLoadedAt = Date.now();
function ahubMetadata() {
const u = new URLSearchParams(location.search);
const md = {
utm_source: u.get('utm_source') || null,
utm_medium: u.get('utm_medium') || null,
utm_campaign: u.get('utm_campaign') || null,
utm_content: u.get('utm_content') || null,
utm_term: u.get('utm_term') || null,
referrer: document.referrer || null,
page_title: document.title,
page_url: location.href,
scroll_depth_pct: __scrollMax,
time_on_page_sec: Math.round((Date.now() - __pageLoadedAt) / 1000),
viewport: window.innerWidth + 'x' + window.innerHeight,
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
};
return md;
}
document.getElementById('inviteForm').addEventListener('submit', async function(e) {
e.preventDefault();
const btn = document.getElementById('submitBtn');
@@ -1082,35 +1182,52 @@ document.getElementById('inviteForm').addEventListener('submit', async function(
const successEl = document.getElementById('formSuccess');
const form = e.target;
/* Honeypot anti-bot — silent reject */
if (form.website_url && form.website_url.value) {
form.style.display = 'none';
successEl.style.display = 'block';
return;
}
if (!form.consent.checked) {
errEl.textContent = 'È necessario accettare il trattamento dati per inviare la richiesta.';
errEl.style.display = 'block';
return;
}
errEl.style.display = 'none';
btn.disabled = true;
btn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Invio in corso...';
const data = {
name: form.nome.value.trim(),
email: form.email.value.trim(),
phone: form.telefono.value.trim(),
company: form.azienda.value.trim(),
tipo: form.tipo.value,
size: form.n_dipendenti.value,
product_interest: form.interesse.value,
source: 'nis2-landing',
notes: form.messaggio.value.trim()
const payload = {
name: form.nome.value.trim(),
email: form.email.value.trim(),
phone: form.telefono.value.trim(),
company: form.azienda.value.trim(),
tipo: form.tipo.value,
consent: true,
fields: {
n_dipendenti: form.n_dipendenti.value,
interesse: form.interesse.value,
messaggio: form.messaggio.value.trim()
},
metadata: ahubMetadata()
};
try {
const res = await fetch('/api/mktg-lead/submit', {
const res = await fetch(AHUB_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
body: JSON.stringify(payload)
});
const json = await res.json();
if (res.ok && json.success) {
if (res.ok && json.success !== false) {
form.style.display = 'none';
successEl.style.display = 'block';
} else {
errEl.textContent = json.message || 'Errore nell\'invio. Riprova o scrivici a info@agile.software.';
const code = json.error && json.error.code ? ' (' + json.error.code + ')' : '';
errEl.textContent = (json.error && json.error.message) || ('Errore nell\'invio' + code + '. Scrivici a info@agile.software.');
errEl.style.display = 'block';
btn.disabled = false;
btn.innerHTML = '<i class="fa-solid fa-paper-plane"></i> Invia richiesta';
@@ -1123,5 +1240,19 @@ document.getElementById('inviteForm').addEventListener('submit', async function(
}
});
</script>
<!-- Mobile conversion layer — sticky CTA + trust ribbon -->
<script src="mobile-conversion.js?v=20260519a"
data-primary-text="Richiedi accesso"
data-primary-action="anchor"
data-primary-href="#richiedi-accesso"
data-primary-icon="→"
data-accent="#EF4444"
data-accent2="#DC2626"
data-trust-items='["D.Lgs. 138/2024","Gap analysis AI","Incident response Art.23","Multi-tenant SaaS"]'
data-trust-after="section#hero"
data-trust-theme="dark"
data-scroll-trigger="400"
defer></script>
</body>
</html>