// EvaluationCMMC.jsx — Verigo Global: CMMC 2.0 online readiness evaluation (level-driven, gated, resumable) const { V: EV, MAXW: EMW, FONT: EFT } = window; /* ── PROGRESS PERSISTENCE (localStorage) ─────────────────── */ const PROG_KEY = 'verigo_cmmc_eval'; const loadProg = () => { try { return JSON.parse(localStorage.getItem(PROG_KEY) || 'null'); } catch (e) { return null; } }; const saveProg = (p) => { try { localStorage.setItem(PROG_KEY, JSON.stringify(p)); } catch (e) {} }; const clearProg = () => { try { localStorage.removeItem(PROG_KEY); } catch (e) {} }; const cPreviewThemes = [ ['lock', 'AC · Access Control', 58], ['shield', 'IA · Identification', 64], ['network', 'SC · Comms Protection', 52], ['activity', 'SI · System Integrity', 70], ]; /* ── RESUME BANNER ───────────────────────────────────────── */ const CResumeBanner = ({ prog, onResume, onStartOver }) => { const done = prog.stage === 'results'; const when = prog.ts ? new Date(prog.ts).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) + ' · ' + new Date(prog.ts).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' }) : ''; const lvl = prog.level ? 'Level ' + prog.level : ''; return (
{done ? 'Your last evaluation is complete and saved.' : 'You have an evaluation in progress.'}
{prog.scope && prog.scope.company ? prog.scope.company + ' · ' : ''}{lvl ? lvl + ' · ' : ''}{when ? 'Saved ' + when : 'Pick up where you left off.'}
{done ? 'View saved results' : 'Resume evaluation'} Start over
); }; /* ── PREVIEW DASHBOARD (illustrative, intro only) ────────── */ const CScorePreview = () => (
Readiness report
Sample · L2
61 / 100
Overall maturity
Established
41 of 110 practices need work before assessment.
{cPreviewThemes.map(([ic, name, pct], i) => (
{name} {pct}%
))}
); /* ── INTRO STAGE ─────────────────────────────────────────── */ const CEvalIntro = ({ onStart, onNav, resume, onResume, onStartOver }) => { const steps = [ ['target', 'Pick your level & scope', 'Choose Level 1, 2, or 3 and tell us about your environment — your level decides exactly which practices the evaluation asks about.'], ['gauge', 'Instant scoring', 'Get a weighted maturity score with a domain-by-domain breakdown showing where you stand against 800-171.'], ['flag', 'Mapped action plan', 'Every gap links straight to the toolkit document, policy, or practice that closes it — so you know the next move.'], ]; return (
{resume && }
/ Online Evaluation
Level-aware · ~12 minutes · free

Know where you stand on CMMC 2.0.

Measure your current state against the NIST SP 800-171 practices for the CMMC level you’re targeting. Pick your level in scope and the evaluation asks only the practices that apply — then maps every gap to the toolkit documents that close it.

{resume ? 'Start a new evaluation' : 'Start the evaluation'} onNav('contact')}>Talk to a practitioner

Free and confidential. We'll ask for a few details so we can send your results.

{steps.map(([ic, t, d], i) => (
{String(i + 1).padStart(2, '0')}

{t}

{d}

))}
{resume ? 'Start a new evaluation' : 'Start the evaluation'}
); }; /* ── SCOPE FORM ──────────────────────────────────────────── */ const SCOPE_FIELDS_CMMC = { industry: ['Defense / aerospace', 'IT / managed services', 'Manufacturing', 'Software / SaaS', 'Professional services', 'Logistics', 'Other'], employees: ['1–50', '51–200', '201–1,000', '1,000+'], region: ['United States', 'Other'], locations: ['1 site', '2–5 sites', '6–20 sites', '20+ sites'], target: ['Within 3 months', 'Within 6 months', '6–12 months', '12+ months', 'Just exploring'], }; // CMMC levels — the choice here decides which domains/questions the evaluation asks. const LEVEL_OPTIONS = [ [1, 'Level 1 — Foundational', '17 practices', 'Federal Contract Information (FCI) · annual self-assessment'], [2, 'Level 2 — Advanced', '110 practices', 'Controlled Unclassified Information (CUI) · C3PAO assessment'], [3, 'Level 3 — Expert', '110+ practices', 'High-priority CUI · adds enhanced 800-172 controls'], ]; const evInput = { fontFamily: EFT, fontSize: 14, color: EV.black, background: '#fff', border: `1.5px solid ${EV.g200}`, borderRadius: 8, padding: '11px 14px', outline: 'none', width: '100%' }; const evLabel = { fontSize: 12.5, fontWeight: 600, color: EV.black, display: 'block', marginBottom: 7 }; const evSelect = { ...evInput, appearance: 'none', backgroundImage: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239A9AAA' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\")", backgroundRepeat: 'no-repeat', backgroundPosition: 'right 12px center', paddingRight: 32, cursor: 'pointer' }; const CScopeForm = ({ onSubmit, onBack, saved }) => { const u = (() => { try { return window.TK_CMMC.getUser() || {}; } catch (e) { return {}; } })(); const sv = saved || {}; const [f, setF] = React.useState({ company: sv.company || u.company || '', name: sv.name || u.name || '', email: sv.email || u.email || '', phone: sv.phone || u.phone || '', role: sv.role || u.role || '', industry: sv.industry || u.industry || SCOPE_FIELDS_CMMC.industry[0], employees: sv.employees || u.employees || SCOPE_FIELDS_CMMC.employees[0], region: sv.region || u.region || SCOPE_FIELDS_CMMC.region[0], locations: sv.locations || u.locations || SCOPE_FIELDS_CMMC.locations[0], systems: sv.systems || u.systems || '', certs: sv.certs || u.certs || '', target: sv.target || u.target || SCOPE_FIELDS_CMMC.target[1], }); const [level, setLevel] = React.useState(() => (saved && saved.level) ? Number(saved.level) : 2); const set = (k, v) => setF((p) => ({ ...p, [k]: v })); const text = (k, lbl, props = {}) =>
set(k, e.target.value)} {...props} />
; const sel = (k, lbl) =>
; const lvlMeta = LEVEL_OPTIONS.find((o) => o[0] === level); return (
Step 1 of 2 · Scope your assessment

Tell us about your organization

Pick your target CMMC level and a few details. Your level sets which practices we assess; the rest lets us tailor your results and quote.

{ e.preventDefault(); onSubmit({ ...f, level }); }} style={{ maxWidth: 860, margin: '0 auto' }}> {/* TARGET LEVEL — drives the evaluation */}
Target CMMC level

This is the key choice — the evaluation asks only the NIST SP 800-171 practices that apply to the level you select.

{LEVEL_OPTIONS.map(([id, name, count, desc]) => { const on = level === id; return ( ); })}
{lvlMeta &&

Selected: {lvlMeta[1]} · the evaluation will cover the {lvlMeta[2]} that apply at this level.

}
Your organization
{text('company', 'Company', { required: true, placeholder: 'Acme Defense Systems' })} {text('name', 'Your name', { required: true, placeholder: 'Jane Smith' })}
{text('email', 'Work email', { required: true, type: 'email', placeholder: 'jane@company.com' })} {text('phone', 'Phone number', { required: true, type: 'tel', placeholder: '+1 555 000 1234' })}
{text('role', 'Role / title', { placeholder: 'CISO' })} {sel('industry', 'Industry')} {sel('employees', 'Company size')}
Assessment scope
{sel('region', 'Primary region')} {sel('locations', 'Sites / locations')} {sel('target', 'Target timeline')}