nis2-agile/public/index-en.html
DevEnv nis2-agile 1d934e4e63 [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>
2026-05-29 15:42:00 +02:00

1269 lines
61 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NIS2 Agile — Simplified NIS2 compliance for companies and consultants</title>
<meta name="description" content="Multi-tenant SaaS platform for compliance with the NIS2 Directive (EU 2022/2555) and Legislative Decree 138/2024. AI gap analysis, risk management, Article 23 incident response, policies, training.">
<link rel="canonical" href="https://nis2.agile.software/index-en.html">
<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/">
<meta property="og:locale" content="en_US">
<meta property="og:title" content="NIS2 Agile — Simplified NIS2 compliance for companies and consultants">
<meta property="og:description" content="Multi-tenant SaaS platform for compliance with the NIS2 Directive (EU 2022/2555) and Legislative Decree 138/2024. AI gap analysis, risk management, Article 23 incident response, policies, training.">
<meta name="twitter:title" content="NIS2 Agile — Simplified NIS2 compliance for companies and consultants">
<meta name="twitter:description" content="Multi-tenant SaaS platform for compliance with the NIS2 Directive (EU 2022/2555) and Legislative Decree 138/2024.">
<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');
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--brand-primary: #0F172A;
--surface-darker: #0F172A;
--surface-dark: #1E293B;
--surface-card: rgba(30, 41, 59, 0.8);
--brand-accent: #EF4444;
--brand-accent2: #3B82F6;
--brand-gradient: linear-gradient(135deg, #EF4444, #DC2626);
--text-white: #F8FAFC;
--text-light: #CBD5E1;
--text-muted: #94A3B8;
--border-color: rgba(239, 68, 68, 0.12);
--green: #10B981;
--yellow: #EAB308;
--orange: #F59E0B;
--red: #EF4444;
--cyan: #EF4444;
}
html { scroll-behavior: smooth; }
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
background: var(--brand-primary);
color: var(--text-light);
line-height: 1.6;
}
/* ── NAV ── */
nav {
position: fixed;
top: 0; left: 0; right: 0;
z-index: 100;
background: rgba(15, 23, 42, 0.92);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-color);
padding: 0 40px;
height: 64px;
display: flex;
align-items: center;
justify-content: space-between;
}
.nav-brand {
display: flex;
align-items: center;
gap: 12px;
text-decoration: none;
}
.nav-icon {
width: 36px; height: 36px;
background: var(--brand-gradient);
border-radius: 10px;
display: flex; align-items: center; justify-content: center;
font-size: 16px;
color: white;
}
.nav-name {
font-size: 17px;
font-weight: 700;
color: var(--text-white);
}
.nav-name span { color: var(--cyan); }
.nav-actions { display: flex; gap: 12px; align-items: center; }
.lang-switch-nis { display: flex; align-items: center; gap: 4px; padding-left: 10px; border-left: 1px solid var(--border-color); margin-left: 6px; }
.lang-switch-nis a { color: var(--text-muted); text-decoration: none; padding: 4px 7px; border-radius: 5px; font-weight: 700; font-size: 12px; letter-spacing: 0.04em; transition: all .15s; }
.lang-switch-nis a:hover { color: var(--text-white); background: rgba(255,255,255,0.05); }
.lang-switch-nis a.active { color: var(--cyan); background: rgba(239,68,68,0.12); }
.lang-switch-nis .sep { color: var(--text-muted); font-size: 12px; }
.btn-invite {
background: var(--brand-gradient);
color: white;
box-shadow: 0 4px 16px rgba(239,68,68,0.25);
}
.btn-invite:hover {
transform: translateY(-1px);
box-shadow: 0 8px 24px rgba(239,68,68,0.35);
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 24px;
border-radius: 8px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
text-decoration: none;
transition: all 0.25s ease;
border: none;
}
.btn-sm { padding: 8px 18px; font-size: 13px; }
.btn-primary {
background: var(--brand-gradient);
color: white;
box-shadow: 0 4px 16px rgba(239,68,68,0.25);
}
.btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 8px 24px rgba(239,68,68,0.35);
}
.btn-ghost {
background: transparent;
color: var(--text-light);
border: 1px solid var(--border-color);
}
.btn-ghost:hover {
border-color: var(--cyan);
color: var(--cyan);
}
.btn-lg { padding: 14px 32px; font-size: 16px; }
/* ── LAYOUT ── */
.container { max-width: 1200px; margin: 0 auto; padding: 0 40px; }
section { padding: 100px 0; }
/* ── HERO ── */
#hero {
min-height: 100vh;
display: flex;
align-items: center;
padding-top: 64px;
}
.hero-wrap {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
width: 100%;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(239,68,68,0.1);
border: 1px solid rgba(239,68,68,0.25);
border-radius: 20px;
padding: 6px 16px;
font-size: 12px;
font-weight: 700;
color: var(--cyan);
text-transform: uppercase;
letter-spacing: 1.5px;
margin-bottom: 24px;
}
.hero-title {
font-size: 52px;
font-weight: 900;
line-height: 1.08;
color: var(--text-white);
margin-bottom: 24px;
}
.hero-title .gradient {
background: var(--brand-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-subtitle {
font-size: 18px;
color: var(--text-muted);
margin-bottom: 36px;
line-height: 1.7;
}
.hero-ctas {
display: flex;
gap: 16px;
flex-wrap: wrap;
margin-bottom: 48px;
}
.hero-stats {
display: flex;
gap: 32px;
}
.hero-stat { text-align: center; }
.hero-stat-num {
font-size: 28px;
font-weight: 800;
color: var(--cyan);
}
.hero-stat-label {
font-size: 12px;
color: var(--text-muted);
}
/* Mock dashboard visual */
.hero-visual {
background: var(--surface-dark);
border: 1px solid var(--border-color);
border-radius: 16px;
overflow: hidden;
box-shadow: 0 24px 80px rgba(239,68,68,0.1);
}
.hero-visual-bar {
background: var(--surface-darker);
padding: 12px 20px;
display: flex;
align-items: center;
gap: 8px;
border-bottom: 1px solid var(--border-color);
}
.dot { width: 10px; height: 10px; border-radius: 50%; }
.dot-red { background: #EF4444; }
.dot-yellow { background: #EAB308; }
.dot-green { background: #10B981; }
.hero-url { margin-left: 12px; font-size: 12px; color: var(--text-muted); font-family: monospace; }
.hero-mock { padding: 28px; }
.mock-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
.mock-title { font-size: 16px; font-weight: 700; color: var(--text-white); }
.mock-score { font-size: 28px; font-weight: 800; color: var(--cyan); }
.mock-gauge { height: 8px; background: rgba(239,68,68,0.1); border-radius: 4px; margin-bottom: 20px; overflow: hidden; }
.mock-gauge-fill { height: 100%; width: 73%; background: var(--brand-gradient); border-radius: 4px; }
.mock-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 16px; }
.mock-card { background: rgba(239,68,68,0.05); border: 1px solid rgba(239,68,68,0.1); border-radius: 8px; padding: 12px; }
.mock-card-label { font-size: 10px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 4px; }
.mock-card-value { font-size: 14px; font-weight: 700; color: var(--text-white); }
.status-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-right: 4px; }
.status-ok { background: var(--green); }
.status-warn { background: var(--orange); }
.status-err { background: var(--red); }
.mock-incident { background: rgba(239,68,68,0.06); border: 1px solid rgba(239,68,68,0.15); border-radius: 8px; padding: 12px; display: flex; align-items: center; gap: 10px; }
.mock-incident-icon { color: var(--red); font-size: 14px; }
.mock-incident-text { font-size: 12px; color: var(--text-light); }
.mock-incident-time { font-size: 10px; color: var(--text-muted); margin-top: 2px; }
/* ── PROBLEMA ── */
#problema { background: var(--surface-dark); }
#problema .container-full { max-width: 100%; }
.problema-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 24px;
}
.problema-card {
background: var(--brand-primary);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 32px;
}
.problema-card.highlight {
border-color: rgba(239,68,68,0.3);
background: rgba(239,68,68,0.04);
}
.problema-icon {
width: 48px; height: 48px;
border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 20px;
margin-bottom: 20px;
}
.icon-red { background: rgba(239,68,68,0.12); color: var(--red); }
.icon-orange { background: rgba(245,158,11,0.12); color: var(--orange); }
.icon-cyan { background: rgba(239,68,68,0.12); color: var(--cyan); }
.icon-blue { background: rgba(59,130,246,0.12); color: var(--brand-accent2); }
.icon-green { background: rgba(16,185,129,0.12); color: var(--green); }
.icon-purple { background: rgba(168,85,247,0.12); color: #A855F7; }
.problema-card h3 { font-size: 18px; font-weight: 700; color: var(--text-white); margin-bottom: 12px; }
.problema-card p { font-size: 14px; color: var(--text-muted); line-height: 1.7; }
.tag-badge {
display: inline-block;
font-size: 11px;
font-weight: 700;
padding: 3px 10px;
border-radius: 20px;
margin-top: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.tag-red { background: rgba(239,68,68,0.12); color: var(--red); }
.tag-orange { background: rgba(245,158,11,0.12); color: var(--orange); }
.tag-cyan { background: rgba(239,68,68,0.12); color: var(--cyan); }
/* ── SECTION HEADERS ── */
.section-header { text-align: center; margin-bottom: 64px; }
.section-eyebrow {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 2px;
color: var(--cyan);
margin-bottom: 16px;
}
.section-title {
font-size: 40px;
font-weight: 800;
color: var(--text-white);
line-height: 1.15;
margin-bottom: 16px;
}
.section-title .gradient {
background: var(--brand-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.section-desc { font-size: 17px; color: var(--text-muted); max-width: 600px; margin: 0 auto; line-height: 1.7; }
/* ── PER CHI E' ── */
#target { }
.target-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
margin-bottom: 32px;
}
.target-card {
background: var(--surface-dark);
border: 1px solid var(--border-color);
border-radius: 20px;
padding: 40px;
position: relative;
overflow: hidden;
}
.target-card.card-blue {
border-color: rgba(59,130,246,0.3);
}
.target-card.card-blue::before {
content: '';
position: absolute;
top: 0; right: 0;
width: 200px; height: 200px;
background: radial-gradient(circle, rgba(59,130,246,0.08) 0%, transparent 70%);
pointer-events: none;
}
.target-card.card-cyan {
border-color: rgba(239,68,68,0.3);
}
.target-card.card-cyan::before {
content: '';
position: absolute;
top: 0; right: 0;
width: 200px; height: 200px;
background: radial-gradient(circle, rgba(239,68,68,0.08) 0%, transparent 70%);
pointer-events: none;
}
.target-card-icon {
width: 56px; height: 56px;
border-radius: 14px;
display: flex; align-items: center; justify-content: center;
font-size: 24px;
margin-bottom: 24px;
}
.tc-blue { background: rgba(59,130,246,0.12); color: var(--brand-accent2); }
.tc-cyan { background: rgba(239,68,68,0.12); color: var(--cyan); }
.target-card h3 { font-size: 22px; font-weight: 800; color: var(--text-white); margin-bottom: 8px; }
.target-card .subtitle { font-size: 13px; color: var(--text-muted); margin-bottom: 20px; font-weight: 500; }
.target-list { list-style: none; display: flex; flex-direction: column; gap: 10px; }
.target-list li {
display: flex;
align-items: flex-start;
gap: 10px;
font-size: 14px;
color: var(--text-light);
}
.target-list li i { color: var(--cyan); margin-top: 2px; flex-shrink: 0; font-size: 12px; }
.target-card.card-blue .target-list li i { color: var(--brand-accent2); }
.target-infobar {
background: var(--surface-dark);
border: 1px solid var(--border-color);
border-radius: 12px;
padding: 20px 28px;
display: flex;
align-items: center;
gap: 16px;
font-size: 14px;
color: var(--text-light);
}
.target-infobar i { color: var(--cyan); font-size: 18px; flex-shrink: 0; }
/* ── FEATURES ── */
#soluzione { background: var(--surface-dark); }
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
.feature-card {
background: var(--brand-primary);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 28px;
transition: border-color 0.25s ease, transform 0.25s ease;
}
.feature-card:hover {
border-color: rgba(239,68,68,0.3);
transform: translateY(-2px);
}
.feature-icon {
width: 48px; height: 48px;
border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 20px;
margin-bottom: 20px;
}
.feature-card h3 { font-size: 17px; font-weight: 700; color: var(--text-white); margin-bottom: 10px; }
.feature-card p { font-size: 14px; color: var(--text-muted); line-height: 1.7; }
/* ── 231 BANNER ── */
#lg231-banner { padding: 60px 0; }
.lg231-card {
background: rgba(249,115,22,0.05);
border: 1px solid rgba(249,115,22,0.2);
border-radius: 20px;
padding: 40px 48px;
display: flex;
align-items: flex-start;
gap: 28px;
}
.lg231-icon {
width: 60px; height: 60px;
background: rgba(249,115,22,0.12);
border-radius: 14px;
display: flex; align-items: center; justify-content: center;
font-size: 26px;
color: #F97316;
flex-shrink: 0;
}
.lg231-content h3 { font-size: 20px; font-weight: 800; color: var(--text-white); margin-bottom: 10px; }
.lg231-content p { font-size: 15px; color: var(--text-muted); line-height: 1.7; margin-bottom: 20px; }
.lg231-points { display: flex; gap: 32px; flex-wrap: wrap; }
.lg231-point { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-light); }
.lg231-point i { color: #F97316; font-size: 12px; }
.btn-orange {
background: rgba(249,115,22,0.12);
color: #F97316;
border: 1px solid rgba(249,115,22,0.3);
}
.btn-orange:hover {
background: rgba(249,115,22,0.2);
border-color: #F97316;
}
/* ── HOW IT WORKS ── */
#come-funziona { }
.steps-wrap {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 24px;
position: relative;
}
.steps-wrap::before {
content: '';
position: absolute;
top: 36px; left: 10%; right: 10%;
height: 1px;
background: linear-gradient(90deg, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent);
}
.step {
text-align: center;
position: relative;
}
.step-num {
width: 72px; height: 72px;
background: var(--surface-dark);
border: 2px solid var(--border-color);
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 22px;
color: var(--cyan);
margin: 0 auto 20px;
position: relative;
z-index: 1;
}
.step h4 { font-size: 15px; font-weight: 700; color: var(--text-white); margin-bottom: 8px; }
.step p { font-size: 13px; color: var(--text-muted); line-height: 1.6; }
/* ── CTA FINALE ── */
#cta-finale { background: var(--surface-dark); }
.cta-box {
text-align: center;
background: var(--brand-primary);
border: 1px solid var(--border-color);
border-radius: 24px;
padding: 72px 48px;
position: relative;
overflow: hidden;
}
.cta-box::before {
content: '';
position: absolute;
top: -60px; left: 50%;
transform: translateX(-50%);
width: 400px; height: 400px;
background: radial-gradient(circle, rgba(239,68,68,0.08) 0%, transparent 70%);
pointer-events: none;
}
.cta-box h2 { font-size: 40px; font-weight: 800; color: var(--text-white); margin-bottom: 16px; line-height: 1.2; }
.cta-box p { font-size: 17px; color: var(--text-muted); margin-bottom: 40px; max-width: 500px; margin-left: auto; margin-right: auto; }
.cta-box .cta-actions { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
.cta-note { font-size: 13px; color: var(--text-muted); margin-top: 20px; }
/* ── FOOTER ── */
footer {
background: var(--surface-darker);
border-top: 1px solid var(--border-color);
padding: 40px;
}
.footer-inner {
max-width: 1200px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
}
.footer-brand {
display: flex;
align-items: center;
gap: 12px;
}
.footer-brand-name { font-size: 15px; font-weight: 700; color: var(--text-white); }
.footer-brand-name span { color: var(--cyan); }
.footer-links { display: flex; gap: 24px; flex-wrap: wrap; }
.footer-links a { font-size: 13px; color: var(--text-muted); text-decoration: none; transition: color 0.2s; }
.footer-links a:hover { color: var(--cyan); }
.footer-copy { font-size: 12px; color: var(--text-muted); }
/* ── NORMATIVA HIGHLIGHT ── */
.norma-strip {
background: rgba(239,68,68,0.05);
border: 1px solid rgba(239,68,68,0.15);
border-radius: 10px;
padding: 14px 20px;
display: flex;
align-items: center;
gap: 12px;
margin-top: 16px;
font-size: 13px;
color: var(--text-light);
}
.norma-strip i { color: var(--cyan); }
/* ── BADGE INVITO ── */
.invite-badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(245,158,11,0.1);
border: 1px solid rgba(245,158,11,0.25);
border-radius: 8px;
padding: 8px 16px;
font-size: 13px;
color: var(--orange);
margin-bottom: 20px;
}
.invite-badge i { font-size: 12px; }
/* ── FORM LEAD ── */
#richiedi-accesso { background: var(--surface-dark); }
.form-box {
background: var(--brand-primary);
border: 1px solid var(--border-color);
border-radius: 20px;
padding: 48px;
max-width: 680px;
margin: 0 auto;
}
.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
.form-group { display: flex; flex-direction: column; gap: 8px; }
.form-group.full { grid-column: 1 / -1; }
.form-group label {
font-size: 13px;
font-weight: 600;
color: var(--text-light);
}
.form-group label span { color: var(--red); margin-left: 2px; }
.form-group input,
.form-group select,
.form-group textarea {
background: var(--surface-dark);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 12px 16px;
font-size: 14px;
color: var(--text-white);
font-family: inherit;
transition: border-color 0.2s;
width: 100%;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--cyan);
}
.form-group input::placeholder,
.form-group textarea::placeholder { color: var(--text-muted); }
.form-group select option { background: #1E293B; }
.form-group textarea { resize: vertical; min-height: 90px; }
.form-submit { width: 100%; padding: 14px; font-size: 16px; margin-top: 8px; }
.form-note { font-size: 12px; color: var(--text-muted); text-align: center; margin-top: 12px; }
.form-success {
display: none;
text-align: center;
padding: 32px;
}
.form-success i { font-size: 48px; color: var(--green); margin-bottom: 16px; display: block; }
.form-success h3 { font-size: 22px; font-weight: 700; color: var(--text-white); margin-bottom: 8px; }
.form-success p { color: var(--text-muted); font-size: 15px; }
.form-error-msg {
display: none;
background: rgba(239,68,68,0.08);
border: 1px solid rgba(239,68,68,0.2);
border-radius: 8px;
padding: 12px 16px;
font-size: 13px;
color: var(--red);
margin-bottom: 16px;
}
/* ── RESPONSIVE ── */
/* ── 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; }
@media (max-width: 900px) {
nav { padding: 0 20px; }
.container { padding: 0 20px; }
section { padding: 60px 0; }
.hero-wrap, .target-grid, .features-grid { grid-template-columns: 1fr; }
.hero-visual { display: none; }
.hero-title { font-size: 36px; }
.section-title { font-size: 28px; }
.problema-grid { grid-template-columns: 1fr; }
.steps-wrap { grid-template-columns: 1fr 1fr; }
.steps-wrap::before { display: none; }
.lg231-card { flex-direction: column; padding: 28px; }
.footer-inner { flex-direction: column; align-items: flex-start; }
.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>
<!-- NAV -->
<nav>
<a href="/" class="nav-brand">
<div class="nav-icon"><i class="fa-solid fa-shield-halved"></i></div>
<span class="nav-name">NIS2 <span>Agile</span></span>
</a>
<a href="https://evix.agile.software" target="_blank" rel="noopener" class="evix-suite-pill" title="Part of the EViX Suite — discover all modules" 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> Sign in
</a>
<a href="#richiedi-accesso" class="btn btn-primary btn-sm">
<i class="fa-solid fa-envelope"></i> Request access
</a>
<div class="lang-switch-nis">
<a href="index.html" hreflang="it">IT</a>
<span class="sep">|</span>
<a href="index-en.html" class="active" hreflang="en">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 -->
<section id="hero">
<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>
Part of the 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>
Legislative Decree 138/2024 — In force since 16 October 2024
</div>
<h1 class="hero-title">
Simplified <span class="gradient">NIS2</span><br>
compliance
</h1>
<p class="hero-subtitle">
Multi-tenant SaaS platform to guide your organisation to compliance with the NIS2 Directive (EU 2022/2555). AI gap analysis, risk management, Article 23 incident response, policies and training &mdash; all integrated.
</p>
<div class="invite-badge">
<i class="fa-solid fa-lock"></i>
Invitation-only access &mdash; Request your code to get started
</div>
<div class="hero-ctas">
<a href="#richiedi-accesso" class="btn btn-primary btn-lg">
<i class="fa-solid fa-envelope"></i> Request access
</a>
<a href="/login.html" class="btn btn-ghost btn-lg">
<i class="fa-solid fa-right-to-bracket"></i> I have a code &mdash; Sign in
</a>
</div>
<div class="hero-stats">
<div class="hero-stat">
<div class="hero-stat-num">18</div>
<div class="hero-stat-label">Regulated sectors</div>
</div>
<div class="hero-stat">
<div class="hero-stat-num">80</div>
<div class="hero-stat-label">Gap analysis questions</div>
</div>
<div class="hero-stat">
<div class="hero-stat-num">Art.23</div>
<div class="hero-stat-label">72h incident response</div>
</div>
<div class="hero-stat">
<div class="hero-stat-num">AI</div>
<div class="hero-stat-label">Powered by Claude</div>
</div>
</div>
</div>
<div class="hero-right">
<div class="hero-visual">
<div class="hero-visual-bar">
<div class="dot dot-red"></div>
<div class="dot dot-yellow"></div>
<div class="dot dot-green"></div>
<span class="hero-url">nis2.agile.software/dashboard</span>
</div>
<div class="hero-mock">
<div class="mock-header">
<span class="mock-title">Article 21 Compliance Score</span>
<span class="mock-score">73%</span>
</div>
<div class="mock-gauge"><div class="mock-gauge-fill"></div></div>
<div class="mock-grid">
<div class="mock-card">
<div class="mock-card-label">Active risks</div>
<div class="mock-card-value"><span class="status-dot status-warn"></span>3 HIGH</div>
</div>
<div class="mock-card">
<div class="mock-card-label">Open incidents</div>
<div class="mock-card-value"><span class="status-dot status-err"></span>1 Art.23</div>
</div>
<div class="mock-card">
<div class="mock-card-label">Approved policies</div>
<div class="mock-card-value"><span class="status-dot status-ok"></span>8/12</div>
</div>
<div class="mock-card">
<div class="mock-card-label">Training</div>
<div class="mock-card-value"><span class="status-dot status-ok"></span>85%</div>
</div>
</div>
<div class="mock-incident">
<div class="mock-incident-icon"><i class="fa-solid fa-triangle-exclamation"></i></div>
<div>
<div class="mock-incident-text">Ransomware detected &mdash; ACN notification required</div>
<div class="mock-incident-time">72h deadline: 14h remaining &middot; Article 23 NIS2</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- THE PROBLEM -->
<section id="problema">
<div class="container">
<div class="section-header">
<div class="section-eyebrow"><i class="fa-solid fa-circle-exclamation"></i> The regulatory challenge</div>
<h2 class="section-title">The NIS2 obligation is already <span class="gradient">in force</span></h2>
<p class="section-desc">Legislative Decree 138/2024 has been operative since 16 October 2024. Organisations in regulated sectors must have started ACN registration and alignment with Article 21 measures.</p>
</div>
<div class="problema-grid">
<div class="problema-card highlight">
<div class="problema-icon icon-red"><i class="fa-solid fa-gavel"></i></div>
<h3>Fines up to &euro;10M</h3>
<p>Essential entities: up to <strong style="color:var(--text-white)">&euro;10M or 2%</strong> of annual global turnover. Important entities: up to <strong style="color:var(--text-white)">&euro;7M or 1.4%</strong>. ACN has already launched the first audits.</p>
<span class="tag-badge tag-red">Article 34 NIS2</span>
</div>
<div class="problema-card">
<div class="problema-icon icon-orange"><i class="fa-solid fa-building"></i></div>
<h3>18 Regulated sectors</h3>
<p>11 highly critical sectors (energy, transport, banking, digital infrastructure...) + 7 critical sectors (waste management, chemicals, food...). Over 10,000 Italian companies affected.</p>
<span class="tag-badge tag-orange">Legislative Decree 138/2024</span>
</div>
<div class="problema-card">
<div class="problema-icon icon-cyan"><i class="fa-solid fa-clock"></i></div>
<h3>Strict deadlines</h3>
<p>Significant incident notification: early warning within <strong style="color:var(--text-white)">24h</strong>, formal notification within <strong style="color:var(--text-white)">72h</strong>, final report within <strong style="color:var(--text-white)">30 days</strong>. No possibility of derogation.</p>
<span class="tag-badge tag-cyan">Article 23 NIS2</span>
</div>
</div>
<div class="norma-strip">
<i class="fa-solid fa-circle-info"></i>
<span>The NIS2 Agile platform is aligned with <strong>Legislative Decree 138/2024</strong> (Italian transposition of Directive (EU) 2022/2555), <strong>ACN</strong> guidelines and the risk-based approach of <strong>ISO/IEC 27001</strong>.</span>
</div>
</div>
</section>
<!-- WHO IT IS FOR -->
<section id="target">
<div class="container">
<div class="section-header">
<div class="section-eyebrow"><i class="fa-solid fa-users"></i> Who it is for</div>
<h2 class="section-title">Two audiences, <span class="gradient">one single platform</span></h2>
<p class="section-desc">NIS2 Agile serves both the company managing its own compliance and the consultant overseeing a client portfolio.</p>
</div>
<div class="target-grid">
<div class="target-card card-blue">
<div class="target-card-icon tc-blue"><i class="fa-solid fa-building-shield"></i></div>
<h3>SME / Enterprise company</h3>
<p class="subtitle">Essential and important sectors &mdash; Legislative Decree 138/2024</p>
<ul class="target-list">
<li><i class="fa-solid fa-check"></i> Assesses the compliance level with AI-guided gap analysis</li>
<li><i class="fa-solid fa-check"></i> Manages risks and Article 21 security measures in a single register</li>
<li><i class="fa-solid fa-check"></i> Notifies incidents within Article 23 deadlines without errors</li>
<li><i class="fa-solid fa-check"></i> Generates tailored security policies with AI in minutes</li>
<li><i class="fa-solid fa-check"></i> Monitors the supply chain and staff training</li>
<li><i class="fa-solid fa-check"></i> Maintains an immutable audit trail for ACN inspections</li>
</ul>
</div>
<div class="target-card card-cyan">
<div class="target-card-icon tc-cyan"><i class="fa-solid fa-user-tie"></i></div>
<h3>Consultant / CISO-as-a-Service</h3>
<p class="subtitle">MSSP &middot; Cybersecurity consultants &middot; External CISO</p>
<ul class="target-list">
<li><i class="fa-solid fa-check"></i> Manages a client portfolio from a single control panel</li>
<li><i class="fa-solid fa-check"></i> Each client has its own dedicated and isolated dashboard</li>
<li><i class="fa-solid fa-check"></i> Activates client licences via B2B invite tokens</li>
<li><i class="fa-solid fa-check"></i> Monitors compliance score, risks and incidents across all clients</li>
<li><i class="fa-solid fa-check"></i> Produces tailored executive reports for each company</li>
<li><i class="fa-solid fa-check"></i> API access and webhooks for integration with their own SIEM systems</li>
</ul>
</div>
</div>
<div class="target-infobar">
<i class="fa-solid fa-circle-info"></i>
<span>The consultant activates the client licence via an invite token &mdash; the client signs in directly to their dedicated dashboard with full visibility on their own compliance.</span>
</div>
</div>
</section>
<!-- THE SOLUTION -->
<section id="soluzione">
<div class="container">
<div class="section-header">
<div class="section-eyebrow"><i class="fa-solid fa-puzzle-piece"></i> The modules</div>
<h2 class="section-title">Everything you need for <span class="gradient">NIS2 compliance</span></h2>
<p class="section-desc">Eight integrated modules cover the entire perimeter of Article 21, with built-in AI (Claude) for analysis, recommendations and document generation.</p>
</div>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon icon-cyan"><i class="fa-solid fa-clipboard-list"></i></div>
<h3>AI Gap Analysis</h3>
<p>An 80-question survey across the 10 areas of Article 21. AI analyses responses and produces prioritised recommendations to close the gaps.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-orange"><i class="fa-solid fa-triangle-exclamation"></i></div>
<h3>Risk Management</h3>
<p>Risk register with 5&times;5 ISO 27005 matrix, treatment plans, monitoring and contextual AI suggestions tailored to the company's sector.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-red"><i class="fa-solid fa-bell"></i></div>
<h3>Article 23 Incident Response</h3>
<p>End-to-end workflow: 24h early warning, 72h notification, 30-day final report. Automated timeline, calculated deadlines, integrated CSIRT emails.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-blue"><i class="fa-solid fa-file-shield"></i></div>
<h3>Policy Management</h3>
<p>AI generation of tailored security policies, approval workflows, versioning and scheduled reviews with automatic reminders.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-purple"><i class="fa-solid fa-link"></i></div>
<h3>Supply Chain</h3>
<p>Critical supplier register, security assessment, risk scoring, monitoring of contractual requirements and NIS2 clauses in contracts.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-green"><i class="fa-solid fa-graduation-cap"></i></div>
<h3>Article 20 Training</h3>
<p>Mandatory courses by role, automatic assignments, completion tracking and documented training compliance for audits.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-cyan"><i class="fa-solid fa-server"></i></div>
<h3>Assets &amp; Dependencies</h3>
<p>Critical asset inventory with dependency map, classification by NIS2 impact and integration with risk assessment.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-orange"><i class="fa-solid fa-magnifying-glass-chart"></i></div>
<h3>Audit &amp; Reporting</h3>
<p>ISO/IEC 27001 controls, evidence, immutable audit trail (SHA-256 hash chain), executive HTML reports and CSV export for supervisory bodies.</p>
</div>
<div class="feature-card">
<div class="feature-icon icon-blue"><i class="fa-solid fa-whistle"></i></div>
<h3>Article 32 Whistleblowing</h3>
<p>Anonymous or signed channel for reporting security anomalies. CISO team assignment, open/investigating/closed states, full history.</p>
</div>
</div>
</div>
</section>
<!-- 231 INTEGRATION BANNER -->
<section id="lg231-banner">
<div class="container">
<div class="lg231-card">
<div class="lg231-icon"><i class="fa-solid fa-scale-balanced"></i></div>
<div class="lg231-content">
<h3>NIS2 entity? You are very likely also subject to Legislative Decree 231/2001</h3>
<p>Companies in essential and important sectors almost always also adopt the Organisational Model under Decree 231. NIS2 Agile and 231 Agile integrate natively: NIS2 compliance data (risks, incidents, controls, score) automatically feeds the evidence base for the 231 Supervisory Board (OdV), eliminating duplicated work.</p>
<div class="lg231-points">
<div class="lg231-point"><i class="fa-solid fa-check"></i> NIS2 risks &rarr; MOG 231 evidence</div>
<div class="lg231-point"><i class="fa-solid fa-check"></i> Shared audit trail</div>
<div class="lg231-point"><i class="fa-solid fa-check"></i> The OdV gains direct visibility on cyber controls</div>
<div class="lg231-point"><i class="fa-solid fa-check"></i> A single Agile platform for both compliance regimes</div>
</div>
</div>
<div style="flex-shrink:0;align-self:center;">
<a href="https://lg231.agile.software/" target="_blank" class="btn btn-orange">
<i class="fa-solid fa-arrow-up-right-from-square"></i> Discover 231 Agile
</a>
</div>
</div>
</div>
</section>
<!-- HOW IT WORKS -->
<section id="come-funziona">
<div class="container">
<div class="section-header">
<div class="section-eyebrow"><i class="fa-solid fa-map"></i> How it works</div>
<h2 class="section-title">Operational in <span class="gradient">minutes</span></h2>
<p class="section-desc">From onboarding to the first compliance report, NIS2 Agile guides the user step by step.</p>
</div>
<div class="steps-wrap">
<div class="step">
<div class="step-num"><i class="fa-solid fa-user-plus"></i></div>
<h4>Sign up</h4>
<p>Create your account in 2 minutes. Choose your role (company or consultant) and configure your organisation.</p>
</div>
<div class="step">
<div class="step-num"><i class="fa-solid fa-building"></i></div>
<h4>Classify the company</h4>
<p>Enter the VAT number and NIS2 Agile automatically detects sector, size and classification (essential / important).</p>
</div>
<div class="step">
<div class="step-num"><i class="fa-solid fa-clipboard-check"></i></div>
<h4>AI Gap Analysis</h4>
<p>Complete the 80-question survey. AI analyses the answers and produces your prioritised remediation plan.</p>
</div>
<div class="step">
<div class="step-num"><i class="fa-solid fa-chart-line"></i></div>
<h4>Monitor and maintain</h4>
<p>Real-time dashboard, manage risks, incidents, policies and training with automatic alerts and deadlines.</p>
</div>
</div>
</div>
</section>
<!-- REQUEST ACCESS FORM -->
<section id="richiedi-accesso">
<div class="container">
<div class="section-header">
<div class="section-eyebrow"><i class="fa-solid fa-envelope"></i> Request access</div>
<h2 class="section-title">Get your <span class="gradient">invitation code</span></h2>
<p class="section-desc">The platform is access-controlled. Fill in the form and we will send you the invitation code within 24 hours.</p>
</div>
<div class="form-box">
<div class="form-error-msg" id="formError"></div>
<form id="inviteForm">
<div class="form-grid">
<div class="form-group">
<label>Full name <span>*</span></label>
<input type="text" name="nome" placeholder="John Smith" required>
</div>
<div class="form-group">
<label>Business email <span>*</span></label>
<input type="email" name="email" placeholder="john@company.com" required>
</div>
<div class="form-group">
<label>Company / Firm <span>*</span></label>
<input type="text" name="azienda" placeholder="Company or firm name" required>
</div>
<div class="form-group">
<label>Phone</label>
<input type="tel" name="telefono" placeholder="+39 02 123456">
</div>
<div class="form-group">
<label>Type of use <span>*</span></label>
<select name="tipo" required>
<option value="">Select...</option>
<option value="Azienda soggetta NIS2">Company subject to NIS2</option>
<option value="Consulente / CISO esterno">Consultant / external CISO</option>
<option value="MSSP / Managed Security Provider">MSSP / Managed Security Provider</option>
<option value="IT Manager / Responsabile sicurezza">IT Manager / Head of Security</option>
<option value="DPO / Legale / Compliance">DPO / Legal / Compliance</option>
<option value="Direzione / CEO / CTO">Management / CEO / CTO</option>
</select>
</div>
<div class="form-group">
<label>Number of employees</label>
<select name="n_dipendenti">
<option value="">Select...</option>
<option value="<50">&lt;50</option>
<option value="50-249">50&ndash;249</option>
<option value="250-999">250&ndash;999</option>
<option value="1000+">1000+</option>
<option value="Studio multi-cliente">Multi-client firm</option>
</select>
</div>
<div class="form-group full">
<label>What are you interested in? <span>*</span></label>
<select name="interesse" required>
<option value="">Select...</option>
<option value="Informazioni generali">General product information</option>
<option value="Demo guidata">Guided demo with a consultant</option>
<option value="Accesso immediato">Immediate access to the platform</option>
<option value="Integrazione B2B">B2B / API integration with my system</option>
</select>
</div>
<div class="form-group full">
<label>Message (optional)</label>
<textarea name="messaggio" placeholder="Briefly describe your need or your NIS2 sector..."></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>I consent to the processing of my personal data pursuant to GDPR (art. 13). Data will be used exclusively to respond to my request. <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>Leave empty</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> Send request
</button>
<p class="form-note">
<i class="fa-solid fa-lock" style="color:var(--cyan);margin-right:4px;font-size:11px;"></i>
Reply within 24 business hours &middot; Powered by AgileHub
</p>
</form>
<div class="form-success" id="formSuccess">
<i class="fa-solid fa-circle-check"></i>
<h3>Request sent!</h3>
<p>We will contact you within 24 hours at the email provided with your personalised access code.<br><br>
<strong style="color:var(--text-white);">Already received a code?</strong><br>
<a href="/register.html" style="color:var(--cyan);text-decoration:none;">Register now with your invitation code &rarr;</a></p>
</div>
</div>
<p style="text-align:center;font-size:13px;color:var(--text-muted);margin-top:24px;">
Already have an account? <a href="/login.html" style="color:var(--cyan);text-decoration:none;">Sign in to the dashboard &rarr;</a>
</p>
</div>
</section>
<!-- FINAL CTA -->
<section id="cta-finale">
<div class="container">
<div class="cta-box">
<h2>Your NIS2 compliance<br><span style="background: var(--brand-gradient); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text;">starts with a code</span></h2>
<p>Request access today. No credit card required. Operational within 5 minutes of receiving the code.</p>
<div class="cta-actions">
<a href="#richiedi-accesso" class="btn btn-primary btn-lg">
<i class="fa-solid fa-envelope"></i> Request your invitation code
</a>
<a href="/login.html" class="btn btn-ghost btn-lg">
<i class="fa-solid fa-right-to-bracket"></i> Sign in
</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> Discover the full EViX Suite
</a>
</div>
<p class="cta-note">Are you a consultant or MSSP? The request form lets you activate access for your entire client portfolio.</p>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div class="footer-inner">
<div class="footer-brand">
<div class="nav-icon" style="width:32px;height:32px;font-size:14px;"><i class="fa-solid fa-shield-halved"></i></div>
<span class="footer-brand-name">NIS2 <span>Agile</span></span>
<span style="color:var(--text-muted);font-size:12px;margin-left:8px;">by Agile Technology SRL</span>
</div>
<div class="footer-links">
<a href="#richiedi-accesso">Request access</a>
<a href="/login.html">Sign in</a>
<a href="https://evix.agile.software" target="_blank" rel="noopener" style="color:#E31E24;font-weight:600">EViX Suite &#8599;</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 &#8599;</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">
&copy; 2026 Agile Technology SRL &mdash; Directive (EU) 2022/2555 &middot; Legislative Decree 138/2024
</div>
</div>
</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');
const errEl = document.getElementById('formError');
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 = 'You must accept the data processing consent to submit the request.';
errEl.style.display = 'block';
return;
}
errEl.style.display = 'none';
btn.disabled = true;
btn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Sending...';
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(AHUB_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
const json = await res.json();
if (res.ok && json.success !== false) {
form.style.display = 'none';
successEl.style.display = 'block';
} else {
const code = json.error && json.error.code ? ' (' + json.error.code + ')' : '';
errEl.textContent = (json.error && json.error.message) || ('Submission error' + code + '. Write to us at info@agile.software.');
errEl.style.display = 'block';
btn.disabled = false;
btn.innerHTML = '<i class="fa-solid fa-paper-plane"></i> Send request';
}
} catch {
errEl.textContent = 'Network error. Please retry or write to us at info@agile.software.';
errEl.style.display = 'block';
btn.disabled = false;
btn.innerHTML = '<i class="fa-solid fa-paper-plane"></i> Send request';
}
});
</script>
<!-- Mobile conversion layer — sticky CTA + trust ribbon -->
<script src="mobile-conversion.js?v=20260519a"
data-primary-text="Request access"
data-primary-action="anchor"
data-primary-href="#richiedi-accesso"
data-primary-icon="&rarr;"
data-accent="#EF4444"
data-accent2="#DC2626"
data-trust-items='["Legislative Decree 138/2024","AI gap analysis","Article 23 incident response","Multi-tenant SaaS"]'
data-trust-after="section#hero"
data-trust-theme="dark"
data-scroll-trigger="400"
defer></script>
</body>
</html>