{"id":1103,"date":"2024-08-31T11:52:30","date_gmt":"2024-08-31T10:52:30","guid":{"rendered":"https:\/\/www.sisp-corp.com\/?page_id=1103"},"modified":"2026-08-22T11:14:12","modified_gmt":"2026-08-22T11:14:12","slug":"home-2","status":"publish","type":"page","link":"https:\/\/www.sisp-corp.com\/","title":{"rendered":"CONCENTER.IO &#8211; Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1103\" class=\"elementor elementor-1103\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0926d9c e-flex e-con-boxed e-con e-parent\" data-id=\"0926d9c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9b2910a elementor-widget elementor-widget-html\" data-id=\"9b2910a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<!-- ===================== LANGUAGE SYNC SCRIPT \u2014 REUSABLE COMPONENT \u2014 START =====================\n     Copy this AS-IS into every page's <head>, as early as possible (before\n     any CSS\/markup), together with the \"SITE HEADER\" CSS\/markup\/script\n     blocks. It is what the header's language switcher (see \"SITE HEADER\n     MARKUP\") uses to highlight the right button from the very first paint:\n     the switcher's CSS reads the <html lang> attribute this script sets,\n     not a JS class added later by the page's own translations script. Omit\n     it on a page and that page's switcher will flash \"ENG\" as active\n     before jumping to the session language \u2014 the bug this fixes. -->\n<script>\n\/\/ Sync <html lang> with the saved language preference immediately,\n\/\/ before the page paints, so assistive tech never reads mismatched content\n\/\/ AND so the header's language-switcher CSS (attribute-selector driven,\n\/\/ see \"SITE HEADER \u2014 REUSABLE COMPONENT\") highlights the correct button\n\/\/ with zero flash, independent of this page's own translation script.\n(function() {\n  try {\n    var saved = localStorage.getItem('cc-lang');\n    if (saved === 'ca' || saved === 'es' || saved === 'en') {\n      document.documentElement.setAttribute('lang', saved);\n    }\n  } catch (e) {}\n})();\n<\/script>\n<!-- ===================== LANGUAGE SYNC SCRIPT \u2014 REUSABLE COMPONENT \u2014 END ===================== -->\n\n<!-- Google Tag Manager -->\n<script>\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});\nvar f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';\nj.async=true;j.src='https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-WK2BPFRJ');\n<\/script>\n<!-- End Google Tag Manager -->\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n<script>\n\/* *******************************************\n   *******************************************\n                   LINK FLAGS\n   *******************************************\n   ******************************************* *\/\n\n\/\/ URL for the \"Book a Demo\" button (hero section, top of the page)\nvar CC_LINK_TOP_BOOKDEMO = \"mailto:info@concenter.io\";\n\n\/\/ URL for the \"See Platform\" button (hero section, top of the page)\nvar CC_LINK_TOP_SEEPLATFORM = \"https:\/\/pro.concenter.io\/how-to\/\";\n\n\/\/ URL for the \"Request Demo\" button (final CTA section, bottom of the page)\nvar CC_LINK_BOTTOM_REQUESTDEMO = \"mailto:info@concenter.io\";\n\n\/\/ URL for the \"Contact Sales\" button (final CTA section, bottom of the page)\nvar CC_LINK_BOTTOM_CONTACTSALES = \"mailto:info@concenter.io\";\n\n\/* *******************************************\n   *******************************************\n                 END LINK FLAGS\n   *******************************************\n   ******************************************* *\/\n<\/script>\n\n<title>CONCENTER.IO \u2014 Managed Detection &amp; Response | Enterprise Cybersecurity Platform<\/title>\n<meta name=\"description\" content=\"CONCENTER.IO is an AI-powered Managed Detection &amp; Response (MDR) and SOC-as-a-Service platform: 24\u00d77 threat detection, automated response, threat intelligence and compliance monitoring for businesses and public administrations.\">\n<meta name=\"keywords\" content=\"cybersecurity, managed detection and response, MDR, SOC as a service, threat intelligence, security monitoring, network security, SIEM, XDR, compliance monitoring, ciberseguretat, ciberseguridad\">\n<meta name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\n<meta name=\"author\" content=\"CONCENTER.IO\">\n<meta name=\"theme-color\" content=\"#0694A2\">\n<link rel=\"canonical\" href=\"https:\/\/pro.concenter.io\/\">\n<link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\">\n\n<!-- hreflang temporarily removed: \/en\/, \/es\/, \/ca\/ do not exist as real URLs yet.\n     Re-add once each language is served at its own URL with rendered content.\n     See SEO analysis notes for the migration plan. -->\n\n<!-- Open Graph -->\n<meta property=\"og:site_name\" content=\"CONCENTER.IO\">\n<meta property=\"og:title\" content=\"CONCENTER.IO \u2014 Enterprise Cybersecurity Platform\">\n<meta property=\"og:description\" content=\"AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses.\">\n<meta property=\"og:type\" content=\"website\">\n<meta property=\"og:url\" content=\"https:\/\/pro.concenter.io\/\">\n<meta property=\"og:image\" content=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\">\n<meta property=\"og:image:alt\" content=\"CONCENTER.IO \u2014 Enterprise Cybersecurity Platform\">\n<meta property=\"og:locale\" content=\"en_US\">\n<meta property=\"og:locale:alternate\" content=\"es_ES\">\n<meta property=\"og:locale:alternate\" content=\"ca_ES\">\n\n<!-- Twitter Card -->\n<meta name=\"twitter:card\" content=\"summary_large_image\">\n<meta name=\"twitter:title\" content=\"CONCENTER.IO \u2014 Enterprise Cybersecurity Platform\">\n<meta name=\"twitter:description\" content=\"AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses.\">\n<meta name=\"twitter:image\" content=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\">\n\n<!-- Performance: preconnect to third-party origins used on this page -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<!-- Preload the header logo (LCP-critical, above the fold) so it's ready\n     before the header needs to paint it, instead of competing with the\n     inline CSS\/JSON-LD\/GTM parsed below. -->\n<link rel=\"preload\" as=\"image\" href=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\" fetchpriority=\"high\">\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"CONCENTER.IO\",\n  \"url\": \"https:\/\/pro.concenter.io\/\",\n  \"logo\": \"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\",\n  \"description\": \"AI-powered Managed Detection & Response, Threat Intelligence and Security Operations for modern businesses.\",\n  \"sameAs\": [\"https:\/\/www.linkedin.com\/company\/concenter-io\"]\n}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebSite\",\n  \"name\": \"CONCENTER.IO\",\n  \"url\": \"https:\/\/pro.concenter.io\/\",\n  \"inLanguage\": [\"en\", \"es\", \"ca\"]\n}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Service\",\n  \"serviceType\": \"Managed Detection and Response (MDR)\",\n  \"name\": \"CONCENTER.IO Managed Cybersecurity Platform\",\n  \"provider\": {\n    \"@type\": \"Organization\",\n    \"name\": \"CONCENTER.IO\",\n    \"url\": \"https:\/\/pro.concenter.io\/\"\n  },\n  \"areaServed\": {\n    \"@type\": \"Country\",\n    \"name\": \"Spain\"\n  },\n  \"description\": \"24x7 threat detection, AI-powered classification, automated response, threat intelligence, network security monitoring and compliance reporting for SMEs and enterprises.\",\n  \"hasOfferCatalog\": {\n    \"@type\": \"OfferCatalog\",\n    \"name\": \"CONCENTER.IO Plans\",\n    \"itemListElement\": [\n      { \"@type\": \"Offer\", \"itemOffered\": { \"@type\": \"Service\", \"name\": \"Essential Plan\" } },\n      { \"@type\": \"Offer\", \"itemOffered\": { \"@type\": \"Service\", \"name\": \"Professional Plan\" } },\n      { \"@type\": \"Offer\", \"itemOffered\": { \"@type\": \"Service\", \"name\": \"Enterprise Plan\" } }\n    ]\n  }\n}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https:\/\/pro.concenter.io\/\" }\n  ]\n}\n<\/script>\n\n<script>\n\/* *******************************************\n                      FLAGS\n   ******************************************* *\/\nvar CC_FLAG_PARTNER = 0;\nvar CC_FLAG_PARTNER_NAME = \"ADS\";\nvar CC_FLAG_CUSTOMER_COMMISSION = 15;\nvar CC_FLAG_SHOW_CHC = 1; \/\/ 0 = hide the Cyber Health Check section from the page, 1 = show it (default)\nvar CC_FLAG_SHOW_CHC_POPUP = 1; \/\/ 0 = don't show the Cyber Health Check promo popup (default) | 1 = show it \u2014 currently set to 1 for testing\n<\/script>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Raleway:wght@300;400;500;600;700;800&amp;display=swap\" rel=\"stylesheet\">\n<style>\n\n  :root{\n    --bg-main:#FFFFFF;\n    --bg-secondary:#F6F8FA;\n    --card:#FFFFFF;\n    \/* Darkened slightly from the original #0694A2 (same hue\/saturation,\n       just less light) so every element that uses this as text-on-light or\n       white-text-on-solid-fill meets the WCAG AA 4.5:1 contrast minimum \u2014\n       confirmed by an automated audit (axe-core) that flagged the language\n       switcher, \"Book a Demo\" button, the hero tag pill, the active pricing\n       tab, and the \"Most Popular\" badge as falling short (3.2\u20133.6:1). The\n       decorative rgba(6,148,162, low-alpha) background tints used elsewhere\n       are left as-is since they're not text and aren't a contrast concern. *\/\n    --accent:#057580;\n    --accent-2:#2563EB;\n    --success:#16A34A;\n    --text-main:#0F172A;\n    --text-secondary:#4B5566;\n    --text-muted:#6B7280;\n    --border:rgba(15,23,42,0.10);\n  }\n\n  \/* -webkit-text-size-adjust \/ text-size-adjust:100% turns off Android\n     Chrome's (and some other mobile browsers') automatic font-size boosting\n     in narrow columns. That auto-boost silently renders text larger than\n     the CSS font-size actually says \u2014 often exactly what makes text spill\n     past a card's border on a narrow phone despite the layout looking fine\n     everywhere else it's been tested, since desktop\/emulated testing never\n     triggers the boost in the first place. Locking it to 100% means text\n     renders at the size the CSS specifies, full stop, on every device. *\/\n  html { scroll-behavior: smooth; overflow-x: hidden; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }\n  *,*::before,*::after{ box-sizing:border-box; }\n\n  \/* Disables the browser's native \"double-tap to zoom\" gesture on every\n     clickable control on the page (buttons, .cc-btn links, tech-badge\n     tap targets). Without this, two quick taps on the same button on\n     iOS\/Android \u2014 e.g. tapping \"Next\" on the testimonials carousel twice in\n     a row, which is an easy thing to do by accident \u2014 gets interpreted as a\n     zoom gesture instead of two clicks. touch-action:manipulation keeps\n     normal panning\/scrolling and pinch-zoom elsewhere on the page working\n     exactly as before; it only removes double-tap-zoom (and the old ~300ms\n     tap delay) on the elements people actually tap as buttons. *\/\n  button, .cc-btn, .cc-tech-badge-popover, [role=\"button\"] { touch-action: manipulation; }\n\n  \/* Some browser\/engine UA stylesheets (older Android WebView, Samsung\n     Internet, etc.) give native <button> elements a \"push-button\" appearance\n     that bakes in white-space:pre \u2014 which blocks text from ever wrapping to\n     a second line, so any button with more than a couple words of text just\n     overflows its own edge on a narrow screen instead of growing to fit.\n     Resetting it site-wide here means no button anywhere in this page can\n     hit that, not just the ones we've already noticed. *\/\n  button, .cc-btn { white-space: normal; }\n\n  body {\n    margin: 0;\n    \/* padding-top (offset so the fixed header never covers content) lives\n       inside the \"SITE HEADER \u2014 REUSABLE COMPONENT\" block below, together\n       with its two responsive breakpoints, so that block stays 100%\n       self-contained when copied into other pages. *\/\n    background: var(--bg-main);\n    color: var(--text-main);\n    font-family:'Raleway',sans-serif;\n    \/* Several elements on the page (tech-badge info popovers, testimonial\n       cards) are positioned absolutely and only meant to be visible\/clamped\n       within the viewport once actively opened via JS. In their default\n       (closed) state they can still sit partly past the right edge on\n       narrower windows, which \u2014 even though invisible (opacity:0) \u2014 still\n       counts toward the page's scrollable width and silently produces a\n       horizontal scrollbar. Clipping horizontal overflow at the body level\n       removes that phantom scrollbar everywhere, on every browser\/OS,\n       without affecting any element's real (in-viewport) content, since\n       nothing on this page is meant to be reached by scrolling sideways. *\/\n    overflow-x: hidden;\n  }\n\n  @media (prefers-reduced-motion: reduce){\n    *{ animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; scroll-behavior:auto !important; }\n  }\n\n  \/* ============================================================================\n     SITE HEADER \u2014 REUSABLE COMPONENT \u2014 START\n     To reuse on another page, copy AS-IS, IN THIS ORDER:\n       0. The \"LANGUAGE SYNC SCRIPT\" (search for it), in <head>, as early as\n          possible. Required for the language-switcher rules below to work \u2014\n          without it, <html lang> never gets set before paint, and the\n          switcher falls back to always showing \"ENG\" as active until this\n          page's own translation script runs (i.e. the flash bug is back).\n       1. This entire CSS block (down to \"SITE HEADER \u2014 REUSABLE COMPONENT \u2014 END\").\n       2. The <header class=\"cc-site-header\" id=\"cc-site-header\"> markup\n          (search \"SITE HEADER MARKUP\").\n       3. The \"Smooth header shrink-on-scroll effect\" script\n          (search \"SITE HEADER SCRIPT\").\n     Nothing in this block depends on any other section of the page (aside\n     from step 0 above), and nothing outside it depends on internals of this\n     block (only the CSS var --cc-header-h it publishes, consumed elsewhere\n     via var(--cc-header-h, ...) with its own fallback, so it degrades\n     gracefully if ever omitted). Every var(--accent\/--bg-secondary\/--border\/\n     --text-main\/--text-secondary) this block reads also carries its own\n     fallback value, so it renders correctly even on a page whose :root\n     doesn't define them.\n     ============================================================================ *\/\n\n  \/* Fixed header shell *\/\n  .cc-site-header {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 1000;\n    height: 168px;\n    background: rgba(255,255,255,0.96);\n    backdrop-filter: blur(8px);\n    -webkit-backdrop-filter: blur(8px);\n    border-bottom: 1px solid #e8e6df;\n    display: flex;\n    align-items: center;\n    transition: box-shadow .25s ease, height .25s ease;\n  }\n\n  .cc-site-header.cc-scrolled { box-shadow: 0 2px 16px rgba(0,0,0,0.06); height: 132px; }\n\n  .cc-site-header-inner {\n    max-width: 1100px;\n    margin: 0 auto;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 0 1.5rem;\n  }\n\n  \/* Logo (left) *\/\n  \/* flex-shrink:0: fixes logo distortion on narrow (portrait) viewports.\n     .cc-site-header-inner is a flex row (logo left, LinkedIn+lang switcher\n     right); on portrait widths the two can need more space than the\n     viewport has. Without this, the flex algorithm can shrink this item's\n     WIDTH to make it fit while the <img>'s height stays fixed via CSS,\n     squashing the logo. flex-shrink:0 makes it a hard floor: it's never\n     resized below its natural content width, so the image inside it can\n     never be forced out of proportion. *\/\n  .cc-site-logo { display:flex; align-items:center; gap:10px; text-decoration:none; color:#1a1a18; -webkit-tap-highlight-color:transparent; flex-shrink:0; }\n  \/* Shrink-on-scroll uses transform:scale() rather than animating height\n     directly, so width\/height always scale together and the logo can't go\n     out of proportion mid-transition. transform-origin:left keeps it\n     anchored to the logo's left edge instead of shrinking toward center. *\/\n  .cc-site-logo img { height:102px; width:auto; display:block; transform-origin:left center; transition:transform .25s ease; }\n  .cc-site-header.cc-scrolled .cc-site-logo img { transform:scale(0.82353); } \/* 84\/102 *\/\n  .cc-site-logo-text { font-family:'Raleway',sans-serif; font-weight:700; font-size:16px; letter-spacing:.01em; color:#1a1a18; }\n\n  \/* LinkedIn + language switcher, stacked column on the right side of the header *\/\n  .cc-site-header-right { display:flex; flex-direction:column; align-items:flex-end; gap:8px; }\n  .cc-site-header-right .cc-lang-switch { align-self:flex-start; }\n\n  .cc-site-linkedin {\n    display:flex; align-items:center; justify-content:center;\n    width:36px; height:36px; border-radius:50%;\n    \/* Same tokens as the language-switch pill right next to it (background,\n       border), instead of the old hardcoded warm beige\/near-black that\n       didn't match the page's cool teal\/slate palette. Fallbacks included\n       for the same self-contained-header reason as the language switcher. *\/\n    background:var(--bg-secondary, #F6F8FA);\n    border:1px solid var(--border, rgba(15,23,42,0.10));\n    transition:background .15s ease, border-color .15s ease, transform .15s ease;\n    flex-shrink:0; -webkit-tap-highlight-color:transparent;\n  }\n  .cc-site-linkedin:hover { background:var(--accent, #057580) !important; border-color:var(--accent, #057580) !important; transform:translateY(-1px); }\n  .cc-site-linkedin svg { width:18px; height:18px; fill:var(--text-secondary, #4B5566); transition:fill .15s ease; }\n  .cc-site-linkedin:hover svg { fill:#fff !important; }\n\n  \/* Language switcher (ENG \/ ESP \/ CAT)\n     Every var(--...) below carries a fallback (the value from this page's\n     own :root) so this block is truly self-contained: a page that copies\n     the header but doesn't happen to define --accent\/--bg-secondary\/\n     --border\/--text-main\/--text-secondary still renders it correctly. *\/\n  .cc-lang-switch { display:flex; gap:4px; background:var(--bg-secondary, #F6F8FA); border:1px solid var(--border, rgba(15,23,42,0.10)); border-radius:8px; padding:4px; }\n  .cc-lang-btn { border:none; background:transparent; font-family:'Raleway',sans-serif; font-size:12px; font-weight:600; color:var(--text-secondary, #4B5566); padding:6px 12px; border-radius:6px; cursor:pointer; transition:all .15s ease; letter-spacing:.02em; }\n  .cc-lang-btn:hover:not(.cc-lang-active) { color:var(--text-main, #0F172A) !important; background:rgba(15,23,42,.05) !important; }\n  .cc-lang-btn.cc-lang-active { background:var(--accent, #057580); color:#fff; box-shadow:none; }\n\n  \/* Which button looks active is decided by CSS, from the <html lang>\n     attribute \u2014 not by the .cc-lang-active class above, which ccApplyLang()\n     only adds once this page's (page-specific) translation script has run,\n     near the bottom of the page. <html lang> is set synchronously in\n     <head> instead (see \"LANGUAGE SYNC SCRIPT\"), before this header markup\n     even exists, so the correct button is already highlighted at first\n     paint \u2014 no flash to \"ENG\" first, on any page that also carries that\n     head script. Higher specificity than the rule above, so it always\n     wins regardless of source order or of ccApplyLang's later class\n     toggling (which still runs, for aria-current, but no longer needs to\n     drive the visual state). *\/\n  .cc-lang-switch .cc-lang-btn[data-lang] { background:transparent; color:var(--text-secondary, #4B5566); box-shadow:none; }\n  html[lang=\"en\"] .cc-lang-switch .cc-lang-btn[data-lang=\"en\"],\n  html[lang=\"es\"] .cc-lang-switch .cc-lang-btn[data-lang=\"es\"],\n  html[lang=\"ca\"] .cc-lang-switch .cc-lang-btn[data-lang=\"ca\"] {\n    background:var(--accent, #057580); color:#fff; box-shadow:none;\n  }\n\n  \/* Accessibility: focus outline, selection color, tap highlight (scoped to the header) *\/\n  .cc-site-header a:focus, .cc-site-header *:focus {\n    outline: 2px solid #888780 !important; outline-offset: 2px !important; box-shadow: none !important;\n  }\n  .cc-site-header a:focus:not(:focus-visible) { outline:none !important; }\n  .cc-site-header a { -webkit-tap-highlight-color: rgba(136,135,128,.25) !important; }\n  .cc-site-header ::selection { background:#d3d1c7 !important; color:#1a1a18 !important; }\n\n  \/* Body offset so the fixed header never covers page content \u2014 kept here,\n     together with the header's own height at each breakpoint below, so this\n     block stays self-contained. Every page that includes this header must\n     also carry this body rule (and its two responsive overrides). *\/\n  body { padding-top: 168px; }\n\n  @media (max-width:700px){\n    body{ padding-top:120px; }\n    .cc-site-header{ height:120px; }\n    .cc-site-header.cc-scrolled{ height:96px; }\n    .cc-site-logo img{ height:72px; }\n    .cc-site-header.cc-scrolled .cc-site-logo img{ transform:scale(0.83333); } \/* 60\/72 *\/\n  }\n  @media (max-width:480px){\n    body{ padding-top:96px; }\n    .cc-site-header{ height:96px; }\n    .cc-site-header.cc-scrolled{ height:80px; }\n    .cc-site-logo img{ height:56px; }\n    .cc-site-header.cc-scrolled .cc-site-logo img{ transform:scale(0.82143); } \/* 46\/56 *\/\n    .cc-site-logo-text{ display:none; }\n    .cc-site-header-right{ gap:5px; }\n    .cc-site-linkedin{ width:28px; height:28px; }\n    .cc-site-linkedin svg{ width:14px; height:14px; }\n    .cc-lang-btn{ padding:4px 8px; font-size:10.5px; }\n  }\n  \/* ===================== SITE HEADER \u2014 REUSABLE COMPONENT \u2014 END ===================== *\/\n\n\n  \/* ============================================================================\n     SITE FOOTER \u2014 REUSABLE COMPONENT \u2014 START\n     To reuse on another page, copy AS-IS, IN THIS ORDER:\n       1. This entire CSS block (down to \"SITE FOOTER \u2014 REUSABLE COMPONENT \u2014 END\").\n       2. The <footer class=\"cc-site-footer\"> markup (search \"SITE FOOTER MARKUP\").\n     No script is required for the footer \u2014 it is static markup only.\n     Self-contained: nothing outside this block depends on it, and it depends\n     on nothing outside it.\n     ============================================================================ *\/\n  .cc-site-footer {\n    font-family:'Raleway',sans-serif; background:#ffffff; box-shadow:0 -10px 18px -12px rgba(15,23,42,.18);\n    padding:4.5rem 1.5rem 2rem; margin-top:0; text-align:center; position:relative; z-index:1;\n  }\n  .cc-site-footer-inner { max-width:860px; margin:0 auto; }\n  .cc-footer-collab-text { font-size:12px; color:#6B6A66; margin-bottom:1.25rem; letter-spacing:.01em; }\n  .cc-footer-collab-logos img { max-width:100%; height:auto; max-height:64px; margin-bottom:2rem; }\n  .cc-footer-nav { display:flex; justify-content:center; flex-wrap:wrap; gap:4px 0; margin-bottom:1.25rem; }\n  .cc-footer-nav a { font-size:13px; color:#41403c; text-decoration:underline; text-decoration-color:rgba(65,64,60,.35); padding:0 14px; border-right:1px solid #d3d1c7; transition:color .15s ease, text-decoration-color .15s ease; }\n  .cc-footer-nav a:last-child { border-right:none; }\n  .cc-footer-nav a:hover { color:#185fa5 !important; text-decoration-color:#185fa5 !important; }\n  .cc-footer-copyright { font-size:12px; color:#5f5d56; }\n\n  \/* Accessibility: focus outline, selection color, tap highlight (scoped to the footer) *\/\n  .cc-site-footer a:focus, .cc-site-footer *:focus {\n    outline: 2px solid #888780 !important; outline-offset: 2px !important; box-shadow: none !important;\n  }\n  .cc-site-footer a:focus:not(:focus-visible) { outline:none !important; }\n  .cc-site-footer a { -webkit-tap-highlight-color: rgba(136,135,128,.25) !important; }\n  .cc-site-footer ::selection { background:#d3d1c7 !important; color:#1a1a18 !important; }\n\n  @media (max-width:480px){\n    .cc-footer-nav{ flex-direction:column; gap:8px; }\n    .cc-footer-nav a{ border-right:none; padding:0; }\n  }\n  \/* ===================== SITE FOOTER \u2014 REUSABLE COMPONENT \u2014 END ===================== *\/\n\n\n  \/* ===================== PRICING WIDGET (UNCHANGED LOGIC, LIGHT SKIN) ===================== *\/\n  .cc-wrap * { box-sizing:border-box; margin:0; padding:0; }\n  .cc-wrap {\n    font-family:'Raleway',sans-serif; max-width:1040px; margin:0 auto; padding:3.5rem 1rem;\n    color:var(--text-main); position:relative; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;\n  }\n  \/* Accessibility: focus outline, selection color, tap highlight (scoped to\n     the pricing widget \u2014 the equivalent header\/footer-scoped rules now live\n     inside their own reusable component blocks above). *\/\n  .cc-wrap a:focus, .cc-wrap button:focus, .cc-wrap *:focus {\n    outline: 2px solid #888780 !important; outline-offset: 2px !important; box-shadow: none !important;\n  }\n  .cc-wrap a:focus:not(:focus-visible), .cc-wrap button:focus:not(:focus-visible), .cc-wrap *:focus:not(:focus-visible) { outline:none !important; }\n  .cc-wrap a, .cc-wrap button { -webkit-tap-highlight-color: rgba(136,135,128,.25) !important; }\n  .cc-wrap ::selection { background:#d3d1c7 !important; color:#1a1a18 !important; }\n\n  .cc-header { text-align:center; margin-bottom:2.5rem; padding-top:1rem; }\n  .cc-header h2 { font-size:30px; font-weight:700; color:var(--text-main); margin-bottom:8px; letter-spacing:-.01em; }\n  .cc-header p { font-size:15px; color:var(--text-secondary); }\n\n  .cc-tabs { display:flex; gap:8px; margin-bottom:2.5rem; justify-content:center; flex-wrap:wrap; }\n  .cc-tab { padding:10px 22px; border-radius:8px; border:1px solid var(--border); background:#fff; font-size:14px; color:var(--text-secondary); cursor:pointer; transition:all .15s ease; font-family:inherit; font-weight:500; }\n  .cc-tab:hover { border-color:var(--accent) !important; color:var(--text-main) !important; background:#fff !important; box-shadow:none !important; outline:none !important; }\n  .cc-tab.cc-active { background:rgba(6,148,162,.08) !important; color:var(--accent) !important; border-color:var(--accent) !important; font-weight:600; }\n\n  .cc-segment { display:none; }\n  .cc-segment.cc-active { display:block; }\n\n  .cc-plans { display:grid; gap:20px; }\n  .cc-cloud-plans { grid-template-columns:repeat(3,1fr); }\n  .cc-onprem-plans { grid-template-columns:repeat(4,1fr); }\n\n  .cc-card { background:#fff; border:1px solid var(--border); border-radius:14px; padding:1.75rem; position:relative; transition:border-color .2s ease, box-shadow .2s ease, transform .2s ease; box-shadow:0 1px 3px rgba(15,23,42,.04); }\n  .cc-card:hover { border-color:rgba(6,148,162,.4) !important; box-shadow:0 10px 30px rgba(15,23,42,.08) !important; transform:translateY(-3px); }\n  .cc-card.cc-featured { border:1px solid var(--accent); box-shadow:0 0 0 1px var(--accent), 0 12px 36px rgba(6,148,162,.12); }\n\n  .cc-badge { display:inline-block; font-size:11px; padding:4px 10px; border-radius:6px; font-weight:700; margin-bottom:12px; letter-spacing:.02em; }\n  .cc-badge-blue { background:rgba(6,148,162,.1); color:var(--accent); }\n  .cc-badge-amber { background:rgba(22,163,74,.1); color:var(--success); }\n\n  .cc-plan-name { font-size:17px; font-weight:700; color:var(--text-main); margin-bottom:4px; }\n  .cc-plan-tagline { font-size:12.5px; color:var(--text-secondary); margin-bottom:18px; line-height:1.55; min-height:36px; }\n\n  .cc-price-main { font-size:30px; font-weight:700; color:var(--text-main); }\n  .cc-price-period { font-size:14px; font-weight:400; color:var(--text-secondary); }\n  .cc-price-setup { font-size:12px; color:var(--text-secondary); margin-top:2px; }\n  .cc-price-commission { font-size:12px; font-weight:600; color:var(--success); margin-top:8px; padding:4px 8px; background:rgba(22,163,74,.1); border-radius:6px; display:inline-block; border:none; outline:none; box-shadow:none; text-decoration:none; }\n\n  .cc-divider { border:none; border-top:1px solid var(--border); margin:16px 0; background:transparent; box-shadow:none; }\n\n  .cc-features { list-style:none; }\n  .cc-features li { font-size:12.5px; color:#3F4756; padding:5px 0; display:flex; align-items:flex-start; gap:8px; line-height:1.55; }\n  .cc-features li .cc-icon { width:14px; height:14px; flex-shrink:0; margin-top:1px; }\n  .cc-features li.cc-inc .cc-icon { color:var(--success); }\n  .cc-features li.cc-plus .cc-icon { color:var(--accent-2); }\n\n  .cc-trial { font-size:11px; color:var(--text-muted); margin-top:14px; display:flex; align-items:center; gap:5px; }\n\n  .cc-section-label { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.08em; color:#6B7787; margin:14px 0 6px; }\n  .cc-price-row { display:flex; justify-content:space-between; font-size:12.5px; color:var(--text-secondary); padding:3px 0; }\n  .cc-price-row span:last-child { font-weight:600; color:var(--text-main); }\n  .cc-price-total { display:flex; justify-content:space-between; font-size:14.5px; font-weight:700; color:var(--text-main); padding:9px 0 4px; border-top:1px solid var(--border); margin-top:6px; }\n\n  .cc-uneon-box { background:var(--bg-secondary); border:1px solid var(--border); border-radius:12px; padding:1.5rem 1.75rem; margin-top:1.75rem; display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }\n  .cc-uneon-box .cc-label { font-size:13px; color:var(--text-secondary); margin-bottom:2px; }\n  .cc-uneon-box .cc-value { font-size:15px; font-weight:700; color:var(--text-main); }\n  .cc-highlight { color:var(--success); border:none; outline:none; box-shadow:none; text-decoration:none; }\n\n  .cc-onprem-note { font-size:13px; color:#3F4756; margin-bottom:1.75rem; line-height:1.65; background:var(--bg-secondary); border:1px solid var(--border); border-radius:10px; padding:14px 18px; }\n\n  @media (max-width:700px){\n    .cc-cloud-plans{ grid-template-columns:1fr; }\n    .cc-onprem-plans{ grid-template-columns:repeat(2,1fr); }\n    .cc-plan-tagline{ min-height:auto; }\n  }\n  @media (max-width:480px){\n    .cc-onprem-plans{ grid-template-columns:1fr; }\n    .cc-tab{ font-size:13px; padding:8px 16px; }\n    .cc-header{ padding-top:0; }\n  }\n\n  \/* ===================== NEW MARKETING SECTIONS ===================== *\/\n  \/* Vertical rhythm standardized to match the Why Us \/ Real Risks gap (3.5rem\n     top + 3.5rem bottom on adjacent sections). cc-section-tight is now the\n     same value as the base and kept only for markup compatibility. *\/\n  .cc-section { padding: 3.5rem 1.5rem; max-width: 1180px; margin: 0 auto; }\n  .cc-section-tight { padding-top: 3.5rem; padding-bottom: 3.5rem; }\n  .cc-eyebrow { font-size:12px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--accent); margin-bottom:14px; }\n  .cc-h2 { font-size: clamp(28px, 4vw, 42px); font-weight:800; color:var(--text-main); letter-spacing:-.015em; line-height:1.15; max-width:820px; }\n  .cc-lede { font-size:16px; color:var(--text-secondary); width:100%; margin-top:14px; line-height:1.65; font-weight:400; }\n  .cc-center { text-align:center; margin-left:auto; margin-right:auto; }\n  .cc-center .cc-h2 { margin-left:auto; margin-right:auto; }\n  .cc-center .cc-lede { margin-left:auto; margin-right:auto; }\n\n  .cc-visually-hidden { position:absolute !important; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }\n\n  .cc-reveal { opacity:0; transform:translateY(22px); transition:opacity .7s ease, transform .7s ease; }\n  .cc-reveal.cc-in { opacity:1; transform:translateY(0); }\n\n  \/* Subtle cascade: cards in the same row fade up with a short stagger instead of all at once *\/\n  \/* cc-problem-grid: 3 cols desktop -> rows of 3 *\/\n  .cc-problem-grid > .cc-reveal:nth-child(3n+1) { transition-delay: 0ms; }\n  .cc-problem-grid > .cc-reveal:nth-child(3n+2) { transition-delay: 90ms; }\n  .cc-problem-grid > .cc-reveal:nth-child(3n+3) { transition-delay: 180ms; }\n  \/* cc-solution-grid: 4 cols desktop -> rows of 4 *\/\n  .cc-solution-grid > .cc-reveal:nth-child(4n+1) { transition-delay: 0ms; }\n  .cc-solution-grid > .cc-reveal:nth-child(4n+2) { transition-delay: 90ms; }\n  .cc-solution-grid > .cc-reveal:nth-child(4n+3) { transition-delay: 180ms; }\n  .cc-solution-grid > .cc-reveal:nth-child(4n+4) { transition-delay: 270ms; }\n  \/* cc-kpi-grid: 4 cols desktop -> single row *\/\n  .cc-kpi-grid > .cc-reveal:nth-child(4n+1) { transition-delay: 0ms; }\n  .cc-kpi-grid > .cc-reveal:nth-child(4n+2) { transition-delay: 90ms; }\n  .cc-kpi-grid > .cc-reveal:nth-child(4n+3) { transition-delay: 180ms; }\n  .cc-kpi-grid > .cc-reveal:nth-child(4n+4) { transition-delay: 270ms; }\n  \/* cc-test-grid: 3 cols desktop -> single row *\/\n  .cc-test-grid > .cc-reveal:nth-child(3n+1) { transition-delay: 0ms; }\n  .cc-test-grid > .cc-reveal:nth-child(3n+2) { transition-delay: 90ms; }\n  .cc-test-grid > .cc-reveal:nth-child(3n+3) { transition-delay: 180ms; }\n\n  @media (max-width:980px){\n    \/* problem-grid, solution-grid, kpi-grid become 2 cols -> rows of 2 *\/\n    .cc-problem-grid > .cc-reveal:nth-child(2n+1),\n    .cc-solution-grid > .cc-reveal:nth-child(2n+1),\n    .cc-kpi-grid > .cc-reveal:nth-child(2n+1) { transition-delay: 0ms; }\n    .cc-problem-grid > .cc-reveal:nth-child(2n+2),\n    .cc-solution-grid > .cc-reveal:nth-child(2n+2),\n    .cc-kpi-grid > .cc-reveal:nth-child(2n+2) { transition-delay: 90ms; }\n  }\n  @media (max-width:560px){\n    \/* all grids become 1 col -> no stagger needed *\/\n    .cc-problem-grid > .cc-reveal,\n    .cc-solution-grid > .cc-reveal,\n    .cc-kpi-grid > .cc-reveal,\n    .cc-test-grid > .cc-reveal { transition-delay: 0ms; }\n  }\n\n  \/* HERO *\/\n  .cc-hero { position:relative; overflow:hidden; background:#fff; padding-top: 3.5rem; padding-bottom: 3.5rem; }\n  .cc-hero-inner { position:relative; max-width:1180px; margin:0 auto; padding:0 1.5rem; display:grid; grid-template-columns: 1.05fr .95fr; gap:3.5rem; align-items:center; }\n  .cc-hero-text { text-align:center; }\n  .cc-hero-tag { display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:600; color:var(--accent); background:rgba(6,148,162,.08); border:1px solid rgba(6,148,162,.25); padding:7px 14px; border-radius:999px; margin-bottom:24px; }\n  .cc-hero-tag .dot { width:6px; height:6px; border-radius:50%; background:var(--success); box-shadow:0 0 0 3px rgba(22,163,74,.18); }\n  .cc-hero h1 { font-size:clamp(34px, 4.4vw, 54px); font-weight:800; color:var(--text-main); line-height:1.08; letter-spacing:-.02em; }\n  .cc-hero h1 .cc-grad { background:linear-gradient(90deg, var(--accent), var(--accent-2)); -webkit-background-clip:text; background-clip:text; color:transparent; }\n  .cc-hero p.cc-hero-sub { font-size:17px; color:var(--text-secondary); margin-top:22px; width:100%; line-height:1.7; }\n  .cc-hero-ctas { display:flex; gap:14px; margin-top:36px; flex-wrap:wrap; justify-content:center; }\n  .cc-btn { font-family:'Raleway',sans-serif; font-weight:600; font-size:14.5px; padding:14px 28px; border-radius:9px; text-decoration:none; display:inline-flex; align-items:center; gap:8px; transition:transform .15s ease, box-shadow .15s ease, background .15s ease; cursor:pointer; border:1px solid transparent; }\n  .cc-btn-primary { background:var(--accent); color:#fff; box-shadow:0 8px 22px rgba(6,148,162,.25); }\n  .cc-btn-primary:hover { transform:translateY(-2px); box-shadow:0 12px 28px rgba(6,148,162,.32); }\n  .cc-btn-ghost { background:transparent; color:var(--text-main); border-color:var(--border); }\n  .cc-btn-ghost:hover { border-color:rgba(15,23,42,.3); background:rgba(15,23,42,.03); }\n\n  .cc-hero-stats { display:flex; gap:28px; margin-top:48px; flex-wrap:wrap; justify-content:center; }\n  .cc-hero-stat strong { display:block; font-size:22px; font-weight:800; color:var(--text-main); }\n  .cc-hero-stat span { font-size:12px; color:var(--text-secondary); }\n\n  \/* dashboard mock *\/\n  .cc-mock { background:#fff; border:1px solid var(--border); border-radius:16px; padding:1.25rem; box-shadow:0 24px 60px rgba(15,23,42,.10); position:relative; }\n  .cc-mock-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }\n  .cc-mock-dots { display:flex; gap:6px; }\n  .cc-mock-dots span { width:9px; height:9px; border-radius:50%; background:rgba(15,23,42,.12); }\n  .cc-mock-title { font-size:11px; color:var(--text-secondary); letter-spacing:.05em; text-transform:uppercase; }\n  .cc-mock-row { display:flex; align-items:center; justify-content:space-between; padding:10px 12px; border-radius:8px; background:var(--bg-secondary); border:1px solid var(--border); margin-bottom:8px; }\n  .cc-mock-row .l { display:flex; align-items:center; gap:10px; font-size:12.5px; color:#3F4756; }\n  .cc-mock-row .l .pulse { width:8px; height:8px; border-radius:50%; background:var(--success); box-shadow:0 0 0 0 rgba(22,163,74,.6); animation:cc-pulse 2s infinite; }\n  .cc-mock-row .l .pulse.warn { background:#D97706; box-shadow:0 0 0 0 rgba(217,119,6,.6); }\n  @keyframes cc-pulse { 0%{ box-shadow:0 0 0 0 rgba(22,163,74,.4);} 70%{ box-shadow:0 0 0 8px rgba(22,163,74,0);} 100%{ box-shadow:0 0 0 0 rgba(22,163,74,0);} }\n  .cc-mock-row .r { font-size:11px; color:var(--text-secondary); }\n  .cc-mock-graph { height:70px; display:flex; align-items:flex-end; gap:4px; margin-top:10px; padding:0 2px; }\n  .cc-mock-graph i { flex:1; background:linear-gradient(180deg, var(--accent), rgba(6,148,162,.15)); border-radius:3px 3px 0 0; opacity:.9; }\n\n  \/* WHY US *\/\n  .cc-why { background:var(--bg-secondary); border-top:1px solid var(--border); border-bottom:1px solid var(--border); }\n  .cc-why-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:44px; }\n  .cc-why-item { background:#fff; border:1px solid var(--border); border-radius:12px; padding:1.1rem 1.4rem; display:flex; align-items:center; gap:14px; box-shadow:0 1px 3px rgba(15,23,42,.04); transition:border-color .2s ease, transform .2s ease, box-shadow .2s ease; }\n  .cc-why-item:hover { border-color:rgba(22,163,74,.35); transform:translateY(-2px); box-shadow:0 10px 26px rgba(22,163,74,.12); }\n  .cc-why-icon { width:28px; height:28px; border-radius:50%; background:rgba(22,163,74,.12); color:var(--success); display:flex; align-items:center; justify-content:center; flex-shrink:0; }\n  .cc-why-item span:last-child { font-size:14px; font-weight:600; color:var(--text-main); line-height:1.5; }\n\n  \/* TRUST *\/\n  .cc-trust { background:var(--bg-secondary); border-top:1px solid var(--border); border-bottom:1px solid var(--border); padding:3.5rem 1.5rem; }\n  .cc-trust-inner { max-width:1180px; margin:0 auto; text-align:center; }\n  .cc-trust-label { font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--accent); margin-top:0; margin-bottom:26px; font-weight:700; }\n  .cc-badges { display:flex; flex-wrap:wrap; gap:14px; justify-content:center; max-width:860px; margin:0 auto; }\n  .cc-tech-badge { font-size:13px; font-weight:600; color:#3F4756; border:1px solid var(--border); padding:9px 18px; border-radius:8px; background:#fff; letter-spacing:.02em; transition:border-color .2s, color .2s; }\n  .cc-tech-badge:hover { border-color:var(--accent); color:var(--text-main); }\n\n  \/* SELKS card popover demo \u2014 anchored next to its badge, not a centered\n     modal. Preferred placement is straight above the badge; when the badge\n     doesn't have enough clear room above it (e.g. it's close to the fixed\n     header), it falls back to opening beside the badge \u2014 to its right or\n     left, whichever side actually has room \u2014 instead of below. Every axis is\n     clamped in JS against the real, current viewport size on open, so the\n     box can never end up partly off-screen regardless of device or badge\n     position. *\/\n  .cc-tech-badge-popover { position:relative; overflow:visible; cursor:pointer; padding-right:24px; scroll-margin-top:calc(var(--cc-header-h, 100px) + 16px); }\n  .cc-tech-badge-popover::after {\n    content:\"\";\n    position:absolute; top:5px; right:6px;\n    width:5px; height:5px; border-radius:50%;\n    background:var(--accent);\n    transition:transform .2s ease, background .2s ease;\n  }\n  .cc-tech-badge-popover:hover::after { transform:scale(1.35); }\n  .cc-tech-badge-popover:focus { outline:none; }\n  .cc-tech-badge-popover:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }\n\n  \/* No max-height\/overflow here on purpose: this card must never scroll\n     internally, on any browser or OS. It always grows to fit its full text,\n     and the JS in positionPopover() is responsible for placing\/sizing it\n     (including widening it on the side-placement path) so that full box\n     always lands inside the viewport instead of needing to clip or scroll\n     to see the rest of the text.\n\n     position:fixed (not absolute) is deliberate, and so is the fact that the\n     JS moves this element to be a direct child of <body> the first time it's\n     set up (see the badges setup below). Every section on this page that\n     fades\/slides into view on scroll (\".cc-reveal\") animates with opacity\n     and transform, and ANY element with a transform sets \u2014 that creates a\n     new CSS stacking context for that section, even once the animation has\n     finished and it's sitting at transform:translateY(0). A z-index, no\n     matter how large, only wins against elements *within its own* stacking\n     context: it cannot punch through to beat a *different*, later sibling\n     section's stacking context. That's exactly why the \"Real risks\" heading\n     right below this one could paint on top of an open popover card even\n     though the card has z-index:2000 \u2014 the card was trapped inside the\n     Technologies section's own (.cc-reveal) stacking context, and the later\n     section wins by DOM order once both are separate contexts. Moving the\n     popover to be a direct child of <body> (outside every .cc-reveal\n     ancestor) and positioning it with real viewport pixel coordinates\n     computed in JS is what actually escapes that trap, instead of just\n     nudging the symptom around. *\/\n  .cc-popover {\n    position:fixed;\n    background:var(--text-main); color:#fff; border:1px solid rgba(255,255,255,.08); border-radius:12px;\n    box-shadow:0 20px 50px rgba(15,23,42,.28);\n    padding:16px 18px; width:260px; max-width:calc(100vw - 24px); overflow-wrap:break-word; word-break:break-word; text-align:left;\n    opacity:0; pointer-events:none; z-index:2000;\n    transition:opacity .18s ease, transform .18s ease;\n  }\n  .cc-popover.cc-pop-open { opacity:1; pointer-events:auto; }\n\n  \/* Default \/ preferred: above the badge. top\/left are set directly in JS\n     (positionPopover) as fixed-position viewport pixel coordinates, since\n     percentage anchors like the old `bottom:calc(100% + 12px)` only made\n     sense while this box was still a DOM child positioned relative to its\n     badge \u2014 now that it's portalled to <body>, its position is fully\n     JS-driven. *\/\n  .cc-popover.cc-pop-top { transform:translateY(6px); }\n  .cc-popover.cc-pop-top.cc-pop-open { transform:translateY(0); }\n  .cc-popover.cc-pop-top::after {\n    content:\"\"; position:absolute; top:100%; left:var(--cc-pop-arrow-left, 50%); transform:translateX(-50%);\n    border:7px solid transparent; border-top-color:var(--text-main);\n  }\n\n  \/* Fallback: beside the badge, to the left. *\/\n  .cc-popover.cc-pop-left { transform:translateX(6px); }\n  .cc-popover.cc-pop-left.cc-pop-open { transform:translateX(0); }\n  .cc-popover.cc-pop-left::after {\n    content:\"\"; position:absolute; left:100%; top:var(--cc-pop-arrow-top, 50%); transform:translateY(-50%);\n    border:7px solid transparent; border-left-color:var(--text-main);\n  }\n\n  \/* Fallback: beside the badge, to the right. *\/\n  .cc-popover.cc-pop-right { transform:translateX(-6px); }\n  .cc-popover.cc-pop-right.cc-pop-open { transform:translateX(0); }\n  .cc-popover.cc-pop-right::after {\n    content:\"\"; position:absolute; right:100%; top:var(--cc-pop-arrow-top, 50%); transform:translateY(-50%);\n    border:7px solid transparent; border-right-color:var(--text-main);\n  }\n\n  \/* Both are <span> in the markup, but need block layout so the title\n     actually sits on its own line above the body text (margin-bottom on an\n     inline element is a no-op) and so the card's auto height is computed\n     deterministically from its real children instead of an inline\n     formatting context. *\/\n  .cc-popover-title { display:block; font-size:13px; font-weight:700; color:#fff; margin-bottom:6px; }\n  .cc-popover-body { display:block; font-size:12.5px; color:rgba(255,255,255,.78); line-height:1.55; font-weight:400; }\n\n  \/* PROBLEMS *\/\n  .cc-problem-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin-top:48px; }\n  .cc-problem-card { background:#fff; border:1px solid var(--border); border-radius:14px; padding:1.75rem; transition:border-color .2s, transform .2s, box-shadow .2s; box-shadow:0 1px 3px rgba(15,23,42,.04); }\n  .cc-problem-card:hover { border-color:rgba(220,38,38,.3); transform:translateY(-3px); box-shadow:0 10px 26px rgba(220,38,38,.1); }\n  .cc-problem-icon { width:42px; height:42px; border-radius:10px; background:rgba(220,38,38,.08); display:flex; align-items:center; justify-content:center; margin-bottom:18px; color:#DC2626; }\n  .cc-problem-card h3 { font-size:16px; font-weight:700; color:var(--text-main); margin-bottom:8px; }\n  .cc-problem-card p { font-size:13.5px; color:var(--text-secondary); line-height:1.6; }\n\n  \/* SOLUTIONS *\/\n  .cc-solution-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:18px; margin-top:48px; }\n  .cc-solution-card { background:#fff; border:1px solid var(--border); border-radius:14px; padding:1.6rem; transition:border-color .2s, transform .2s, box-shadow .2s; box-shadow:0 1px 3px rgba(15,23,42,.04); }\n  .cc-solution-card:hover { border-color:rgba(6,148,162,.35); transform:translateY(-3px); box-shadow:0 10px 26px rgba(6,148,162,.1); }\n  .cc-solution-icon { width:40px; height:40px; border-radius:10px; background:rgba(6,148,162,.1); display:flex; align-items:center; justify-content:center; margin-bottom:16px; color:var(--accent); }\n  .cc-solution-card h3 { font-size:14.5px; font-weight:700; color:var(--text-main); margin-bottom:8px; }\n  .cc-solution-card p { font-size:12.5px; color:var(--text-secondary); line-height:1.6; }\n\n  \/* ARCHITECTURE *\/\n  .cc-arch { background:var(--bg-secondary); border-top:1px solid var(--border); border-bottom:1px solid var(--border); }\n  .cc-arch-flow { display:flex; flex-direction:column; align-items:center; margin-top:50px; gap:0; }\n  .cc-arch-step { width:100%; max-width:520px; background:#fff; border:1px solid var(--border); border-radius:12px; padding:20px 24px; display:flex; flex-direction:column; align-items:center; text-align:center; gap:10px; transition:border-color .2s, transform .2s, box-shadow .2s; box-shadow:0 1px 3px rgba(15,23,42,.04); }\n  .cc-arch-step:hover { border-color:var(--accent); transform:translateY(-3px); box-shadow:0 10px 26px rgba(6,148,162,.1); }\n  .cc-arch-step .n { font-size:11px; font-weight:700; color:#fff; background:var(--accent); width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex-shrink:0; }\n  .cc-arch-step .t { font-size:14.5px; font-weight:600; color:var(--text-main); margin:0; }\n  .cc-arch-connector { width:1px; height:34px; background:linear-gradient(180deg, var(--accent), var(--border)); }\n\n  \/* BENEFITS *\/\n  .cc-kpi-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:24px; margin-top:50px; }\n  .cc-kpi { text-align:center; padding:2rem 1rem; border:1px solid var(--border); border-radius:14px; background:#fff; box-shadow:0 1px 3px rgba(15,23,42,.04); transition:border-color .2s, transform .2s, box-shadow .2s; }\n  .cc-kpi:hover { border-color:rgba(6,148,162,.35); transform:translateY(-3px); box-shadow:0 10px 26px rgba(6,148,162,.1); }\n  .cc-kpi strong { font-size:clamp(28px,3.2vw,40px); font-weight:800; color:var(--accent); display:block; }\n  .cc-kpi span { font-size:12.5px; color:var(--text-secondary); display:block; margin-top:8px; }\n\n  \/* TESTIMONIALS *\/\n  .cc-test-scroll-wrap { position:relative; margin-top:48px; }\n  \/* overscroll-behavior-x:contain stops this carousel's scroll from\n     \"chaining\" into the page once it hits either end \u2014 without it, hitting\n     the last card and continuing to scroll\/click Next can bounce the whole\n     page, which on some Windows trackpads shows up as an unwanted zoom\/\n     bounce effect. touch-action:pan-x tells the browser this element only\n     handles horizontal panning, so it won't get folded into a pinch-zoom\n     gesture recognition. *\/\n  .cc-test-grid { display:flex; gap:20px; overflow-x:auto; scroll-snap-type:x mandatory; scroll-behavior:smooth; padding:4px 4px 16px; scrollbar-width:thin; scrollbar-color:rgba(6,148,162,.4) var(--bg-secondary); overscroll-behavior-x:contain; touch-action:pan-x; }\n  .cc-test-grid::-webkit-scrollbar { height:8px; }\n  .cc-test-grid::-webkit-scrollbar-track { background:var(--bg-secondary); border-radius:8px; }\n  .cc-test-grid::-webkit-scrollbar-thumb { background:rgba(6,148,162,.35); border-radius:8px; }\n  .cc-test-grid::-webkit-scrollbar-thumb:hover { background:var(--accent); }\n  .cc-test-card { background:#fff; border:1px solid var(--border); border-radius:14px; padding:1.75rem; display:flex; flex-direction:column; gap:18px; box-shadow:0 1px 3px rgba(15,23,42,.04); transition:border-color .2s, transform .2s, box-shadow .2s; flex:0 0 320px; scroll-snap-align:start; }\n  .cc-test-card:hover { border-color:rgba(6,148,162,.35); transform:translateY(-3px); box-shadow:0 10px 26px rgba(6,148,162,.1); }\n  .cc-test-quote { font-size:14px; color:#3F4756; line-height:1.65; }\n  .cc-test-result { font-size:13px; font-weight:700; color:var(--success); }\n  .cc-test-who { font-size:12.5px; color:var(--text-secondary); border-top:1px solid var(--border); padding-top:14px; }\n  .cc-test-who strong { color:var(--text-main); display:block; font-size:13px; font-weight:700; }\n  .cc-test-nav { display:flex; justify-content:center; gap:14px; margin-top:6px; }\n  .cc-test-nav-btn { width:46px; height:46px; border-radius:50%; border:none; background:var(--accent); color:#fff; cursor:pointer; display:flex; align-items:center; justify-content:center; box-shadow:0 6px 16px rgba(6,148,162,.35); transition:background .15s ease, box-shadow .15s ease, transform .15s ease; font-family:inherit; flex-shrink:0; }\n  .cc-test-nav-btn:hover { background:#057C88; box-shadow:0 8px 20px rgba(6,148,162,.45); transform:translateY(-1px); }\n  .cc-test-nav-btn:active { transform:translateY(0) scale(.95); }\n  .cc-test-nav-btn svg { width:22px; height:22px; stroke-width:2.75; }\n  @media (max-width:560px){ .cc-test-nav-btn{ width:50px; height:50px; } .cc-test-nav-btn svg{ width:24px; height:24px; } }\n  @media (max-width:560px){ .cc-test-card{ flex-basis:270px; } }\n\n  \/* FINAL CTA *\/\n  .cc-final { background:var(--bg-secondary); border-top:1px solid var(--border); text-align:center; padding:3.5rem 1.5rem; }\n  .cc-final h2 { font-size:clamp(26px,3.6vw,40px); font-weight:800; color:var(--text-main); max-width:680px; margin:0 auto; letter-spacing:-.015em; }\n  .cc-final-ctas { display:flex; gap:14px; justify-content:center; margin-top:34px; flex-wrap:wrap; }\n\n  @media (max-width:980px){\n    .cc-hero-inner{ grid-template-columns:1fr; }\n    .cc-problem-grid{ grid-template-columns:repeat(2,1fr); }\n    .cc-solution-grid{ grid-template-columns:repeat(2,1fr); }\n    .cc-kpi-grid{ grid-template-columns:repeat(2,1fr); }\n    .cc-why-grid{ grid-template-columns:repeat(2,1fr); }\n  }\n  @media (max-width:560px){\n    .cc-problem-grid{ grid-template-columns:1fr; }\n    .cc-solution-grid{ grid-template-columns:1fr; }\n    .cc-kpi-grid{ grid-template-columns:1fr; }\n    .cc-why-grid{ grid-template-columns:1fr; }\n    .cc-section{ padding:2.75rem 1.25rem; }\n  }\n\n  \/* SKIP LINK *\/\n  .cc-skip-link {\n    position:fixed; top:-48px; left:12px; z-index:3000;\n    background:var(--text-main); color:#fff; padding:12px 18px;\n    border-radius:8px; font-size:14px; font-weight:600; text-decoration:none;\n    transition:top .2s ease;\n  }\n  .cc-skip-link:focus { top:12px; }\n\n  \/* BACK TO TOP *\/\n  \/* Size (44px) and margins (right\/bottom: 15px) are matched to the\n     \"Cookie Settings\" floating button (bottom-left, injected by a separate\n     WP plugin) so both fixed corner buttons sit visually aligned \u2014 same\n     distance from their respective edge, mirrored left<->right. *\/\n  .cc-back-to-top {\n    position: fixed; right: 15px; bottom: 15px; z-index: 1500;\n    width: 44px; height: 44px; border-radius: 50%;\n    background: var(--accent); color:#fff; border:none; cursor:pointer;\n    display:flex; align-items:center; justify-content:center;\n    box-shadow: 0 8px 22px rgba(6,148,162,.3);\n    opacity:0; visibility:hidden; transform: translateY(12px);\n    transition: opacity .25s ease, transform .25s ease, visibility .25s ease, background .15s ease;\n  }\n  .cc-back-to-top.cc-visible { opacity:1; visibility:visible; transform:translateY(0); }\n  .cc-back-to-top:hover { background:#057C88; }\n  \/* Arrow drawn with pure CSS (shaft + triangle head) instead of an inline\n     SVG: an SVG inserted via innerHTML with stroke=\"currentColor\" is the\n     exact pattern that silently failed to render its stroke in Safari\/WebKit\n     for the popup close icon earlier in this file (see CHC PROMO POPUP\n     close button) \u2014 using solid CSS shapes here avoids that same risk and\n     also reads visually bolder than a thin stroked line. *\/\n  .cc-back-to-top::before,\n  .cc-back-to-top::after { content:''; position:absolute; left:50%; transform:translateX(-50%); }\n  .cc-back-to-top::before { bottom:11px; width:4px; height:13px; background:currentColor; border-radius:1px; }\n  .cc-back-to-top::after { top:11px; width:0; height:0; border-left:7px solid transparent; border-right:7px solid transparent; border-bottom:9px solid currentColor; }\n  @media (max-width:480px){\n    .cc-back-to-top{ right:15px; bottom:15px; width:44px; height:44px; }\n  }\n\n  \/* ===================== CHC PROMO POPUP ===================== *\/\n  \/* Built and appended directly to <body> in JS, for the same reason as\n     .cc-back-to-top and .cc-popover above: position:fixed here must escape\n     any .cc-reveal (transform) stacking context created by an ancestor\n     section, or it risks rendering underneath later content once that\n     section has scrolled into view and animated in. *\/\n  \/* visibility is deliberately NOT in the transition list (only opacity is):\n     transitioning visibility together with opacity here was found to make\n     Chromium miss the close button's initial .focus() call \u2014 it stayed on\n     <body> instead, breaking keyboard\/screen-reader entry into the dialog,\n     even though the overlay was visibly open. Toggling visibility instantly\n     alongside the opacity fade still gets the intended behavior (hidden +\n     unreachable when closed, immediately hit-testable\/focusable the moment\n     it opens) without that timing bug. *\/\n  .cc-chc-popup-overlay {\n    position:fixed; inset:0; z-index:4000;\n    background:rgba(15,23,42,.55);\n    display:flex; align-items:center; justify-content:center; padding:20px;\n    opacity:0; visibility:hidden; transition:opacity .25s ease;\n  }\n  .cc-chc-popup-overlay.cc-chc-popup-open { opacity:1; visibility:visible; }\n\n  .cc-chc-popup {\n    position:relative; width:100%; max-width:420px;\n    background:linear-gradient(135deg, var(--accent) 0%, var(--accent-2) 100%);\n    color:#fff; border-radius:20px; padding:2rem 2rem 1.75rem;\n    box-shadow:0 30px 70px rgba(15,23,42,.35);\n    text-align:center;\n    transform:translateY(16px) scale(.97); transition:transform .3s ease;\n  }\n  .cc-chc-popup-overlay.cc-chc-popup-open .cc-chc-popup { transform:translateY(0) scale(1); }\n\n  \/* Close button, badge and dismiss link all use solid\/near-solid white\n     (not the low-alpha translucent fills a purely decorative badge could\n     get away with) specifically because this card sits on a two-color\n     gradient: at low alpha, either end of that gradient (--accent \/\n     --accent-2) shows through enough to drop the white-on-white contrast\n     below WCAG AA. Every color here (icon, badge text, dismiss link, focus\n     ring) was checked against BOTH gradient stops, not just one, since the\n     card can be scrolled\/resized such that either end sits behind a given\n     control. See the popup's build() in the script below for the actual\n     ratios computed during that check. *\/\n  \/* The X is drawn with two plain CSS bars (::before\/::after), not an SVG.\n     An inline SVG here (viewBox + <line> children, stroke:currentColor)\n     rendered as only a small center dot on real Safari\/WebKit (desktop and\n     iOS both confirmed) \u2014 the two lines effectively failed to paint while\n     their crossing point's doubled-up antialiasing was just visible enough\n     to look like a dot. Root cause not fully pinned down (currentColor\n     inheritance into SVG content inserted via innerHTML is one live\n     suspect), but two solid-color bars sidesteps the whole SVG-in-WebKit\n     question rather than continuing to chase it. *\/\n  .cc-chc-popup-close {\n    -webkit-appearance:none; appearance:none; -webkit-tap-highlight-color:transparent;\n    position:absolute; top:14px; right:14px; z-index:1; width:34px; height:34px; border-radius:50%;\n    background:#fff; border:none; outline:none; color:var(--accent); cursor:pointer;\n    display:block; flex-shrink:0; padding:0;\n    transition:background .15s ease, color .15s ease;\n  }\n  .cc-chc-popup-close:hover { background:var(--accent); color:#fff; }\n  .cc-chc-popup-close::before, .cc-chc-popup-close::after {\n    content:\"\"; position:absolute; top:50%; left:50%;\n    width:16px; height:3px; margin:-1.5px 0 0 -8px; border-radius:2px;\n    background:currentColor;\n  }\n  .cc-chc-popup-close::before { transform:rotate(45deg); }\n  .cc-chc-popup-close::after { transform:rotate(-45deg); }\n\n  .cc-chc-popup-badge {\n    display:inline-flex; align-items:center; gap:7px; font-size:11.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase;\n    color:var(--accent); background:#fff;\n    padding:6px 13px; border-radius:999px; margin-bottom:16px;\n  }\n  .cc-chc-popup-badge .dot { width:6px; height:6px; border-radius:50%; background:var(--accent); flex-shrink:0; }\n\n  .cc-chc-popup-title { font-size:22px; font-weight:800; line-height:1.25; margin:0 0 10px; letter-spacing:-.01em; }\n  .cc-chc-popup-body { font-size:14.5px; line-height:1.6; color:rgba(255,255,255,.92); margin:0 0 22px; }\n\n  .cc-chc-popup-cta {\n    -webkit-appearance:none; appearance:none; -webkit-tap-highlight-color:transparent;\n    display:inline-flex; align-items:center; justify-content:center; gap:8px;\n    width:100%; background:#fff; color:var(--accent); font-weight:700; font-size:15px;\n    border:none; outline:none; border-radius:10px; padding:14px 20px; cursor:pointer;\n    transition:transform .2s ease, box-shadow .2s ease;\n    box-shadow:0 10px 26px rgba(15,23,42,.2);\n  }\n  .cc-chc-popup-cta:hover { transform:translateY(-2px); box-shadow:0 14px 32px rgba(15,23,42,.28); }\n\n  .cc-chc-popup-dismiss {\n    -webkit-appearance:none; appearance:none; -webkit-tap-highlight-color:transparent;\n    display:inline-block; margin-top:14px; font-size:12.5px; color:rgba(255,255,255,.92);\n    background:none; border:none; outline:none; cursor:pointer; text-decoration:underline; text-underline-offset:2px;\n  }\n  .cc-chc-popup-dismiss:hover { color:#fff; }\n\n  \/* Explicit, guaranteed-contrast focus ring (rather than relying on each\n     browser's default outline color) since the default varies by browser\/OS\n     and can't be verified in advance against a gradient background. White\n     at 3px meets the 3:1 non-text-contrast minimum against both gradient\n     stops (5.17:1 \/ 5.44:1 \u2014 see the comment above .cc-chc-popup-close). *\/\n  .cc-chc-popup-close:focus-visible,\n  .cc-chc-popup-cta:focus-visible,\n  .cc-chc-popup-dismiss:focus-visible {\n    outline:3px solid #fff; outline-offset:3px;\n  }\n\n  @media (max-width:480px) {\n    .cc-chc-popup { padding:1.75rem 1.5rem 1.5rem; border-radius:16px; }\n    .cc-chc-popup-title { font-size:19px; }\n  }\n  @media (prefers-reduced-motion: reduce) {\n    .cc-chc-popup-overlay, .cc-chc-popup, .cc-chc-popup-cta { transition:none !important; }\n  }\n\n  \/* Flag-misconfiguration banner: CC_FLAG_SHOW_CHC_POPUP=1 while\n     CC_FLAG_SHOW_CHC=0. Deliberately plain error red \u2014 not the brand teal\/\n     blue \u2014 since this is a code\/config diagnostic aimed at whoever is\n     editing the flags, not a piece of the site's own UI, and it should read\n     as unmistakably \"something is wrong\" rather than blend in. *\/\n  .cc-chc-config-error {\n    \/* top tracks the fixed header's real (possibly shrunk-on-scroll) height\n       via the --cc-header-h custom property the header's own scroll script\n       already maintains, so this sits right under it instead of covering it. *\/\n    position:fixed; top:var(--cc-header-h, 168px); left:0; right:0; z-index:9999;\n    background:#B91C1C; color:#fff; font-family:'Raleway',sans-serif;\n    font-size:13.5px; line-height:1.5; padding:12px 44px 12px 16px;\n    box-shadow:0 2px 10px rgba(0,0,0,.25);\n  }\n  .cc-chc-config-error strong { font-weight:800; }\n  .cc-chc-config-error-close {\n    -webkit-appearance:none; appearance:none;\n    position:absolute; top:6px; right:8px; width:28px; height:28px; border-radius:6px;\n    background:rgba(255,255,255,.15); border:none; outline:none; color:#fff; cursor:pointer;\n    display:flex; align-items:center; justify-content:center;\n  }\n  .cc-chc-config-error-close:hover { background:rgba(255,255,255,.28); }\n  .cc-chc-config-error-close::before, .cc-chc-config-error-close::after {\n    content:\"\"; position:absolute; top:50%; left:50%;\n    width:13px; height:2px; margin:-1px 0 0 -6.5px; border-radius:2px; background:#fff;\n  }\n  .cc-chc-config-error-close::before { transform:rotate(45deg); }\n  .cc-chc-config-error-close::after { transform:rotate(-45deg); }\n  .cc-chc-config-error-close:focus-visible { outline:2px solid #fff; outline-offset:2px; }\n\n  \/* ===================== CYBER HEALTH CHECK ===================== *\/\n  .cc-chc { background:var(--bg-secondary); border-top:1px solid var(--border); border-bottom:1px solid var(--border); }\n  .cc-chc-badge { display:inline-flex; align-items:center; gap:7px; font-size:11.5px; font-weight:700; letter-spacing:.03em; color:var(--accent-2); background:rgba(37,99,235,.08); border:1px solid rgba(37,99,235,.25); padding:6px 13px; border-radius:999px; margin-bottom:16px; }\n  .cc-chc-badge .dot { width:6px; height:6px; border-radius:50%; background:var(--accent-2); flex-shrink:0; }\n\n  .cc-chc-shell { max-width:720px; margin:44px auto 0; background:#fff; border:1px solid var(--border); border-radius:18px; box-shadow:0 24px 60px rgba(15,23,42,.10); padding:2.25rem 2.25rem 2rem; position:relative; }\n  @media (max-width:640px){ .cc-chc-shell{ padding:1.5rem 1.25rem 1.5rem; border-radius:14px; } }\n\n  .cc-chc-progress { display:flex; align-items:center; gap:8px; margin-bottom:1.75rem; }\n  .cc-chc-progress-bar { flex:1; height:5px; border-radius:99px; background:var(--border); overflow:hidden; }\n  .cc-chc-progress-fill { height:100%; background:linear-gradient(90deg, var(--accent), var(--accent-2)); border-radius:99px; transition:width .35s ease; width:0%; }\n  .cc-chc-progress-label { font-size:11.5px; font-weight:700; color:var(--text-secondary); letter-spacing:.03em; white-space:nowrap; }\n\n  .cc-chc-step { display:none; }\n  .cc-chc-step.cc-chc-step-active { display:block; animation:cc-chc-fade .35s ease; }\n  @keyframes cc-chc-fade { from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:translateY(0); } }\n\n  .cc-chc-eyebrow { font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); margin-bottom:8px; }\n  \/* Short context sentence for the current block (e.g. \"Assesses how well\n     access to critical systems is protected...\"), shown between the\n     category eyebrow and the actual question. *\/\n  .cc-chc-block-desc { font-size:13.5px; color:var(--text-secondary); line-height:1.55; margin:0 0 16px; }\n  .cc-chc-q-title { font-size:21px; font-weight:700; color:var(--text-main); line-height:1.35; margin-bottom:22px; }\n\n  .cc-chc-options { display:flex; flex-direction:column; gap:10px; }\n  \/* white-space:normal is set explicitly (not just left to inherit) because\n     <button> has a native \"push-button\" appearance in several browser\/\n     engine UA stylesheets (older Chrome\/Android WebView, Samsung Internet,\n     etc.) that ships with `white-space: pre` baked in \u2014 pre disables line\n     wrapping outright, so the text just runs past the edge of the button\n     instead of wrapping, no matter what overflow-wrap\/word-break say (those\n     only control *where* a break happens, not *whether* wrapping is allowed\n     at all). Some engines auto-clear that native styling once you set\n     display:flex on the button (which is why this was never reproducible\n     in desktop-Chromium testing here), others don't \u2014 so we stop relying on\n     that and override white-space directly, on both the button and the\n     text span, so it's correct everywhere regardless of engine quirks. *\/\n  .cc-chc-option { display:flex; align-items:flex-start; gap:12px; text-align:left; width:100%; background:#fff; border:1.5px solid var(--border); border-radius:12px; padding:14px 16px; cursor:pointer; font-family:'Raleway',sans-serif; white-space:normal; transition:border-color .15s ease, background .15s ease, transform .1s ease; }\n  .cc-chc-option:hover { border-color:rgba(6,148,162,.45); background:rgba(6,148,162,.03); }\n  .cc-chc-option:active { transform:scale(.995); }\n  .cc-chc-option.cc-chc-selected { border-color:var(--accent); background:rgba(6,148,162,.07); }\n  .cc-chc-option-dot { width:19px; height:19px; border-radius:50%; border:1.5px solid var(--border); flex-shrink:0; margin-top:2px; position:relative; transition:border-color .15s ease; }\n  .cc-chc-option.cc-chc-selected .cc-chc-option-dot { border-color:var(--accent); }\n  .cc-chc-option.cc-chc-selected .cc-chc-option-dot::after { content:\"\"; position:absolute; inset:3px; border-radius:50%; background:var(--accent); }\n  \/* flex:1;min-width:0 is what makes long answer text actually wrap instead\n     of overflowing the card: a flex item's default min-width is \"auto\",\n     which means (without this) it refuses to shrink below its own\n     unwrapped text width \u2014 so on a narrow phone the text just runs past\n     the card's border rather than breaking onto a second line and letting\n     the card grow to fit it. white-space:normal here too (belt and\n     suspenders \u2014 see the comment above .cc-chc-option): a property set\n     directly on this element always wins over whatever the parent button\n     inherited or was assigned by a UA stylesheet, so this is what actually\n     guarantees wrapping regardless of the button's own computed style. *\/\n  .cc-chc-option-text { flex:1; min-width:0; white-space:normal; overflow-wrap:break-word; word-break:break-word; font-size:14.5px; color:var(--text-main); font-weight:500; line-height:1.5; }\n\n  .cc-chc-nav { display:flex; justify-content:space-between; align-items:center; margin-top:26px; gap:12px; }\n  .cc-chc-nav .cc-btn { padding:11px 22px; font-size:13.5px; }\n  .cc-chc-back { background:transparent; color:var(--text-secondary); border:none; font-family:'Raleway',sans-serif; font-weight:600; font-size:13.5px; cursor:pointer; padding:11px 6px; display:inline-flex; align-items:center; gap:6px; }\n  .cc-chc-back:hover { color:var(--text-main); }\n  .cc-chc-next[disabled] { opacity:.4; pointer-events:none; }\n\n  \/* Lead form *\/\n  .cc-chc-field { margin-bottom:14px; }\n  .cc-chc-field label { display:block; font-size:12.5px; font-weight:600; color:var(--text-secondary); margin-bottom:6px; }\n  .cc-chc-field input[type=\"text\"], .cc-chc-field input[type=\"email\"], .cc-chc-field select { width:100%; font-family:'Raleway',sans-serif; font-size:14.5px; color:var(--text-main); padding:11px 13px; border:1.5px solid var(--border); border-radius:9px; background:#fff; transition:border-color .15s ease; }\n  .cc-chc-field select { appearance:none; -webkit-appearance:none; background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%234B5566' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'\/%3E%3C\/svg%3E\"); background-repeat:no-repeat; background-position:right 12px center; background-size:16px; padding-right:36px; }\n  .cc-chc-field select:invalid { color:var(--text-muted); }\n  .cc-chc-field input:focus, .cc-chc-field select:focus { outline:none; border-color:var(--accent); }\n  .cc-chc-consent { display:flex; align-items:flex-start; gap:10px; margin:18px 0 4px; }\n  .cc-chc-consent p { flex:1; min-width:0; font-size:12px; color:var(--text-secondary); line-height:1.55; margin:0; }\n  .cc-chc-consent a { color:var(--accent-2); }\n  .cc-chc-field.cc-chc-field-invalid input { border-color:#DC2626; background:rgba(220,38,38,.04); }\n  .cc-chc-lead-error { display:none; font-size:12.5px; color:#DC2626; background:rgba(220,38,38,.06); border:1px solid rgba(220,38,38,.25); border-radius:9px; padding:10px 13px; margin-top:14px; line-height:1.5; }\n  .cc-chc-lead-error.cc-chc-lead-error-visible { display:block; }\n  .cc-chc-privacy-note { font-size:11.5px; color:var(--text-muted); margin-top:14px; line-height:1.6; display:flex; gap:7px; align-items:flex-start; }\n  .cc-chc-privacy-note svg { width:14px; height:14px; flex-shrink:0; margin-top:2px; color:var(--text-muted); }\n  .cc-chc-privacy-note span { flex:1; min-width:0; }\n\n  \/* Loading *\/\n  .cc-chc-loading { text-align:center; padding:2.5rem 1rem; }\n  .cc-chc-spinner { width:38px; height:38px; border-radius:50%; border:3px solid var(--border); border-top-color:var(--accent); margin:0 auto 18px; animation:cc-chc-spin .8s linear infinite; }\n  @keyframes cc-chc-spin { to{ transform:rotate(360deg); } }\n  .cc-chc-loading p { font-size:13.5px; color:var(--text-secondary); }\n\n  \/* Fatal-error fallback: shown instead of hanging silently if something\n     throws while preparing or rendering the report, so a broken run is\n     always visible (never indistinguishable from \"nothing happened\"). *\/\n  .cc-chc-fatal { display:none; text-align:center; padding:2rem 1rem; }\n  .cc-chc-fatal.cc-chc-fatal-visible { display:block; }\n  .cc-chc-fatal-icon { width:34px; height:34px; margin:0 auto 12px; color:#DC2626; }\n  .cc-chc-fatal p { font-size:13.5px; color:var(--text-secondary); max-width:420px; margin:0 auto 16px; }\n  .cc-chc-fatal button { margin-top:4px; }\n\n  \/* Report *\/\n  .cc-chc-report-head { display:flex; align-items:center; gap:26px; flex-wrap:wrap; padding-bottom:22px; border-bottom:1px solid var(--border); margin-bottom:22px; }\n  .cc-chc-gauge { width:118px; height:118px; border-radius:50%; flex-shrink:0; position:relative; background:conic-gradient(var(--chc-gauge-color, var(--accent)) calc(var(--chc-score, 0) * 3.6deg), var(--bg-secondary) 0); }\n  .cc-chc-gauge::after { content:\"\"; position:absolute; inset:10px; border-radius:50%; background:#fff; }\n  .cc-chc-gauge-inner { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; z-index:1; }\n  .cc-chc-gauge-score { font-size:26px; font-weight:800; color:var(--text-main); line-height:1; }\n  .cc-chc-gauge-max { font-size:10.5px; color:var(--text-muted); margin-top:2px; }\n  .cc-chc-report-head-text { flex:1; min-width:200px; }\n  .cc-chc-risk-badge { display:inline-block; font-size:11.5px; font-weight:700; letter-spacing:.03em; padding:5px 12px; border-radius:7px; margin-bottom:8px; color:#fff; background:var(--chc-gauge-color, var(--accent)); }\n  .cc-chc-report-head-text h3 { font-size:19px; font-weight:700; color:var(--text-main); margin-bottom:4px; }\n  .cc-chc-report-head-text p { font-size:13px; color:var(--text-secondary); line-height:1.55; }\n\n  \/* Follow-up \"your full report is on its way by email\" block, shown right\n     after the score gauge instead of the instant category\/findings\n     breakdown. *\/\n  .cc-chc-followup { text-align:center; background:var(--bg-secondary); border:1px solid var(--border); border-radius:14px; padding:28px 24px; margin-bottom:22px; }\n  .cc-chc-followup-icon { width:34px; height:34px; color:var(--accent); margin:0 auto 14px; }\n  .cc-chc-followup-title { font-size:16px; font-weight:700; color:var(--text-main); margin-bottom:8px; }\n  .cc-chc-followup-text { font-size:13.5px; color:#3F4756; line-height:1.65; max-width:460px; margin:0 auto; }\n  .cc-chc-followup-text strong { color:var(--text-main); }\n  .cc-chc-followup-spam { font-size:11.5px; color:var(--text-muted); margin-top:14px; }\n\n  \/* Estat de la crida real a la API del SOC (pendent \/ ok \/ error). *\/\n  .cc-chc-api-status { display:none; font-size:12.5px; line-height:1.6; border-radius:10px; padding:10px 14px; margin-bottom:22px; text-align:center; }\n  .cc-chc-api-status-pending { display:block; background:rgba(100,116,139,.12); color:#475569; }\n  .cc-chc-api-status-ok { display:block; background:rgba(16,185,129,.12); color:#0F766E; }\n  .cc-chc-api-status-error { display:block; background:rgba(239,68,68,.12); color:#B91C1C; }\n  \/* Bot\u00f3 \"Torna-ho a provar\": amagat per defecte, visible nom\u00e9s quan\n     l'\u00faltima crida a la API ha fallat (chcSetApiRetryVisible). Viu dins\n     .cc-chc-report-ctas (flex + justify-content:center), igual que\n     \"Retake the assessment\" \u2014 per aix\u00f2 no li cal cap margin propi. *\/\n  .cc-chc-api-retry { display:none; }\n  .cc-chc-api-retry-visible { display:inline-flex; }\n\n  .cc-chc-report-ctas { display:flex; justify-content:center; gap:12px; flex-wrap:wrap; }\n  .cc-chc-restart { background:transparent; border:none; color:var(--text-secondary); font-family:'Raleway',sans-serif; font-weight:600; font-size:13px; cursor:pointer; text-decoration:underline; text-decoration-color:rgba(75,85,102,.35); padding:12px 4px; }\n  .cc-chc-restart:hover { color:var(--text-main); }\n<\/style>\n<\/head>\n<body>\n<!-- Google Tag Manager (noscript) -->\n<noscript><iframe src=\"https:\/\/www.googletagmanager.com\/ns.html?id=GTM-XXXXXXX\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>\n<!-- End Google Tag Manager (noscript) -->\n\n<a href=\"#main-content\" class=\"cc-skip-link\" data-i18n=\"skip_to_content\">Skip to main content<\/a>\n\n<!-- ============================================================================\n     SITE HEADER MARKUP \u2014 REUSABLE COMPONENT \u2014 START\n     Copy this <header>...<\/header> block AS-IS into every page of the site\n     (together with its CSS block \"SITE HEADER \u2014 REUSABLE COMPONENT\", the\n     \"LANGUAGE SYNC SCRIPT\" in <head>, and the \"SITE HEADER SCRIPT\" further\n     down) so all pages share the exact same header. Nothing inside it needs\n     editing per page: the logo\/LinkedIn links are already absolute URLs,\n     and ccSetLang() (defined in the page's translations script) is what the\n     language buttons call on click.\n     Note there's no hardcoded \"active\" language button below on purpose:\n     which one looks active is decided entirely by CSS from <html lang>\n     (see the language-switcher rules in the CSS block above) \u2014 that's what\n     keeps the switcher correct from the very first paint. -->\n<header class=\"cc-site-header\" id=\"cc-site-header\">\n  <div class=\"cc-site-header-inner\">\n    <a href=\"https:\/\/pro.concenter.io\/\" class=\"cc-site-logo\" aria-label=\"CONCENTER.IO \u2014 Home\">\n      <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\" alt=\"CONCENTER.IO logo\" fetchpriority=\"high\" width=\"437\" height=\"124\">\n    <\/a>\n    <div class=\"cc-site-header-right\">\n      <a href=\"https:\/\/www.linkedin.com\/company\/concenter-io\" target=\"_blank\" rel=\"noopener\" class=\"cc-site-linkedin\" aria-label=\"CONCENTER.IO on LinkedIn (opens in a new tab)\">\n        <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M20.45 20.45h-3.56v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.34V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28zM5.34 7.43a2.07 2.07 0 1 1 0-4.13 2.07 2.07 0 0 1 0 4.13zM7.12 20.45H3.56V9h3.56v11.45z\"\/><\/svg>\n      <\/a>\n      <div class=\"cc-lang-switch\" role=\"group\" aria-label=\"Language selector\">\n        <button class=\"cc-lang-btn\" data-lang=\"en\" lang=\"en\" onclick=\"ccSetLang('en')\">ENG<\/button>\n        <button class=\"cc-lang-btn\" data-lang=\"es\" lang=\"es\" onclick=\"ccSetLang('es')\">ESP<\/button>\n        <button class=\"cc-lang-btn\" data-lang=\"ca\" lang=\"ca\" onclick=\"ccSetLang('ca')\">CAT<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/header>\n<!-- ===================== SITE HEADER MARKUP \u2014 REUSABLE COMPONENT \u2014 END ===================== -->\n\n<main id=\"main-content\">\n\n  <!-- ===================== HERO ===================== -->\n  <section class=\"cc-hero\">\n    <div class=\"cc-hero-inner\">\n      <div class=\"cc-hero-text\">\n        <div class=\"cc-hero-tag\"><span class=\"dot\"><\/span><span data-i18n=\"hero_tag\">Managed Cybersecurity Platform<\/span><\/div>\n        <h1 data-i18n-html=\"hero_h1\">Protect Your Business Before Threats Become Incidents<\/h1>\n        <p class=\"cc-hero-sub\" data-i18n=\"hero_sub\">AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses.<\/p>\n        <div class=\"cc-hero-ctas\">\n          <a href=\"#contact-sales\" id=\"cc-link-top-bookdemo\" class=\"cc-btn cc-btn-primary\" data-i18n=\"hero_cta1\">Book a Demo<\/a>\n          <a href=\"#solutions\" id=\"cc-link-top-seeplatform\" class=\"cc-btn cc-btn-ghost\" data-i18n=\"hero_cta2\">See Platform<\/a>\n        <\/div>\n        <div class=\"cc-hero-stats\">\n          <div class=\"cc-hero-stat\"><strong>99.9%<\/strong><span data-i18n=\"kpi1_label\">Threat Detection Accuracy<\/span><\/div>\n          <div class=\"cc-hero-stat\"><strong>24\/7<\/strong><span data-i18n=\"kpi2_label\">Continuous Monitoring<\/span><\/div>\n          <div class=\"cc-hero-stat\"><strong>&lt;5min<\/strong><span data-i18n=\"kpi3_label\">Response Time<\/span><\/div>\n        <\/div>\n      <\/div>\n      <div class=\"cc-mock\" role=\"img\" aria-label=\"Security operations dashboard preview\">\n        <div class=\"cc-mock-head\">\n          <div class=\"cc-mock-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n          <div class=\"cc-mock-title\" data-i18n=\"mock_title\">Security Operations Center<\/div>\n        <\/div>\n        <div class=\"cc-mock-row\"><div class=\"l\"><span class=\"pulse\"><\/span><span data-i18n=\"mock_row1\">Traffic analysis completed<\/span><\/div><div class=\"r\">12:04:21<\/div><\/div>\n        <div class=\"cc-mock-row\"><div class=\"l\"><span class=\"pulse warn\"><\/span><span data-i18n=\"mock_row2\">Suspicious activity contained<\/span><\/div><div class=\"r\">12:03:58<\/div><\/div>\n        <div class=\"cc-mock-row\"><div class=\"l\"><span class=\"pulse\"><\/span><span data-i18n=\"mock_row3\">Compliance report generated<\/span><\/div><div class=\"r\">12:02:40<\/div><\/div>\n        <div class=\"cc-mock-graph\" aria-hidden=\"true\">\n          <i style=\"height:30%\"><\/i><i style=\"height:55%\"><\/i><i style=\"height:38%\"><\/i><i style=\"height:70%\"><\/i>\n          <i style=\"height:48%\"><\/i><i style=\"height:82%\"><\/i><i style=\"height:60%\"><\/i><i style=\"height:90%\"><\/i>\n          <i style=\"height:64%\"><\/i><i style=\"height:74%\"><\/i><i style=\"height:50%\"><\/i><i style=\"height:68%\"><\/i>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== WHY US ===================== -->\n  <section class=\"cc-why\" aria-labelledby=\"cc-why-heading\">\n    <div class=\"cc-section cc-section-tight\">\n      <div class=\"cc-reveal cc-center\">\n        <div class=\"cc-eyebrow\" data-i18n=\"why_eyebrow\">Why us<\/div>\n        <h2 class=\"cc-h2\" id=\"cc-why-heading\" data-i18n=\"why_title\">Why should you choose CONCENTER.IO?<\/h2>\n        <p class=\"cc-lede\" data-i18n=\"why_lede\">Five reasons SMEs and public administrations trust our platform.<\/p>\n      <\/div>\n      <div class=\"cc-why-grid cc-reveal\">\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item1\">24x7 Managed SOC<\/span><\/div>\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item2\">Automated detection and response to incidents<\/span><\/div>\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item3\">Continuous monitoring with SIEM and XDR<\/span><\/div>\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item4\">Artificial Intelligence applied to threat detection, analysis and network traffic<\/span><\/div>\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item5\">Ready for NIS2, ENS and ISO 27001<\/span><\/div>\n        <div class=\"cc-why-item\"><span class=\"cc-why-icon\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><span data-i18n=\"why_item6\">Integration with the Red Nacional de SOC (RN-SOC) at the highest qualification level<\/span><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== TRUST ===================== -->\n  <section class=\"cc-section\" aria-labelledby=\"cc-trust-heading\">\n    <div class=\"cc-trust-inner cc-reveal\">\n      <h2 class=\"cc-trust-label\" id=\"cc-trust-heading\" data-i18n=\"trust_label\">Technologies powering our platform<\/h2>\n      <div class=\"cc-badges\">\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-selks\">\n          SELKS\n          <span class=\"cc-popover\" id=\"cc-pop-selks\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">SELKS by Stamus Networks<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_selks\">Open-source platform built on the Suricata engine and the Elastic (ELK) stack, for security monitoring and network threat detection.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-wazuh\">\n          Wazuh\n          <span class=\"cc-popover\" id=\"cc-pop-wazuh\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">Wazuh<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_wazuh\">Open-source platform for threat detection, file integrity monitoring (FIM) and security compliance across endpoints.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-siem\">\n          SIEM\n          <span class=\"cc-popover\" id=\"cc-pop-siem\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">SIEM<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_siem\">Centralized log correlation and security event detection, powered by the Wazuh indexer and the Elastic stack.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-xdr\">\n          XDR\n          <span class=\"cc-popover\" id=\"cc-pop-xdr\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">XDR<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_xdr\">Extended detection and response that unifies network (Suricata) and endpoint (Wazuh) in a single security console.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-ndr\">\n          NDR\n          <span class=\"cc-popover\" id=\"cc-pop-ndr\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">NDR<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_ndr\">Continuous network traffic analysis with Suricata to detect anomalous behavior beyond known signatures.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-ids\">\n          IDS\n          <span class=\"cc-popover\" id=\"cc-pop-ids\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">IDS<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_ids\">Detection of suspicious network activity through Suricata's (SELKS) signature-based engine.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-ips\">\n          IPS\n          <span class=\"cc-popover\" id=\"cc-pop-ips\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">IPS<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_ips\">Real-time blocking of malicious network traffic, running inline on the Suricata (SELKS) engine.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-zt\">\n          Zero Trust\n          <span class=\"cc-popover\" id=\"cc-pop-zt\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">Zero Trust<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_zerotrust\">Continuous verification and least-privilege access, reinforced by Wazuh's configuration and vulnerability assessment.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-ti\">\n          Threat Intelligence\n          <span class=\"cc-popover\" id=\"cc-pop-ti\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">Threat Intelligence<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_ti\">Alert enrichment with threat feeds and indicators of compromise, integrated into Wazuh and Suricata's rule sets.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-hunting\">\n          Threat Hunting\n          <span class=\"cc-popover\" id=\"cc-pop-hunting\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">Threat Hunting<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_hunting\">Proactive hunting for undetected threats across Wazuh's indexed logs and Suricata\/EveBox alerts.<\/span>\n          <\/span>\n        <\/span>\n        <!-- Unlike the acronyms above (SIEM\/XDR\/IDS\/IPS\/RN-SOC, which read\n             the same in every language), \"AI\" is an actual English word\n             translated as \"IA\" in Catalan\/Spanish, so both the visible badge\n             label and the popover title need to be localized here \u2014 hence\n             the extra inner <span data-i18n> instead of static text. -->\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-ai\">\n          <span data-i18n=\"tech_ai_label\">AI<\/span>\n          <span class=\"cc-popover\" id=\"cc-pop-ai\" role=\"tooltip\">\n            <span class=\"cc-popover-title\" data-i18n=\"tech_ai_label\">AI<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_ai\">CONCENTER.IO works with several AI models, both self-hosted and consumed via API, matched to different processes depending on the need. This includes tools such as Kimi K2, Copilot, and, for development, Cursor paired with Claude.<\/span>\n          <\/span>\n        <\/span>\n        <span class=\"cc-tech-badge cc-tech-badge-popover\" tabindex=\"0\" aria-describedby=\"cc-pop-rnsoc\">\n          RN-SOC\n          <span class=\"cc-popover\" id=\"cc-pop-rnsoc\" role=\"tooltip\">\n            <span class=\"cc-popover-title\">RN-SOC<\/span>\n            <span class=\"cc-popover-body\" data-i18n=\"tech_rnsoc\">Automated incident reporting and escalation to the Red Nacional de SOC (RN-SOC).<\/span>\n          <\/span>\n        <\/span>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== PROBLEMS ===================== -->\n  <section class=\"cc-section\">\n    <div class=\"cc-reveal cc-center\">\n      <div class=\"cc-eyebrow\" data-i18n=\"problems_eyebrow\">Real risks<\/div>\n      <h2 class=\"cc-h2\" data-i18n=\"problems_title\">The Hidden Risks Threatening SMEs Every Day<\/h2>\n    <\/div>\n    <div class=\"cc-problem-grid\">\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 9v4M12 17h.01M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem1_title\">Ransomware<\/h3><p data-i18n=\"problem1_desc\">Attacks that encrypt critical data and halt operations until a ransom is paid.<\/p>\n      <\/div>\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"\/><path d=\"m3 7 9 6 9-6\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem2_title\">Phishing<\/h3><p data-i18n=\"problem2_desc\">Fraudulent emails designed to steal credentials and access your systems.<\/p>\n      <\/div>\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem3_title\">Insider Threats<\/h3><p data-i18n=\"problem3_desc\">Improper access, intentional or not, from within your own team.<\/p>\n      <\/div>\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2 3 7v6c0 5 4 8 9 9 5-1 9-4 9-9V7l-9-5Z\"\/><path d=\"m9 12 2 2 4-4\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem4_title\">Data Breaches<\/h3><p data-i18n=\"problem4_desc\">Exposure of confidential customer and company information.<\/p>\n      <\/div>\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"M8 21h8M12 17v4\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem5_title\">Shadow IT<\/h3><p data-i18n=\"problem5_desc\">Unauthorized tools and services operating outside the security perimeter.<\/p>\n      <\/div>\n      <div class=\"cc-problem-card cc-reveal\">\n        <div class=\"cc-problem-icon\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h4M9 11V7a4 4 0 0 1 8 0v4M9 11h10v7a2 2 0 0 1-2 2h-2\"\/><\/svg><\/div>\n        <h3 data-i18n=\"problem6_title\">Compliance Failures<\/h3><p data-i18n=\"problem6_desc\">Penalties and loss of trust from failing to meet regulatory requirements.<\/p>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== SOLUTIONS ===================== -->\n  <section class=\"cc-section\" id=\"solutions\">\n    <div class=\"cc-reveal cc-center\">\n      <div class=\"cc-eyebrow\" data-i18n=\"solutions_eyebrow\">The platform<\/div>\n      <h2 class=\"cc-h2\" data-i18n=\"solutions_title\">One Platform. Complete Visibility.<\/h2>\n      <p class=\"cc-lede\" data-i18n=\"solutions_lede\">The entire security stack unified in a single console: detection, analysis, response and reporting.<\/p>\n    <\/div>\n    <div class=\"cc-solution-grid\">\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 3\"\/><\/svg><\/div><h3 data-i18n=\"sol1_title\">Real-time Threat Detection<\/h3><p data-i18n=\"sol1_desc\">Continuous identification of anomalous activity across your infrastructure.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2 2 7l10 5 10-5-10-5Z\"\/><path d=\"m2 17 10 5 10-5M2 12l10 5 10-5\"\/><\/svg><\/div><h3 data-i18n=\"sol2_title\">AI Classification<\/h3><p data-i18n=\"sol2_desc\">Intelligent alert prioritization to cut through the noise and speed up response.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M13 2 3 14h8l-1 8 10-12h-8l1-8Z\"\/><\/svg><\/div><h3 data-i18n=\"sol3_title\">Automated Response<\/h3><p data-i18n=\"sol3_desc\">Immediate threat containment without manual intervention.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z\"\/><\/svg><\/div><h3 data-i18n=\"sol4_title\">Threat Intelligence<\/h3><p data-i18n=\"sol4_desc\">Updated global threat feeds to stay ahead of attackers.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"10\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><\/div><h3 data-i18n=\"sol5_title\">Security Monitoring<\/h3><p data-i18n=\"sol5_desc\">24\u00d77 surveillance of every critical business asset.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"6\" cy=\"6\" r=\"3\"\/><circle cx=\"18\" cy=\"18\" r=\"3\"\/><path d=\"M8.5 8.5 15.5 15.5M9 6h6a3 3 0 0 1 3 3v0\"\/><\/svg><\/div><h3 data-i18n=\"sol6_title\">Network Analysis<\/h3><p data-i18n=\"sol6_desc\">Full traffic visibility to detect lateral movement.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 12h6M9 16h6M9 8h6M5 3h14v18H5z\"\/><\/svg><\/div><h3 data-i18n=\"sol7_title\">Compliance Reporting<\/h3><p data-i18n=\"sol7_desc\">Automated documentation aligned with regulatory requirements.<\/p><\/div>\n      <div class=\"cc-solution-card cc-reveal\"><div class=\"cc-solution-icon\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg><\/div><h3 data-i18n=\"sol8_title\">Incident Investigation<\/h3><p data-i18n=\"sol8_desc\">Forensic tools to understand the scope and origin of every incident.<\/p><\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== CYBER HEALTH CHECK ===================== -->\n  <section class=\"cc-chc\" id=\"cyber-health-check\" aria-labelledby=\"cc-chc-heading\">\n    <div class=\"cc-section cc-section-tight\">\n      <div class=\"cc-reveal cc-center\">\n        <div class=\"cc-chc-badge\"><span class=\"dot\"><\/span><span data-i18n=\"chc_badge\">Free tool<\/span><\/div>\n        <div class=\"cc-eyebrow\" data-i18n=\"chc_eyebrow\">Cyber Health Check<\/div>\n        <h2 class=\"cc-h2\" id=\"cc-chc-heading\" data-i18n=\"chc_title\">Where does your business really stand on cybersecurity?<\/h2>\n        <p class=\"cc-lede\" data-i18n=\"chc_lede\">Answer a few quick questions and get an instant, personalized risk snapshot, built on the same controls our SOC analysts check first.<\/p>\n      <\/div>\n\n      <div class=\"cc-chc-shell cc-reveal\" id=\"cc-chc-shell\">\n\n        <div class=\"cc-chc-progress\" id=\"cc-chc-progress\">\n          <div class=\"cc-chc-progress-bar\"><div class=\"cc-chc-progress-fill\" id=\"cc-chc-progress-fill\"><\/div><\/div>\n          <div class=\"cc-chc-progress-label\" id=\"cc-chc-progress-label\">\u2014<\/div>\n        <\/div>\n\n        <!-- STEP 0: intro -->\n        <div class=\"cc-chc-step cc-chc-step-active\" data-chc-step=\"intro\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_intro_eyebrow\">8 questions \u00b7 under 3 minutes<\/div>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_intro_title\">We'll ask about identity, assets, monitoring, vulnerabilities, backups, awareness, incident response and compliance: the eight controls that decide the outcome of most real-world incidents and audits.<\/div>\n          <div class=\"cc-chc-nav\" style=\"justify-content:flex-end;\">\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" onclick=\"chcGoto(1)\" data-i18n=\"chc_intro_cta\">Start my Cyber Health Check<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 1: company profile (sector + size) -->\n        <div class=\"cc-chc-step\" data-chc-step=\"profile\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_profile_eyebrow\">Quick context<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_profile_desc\">This first block gives us context on your company's profile, so the risk level and recommendations are tailored to your sector and size.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_profile_title\">A couple of details so the report speaks your language.<\/div>\n          <div class=\"cc-chc-field\">\n            <label for=\"cc-chc-sector\" data-i18n=\"chc_sector_label\">Sector<\/label>\n            <select id=\"cc-chc-sector\" required onchange=\"chcProfileChanged()\">\n              <option value=\"\" data-i18n=\"chc_sector_placeholder\">Select your sector<\/option>\n              <option value=\"retail\" data-i18n=\"chc_sector_retail\">Retail<\/option>\n              <option value=\"industrial\" data-i18n=\"chc_sector_industrial\">Industrial &amp; manufacturing<\/option>\n              <option value=\"public\" data-i18n=\"chc_sector_public\">Public administration<\/option>\n              <option value=\"professional\" data-i18n=\"chc_sector_professional\">Professional services<\/option>\n              <option value=\"healthcare\" data-i18n=\"chc_sector_healthcare\">Healthcare<\/option>\n              <option value=\"tech\" data-i18n=\"chc_sector_tech\">Technology &amp; SaaS<\/option>\n              <option value=\"logistics\" data-i18n=\"chc_sector_logistics\">Logistics &amp; transport<\/option>\n              <option value=\"other\" data-i18n=\"chc_sector_other\">Other<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"cc-chc-field\">\n            <label for=\"cc-chc-size\" data-i18n=\"chc_size_label\">Company size<\/label>\n            <select id=\"cc-chc-size\" required onchange=\"chcProfileChanged()\">\n              <option value=\"\" data-i18n=\"chc_size_placeholder\">Select company size<\/option>\n              <option value=\"micro\" data-i18n=\"chc_size_micro\">1\u20139 employees<\/option>\n              <option value=\"small\" data-i18n=\"chc_size_small\">10\u201349 employees<\/option>\n              <option value=\"medium\" data-i18n=\"chc_size_medium\">50\u2013249 employees<\/option>\n              <option value=\"large\" data-i18n=\"chc_size_large\">250+ employees<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(0)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-profile\" disabled onclick=\"chcGoto(2)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 2 (Block 1): Identity & Access -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q1\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q1_eyebrow\">Identity &amp; Access<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q1_desc\">Assesses how well access to your organization's critical systems is protected, especially against stolen credentials.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q1_title\">How do you protect access to your critical accounts (email, ERP, remote access...)?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q1\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q1','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q1_opt_ok\">We use multi-factor authentication (MFA) on all critical accounts.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q1','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q1_opt_partial\">We use MFA on some accounts only.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q1','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q1_opt_bad\">We only protect accounts with a password.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(1)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q1\" disabled onclick=\"chcGoto(3)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 3 (Block 2): Asset Visibility -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q2\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q2_eyebrow\">Asset Visibility<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q2_desc\">Measures how well your organization actually knows the devices, servers and systems connected to its infrastructure.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q2_title\">Have you identified every device and system connected to your network?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q2\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q2','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q2_opt_ok\">Yes, we keep an up-to-date inventory of our assets.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q2','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q2_opt_partial\">We know most of our equipment, but we don't have a complete inventory.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q2','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q2_opt_bad\">We don't have an up-to-date inventory.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(2)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q2\" disabled onclick=\"chcGoto(4)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 4 (Block 3): Detection & Monitoring -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q3\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q3_eyebrow\">Detection &amp; Monitoring<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q3_desc\">Assesses your ability to detect suspicious activity and respond to security incidents.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q3_title\">Who is watching your systems for suspicious activity?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q3\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q3','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q3_opt_ok\">We have a 24\/7 SOC or a managed detection service (SIEM\/XDR).<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q3','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q3_opt_partial\">We have security tools in place, but there's no continuous monitoring.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q3','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q3_opt_bad\">Nobody. We'd probably only notice once the problem was already obvious.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(3)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q3\" disabled onclick=\"chcGoto(5)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 5 (Block 4): Vulnerability Management -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q4\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q4_eyebrow\">Vulnerability Management<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q4_desc\">Looks at your ability to detect and fix vulnerabilities before they can be exploited.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q4_title\">How do you detect whether your systems have security vulnerabilities?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q4\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q4','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q4_opt_ok\">We have a continuous system for detecting and tracking vulnerabilities.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q4','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q4_opt_partial\">We run periodic reviews or scans.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q4','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q4_opt_bad\">We only act once a problem or incident comes up.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(4)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q4\" disabled onclick=\"chcGoto(6)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 6 (Block 5): Resilience & Recovery (backup) -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q5\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q5_eyebrow\">Resilience &amp; Recovery<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q5_desc\">Measures your ability to recover operations after an attack, especially in ransomware scenarios.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q5_title\">If you were hit by a ransomware attack tomorrow, how would your backups hold up?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q5\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q5','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q5_opt_ok\">We have regular, tested, offline or immutable backups.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q5','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q5_opt_partial\">We have backups, but they're not tested or they're still connected to the network.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q5','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q5_opt_bad\">We don't have a reliable backup system.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(5)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q5\" disabled onclick=\"chcGoto(7)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 7 (Block 6): People & Awareness -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q6\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q6_eyebrow\">People &amp; Awareness<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q6_desc\">Assesses how prepared your employees are to face the main cybersecurity threats.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q6_title\">Do your employees receive regular cybersecurity training?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q6\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q6','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q6_opt_ok\">Yes, regularly, with periodic simulations or reminders.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q6','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q6_opt_partial\">Only occasionally.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q6','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q6_opt_bad\">We don't provide any specific training.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(6)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q6\" disabled onclick=\"chcGoto(8)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 8 (Block 7): Incident Response -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q7\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q7_eyebrow\">Incident Response<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q7_desc\">Measures how prepared your organization is to manage a cybersecurity incident in an orderly, effective way.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q7_title\">If a serious cybersecurity incident happened today, would your team know how to act?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q7\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q7','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q7_opt_ok\">We have a documented, tested procedure.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q7','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q7_opt_partial\">We have general guidelines, but no formal plan.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q7','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q7_opt_bad\">We don't have any established procedure.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(7)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q7\" disabled onclick=\"chcGoto(9)\" data-i18n=\"chc_next\">Next<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 9 (Block 8): Governance & Compliance -->\n        <div class=\"cc-chc-step\" data-chc-step=\"q8\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_q8_eyebrow\">Governance &amp; Compliance<\/div>\n          <p class=\"cc-chc-block-desc\" data-i18n=\"chc_q8_desc\">Assesses how ready your organization is to demonstrate compliance with the main cybersecurity standards and regulations.<\/p>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_q8_title\">If you were audited tomorrow, could you demonstrate compliance with regulations such as NIS2, ISO 27001 or ENS?<\/div>\n          <div class=\"cc-chc-options\" data-chc-question=\"q8\">\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"ok\" onclick=\"chcAnswer('q8','ok',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q8_opt_ok\">Yes, we have documented policies, audits and evidence in place.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"partial\" onclick=\"chcAnswer('q8','partial',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q8_opt_partial\">We have some policies, but without formal follow-up.<\/span><\/button>\n            <button type=\"button\" class=\"cc-chc-option\" data-value=\"bad\" onclick=\"chcAnswer('q8','bad',this)\"><span class=\"cc-chc-option-dot\"><\/span><span class=\"cc-chc-option-text\" data-i18n=\"chc_q8_opt_bad\">We don't have a defined compliance framework.<\/span><\/button>\n          <\/div>\n          <div class=\"cc-chc-nav\">\n            <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(8)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary cc-chc-next\" id=\"cc-chc-next-q8\" disabled onclick=\"chcGoto(10)\" data-i18n=\"chc_next_results\">See my results<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 10: lead capture -->\n        <div class=\"cc-chc-step\" data-chc-step=\"lead\">\n          <div class=\"cc-chc-eyebrow\" data-i18n=\"chc_lead_eyebrow\">Almost there<\/div>\n          <div class=\"cc-chc-q-title\" data-i18n=\"chc_lead_title\">Where should we send your personalized report?<\/div>\n          <form id=\"cc-chc-lead-form\" onsubmit=\"return chcSubmitLead(event)\" novalidate>\n            <div class=\"cc-chc-field\" id=\"cc-chc-field-name\">\n              <label for=\"cc-chc-name\" data-i18n=\"chc_lead_name_label\">Full name<\/label>\n              <input type=\"text\" id=\"cc-chc-name\" name=\"name\" required autocomplete=\"name\" oninput=\"chcClearLeadError()\">\n            <\/div>\n            <div class=\"cc-chc-field\" id=\"cc-chc-field-company\">\n              <label for=\"cc-chc-company\" data-i18n=\"chc_lead_company_label\">Company<\/label>\n              <input type=\"text\" id=\"cc-chc-company\" name=\"company\" required autocomplete=\"organization\" oninput=\"chcClearLeadError()\">\n            <\/div>\n            <div class=\"cc-chc-field\" id=\"cc-chc-field-email\">\n              <label for=\"cc-chc-email\" data-i18n=\"chc_lead_email_label\">Work email<\/label>\n              <input type=\"email\" id=\"cc-chc-email\" name=\"email\" required autocomplete=\"email\" oninput=\"chcClearLeadError()\">\n            <\/div>\n            <div class=\"cc-chc-consent\" id=\"cc-chc-field-consent\">\n              <p data-i18n-html=\"chc_consent_label\">I agree that CONCENTER.IO may contact me about this report, in line with the <a href=\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/privacy-policy\/\" target=\"_blank\" rel=\"noopener\">Privacy Policy<\/a>.<\/p>\n            <\/div>\n            <div class=\"cc-chc-lead-error\" id=\"cc-chc-lead-error\" role=\"alert\" data-i18n=\"chc_lead_error\">Please fill in your name, company and email to continue.<\/div>\n            <div class=\"cc-chc-nav\">\n              <button type=\"button\" class=\"cc-chc-back\" onclick=\"chcGoto(9)\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><span data-i18n=\"chc_back\">Back<\/span><\/button>\n              <button type=\"button\" id=\"cc-chc-submit-btn\" class=\"cc-btn cc-btn-primary\" onclick=\"chcSubmitLead()\" data-i18n=\"chc_lead_cta\">Generate my report<\/button>\n            <\/div>\n            <div class=\"cc-chc-privacy-note\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"10\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span data-i18n=\"chc_privacy_note\">Your answers are sent securely to generate your report, which you'll receive by email.<\/span><\/div>\n          <\/form>\n        <\/div>\n\n        <!-- STEP 11: loading -->\n        <div class=\"cc-chc-step\" data-chc-step=\"loading\">\n          <div class=\"cc-chc-loading\" id=\"cc-chc-loading-normal\">\n            <div class=\"cc-chc-spinner\" aria-hidden=\"true\"><\/div>\n            <p data-i18n=\"chc_loading_text\">Scoring your answers against our control library\u2026<\/p>\n          <\/div>\n          <div class=\"cc-chc-fatal\" id=\"cc-chc-fatal\">\n            <svg class=\"cc-chc-fatal-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg>\n            <p data-i18n=\"chc_fatal_text\">Something went wrong while preparing your report. Nothing was sent anywhere, so feel free to try again.<\/p>\n            <button type=\"button\" class=\"cc-btn cc-btn-primary\" onclick=\"chcRestart()\" data-i18n=\"chc_fatal_retry\">Start over<\/button>\n          <\/div>\n        <\/div>\n\n        <!-- STEP 12: report -->\n        <div class=\"cc-chc-step\" data-chc-step=\"report\">\n          <div class=\"cc-chc-report-head\">\n            <div class=\"cc-chc-gauge\" id=\"cc-chc-gauge\">\n              <div class=\"cc-chc-gauge-inner\">\n                <span class=\"cc-chc-gauge-score\" id=\"cc-chc-gauge-score\">0<\/span>\n                <span class=\"cc-chc-gauge-max\" data-i18n=\"chc_score_of100\">\/ 100<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"cc-chc-report-head-text\">\n              <span class=\"cc-chc-risk-badge\" id=\"cc-chc-risk-badge\">\u2014<\/span>\n              <h3 id=\"cc-chc-report-title\">\u2014<\/h3>\n              <p id=\"cc-chc-report-sub\">\u2014<\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"cc-chc-followup\" id=\"cc-chc-followup\">\n            <svg class=\"cc-chc-followup-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6Z\"\/><path d=\"m22 6-10 7L2 6\"\/><\/svg>\n            <div class=\"cc-chc-followup-title\" data-i18n=\"chc_followup_title\">Your personalized report is on its way<\/div>\n            <p class=\"cc-chc-followup-text\" id=\"cc-chc-followup-text\"><\/p>\n            <p class=\"cc-chc-followup-spam\" data-i18n=\"chc_followup_spam\">Don't see it after a few minutes? Check your spam or promotions folder.<\/p>\n          <\/div>\n\n          <!-- Estat de la crida a la API del SOC. Per als visitants reals\n               mostra nom\u00e9s un missatge gen\u00e8ric (acceptat \/ error); el\n               detall t\u00e8cnic (job_id, estat, cua, codi HTTP) es calcula\n               igualment per\u00f2 queda amagat \u2014 activa'l posant\n               CHC_API_SHOW_TECHNICAL_DETAIL a true si el necessites\n               (per exemple, en proves). -->\n          <div class=\"cc-chc-api-status\" id=\"cc-chc-api-status\" role=\"status\" aria-live=\"polite\"><\/div>\n\n          <div class=\"cc-chc-report-ctas\">\n            <!-- Nomes visible quan l'\u00faltima crida a la API ha fallat (veure\n                 chcSetApiRetryVisible): reenvia el mateix payload ja\n                 calculat, sense obligar a refer l'enquesta. -->\n            <button type=\"button\" class=\"cc-chc-restart cc-chc-api-retry\" id=\"cc-chc-api-retry\" onclick=\"chcRetrySend()\" data-i18n=\"chc_api_retry\">Try again<\/button>\n            <button type=\"button\" class=\"cc-chc-restart\" onclick=\"chcRestart()\" data-i18n=\"chc_restart\">Retake the assessment<\/button>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== ARCHITECTURE ===================== -->\n  <section class=\"cc-section\">\n    <div class=\"cc-reveal cc-center\">\n      <div class=\"cc-eyebrow\" data-i18n=\"arch_eyebrow\">Architecture<\/div>\n      <h2 class=\"cc-h2\" data-i18n=\"arch_title\">How Our Platform Works<\/h2>\n    <\/div>\n    <div class=\"cc-arch-flow cc-reveal\">\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">1<\/div><h3 class=\"t\" data-i18n=\"arch_step1\">Internet<\/h3><\/div>\n      <div class=\"cc-arch-connector\" aria-hidden=\"true\"><\/div>\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">2<\/div><h3 class=\"t\" data-i18n=\"arch_step2\">Threat Intelligence<\/h3><\/div>\n      <div class=\"cc-arch-connector\" aria-hidden=\"true\"><\/div>\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">3<\/div><h3 class=\"t\" data-i18n=\"arch_step3\">Detection Layer<\/h3><\/div>\n      <div class=\"cc-arch-connector\" aria-hidden=\"true\"><\/div>\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">4<\/div><h3 class=\"t\" data-i18n=\"arch_step4\">AI Analysis Engine<\/h3><\/div>\n      <div class=\"cc-arch-connector\" aria-hidden=\"true\"><\/div>\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">5<\/div><h3 class=\"t\" data-i18n=\"arch_step5\">Automated Response<\/h3><\/div>\n      <div class=\"cc-arch-connector\" aria-hidden=\"true\"><\/div>\n      <div class=\"cc-arch-step\"><div class=\"n\" aria-hidden=\"true\">6<\/div><h3 class=\"t\" data-i18n=\"arch_step6\">Reporting Dashboard<\/h3><\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== BENEFITS \/ KPI ===================== -->\n  <section class=\"cc-section\">\n    <div class=\"cc-reveal cc-center\">\n      <div class=\"cc-eyebrow\" data-i18n=\"benefits_eyebrow\">Results<\/div>\n      <h2 class=\"cc-h2\" data-i18n=\"benefits_title\">Measurable performance, real trust<\/h2>\n    <\/div>\n    <div class=\"cc-kpi-grid\">\n      <div class=\"cc-kpi cc-reveal\"><strong>99.9%<\/strong><span data-i18n=\"kpi1_label\">Threat Detection Accuracy<\/span><\/div>\n      <div class=\"cc-kpi cc-reveal\"><strong>24\/7<\/strong><span data-i18n=\"kpi2_label\">Continuous Monitoring<\/span><\/div>\n      <div class=\"cc-kpi cc-reveal\"><strong>&lt;5min<\/strong><span data-i18n=\"kpi3_label\">Response Time<\/span><\/div>\n      <div class=\"cc-kpi cc-reveal\"><strong>100%<\/strong><span data-i18n=\"kpi4_label\">Technology Independent<\/span><\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== PRICING (UNCHANGED) ===================== -->\n  <div class=\"cc-wrap\" id=\"pricing\">\n\n    <div class=\"cc-header\">\n      <h2 data-i18n=\"header_title\">Enterprise-Grade Cybersecurity Protection<\/h2>\n      <p data-i18n=\"header_sub\">Select your infrastructure type to find the right plan<\/p>\n    <\/div>\n\n    <div class=\"cc-tabs\" role=\"tablist\" aria-label=\"Pricing infrastructure type\">\n      <button class=\"cc-tab cc-active\" id=\"cc-tab-cloud\" role=\"tab\" aria-selected=\"true\" aria-controls=\"cc-seg-cloud\" tabindex=\"0\" onclick=\"ccShowSeg('cloud', this)\" onkeydown=\"ccTabKeydown(event)\" data-i18n=\"tab_cloud\">Cloud \/ Data Center<\/button>\n      <button class=\"cc-tab\" id=\"cc-tab-onprem\" role=\"tab\" aria-selected=\"false\" aria-controls=\"cc-seg-onprem\" tabindex=\"-1\" onclick=\"ccShowSeg('onprem', this)\" onkeydown=\"ccTabKeydown(event)\" data-i18n=\"tab_onprem\">On-Premise Infrastructure<\/button>\n    <\/div>\n\n    <!-- ===== SEGMENT CLOUD ===== -->\n    <div id=\"cc-seg-cloud\" class=\"cc-segment cc-active\" role=\"tabpanel\" aria-labelledby=\"cc-tab-cloud\">\n      <div class=\"cc-plans cc-cloud-plans\">\n\n        <!-- ESSENTIAL -->\n        <div class=\"cc-card\">\n          <h3 class=\"cc-plan-name\" data-i18n=\"essential_name\">Essential<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"essential_tagline\">1 internet-facing server or service (web, remote access\u2026)<\/div>\n          <div>\n            <span class=\"cc-price-main\">29,70\u20ac<span class=\"cc-price-period\" data-i18n=\"per_mo\">\/mo<\/span><\/span>\n            <div class=\"cc-price-setup\" data-i18n=\"zero_setup\">Zero setup fee<\/div>\n            <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"29.70\"><span data-i18n=\"essential_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n          <\/div>\n          <hr class=\"cc-divider\">\n          <ul class=\"cc-features\">\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"essential_f1\">24\u00d77 automated threat detection & blocking<\/span><\/li>\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"essential_f2\">Security dashboard & full action history<\/span><\/li>\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"essential_f3\">Automated reporting to CCN-CERT<\/span><\/li>\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"essential_f4\">Automated backup<\/span><\/li>\n          <\/ul>\n          <div class=\"cc-trial\">\n            <svg style=\"width:12px;height:12px;flex-shrink:0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6B7280\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 12V22H4V12\"\/><path d=\"M22 7H2v5h20V7z\"\/><path d=\"M12 22V7\"\/><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"\/><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"\/><\/svg>\n            <span data-i18n=\"trial_note\">1-month free trial included<\/span>\n          <\/div>\n        <\/div>\n\n        <!-- PROFESSIONAL -->\n        <div class=\"cc-card cc-featured\">\n          <div class=\"cc-badge cc-badge-blue\"><span data-i18n=\"most_popular\">\u2b50 Most Popular<\/span><\/div>\n          <h3 class=\"cc-plan-name\" data-i18n=\"professional_name\">Professional<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"professional_tagline\">Up to 2 virtual servers (file storage, email, ERP\u2026)<\/div>\n          <div>\n            <span class=\"cc-price-main\">59,40\u20ac<span class=\"cc-price-period\" data-i18n=\"per_mo\">\/mo<\/span><\/span>\n            <div class=\"cc-price-setup\" data-i18n=\"zero_setup\">Zero setup fee<\/div>\n            <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"59.40\"><span data-i18n=\"professional_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n          <\/div>\n          <hr class=\"cc-divider\">\n          <ul class=\"cc-features\">\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"professional_f1\">Everything in Essential<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"professional_f2\">Network Traffic Analysis (NTA)<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"professional_f3\">AI-powered browsing categorization<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"professional_f4\">Advanced intrusion detection (SELKS)<\/span><\/li>\n          <\/ul>\n          <div class=\"cc-trial\">\n            <svg style=\"width:12px;height:12px;flex-shrink:0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6B7280\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 12V22H4V12\"\/><path d=\"M22 7H2v5h20V7z\"\/><path d=\"M12 22V7\"\/><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"\/><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"\/><\/svg>\n            <span data-i18n=\"trial_note\">1-month free trial included<\/span>\n          <\/div>\n        <\/div>\n\n        <!-- ENTERPRISE -->\n        <div class=\"cc-card\">\n          <h3 class=\"cc-plan-name\" data-i18n=\"enterprise_name\">Enterprise<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"enterprise_tagline\">3+ servers or complex multi-service infrastructure<\/div>\n          <div>\n            <span class=\"cc-price-main\">99,70\u20ac<span class=\"cc-price-period\" data-i18n=\"per_mo\">\/mo<\/span><\/span>\n            <div class=\"cc-price-setup\" data-i18n=\"zero_setup\">Zero setup fee<\/div>\n            <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"99.70\"><span data-i18n=\"enterprise_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n          <\/div>\n          <hr class=\"cc-divider\">\n          <ul class=\"cc-features\">\n            <li class=\"cc-inc\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span data-i18n=\"enterprise_f1\">Everything in Professional<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"enterprise_f2\">Unlimited servers at no extra cost<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"enterprise_f3\">Priority incident response<\/span><\/li>\n            <li class=\"cc-plus\"><svg class=\"cc-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg><span data-i18n=\"enterprise_f4\">Dedicated server option from 125\u20ac\/mo<\/span><\/li>\n          <\/ul>\n          <div class=\"cc-trial\">\n            <svg style=\"width:12px;height:12px;flex-shrink:0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#6B7280\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 12V22H4V12\"\/><path d=\"M22 7H2v5h20V7z\"\/><path d=\"M12 22V7\"\/><path d=\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"\/><path d=\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"\/><\/svg>\n            <span data-i18n=\"trial_note\">1-month free trial included<\/span>\n          <\/div>\n        <\/div>\n\n      <\/div>\n\n      <div class=\"cc-uneon-box\" data-partner-block=\"true\">\n        <div>\n          <div class=\"cc-label\" data-i18n=\"commission_model\">{partner} Commission Model<\/div>\n          <div class=\"cc-value\" data-i18n=\"cloud_commission_detail\">{pct}% on recurring monthly revenue \u00b7 Zero activation cost<\/div>\n        <\/div>\n        <div style=\"text-align:right\">\n          <div class=\"cc-label\" data-i18n=\"cloud_example_label\">10 Professional clients<\/div>\n          <div class=\"cc-value cc-highlight\" data-calc-base-price=\"59.40\" data-calc-customer-count=\"10\"><span data-calc-amount>~89,10\u20ac<\/span><span data-i18n=\"recurring_mo\">\/mo recurring<\/span><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ===== SEGMENT ON-PREM ===== -->\n    <div id=\"cc-seg-onprem\" class=\"cc-segment\" role=\"tabpanel\" aria-labelledby=\"cc-tab-onprem\">\n\n      <div class=\"cc-onprem-note\" data-i18n=\"onprem_note\"><strong>Deployed on-site at the client's premises<\/strong> \u00b7 Includes 1-month free trial \u00b7 Compatible with Acronis or equivalent for endpoint protection<\/div>\n\n      <div class=\"cc-plans cc-onprem-plans\">\n\n        <!-- MICRO -->\n        <div class=\"cc-card\">\n          <div class=\"cc-badge cc-badge-amber\">Micro &lt;10<\/div>\n          <h3 class=\"cc-plan-name\" data-i18n=\"micro_name\">Micro<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"micro_tagline\">Freelancers & micro-businesses<\/div>\n          <div class=\"cc-section-label\" data-i18n=\"setup_costs\">One-time setup costs<\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"soc_setup\">SOC Setup<\/span><span>2.000\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"fw_network\">Firewall + Network Config<\/span><span>2.100\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"exposed_service\">Internet-Exposed Service<\/span><span>1.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"per_endpoint\">Per endpoint<\/span><span>50\u20ac<span data-i18n=\"per_unit\">\/unit<\/span><\/span><\/div>\n          <div class=\"cc-price-total\"><span data-i18n=\"monthly_fee\">Monthly fee<\/span><span>250\u20ac<span data-i18n=\"per_mo\">\/mo<\/span><\/span><\/div>\n          <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"250\"><span data-i18n=\"micro_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n        <\/div>\n\n        <!-- SME STANDARD -->\n        <div class=\"cc-card cc-featured\">\n          <div class=\"cc-badge cc-badge-blue\">SME &lt;50<\/div>\n          <h3 class=\"cc-plan-name\" data-i18n=\"sme50_name\">SME Standard<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"sme50_tagline\">Small businesses with their own office<\/div>\n          <div class=\"cc-section-label\" data-i18n=\"setup_costs\">One-time setup costs<\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"soc_setup\">SOC Setup<\/span><span>4.000\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"fw_network\">Firewall + Network Config<\/span><span>2.100\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"exposed_service\">Internet-Exposed Service<\/span><span>1.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"per_endpoint\">Per endpoint<\/span><span>50\u20ac<span data-i18n=\"per_unit\">\/unit<\/span><\/span><\/div>\n          <div class=\"cc-price-total\"><span data-i18n=\"monthly_fee\">Monthly fee<\/span><span>750\u20ac<span data-i18n=\"per_mo\">\/mo<\/span><\/span><\/div>\n          <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"750\"><span data-i18n=\"sme50_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n        <\/div>\n\n        <!-- SME ADVANCED -->\n        <div class=\"cc-card\">\n          <div class=\"cc-badge cc-badge-amber\">SME &lt;100<\/div>\n          <h3 class=\"cc-plan-name\" data-i18n=\"sme100_name\">SME Advanced<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"sme100_tagline\">Mid-size companies with own infrastructure<\/div>\n          <div class=\"cc-section-label\" data-i18n=\"setup_costs\">One-time setup costs<\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"soc_setup\">SOC Setup<\/span><span>4.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"fw_network\">Firewall + Network Config<\/span><span>2.100\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"exposed_service\">Internet-Exposed Service<\/span><span>1.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"per_endpoint\">Per endpoint<\/span><span>50\u20ac<span data-i18n=\"per_unit\">\/unit<\/span><\/span><\/div>\n          <div class=\"cc-price-total\"><span data-i18n=\"monthly_fee\">Monthly fee<\/span><span>950\u20ac<span data-i18n=\"per_mo\">\/mo<\/span><\/span><\/div>\n          <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"950\"><span data-i18n=\"sme100_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n        <\/div>\n\n        <!-- BUSINESS -->\n        <div class=\"cc-card\">\n          <div class=\"cc-badge cc-badge-amber\">Business &lt;250<\/div>\n          <h3 class=\"cc-plan-name\" data-i18n=\"business_name\">Business<\/h3>\n          <div class=\"cc-plan-tagline\" data-i18n=\"business_tagline\">Established companies with in-house IT<\/div>\n          <div class=\"cc-section-label\" data-i18n=\"setup_costs\">One-time setup costs<\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"soc_setup\">SOC Setup<\/span><span>5.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"fw_network\">Firewall + Network Config<\/span><span>2.100\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"exposed_service\">Internet-Exposed Service<\/span><span>1.500\u20ac<\/span><\/div>\n          <div class=\"cc-price-row\"><span data-i18n=\"per_endpoint\">Per endpoint<\/span><span>50\u20ac<span data-i18n=\"per_unit\">\/unit<\/span><\/span><\/div>\n          <div class=\"cc-price-total\"><span data-i18n=\"monthly_fee\">Monthly fee<\/span><span>1.200\u20ac<span data-i18n=\"per_mo\">\/mo<\/span><\/span><\/div>\n          <div class=\"cc-price-commission\" data-partner-block=\"true\" data-base-price=\"1200\"><span data-i18n=\"business_commission\">+{amount}\/mo {partner} commission<\/span><\/div>\n        <\/div>\n\n      <\/div>\n\n      <div class=\"cc-uneon-box\" data-partner-block=\"true\">\n        <div>\n          <div class=\"cc-label\" data-i18n=\"commission_model\">{partner} Commission Model<\/div>\n          <div class=\"cc-value\" data-i18n=\"onprem_commission_detail\">{pct}% on recurring monthly revenue \u00b7 Activation costs billed to client<\/div>\n        <\/div>\n        <div style=\"text-align:right\">\n          <div class=\"cc-label\" data-i18n=\"onprem_example_label\">5 SME Standard clients<\/div>\n          <div class=\"cc-value cc-highlight\" data-calc-base-price=\"750\" data-calc-customer-count=\"5\"><span data-calc-amount>~562,50\u20ac<\/span><span data-i18n=\"recurring_mo\">\/mo recurring<\/span><\/div>\n        <\/div>\n      <\/div>\n\n    <\/div><!-- fi seg-onprem -->\n\n  <\/div><!-- fi cc-wrap -->\n\n  <!-- ===================== TESTIMONIALS ===================== -->\n  <section class=\"cc-section\">\n    <div class=\"cc-reveal cc-center\">\n      <div class=\"cc-eyebrow\" data-i18n=\"testimonials_eyebrow\">Success stories<\/div>\n      <h2 class=\"cc-h2\" data-i18n=\"testimonials_title\">Companies that trust CONCENTER.IO<\/h2>\n    <\/div>\n    <div class=\"cc-test-scroll-wrap\">\n      <div class=\"cc-test-grid\" id=\"cc-test-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Customer success stories, scroll horizontally to see more\">\n        <div class=\"cc-test-card cc-reveal\">\n          <div class=\"cc-test-result\" data-i18n=\"test1_result\">\u221280% incident response time<\/div>\n          <div class=\"cc-test-quote\" data-i18n=\"test1_quote\">The visibility the dashboard gives us has changed how we manage security every day.<\/div>\n          <div class=\"cc-test-who\"><strong data-i18n=\"test1_name\">Marta Soler<\/strong><span data-i18n=\"test1_role\">CTO, Industrial sector<\/span><\/div>\n        <\/div>\n        <div class=\"cc-test-card cc-reveal\">\n          <div class=\"cc-test-result\" data-i18n=\"test2_result\">100% on-time compliance reporting<\/div>\n          <div class=\"cc-test-quote\" data-i18n=\"test2_quote\">We went from stressful audits to a fully automated process.<\/div>\n          <div class=\"cc-test-who\"><strong data-i18n=\"test2_name\">Jordi Camps<\/strong><span data-i18n=\"test2_role\">IT Manager, Public administration<\/span><\/div>\n        <\/div>\n        <div class=\"cc-test-card cc-reveal\">\n          <div class=\"cc-test-result\" data-i18n=\"test3_result\">0 undetected critical incidents<\/div>\n          <div class=\"cc-test-quote\" data-i18n=\"test3_quote\">The CONCENTER.IO team acts as a true extension of our IT department.<\/div>\n          <div class=\"cc-test-who\"><strong data-i18n=\"test3_name\">Laura Vidal<\/strong><span data-i18n=\"test3_role\">Operations Director, Retail<\/span><\/div>\n        <\/div>\n        <div class=\"cc-test-card cc-reveal\">\n          <div class=\"cc-test-result\" data-i18n=\"test4_result\">\u221260% false positive alerts<\/div>\n          <div class=\"cc-test-quote\" data-i18n=\"test4_quote\">CONCENTER.IO's AI-driven prioritization lets our small IT team focus on what actually matters.<\/div>\n          <div class=\"cc-test-who\"><strong data-i18n=\"test4_name\">Pau Ribera<\/strong><span data-i18n=\"test4_role\">IT Director, Logistics sector<\/span><\/div>\n        <\/div>\n      <\/div>\n      <div class=\"cc-test-nav\">\n        <button type=\"button\" class=\"cc-test-nav-btn\" aria-label=\"Previous success stories\" data-i18n-aria-label=\"test_nav_prev\" onclick=\"ccTestScroll(-1)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><\/button>\n        <button type=\"button\" class=\"cc-test-nav-btn\" aria-label=\"Next success stories\" data-i18n-aria-label=\"test_nav_next\" onclick=\"ccTestScroll(1)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"\/><\/svg><\/button>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- ===================== FINAL CTA ===================== -->\n  <section class=\"cc-final\" id=\"contact-sales\">\n    <div class=\"cc-reveal\">\n      <h2 data-i18n=\"final_title\">Start Securing Your Infrastructure Today<\/h2>\n      <div class=\"cc-final-ctas\">\n        <a href=\"#contact-sales\" id=\"cc-link-bottom-requestdemo\" class=\"cc-btn cc-btn-primary\" data-i18n=\"final_cta1\">Request Demo<\/a>\n        <a href=\"#contact-sales\" id=\"cc-link-bottom-contactsales\" class=\"cc-btn cc-btn-ghost\" data-i18n=\"final_cta2\">Contact Sales<\/a>\n      <\/div>\n    <\/div>\n  <\/section>\n\n<\/main>\n\n<!-- ============================================================================\n     SITE FOOTER MARKUP \u2014 REUSABLE COMPONENT \u2014 START\n     Copy this <footer>...<\/footer> block AS-IS into every page of the site\n     (together with its CSS block \"SITE FOOTER \u2014 REUSABLE COMPONENT\") so all\n     pages share the exact same footer. All links are already absolute URLs,\n     so this markup works unchanged regardless of which page it's placed on.\n     The data-i18n \/ data-i18n-aria-label attributes hook into the page's own\n     ccApplyLang()\/ccI18n translation engine (already required for the rest\n     of the page), so no extra script is needed just for the footer \u2014 but\n     every page that reuses this markup must also define the footer_collab_text\n     \/ footer_nav_home \/ footer_nav_legal \/ footer_nav_privacy \/\n     footer_nav_cookies \/ footer_copyright keys in its own ccI18n dictionary.\n     ============================================================================ -->\n<footer class=\"cc-site-footer\">\n  <div class=\"cc-site-footer-inner\">\n    <div class=\"cc-footer-collab-text\" data-i18n=\"footer_collab_text\">CONCENTER.IO is an initiative in collaboration with:<\/div>\n    <div class=\"cc-footer-collab-logos\">\n      <img decoding=\"async\" src=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2026\/08\/Footer_Banner.png\" alt=\"Red Nacional de SOC, CCN-CERT, INCIBE, Ag\u00e8ncia de Ciberseguretat de Catalunya, DCA, ASCICAT\">\n    <\/div>\n    <nav class=\"cc-footer-nav\" aria-label=\"Footer\">\n    <a href=\"https:\/\/pro.concenter.io\/\" data-i18n=\"footer_nav_home\" data-i18n-aria-label=\"footer_nav_home\" aria-label=\"Home\">Home<\/a>\n<a href=\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/legal-notice\/\" data-i18n=\"footer_nav_legal\" data-i18n-aria-label=\"footer_nav_legal\" aria-label=\"Legal Notice\">Legal Notice<\/a>\n<a href=\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/privacy-policy\/\" data-i18n=\"footer_nav_privacy\" data-i18n-aria-label=\"footer_nav_privacy\" aria-label=\"Privacy Policy\">Privacy Policy<\/a>\n<a href=\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/cookie-policy\/\" data-i18n=\"footer_nav_cookies\" data-i18n-aria-label=\"footer_nav_cookies\" aria-label=\"Cookie Policy\">Cookie Policy<\/a>\n    <\/nav>\n    <div class=\"cc-footer-copyright\" data-i18n=\"footer_copyright\">All rights reserved \u00a9<\/div>\n  <\/div>\n<\/footer>\n<!-- ===================== SITE FOOTER MARKUP \u2014 REUSABLE COMPONENT \u2014 END ===================== -->\n\n<script>\n\/\/ =============================================\n\/\/ Translations: Catalan (ca) \/ Spanish (es) \/ English (en)\n\/\/ =============================================\nvar ccI18n = {\n  ca: {\n    header_title: \"Protecci\u00f3 de ciberseguretat per a la teva empresa\",\n    header_sub: \"Selecciona el teu tipus d'infraestructura per trobar el pla adequat\",\n    tab_cloud: \"N\u00favol \/ Data Center\",\n    tab_onprem: \"Infraestructura pr\u00f2pia (On-Premise)\",\n    per_mo: \"\/mes\", zero_setup: \"Sense cost d'instal\u00b7laci\u00f3\", trial_note: \"1 mes de prova gratu\u00efta incl\u00f2s\",\n    most_popular: \"\u2b50 M\u00e9s popular\", recurring_mo: \"\/mes recurrents\",\n    essential_name: \"Essencial\", essential_tagline: \"1 servidor o servei exposat a internet (web, acc\u00e9s remot\u2026)\",\n    essential_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    essential_f1: \"Detecci\u00f3 i bloqueig d'amenaces 24\u00d77\", essential_f2: \"Dashboard d'estat i historial complet d'accions\",\n    essential_f3: \"Informes autom\u00e0tics al CCN-CERT\", essential_f4: \"Backup automatitzat\",\n    professional_name: \"Professional\", professional_tagline: \"Fins a 2 servidors virtuals (arxius, correu, ERP\u2026)\",\n    professional_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    professional_f1: \"Tot el del pla Essencial\", professional_f2: \"An\u00e0lisi de tr\u00e0nsit de xarxa (NTA)\",\n    professional_f3: \"Categoritzaci\u00f3 de navegaci\u00f3 per IA\", professional_f4: \"Detecci\u00f3 d'intrusions avan\u00e7ada (SELKS)\",\n    enterprise_name: \"Empresa\", enterprise_tagline: \"M\u00e9s de 2 servidors o infraestructura multi-servei\",\n    enterprise_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    enterprise_f1: \"Tot el del pla Professional\", enterprise_f2: \"Servidors il\u00b7limitats sense cost addicional\",\n    enterprise_f3: \"Gesti\u00f3 d'incidents prioritzada\", enterprise_f4: \"Opci\u00f3 de servidor dedicat des de 125\u20ac\/mes\",\n    commission_model: \"Model de comissi\u00f3 {partner}\",\n    cloud_commission_detail: \"{pct}% sobre quota mensual recurrent \u00b7 Sense cost d'activaci\u00f3\",\n    cloud_example_label: \"Per 10 clients Professional\",\n    onprem_commission_detail: \"{pct}% sobre quota mensual recurrent \u00b7 Costos d'activaci\u00f3 a c\u00e0rrec del client\",\n    onprem_example_label: \"Per 5 clients SME Est\u00e0ndard\",\n    onprem_note: \"<strong>Desplegament en entorn local del client<\/strong> \u00b7 Inclou 1 mes de prova gratu\u00efta \u00b7 Compatible amb Acronis o equivalent per a endpoints\",\n    setup_costs: \"Posada en marxa (un sol pagament)\", soc_setup: \"SOC Setup\", fw_network: \"Firewall + Xarxa\",\n    exposed_service: \"Servei exposat\", per_endpoint: \"Per endpoint\", per_unit: \"\/u\", monthly_fee: \"Quota mensual\",\n    micro_name: \"Micro\", micro_tagline: \"Aut\u00f2noms i micro empreses\", micro_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    sme50_name: \"SME Est\u00e0ndard\", sme50_tagline: \"Petites empreses amb oficina pr\u00f2pia\", sme50_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    sme100_name: \"SME Avan\u00e7at\", sme100_tagline: \"Empreses mitjanes amb infraestructura pr\u00f2pia\", sme100_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n    business_name: \"Business\", business_tagline: \"Empreses consolidades amb departament IT\", business_commission: \"+{amount}\/mes comissi\u00f3 {partner}\",\n\n    hero_tag: \"Plataforma de ciberseguretat gestionada\",\n    hero_h1: \"Protegeix la teva empresa abans que les amenaces es converteixin en incidents\",\n    hero_sub: \"Monitoritzaci\u00f3 de ciberseguretat amb IA, detecci\u00f3 d'amenaces, resposta automatitzada i visibilitat operativa per a empreses modernes.\",\n    hero_cta1: \"Reserva una demo\", hero_cta2: \"Veure la plataforma\",\n    mock_title: \"Centre d'operacions de seguretat\",\n    mock_row1: \"An\u00e0lisi de tr\u00e0nsit completat\", mock_row2: \"Activitat sospitosa contenida\", mock_row3: \"Informe de compliment generat\",\n    why_eyebrow: \"Per qu\u00e8 nosaltres\", why_title: \"Per qu\u00e8 hauries d'escollir CONCENTER.IO?\",\n    why_lede: \"Sis motius pels quals pimes i administracions confien en la nostra plataforma.\",\n    why_item1: \"SOC gestionat 24x7\", why_item2: \"Detecci\u00f3 i resposta automatitzada davant d'incidents\",\n    why_item3: \"Monitoratge continu amb SIEM i XDR\",\n    why_item4: \"Intel\u00b7lig\u00e8ncia Artificial aplicada a la detecci\u00f3, an\u00e0lisi d'amenaces i tr\u00e0nsit de xarxa\",\n    why_item5: \"Preparat per a NIS2, ENS i ISO 27001\",\n    why_item6: \"Integraci\u00f3 amb la Red Nacional de SOC (RN-SOC) amb la m\u00e0xima qualificaci\u00f3\",\n    trust_label: \"Tecnologies que impulsen la nostra plataforma\",\n    skip_to_content: \"Saltar al contingut principal\",\n    tech_selks: \"Plataforma de codi obert amb el motor Suricata i l'stack Elastic (ELK), per a la monitoritzaci\u00f3 de seguretat i la detecci\u00f3 d'amenaces de xarxa.\",\n    tech_wazuh: \"Plataforma de codi obert per a la detecci\u00f3 d'amenaces, la monitoritzaci\u00f3 d'integritat (FIM) i el compliment de seguretat als endpoints.\",\n    tech_siem: \"Correlaci\u00f3 centralitzada de registres i detecci\u00f3 d'esdeveniments de seguretat, mitjan\u00e7ant l'indexador de Wazuh i l'stack Elastic.\",\n    tech_xdr: \"Detecci\u00f3 i resposta ampliades que unifiquen xarxa (Suricata) i endpoint (Wazuh) en una sola consola de seguretat.\",\n    tech_ndr: \"An\u00e0lisi continu del tr\u00e0nsit de xarxa amb Suricata per detectar comportaments an\u00f2mals m\u00e9s enll\u00e0 de les signatures conegudes.\",\n    tech_ids: \"Detecci\u00f3 d'activitat de xarxa sospitosa mitjan\u00e7ant el motor de signatures de Suricata (SELKS).\",\n    tech_ips: \"Bloqueig en temps real de tr\u00e0nsit de xarxa malici\u00f3s, en mode inline sobre el motor Suricata (SELKS).\",\n    tech_zerotrust: \"Verificaci\u00f3 cont\u00ednua i acc\u00e9s de m\u00ednim privilegi, refor\u00e7ats amb l'avaluaci\u00f3 de configuraci\u00f3 i vulnerabilitats de Wazuh.\",\n    tech_ti: \"Enriquiment d'alertes amb feeds d'amenaces i indicadors de comprom\u00eds, integrats a Wazuh i als jocs de regles de Suricata.\",\n    tech_hunting: \"Cerca proactiva d'amenaces no detectades sobre els registres indexats de Wazuh i les alertes de Suricata\/EveBox.\",\n    tech_rnsoc: \"Report autom\u00e0tic i escalat d'incidents a la Red Nacional de SOC (RN-SOC).\",\n    tech_ai_label: \"IA\",\n    tech_ai: \"A CONCENTER.IO treballem amb diverses IA, tant allotjades en local com consumides per API, segons les necessitats de cada proc\u00e9s. Fem servir eines com Kimi K2, Copilot i, en desenvolupament, Cursor amb Claude.\",\n    problems_eyebrow: \"Riscos reals\", problems_title: \"Els riscos ocults que amenacen les pimes cada dia\",\n    problem1_title: \"Ransomware\", problem1_desc: \"Atacs que xifren dades cr\u00edtiques i paralitzen l'operativa fins al pagament d'un rescat.\",\n    problem2_title: \"Phishing\", problem2_desc: \"Correus fraudulents dissenyats per robar credencials i accedir als teus sistemes.\",\n    problem3_title: \"Amenaces internes\", problem3_desc: \"Accessos indeguts, intencionats o no, per part de l'equip intern.\",\n    problem4_title: \"Fuites de dades\", problem4_desc: \"Exposici\u00f3 d'informaci\u00f3 confidencial de clients i de l'empresa.\",\n    problem5_title: \"Shadow IT\", problem5_desc: \"Eines i serveis no autoritzats que operen fora del per\u00edmetre de seguretat.\",\n    problem6_title: \"Incompliment normatiu\", problem6_desc: \"Sancions i p\u00e8rdua de confian\u00e7a per no complir els requisits de compliment.\",\n    solutions_eyebrow: \"La plataforma\", solutions_title: \"Una plataforma. Visibilitat completa.\",\n    solutions_lede: \"Tota la pila de seguretat unificada en un sol panell: detecci\u00f3, an\u00e0lisi, resposta i informes.\",\n    sol1_title: \"Detecci\u00f3 d'amenaces en temps real\", sol1_desc: \"Identificaci\u00f3 cont\u00ednua d'activitat an\u00f2mala a tota la infraestructura.\",\n    sol2_title: \"Classificaci\u00f3 amb IA\", sol2_desc: \"Prioritzaci\u00f3 intel\u00b7ligent d'alertes per reduir el soroll i accelerar la resposta.\",\n    sol3_title: \"Resposta automatitzada\", sol3_desc: \"Contenci\u00f3 immediata d'amenaces sense intervenci\u00f3 manual.\",\n    sol4_title: \"Threat Intelligence\", sol4_desc: \"Feeds globals d'amenaces actualitzats per anticipar-te als atacants.\",\n    sol5_title: \"Monitoritzaci\u00f3 de seguretat\", sol5_desc: \"Vigil\u00e0ncia 24\u00d77 de tots els actius cr\u00edtics del negoci.\",\n    sol6_title: \"An\u00e0lisi de xarxa\", sol6_desc: \"Visibilitat total del tr\u00e0nsit per detectar moviments laterals.\",\n    sol7_title: \"Informes de compliment\", sol7_desc: \"Documentaci\u00f3 autom\u00e0tica alineada amb els requisits normatius.\",\n    sol8_title: \"Investigaci\u00f3 d'incidents\", sol8_desc: \"Eines forenses per entendre l'abast i l'origen de cada incident.\",\n    arch_eyebrow: \"Arquitectura\", arch_title: \"Com funciona la nostra plataforma\",\n    arch_step1: \"Internet\", arch_step2: \"Threat Intelligence\", arch_step3: \"Capa de detecci\u00f3\",\n    arch_step4: \"Motor d'an\u00e0lisi amb IA\", arch_step5: \"Resposta automatitzada\", arch_step6: \"Panell d'informes\",\n    benefits_eyebrow: \"Resultats\", benefits_title: \"Rendiment mesurable, confian\u00e7a real\",\n    kpi1_label: \"Precisi\u00f3 en la detecci\u00f3 d'amenaces\", kpi2_label: \"Monitoritzaci\u00f3 cont\u00ednua\",\n    kpi3_label: \"Temps de resposta\", kpi4_label: \"Independent de tecnologia\",\n    testimonials_eyebrow: \"Casos d'\u00e8xit\", testimonials_title: \"Empreses que confien en CONCENTER.IO\",\n    test1_result: \"\u221280% temps de resposta a incidents\", test1_quote: \"La visibilitat que ens dona el dashboard ha canviat com gestionem la seguretat dia a dia.\",\n    test1_name: \"Marta Soler\", test1_role: \"CTO, sector industrial\",\n    test2_result: \"100% d'informes de compliment a temps\", test2_quote: \"Vam passar d'auditories estressants a un proc\u00e9s totalment automatitzat.\",\n    test2_name: \"Jordi Camps\", test2_role: \"Responsable IT, administraci\u00f3 p\u00fablica\",\n    test3_result: \"0 incidents cr\u00edtics no detectats\", test3_quote: \"L'equip de CONCENTER.IO actua com una extensi\u00f3 real del nostre departament IT.\",\n    test3_name: \"Laura Vidal\", test3_role: \"Directora d'Operacions, retail\",\n    test4_result: \"\u221295% falsos positius\", test4_quote: \"La prioritzaci\u00f3 amb IA de CONCENTER.IO permet que el nostre petit equip de TI se centri en el que realment importa.\",\n    test4_name: \"Pau Ribera\", test4_role: \"Director de TI, sector log\u00edstic\",\n    test_nav_prev: \"Casos d'\u00e8xit anteriors\", test_nav_next: \"Casos d'\u00e8xit seg\u00fcents\",\n    final_title: \"Comen\u00e7a a protegir la teva infraestructura avui mateix\",\n    final_cta1: \"Sol\u00b7licita una demo\", final_cta2: \"Contacta amb vendes\",\n\n    footer_collab_text: \"CONCENTER.IO \u00e9s una iniciativa en col\u00b7laboraci\u00f3 amb:\",\n    footer_nav_home: \"Inici\", footer_nav_legal: \"Av\u00eds legal\",\n    footer_nav_privacy: \"Pol\u00edtica de privacitat\", footer_nav_cookies: \"Pol\u00edtica de cookies\",\n    footer_copyright: \"Tots els drets reservats \u00a9\",\n\n    chc_badge: \"Eina gratu\u00efta\",\n    chc_eyebrow: \"Cyber Health Check\",\n    chc_title: \"On \u00e9s realment la teva empresa en ciberseguretat?\",\n    chc_lede: \"Respon unes quantes preguntes r\u00e0pides i obt\u00e9n una radiografia de risc instant\u00e0nia i personalitzada, basada en els mateixos controls que revisen primer els nostres analistes de SOC.\",\n    chc_intro_eyebrow: \"8 preguntes \u00b7 menys de 3 minuts\",\n    chc_intro_title: \"Et preguntarem sobre identitat, actius, monitoritzaci\u00f3, vulnerabilitats, c\u00f2pies de seguretat, conscienciaci\u00f3, resposta a incidents i compliment normatiu: els vuit controls que decideixen el desenlla\u00e7 de la majoria d'incidents reals i auditories.\",\n    chc_profile_eyebrow: \"Context r\u00e0pid\",\n    chc_profile_desc: \"Aquest primer bloc permet contextualitzar el perfil de l'empresa per adaptar el nivell de risc i les recomanacions al seu sector i dimensi\u00f3.\",\n    chc_profile_title: \"Un parell de detalls perqu\u00e8 l'informe parli el teu idioma.\",\n    chc_sector_label: \"Sector\",\n    chc_sector_placeholder: \"Selecciona el teu sector\",\n    chc_sector_retail: \"Comer\u00e7 i retail\",\n    chc_sector_industrial: \"Ind\u00fastria i fabricaci\u00f3\",\n    chc_sector_public: \"Administraci\u00f3 p\u00fablica\",\n    chc_sector_professional: \"Serveis professionals\",\n    chc_sector_healthcare: \"Sanitat\",\n    chc_sector_tech: \"Tecnologia i SaaS\",\n    chc_sector_logistics: \"Log\u00edstica i transport\",\n    chc_sector_other: \"Altres\",\n    chc_size_label: \"Mida de l'empresa\",\n    chc_size_placeholder: \"Selecciona la mida de l'empresa\",\n    chc_size_micro: \"1\u20139 treballadors\",\n    chc_size_small: \"10\u201349 treballadors\",\n    chc_size_medium: \"50\u2013249 treballadors\",\n    chc_size_large: \"250+ treballadors\",\n    chc_intro_cta: \"Comen\u00e7ar el meu Cyber Health Check\",\n    chc_q1_eyebrow: \"Identitat i acc\u00e9s\",\n    chc_q1_desc: \"Avalua el nivell de protecci\u00f3 dels accessos als sistemes cr\u00edtics de l'organitzaci\u00f3, especialment davant del robatori de credencials.\",\n    chc_q1_title: \"Com protegiu l'acc\u00e9s als comptes cr\u00edtics (correu, ERP, acc\u00e9s remot...)?\",\n    chc_q1_opt_ok: \"Fem servir autenticaci\u00f3 multifactor (MFA) a tots els comptes cr\u00edtics.\",\n    chc_q1_opt_partial: \"Fem servir MFA nom\u00e9s en alguns comptes.\",\n    chc_q1_opt_bad: \"Nom\u00e9s protegim els comptes amb contrasenya.\",\n    chc_q2_eyebrow: \"Visibilitat dels actius\",\n    chc_q2_desc: \"Mesura el coneixement que t\u00e9 l'organitzaci\u00f3 sobre els dispositius, servidors i sistemes connectats a la seva infraestructura.\",\n    chc_q2_title: \"Teniu identificats tots els dispositius i sistemes connectats a la vostra xarxa?\",\n    chc_q2_opt_ok: \"S\u00ed, mantenim un inventari actualitzat dels nostres actius.\",\n    chc_q2_opt_partial: \"Coneixem la majoria dels equips, per\u00f2 no tenim un inventari complet.\",\n    chc_q2_opt_bad: \"No disposem d'un inventari actualitzat.\",\n    chc_q3_eyebrow: \"Detecci\u00f3 i monitoratge\",\n    chc_q3_desc: \"Avalua la capacitat de detectar activitats sospitoses i respondre davant d'incidents de seguretat.\",\n    chc_q3_title: \"Qui vigila els vostres sistemes davant d'una activitat sospitosa?\",\n    chc_q3_opt_ok: \"Disposem d'un SOC 24x7 o d'un servei gestionat de detecci\u00f3 (SIEM\/XDR).\",\n    chc_q3_opt_partial: \"Tenim eines de seguretat, per\u00f2 no hi ha monitoratge continu.\",\n    chc_q3_opt_bad: \"Ning\u00fa; probablement ens n'adonar\u00edem quan el problema ja fos evident.\",\n    chc_q4_eyebrow: \"Gesti\u00f3 de vulnerabilitats\",\n    chc_q4_desc: \"Analitza la capacitat de detectar i corregir vulnerabilitats abans que puguin ser explotades.\",\n    chc_q4_title: \"Com detecteu si els vostres sistemes tenen vulnerabilitats de seguretat?\",\n    chc_q4_opt_ok: \"Disposem d'un sistema continu de detecci\u00f3 i seguiment de vulnerabilitats.\",\n    chc_q4_opt_partial: \"Fem revisions o escanejos peri\u00f2dics.\",\n    chc_q4_opt_bad: \"Nom\u00e9s actuem quan apareix un problema o una incid\u00e8ncia.\",\n    chc_q5_eyebrow: \"Resili\u00e8ncia i recuperaci\u00f3\",\n    chc_q5_desc: \"Mesura la capacitat de recuperar l'activitat davant d'un atac, especialment en escenaris de ransomware.\",\n    chc_q5_title: \"Si dem\u00e0 reb\u00e9ssiu un atac de ransomware, com resistirien les vostres c\u00f2pies de seguretat?\",\n    chc_q5_opt_ok: \"Disposem de c\u00f2pies regulars, provades i fora de l\u00ednia o immutables.\",\n    chc_q5_opt_partial: \"Tenim c\u00f2pies de seguretat, per\u00f2 no estan provades o estan connectades a la xarxa.\",\n    chc_q5_opt_bad: \"No disposem d'un sistema fiable de c\u00f2pies de seguretat.\",\n    chc_q6_eyebrow: \"Persones i conscienciaci\u00f3\",\n    chc_q6_desc: \"Avalua el nivell de preparaci\u00f3 dels treballadors davant de les principals amenaces de ciberseguretat.\",\n    chc_q6_title: \"Els vostres treballadors reben formaci\u00f3 peri\u00f2dica en ciberseguretat?\",\n    chc_q6_opt_ok: \"S\u00ed, de manera regular i amb simulacions o recordatoris peri\u00f2dics.\",\n    chc_q6_opt_partial: \"Nom\u00e9s de forma ocasional.\",\n    chc_q6_opt_bad: \"No realitzem cap tipus de formaci\u00f3 espec\u00edfica.\",\n    chc_q7_eyebrow: \"Resposta davant incidents\",\n    chc_q7_desc: \"Mesura el nivell de preparaci\u00f3 de l'organitzaci\u00f3 per gestionar un incident de ciberseguretat de manera ordenada i efica\u00e7.\",\n    chc_q7_title: \"Si avui es produ\u00eds un incident greu de ciberseguretat, el vostre equip sabria com actuar?\",\n    chc_q7_opt_ok: \"Disposem d'un procediment documentat i provat.\",\n    chc_q7_opt_partial: \"Tenim unes pautes generals, per\u00f2 no un pla formal.\",\n    chc_q7_opt_bad: \"No disposem de cap procediment establert.\",\n    chc_q8_eyebrow: \"Governan\u00e7a i compliment\",\n    chc_q8_desc: \"Avalua el grau de preparaci\u00f3 de l'organitzaci\u00f3 per demostrar el compliment dels principals est\u00e0ndards i regulacions de ciberseguretat.\",\n    chc_q8_title: \"Si dem\u00e0 us auditessin, podr\u00edeu demostrar el compliment de normatives com NIS2, ISO 27001 o ENS?\",\n    chc_q8_opt_ok: \"S\u00ed, disposem de pol\u00edtiques documentades, auditories i evid\u00e8ncies.\",\n    chc_q8_opt_partial: \"Tenim algunes pol\u00edtiques, per\u00f2 sense un seguiment formal.\",\n    chc_q8_opt_bad: \"No disposem d'un marc de compliment definit.\",\n    chc_back: \"Enrere\", chc_next: \"Seg\u00fcent\", chc_next_results: \"Veure els meus resultats\",\n    chc_lead_eyebrow: \"Ja gaireb\u00e9 hi som\",\n    chc_lead_title: \"On t'enviem el teu informe personalitzat?\",\n    chc_lead_name_label: \"Nom complet\", chc_lead_company_label: \"Empresa\", chc_lead_email_label: \"Email professional\",\n    chc_consent_label: \"Utilitzarem les teves dades per enviar-te el teu informe personalitzat del Cyber Health Check i contactar-te en relaci\u00f3 amb els seus resultats. Per a m\u00e9s informaci\u00f3, consulta la nostra <a href=\\\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/privacy-policy\/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">Pol\u00edtica de Privacitat<\/a>.\",\n    chc_lead_cta: \"Generar el meu informe\",\n    chc_lead_error: \"Falta omplir algun camp: nom, empresa, o un email v\u00e0lid.\",\n    chc_privacy_note: \"Les teves respostes s'envien de forma segura per generar el teu informe i el rebr\u00e0s per correu electr\u00f2nic.\",\n    chc_loading_text: \"Avaluant les teves respostes amb la nostra base de coneixement\u2026\",\n    chc_fatal_text: \"Alguna cosa ha fallat mentre prepar\u00e0vem el teu informe. No s'ha enviat res enlloc, aix\u00ed que torna-ho a provar.\",\n    chc_fatal_retry: \"Tornar a comen\u00e7ar\",\n    chc_score_of100: \"\/ 100\",\n    chc_restart: \"Torna a fer l'avaluaci\u00f3\",\n    chc_api_retry: \"Torna-ho a intentar\",\n    chc_followup_title: \"El teu informe personalitzat ja est\u00e0 en cam\u00ed\",\n    chc_followup_text: \"Estem enllestint el teu Cyber Health Check complet, amb les troballes detallades, les recomanacions prioritzades i les refer\u00e8ncies normatives que hi ha darrere d'aquesta puntuaci\u00f3. El rebr\u00e0s per correu electr\u00f2nic a <strong>{email}<\/strong> durant els propers 5 minuts.\",\n    chc_followup_spam: \"No el veus al cap d'una estona? Revisa la carpeta de correu brossa o promocions.\",\n    chc_api_status_sending: \"Enviant les dades a l'API\u2026\",\n    chc_api_status_ok: \"\u2714 Sol\u00b7licitud acceptada per l'API.\",\n    chc_api_status_error: \"\u2718 L'API no ha acceptat la sol\u00b7licitud.\",\n    chc_payload_author_label: \"Autor\",\n    chc_payload_report_manager_label: \"Responsable de l'informe\",\n    chc_payload_data_analyst_label: \"Analista de dades\",\n    chc_payload_contact_label: \"Contacte\",\n    chc_risk_low: \"Risc baix\", chc_risk_moderate: \"Risc moderat\", chc_risk_high: \"Risc alt\", chc_risk_critical: \"Risc cr\u00edtic\",\n    chc_risk_sentence_low: \"La base \u00e9s s\u00f2lida: els seg\u00fcents passos s\u00f3n d'optimitzaci\u00f3, no de resposta a una urg\u00e8ncia.\",\n    chc_risk_sentence_moderate: \"Hi ha marge clar de millora en algun dels controls clau; abordar-ho ara evita que es converteixi en una bretxa cr\u00edtica.\",\n    chc_risk_sentence_high: \"Hi ha mancances importants que us deixen exposats a un incident amb impacte real en l'operativa.\",\n    chc_risk_sentence_critical: \"Hi ha bretxes cr\u00edtiques que us exposen a un incident greu en qualsevol moment, per aix\u00f2 recomanem actuar de manera immediata.\",\n\n    popupcta_eyebrow: \"Eina gratu\u00efta\",\n    popupcta_title: \"Coneix el teu risc real en ciberseguretat en 3 minuts\",\n    popupcta_body: \"Respon 8 preguntes r\u00e0pides i rep una puntuaci\u00f3 de risc instant\u00e0nia i personalitzada, gratis.\",\n    popupcta_cta: \"Fer el meu Cyber Health Check\",\n    popupcta_dismiss: \"Ara no\",\n    popupcta_close_aria: \"Tancar\",\n    popupcta_config_error: \"Error de configuraci\u00f3: el popup del Cyber Health Check est\u00e0 activat (CC_FLAG_SHOW_CHC_POPUP = 1) per\u00f2 el m\u00f2dul de Cyber Health Check no es mostra per pantalla perqu\u00e8 est\u00e0 desactivat per codi (CC_FLAG_SHOW_CHC = 0). No t\u00e9 sentit promocionar un m\u00f2dul amagat: posa CC_FLAG_SHOW_CHC a 1 o CC_FLAG_SHOW_CHC_POPUP a 0.\"\n  },\n\n  es: {\n    header_title: \"Protecci\u00f3n de ciberseguridad para tu empresa\",\n    header_sub: \"Selecciona tu tipo de infraestructura para encontrar el plan adecuado\",\n    tab_cloud: \"Nube \/ Data Center\", tab_onprem: \"Infraestructura propia (On-Premise)\",\n    per_mo: \"\/mes\", zero_setup: \"Sin coste de instalaci\u00f3n\", trial_note: \"1 mes de prueba gratuita incluido\",\n    most_popular: \"\u2b50 M\u00e1s popular\", recurring_mo: \"\/mes recurrentes\",\n    essential_name: \"Esencial\", essential_tagline: \"1 servidor o servicio expuesto a internet (web, acceso remoto\u2026)\",\n    essential_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    essential_f1: \"Detecci\u00f3n y bloqueo de amenazas 24\u00d77\", essential_f2: \"Dashboard de estado e historial completo de acciones\",\n    essential_f3: \"Informes autom\u00e1ticos al CCN-CERT\", essential_f4: \"Backup automatizado\",\n    professional_name: \"Profesional\", professional_tagline: \"Hasta 2 servidores virtuales (archivos, correo, ERP\u2026)\",\n    professional_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    professional_f1: \"Todo lo del plan Esencial\", professional_f2: \"An\u00e1lisis de tr\u00e1fico de red (NTA)\",\n    professional_f3: \"Categorizaci\u00f3n de navegaci\u00f3n por IA\", professional_f4: \"Detecci\u00f3n de intrusiones avanzada (SELKS)\",\n    enterprise_name: \"Empresa\", enterprise_tagline: \"M\u00e1s de 2 servidores o infraestructura multi-servicio\",\n    enterprise_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    enterprise_f1: \"Todo lo del plan Profesional\", enterprise_f2: \"Servidores ilimitados sin coste adicional\",\n    enterprise_f3: \"Gesti\u00f3n de incidentes prioritaria\", enterprise_f4: \"Opci\u00f3n de servidor dedicado desde 125\u20ac\/mes\",\n    commission_model: \"Modelo de comisi\u00f3n {partner}\",\n    cloud_commission_detail: \"{pct}% sobre cuota mensual recurrente \u00b7 Sin coste de activaci\u00f3n\",\n    cloud_example_label: \"Por 10 clientes Profesional\",\n    onprem_commission_detail: \"{pct}% sobre cuota mensual recurrente \u00b7 Costes de activaci\u00f3n a cargo del cliente\",\n    onprem_example_label: \"Por 5 clientes SME Est\u00e1ndar\",\n    onprem_note: \"<strong>Desplegado en el entorno local del cliente<\/strong> \u00b7 Incluye 1 mes de prueba gratuita \u00b7 Compatible con Acronis o equivalente para endpoints\",\n    setup_costs: \"Puesta en marcha (pago \u00fanico)\", soc_setup: \"SOC Setup\", fw_network: \"Firewall + Red\",\n    exposed_service: \"Servicio expuesto\", per_endpoint: \"Por endpoint\", per_unit: \"\/u\", monthly_fee: \"Cuota mensual\",\n    micro_name: \"Micro\", micro_tagline: \"Aut\u00f3nomos y micro empresas\", micro_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    sme50_name: \"SME Est\u00e1ndar\", sme50_tagline: \"Peque\u00f1as empresas con oficina propia\", sme50_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    sme100_name: \"SME Avanzado\", sme100_tagline: \"Empresas medianas con infraestructura propia\", sme100_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n    business_name: \"Business\", business_tagline: \"Empresas consolidadas con departamento IT\", business_commission: \"+{amount}\/mes comisi\u00f3n {partner}\",\n\n    hero_tag: \"Plataforma de ciberseguridad gestionada\",\n    hero_h1: \"Protege tu empresa antes de que las amenazas se conviertan en incidentes\",\n    hero_sub: \"Monitorizaci\u00f3n de ciberseguridad con IA, detecci\u00f3n de amenazas, respuesta automatizada y visibilidad operativa para empresas modernas.\",\n    hero_cta1: \"Reserva una demo\", hero_cta2: \"Ver la plataforma\",\n    mock_title: \"Centro de operaciones de seguridad\",\n    mock_row1: \"An\u00e1lisis de tr\u00e1fico completado\", mock_row2: \"Actividad sospechosa contenida\", mock_row3: \"Informe de cumplimiento generado\",\n    why_eyebrow: \"Por qu\u00e9 nosotros\", why_title: \"\u00bfPor qu\u00e9 deber\u00edas elegir CONCENTER.IO?\",\n    why_lede: \"Seis motivos por los que pymes y administraciones conf\u00edan en nuestra plataforma.\",\n    why_item1: \"SOC gestionado 24x7\", why_item2: \"Detecci\u00f3n y respuesta automatizada ante incidentes\",\n    why_item3: \"Monitorizaci\u00f3n continua con SIEM y XDR\",\n    why_item4: \"Inteligencia Artificial aplicada a la detecci\u00f3n, an\u00e1lisis de amenazas y tr\u00e1fico de red\",\n    why_item5: \"Preparado para NIS2, ENS e ISO 27001\",\n    why_item6: \"Integraci\u00f3n con la Red Nacional de SOC (RN-SOC) con la m\u00e1xima cualificaci\u00f3n\",\n    trust_label: \"Tecnolog\u00edas que impulsan nuestra plataforma\",\n    skip_to_content: \"Saltar al contenido principal\",\n    tech_selks: \"Plataforma de c\u00f3digo abierto con el motor Suricata y el stack Elastic (ELK), para la monitorizaci\u00f3n de seguridad y la detecci\u00f3n de amenazas de red.\",\n    tech_wazuh: \"Plataforma de c\u00f3digo abierto para la detecci\u00f3n de amenazas, la monitorizaci\u00f3n de integridad (FIM) y el cumplimiento de seguridad en los endpoints.\",\n    tech_siem: \"Correlaci\u00f3n centralizada de registros y detecci\u00f3n de eventos de seguridad, mediante el indexador de Wazuh y el stack Elastic.\",\n    tech_xdr: \"Detecci\u00f3n y respuesta ampliadas que unifican red (Suricata) y endpoint (Wazuh) en una sola consola de seguridad.\",\n    tech_ndr: \"An\u00e1lisis continuo del tr\u00e1fico de red con Suricata para detectar comportamientos an\u00f3malos m\u00e1s all\u00e1 de las firmas conocidas.\",\n    tech_ids: \"Detecci\u00f3n de actividad de red sospechosa mediante el motor de firmas de Suricata (SELKS).\",\n    tech_ips: \"Bloqueo en tiempo real de tr\u00e1fico de red malicioso, en modo inline sobre el motor Suricata (SELKS).\",\n    tech_zerotrust: \"Verificaci\u00f3n continua y acceso de m\u00ednimo privilegio, reforzados con la evaluaci\u00f3n de configuraci\u00f3n y vulnerabilidades de Wazuh.\",\n    tech_ti: \"Enriquecimiento de alertas con feeds de amenazas e indicadores de compromiso, integrados en Wazuh y en los conjuntos de reglas de Suricata.\",\n    tech_hunting: \"B\u00fasqueda proactiva de amenazas no detectadas sobre los registros indexados de Wazuh y las alertas de Suricata\/EveBox.\",\n    tech_rnsoc: \"Informe autom\u00e1tico y escalado de incidentes a la Red Nacional de SOC (RN-SOC).\",\n    tech_ai_label: \"IA\",\n    tech_ai: \"En CONCENTER.IO trabajamos con varias IA, tanto alojadas en local como consumidas por API, seg\u00fan las necesidades de cada proceso. Utilizamos herramientas como Kimi K2, Copilot y, en desarrollo, Cursor con Claude.\",\n    problems_eyebrow: \"Riesgos reales\", problems_title: \"Los riesgos ocultos que amenazan a las pymes cada d\u00eda\",\n    problem1_title: \"Ransomware\", problem1_desc: \"Ataques que cifran datos cr\u00edticos y paralizan la operativa hasta el pago de un rescate.\",\n    problem2_title: \"Phishing\", problem2_desc: \"Correos fraudulentos dise\u00f1ados para robar credenciales y acceder a tus sistemas.\",\n    problem3_title: \"Amenazas internas\", problem3_desc: \"Accesos indebidos, intencionados o no, por parte del equipo interno.\",\n    problem4_title: \"Fugas de datos\", problem4_desc: \"Exposici\u00f3n de informaci\u00f3n confidencial de clientes y de la empresa.\",\n    problem5_title: \"Shadow IT\", problem5_desc: \"Herramientas y servicios no autorizados que operan fuera del per\u00edmetro de seguridad.\",\n    problem6_title: \"Incumplimiento normativo\", problem6_desc: \"Sanciones y p\u00e9rdida de confianza por no cumplir los requisitos de cumplimiento.\",\n    solutions_eyebrow: \"La plataforma\", solutions_title: \"Una plataforma. Visibilidad completa.\",\n    solutions_lede: \"Toda la pila de seguridad unificada en un solo panel: detecci\u00f3n, an\u00e1lisis, respuesta e informes.\",\n    sol1_title: \"Detecci\u00f3n de amenazas en tiempo real\", sol1_desc: \"Identificaci\u00f3n continua de actividad an\u00f3mala en toda la infraestructura.\",\n    sol2_title: \"Clasificaci\u00f3n con IA\", sol2_desc: \"Priorizaci\u00f3n inteligente de alertas para reducir el ruido y acelerar la respuesta.\",\n    sol3_title: \"Respuesta automatizada\", sol3_desc: \"Contenci\u00f3n inmediata de amenazas sin intervenci\u00f3n manual.\",\n    sol4_title: \"Threat Intelligence\", sol4_desc: \"Feeds globales de amenazas actualizados para anticiparte a los atacantes.\",\n    sol5_title: \"Monitorizaci\u00f3n de seguridad\", sol5_desc: \"Vigilancia 24\u00d77 de todos los activos cr\u00edticos del negocio.\",\n    sol6_title: \"An\u00e1lisis de red\", sol6_desc: \"Visibilidad total del tr\u00e1fico para detectar movimientos laterales.\",\n    sol7_title: \"Informes de cumplimiento\", sol7_desc: \"Documentaci\u00f3n autom\u00e1tica alineada con los requisitos normativos.\",\n    sol8_title: \"Investigaci\u00f3n de incidentes\", sol8_desc: \"Herramientas forenses para entender el alcance y origen de cada incidente.\",\n    arch_eyebrow: \"Arquitectura\", arch_title: \"C\u00f3mo funciona nuestra plataforma\",\n    arch_step1: \"Internet\", arch_step2: \"Threat Intelligence\", arch_step3: \"Capa de detecci\u00f3n\",\n    arch_step4: \"Motor de an\u00e1lisis con IA\", arch_step5: \"Respuesta automatizada\", arch_step6: \"Panel de informes\",\n    benefits_eyebrow: \"Resultados\", benefits_title: \"Rendimiento medible, confianza real\",\n    kpi1_label: \"Precisi\u00f3n en la detecci\u00f3n de amenazas\", kpi2_label: \"Monitorizaci\u00f3n continua\",\n    kpi3_label: \"Tiempo de respuesta\", kpi4_label: \"Independiente de tecnolog\u00eda\",\n    testimonials_eyebrow: \"Casos de \u00e9xito\", testimonials_title: \"Empresas que conf\u00edan en CONCENTER.IO\",\n    test1_result: \"\u221280% tiempo de respuesta a incidentes\", test1_quote: \"La visibilidad que nos da el dashboard ha cambiado c\u00f3mo gestionamos la seguridad cada d\u00eda.\",\n    test1_name: \"Marta Soler\", test1_role: \"CTO, sector industrial\",\n    test2_result: \"100% de informes de cumplimiento a tiempo\", test2_quote: \"Pasamos de auditor\u00edas estresantes a un proceso totalmente automatizado.\",\n    test2_name: \"Jordi Camps\", test2_role: \"Responsable IT, administraci\u00f3n p\u00fablica\",\n    test3_result: \"0 incidentes cr\u00edticos no detectados\", test3_quote: \"El equipo de CONCENTER.IO act\u00faa como una extensi\u00f3n real de nuestro departamento IT.\",\n    test3_name: \"Laura Vidal\", test3_role: \"Directora de Operaciones, retail\",\n    test4_result: \"\u221295% falsos positivos\", test4_quote: \"La priorizaci\u00f3n con IA de CONCENTER.IO permite que nuestro peque\u00f1o equipo de TI se centre en lo que realmente importa.\",\n    test4_name: \"Pau Ribera\", test4_role: \"Director de TI, sector log\u00edstico\",\n    test_nav_prev: \"Casos de \u00e9xito anteriores\", test_nav_next: \"Casos de \u00e9xito siguientes\",\n    final_title: \"Empieza a proteger tu infraestructura hoy mismo\",\n    final_cta1: \"Solicita una demo\", final_cta2: \"Contacta con ventas\",\n\n    footer_collab_text: \"CONCENTER.IO es una iniciativa en colaboraci\u00f3n con:\",\n    footer_nav_home: \"Inicio\", footer_nav_legal: \"Aviso legal\",\n    footer_nav_privacy: \"Pol\u00edtica de privacidad\", footer_nav_cookies: \"Pol\u00edtica de cookies\",\n    footer_copyright: \"Todos los derechos reservados \u00a9\",\n\n    chc_badge: \"Herramienta gratuita\",\n    chc_eyebrow: \"Cyber Health Check\",\n    chc_title: \"\u00bfD\u00f3nde est\u00e1 realmente tu empresa en ciberseguridad?\",\n    chc_lede: \"Responde unas cuantas preguntas r\u00e1pidas y obt\u00e9n una radiograf\u00eda de riesgo instant\u00e1nea y personalizada, basada en los mismos controles que revisan primero nuestros analistas de SOC.\",\n    chc_intro_eyebrow: \"8 preguntas \u00b7 menos de 3 minutos\",\n    chc_intro_title: \"Te preguntaremos sobre identidad, activos, monitorizaci\u00f3n, vulnerabilidades, copias de seguridad, concienciaci\u00f3n, respuesta a incidentes y cumplimiento normativo: los ocho controles que deciden el desenlace de la mayor\u00eda de incidentes reales y auditor\u00edas.\",\n    chc_profile_eyebrow: \"Contexto r\u00e1pido\",\n    chc_profile_desc: \"Este primer bloque nos permite contextualizar el perfil de la empresa para adaptar el nivel de riesgo y las recomendaciones a su sector y dimensi\u00f3n.\",\n    chc_profile_title: \"Un par de detalles para que el informe hable tu idioma.\",\n    chc_sector_label: \"Sector\",\n    chc_sector_placeholder: \"Selecciona tu sector\",\n    chc_sector_retail: \"Comercio y retail\",\n    chc_sector_industrial: \"Industria y fabricaci\u00f3n\",\n    chc_sector_public: \"Administraci\u00f3n p\u00fablica\",\n    chc_sector_professional: \"Servicios profesionales\",\n    chc_sector_healthcare: \"Sanidad\",\n    chc_sector_tech: \"Tecnolog\u00eda y SaaS\",\n    chc_sector_logistics: \"Log\u00edstica y transporte\",\n    chc_sector_other: \"Otros\",\n    chc_size_label: \"Tama\u00f1o de la empresa\",\n    chc_size_placeholder: \"Selecciona el tama\u00f1o de la empresa\",\n    chc_size_micro: \"1\u20139 empleados\",\n    chc_size_small: \"10\u201349 empleados\",\n    chc_size_medium: \"50\u2013249 empleados\",\n    chc_size_large: \"250+ empleados\",\n    chc_intro_cta: \"Empezar mi Cyber Health Check\",\n    chc_q1_eyebrow: \"Identidad y acceso\",\n    chc_q1_desc: \"Eval\u00faa el nivel de protecci\u00f3n de los accesos a los sistemas cr\u00edticos de la organizaci\u00f3n, especialmente frente al robo de credenciales.\",\n    chc_q1_title: \"\u00bfC\u00f3mo proteg\u00e9is el acceso a las cuentas cr\u00edticas (correo, ERP, acceso remoto...)?\",\n    chc_q1_opt_ok: \"Utilizamos autenticaci\u00f3n multifactor (MFA) en todas las cuentas cr\u00edticas.\",\n    chc_q1_opt_partial: \"Utilizamos MFA solo en algunas cuentas.\",\n    chc_q1_opt_bad: \"Solo protegemos las cuentas con contrase\u00f1a.\",\n    chc_q2_eyebrow: \"Visibilidad de activos\",\n    chc_q2_desc: \"Mide el conocimiento que tiene la organizaci\u00f3n sobre los dispositivos, servidores y sistemas conectados a su infraestructura.\",\n    chc_q2_title: \"\u00bfTen\u00e9is identificados todos los dispositivos y sistemas conectados a vuestra red?\",\n    chc_q2_opt_ok: \"S\u00ed, mantenemos un inventario actualizado de nuestros activos.\",\n    chc_q2_opt_partial: \"Conocemos la mayor\u00eda de los equipos, pero no tenemos un inventario completo.\",\n    chc_q2_opt_bad: \"No disponemos de un inventario actualizado.\",\n    chc_q3_eyebrow: \"Detecci\u00f3n y monitorizaci\u00f3n\",\n    chc_q3_desc: \"Eval\u00faa la capacidad de detectar actividades sospechosas y responder ante incidentes de seguridad.\",\n    chc_q3_title: \"\u00bfQui\u00e9n vigila vuestros sistemas ante una actividad sospechosa?\",\n    chc_q3_opt_ok: \"Disponemos de un SOC 24x7 o de un servicio gestionado de detecci\u00f3n (SIEM\/XDR).\",\n    chc_q3_opt_partial: \"Tenemos herramientas de seguridad, pero no hay monitorizaci\u00f3n continua.\",\n    chc_q3_opt_bad: \"Nadie; probablemente nos dar\u00edamos cuenta cuando el problema ya fuera evidente.\",\n    chc_q4_eyebrow: \"Gesti\u00f3n de vulnerabilidades\",\n    chc_q4_desc: \"Analiza la capacidad de detectar y corregir vulnerabilidades antes de que puedan ser explotadas.\",\n    chc_q4_title: \"\u00bfC\u00f3mo detect\u00e1is si vuestros sistemas tienen vulnerabilidades de seguridad?\",\n    chc_q4_opt_ok: \"Disponemos de un sistema continuo de detecci\u00f3n y seguimiento de vulnerabilidades.\",\n    chc_q4_opt_partial: \"Realizamos revisiones o escaneos peri\u00f3dicos.\",\n    chc_q4_opt_bad: \"Solo actuamos cuando aparece un problema o una incidencia.\",\n    chc_q5_eyebrow: \"Resiliencia y recuperaci\u00f3n\",\n    chc_q5_desc: \"Mide la capacidad de recuperar la actividad tras un ataque, especialmente en escenarios de ransomware.\",\n    chc_q5_title: \"Si ma\u00f1ana sufrierais un ataque de ransomware, \u00bfc\u00f3mo resistir\u00edan vuestras copias de seguridad?\",\n    chc_q5_opt_ok: \"Disponemos de copias regulares, probadas y fuera de l\u00ednea o inmutables.\",\n    chc_q5_opt_partial: \"Tenemos copias de seguridad, pero no est\u00e1n probadas o est\u00e1n conectadas a la red.\",\n    chc_q5_opt_bad: \"No disponemos de un sistema fiable de copias de seguridad.\",\n    chc_q6_eyebrow: \"Personas y concienciaci\u00f3n\",\n    chc_q6_desc: \"Eval\u00faa el nivel de preparaci\u00f3n de los trabajadores frente a las principales amenazas de ciberseguridad.\",\n    chc_q6_title: \"\u00bfVuestros trabajadores reciben formaci\u00f3n peri\u00f3dica en ciberseguridad?\",\n    chc_q6_opt_ok: \"S\u00ed, de forma regular y con simulaciones o recordatorios peri\u00f3dicos.\",\n    chc_q6_opt_partial: \"Solo de forma ocasional.\",\n    chc_q6_opt_bad: \"No realizamos ning\u00fan tipo de formaci\u00f3n espec\u00edfica.\",\n    chc_q7_eyebrow: \"Respuesta ante incidentes\",\n    chc_q7_desc: \"Mide el nivel de preparaci\u00f3n de la organizaci\u00f3n para gestionar un incidente de ciberseguridad de forma ordenada y eficaz.\",\n    chc_q7_title: \"Si hoy se produjera un incidente grave de ciberseguridad, \u00bfvuestro equipo sabr\u00eda c\u00f3mo actuar?\",\n    chc_q7_opt_ok: \"Disponemos de un procedimiento documentado y probado.\",\n    chc_q7_opt_partial: \"Tenemos unas pautas generales, pero no un plan formal.\",\n    chc_q7_opt_bad: \"No disponemos de ning\u00fan procedimiento establecido.\",\n    chc_q8_eyebrow: \"Gobernanza y cumplimiento\",\n    chc_q8_desc: \"Eval\u00faa el grado de preparaci\u00f3n de la organizaci\u00f3n para demostrar el cumplimiento de los principales est\u00e1ndares y regulaciones de ciberseguridad.\",\n    chc_q8_title: \"Si ma\u00f1ana os auditaran, \u00bfpodr\u00edais demostrar el cumplimiento de normativas como NIS2, ISO 27001 o ENS?\",\n    chc_q8_opt_ok: \"S\u00ed, disponemos de pol\u00edticas documentadas, auditor\u00edas y evidencias.\",\n    chc_q8_opt_partial: \"Tenemos algunas pol\u00edticas, pero sin un seguimiento formal.\",\n    chc_q8_opt_bad: \"No disponemos de un marco de cumplimiento definido.\",\n    chc_back: \"Atr\u00e1s\", chc_next: \"Siguiente\", chc_next_results: \"Ver mis resultados\",\n    chc_lead_eyebrow: \"Ya casi est\u00e1\",\n    chc_lead_title: \"\u00bfD\u00f3nde te enviamos tu informe personalizado?\",\n    chc_lead_name_label: \"Nombre completo\", chc_lead_company_label: \"Empresa\", chc_lead_email_label: \"Email profesional\",\n    chc_consent_label: \"Utilizaremos tus datos para enviarte tu informe personalizado del Cyber Health Check y contactar contigo en relaci\u00f3n con sus resultados. Para m\u00e1s informaci\u00f3n, consulta nuestra <a href=\\\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/privacy-policy\/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">Pol\u00edtica de Privacidad<\/a>.\",\n    chc_lead_cta: \"Generar mi informe\",\n    chc_lead_error: \"Falta rellenar alg\u00fan campo: nombre, empresa, o un email v\u00e1lido.\",\n    chc_privacy_note: \"Tus respuestas se env\u00edan de forma segura para generar tu informe y lo recibir\u00e1s por correo electr\u00f3nico.\",\n    chc_loading_text: \"Evaluando tus respuestas con nuestra base de conocimiento\u2026\",\n    chc_fatal_text: \"Algo ha fallado al preparar tu informe. No se ha enviado nada a ning\u00fan sitio, as\u00ed que int\u00e9ntalo de nuevo.\",\n    chc_fatal_retry: \"Volver a empezar\",\n    chc_score_of100: \"\/ 100\",\n    chc_restart: \"Repetir la evaluaci\u00f3n\",\n    chc_api_retry: \"Volver a intentarlo\",\n    chc_followup_title: \"Tu informe personalizado ya est\u00e1 en camino\",\n    chc_followup_text: \"Estamos finalizando tu Cyber Health Check completo, con los hallazgos detallados, las recomendaciones priorizadas y las referencias normativas que hay detr\u00e1s de esta puntuaci\u00f3n. Lo recibir\u00e1s por correo electr\u00f3nico en <strong>{email}<\/strong> en los pr\u00f3ximos 5 minutos.\",\n    chc_followup_spam: \"\u00bfNo lo ves al cabo de un rato? Revisa la carpeta de spam o promociones.\",\n    chc_api_status_sending: \"Enviando los datos a la API\u2026\",\n    chc_api_status_ok: \"\u2714 Solicitud aceptada por la API.\",\n    chc_api_status_error: \"\u2718 La API no ha aceptado la solicitud.\",\n    chc_payload_author_label: \"Autor\",\n    chc_payload_report_manager_label: \"Responsable del informe\",\n    chc_payload_data_analyst_label: \"Analista de datos\",\n    chc_payload_contact_label: \"Contacto\",\n    chc_risk_low: \"Riesgo bajo\", chc_risk_moderate: \"Riesgo moderado\", chc_risk_high: \"Riesgo alto\", chc_risk_critical: \"Riesgo cr\u00edtico\",\n    chc_risk_sentence_low: \"La base es s\u00f3lida: los pr\u00f3ximos pasos son de optimizaci\u00f3n, no de respuesta a una urgencia.\",\n    chc_risk_sentence_moderate: \"Hay margen claro de mejora en alguno de los controles clave; abordarlo ahora evita que se convierta en una brecha cr\u00edtica.\",\n    chc_risk_sentence_high: \"Hay carencias importantes que os dejan expuestos a un incidente con impacto real en la operativa.\",\n    chc_risk_sentence_critical: \"Hay brechas cr\u00edticas que os exponen a un incidente grave en cualquier momento, por lo que recomendamos actuar de forma inmediata.\",\n\n    popupcta_eyebrow: \"Herramienta gratuita\",\n    popupcta_title: \"Conoce tu riesgo real en ciberseguridad en 3 minutos\",\n    popupcta_body: \"Responde 8 preguntas r\u00e1pidas y recibe una puntuaci\u00f3n de riesgo instant\u00e1nea y personalizada, gratis.\",\n    popupcta_cta: \"Hacer mi Cyber Health Check\",\n    popupcta_dismiss: \"Ahora no\",\n    popupcta_close_aria: \"Cerrar\",\n    popupcta_config_error: \"Error de configuraci\u00f3n: el popup del Cyber Health Check est\u00e1 activado (CC_FLAG_SHOW_CHC_POPUP = 1) pero el m\u00f3dulo de Cyber Health Check no se muestra en pantalla porque est\u00e1 desactivado por c\u00f3digo (CC_FLAG_SHOW_CHC = 0). No tiene sentido promocionar un m\u00f3dulo oculto: pon CC_FLAG_SHOW_CHC a 1 o CC_FLAG_SHOW_CHC_POPUP a 0.\"\n  },\n\n  en: {\n    header_title: \"Enterprise-Grade Cybersecurity Protection\",\n    header_sub: \"Select your infrastructure type to find the right plan\",\n    tab_cloud: \"Cloud \/ Data Center\", tab_onprem: \"On-Premise Infrastructure\",\n    per_mo: \"\/mo\", zero_setup: \"Zero setup fee\", trial_note: \"1-month free trial included\",\n    most_popular: \"\u2b50 Most Popular\", recurring_mo: \"\/mo recurring\",\n    essential_name: \"Essential\", essential_tagline: \"1 internet-facing server or service (web, remote access\u2026)\",\n    essential_commission: \"+{amount}\/mo {partner} commission\",\n    essential_f1: \"24\u00d77 automated threat detection & blocking\", essential_f2: \"Security dashboard & full action history\",\n    essential_f3: \"Automated reporting to CCN-CERT\", essential_f4: \"Automated backup\",\n    professional_name: \"Professional\", professional_tagline: \"Up to 2 virtual servers (file storage, email, ERP\u2026)\",\n    professional_commission: \"+{amount}\/mo {partner} commission\",\n    professional_f1: \"Everything in Essential\", professional_f2: \"Network Traffic Analysis (NTA)\",\n    professional_f3: \"AI-powered browsing categorization\", professional_f4: \"Advanced intrusion detection (SELKS)\",\n    enterprise_name: \"Enterprise\", enterprise_tagline: \"3+ servers or complex multi-service infrastructure\",\n    enterprise_commission: \"+{amount}\/mo {partner} commission\",\n    enterprise_f1: \"Everything in Professional\", enterprise_f2: \"Unlimited servers at no extra cost\",\n    enterprise_f3: \"Priority incident response\", enterprise_f4: \"Dedicated server option from 125\u20ac\/mo\",\n    commission_model: \"{partner} Commission Model\",\n    cloud_commission_detail: \"{pct}% on recurring monthly revenue \u00b7 Zero activation cost\",\n    cloud_example_label: \"10 Professional clients\",\n    onprem_commission_detail: \"{pct}% on recurring monthly revenue \u00b7 Activation costs billed to client\",\n    onprem_example_label: \"5 SME Standard clients\",\n    onprem_note: \"<strong>Deployed on-site at the client's premises<\/strong> \u00b7 Includes 1-month free trial \u00b7 Compatible with Acronis or equivalent for endpoint protection\",\n    setup_costs: \"One-time setup costs\", soc_setup: \"SOC Setup\", fw_network: \"Firewall + Network Config\",\n    exposed_service: \"Internet-Exposed Service\", per_endpoint: \"Per endpoint\", per_unit: \"\/unit\", monthly_fee: \"Monthly fee\",\n    micro_name: \"Micro\", micro_tagline: \"Freelancers & micro-businesses\", micro_commission: \"+{amount}\/mo {partner} commission\",\n    sme50_name: \"SME Standard\", sme50_tagline: \"Small businesses with their own office\", sme50_commission: \"+{amount}\/mo {partner} commission\",\n    sme100_name: \"SME Advanced\", sme100_tagline: \"Mid-size companies with own infrastructure\", sme100_commission: \"+{amount}\/mo {partner} commission\",\n    business_name: \"Business\", business_tagline: \"Established companies with in-house IT\", business_commission: \"+{amount}\/mo {partner} commission\",\n\n    hero_tag: \"Managed Cybersecurity Platform\",\n    hero_h1: \"Protect Your Business Before Threats Become Incidents\",\n    hero_sub: \"AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses.\",\n    hero_cta1: \"Book a Demo\", hero_cta2: \"See Platform\",\n    mock_title: \"Security Operations Center\",\n    mock_row1: \"Traffic analysis completed\", mock_row2: \"Suspicious activity contained\", mock_row3: \"Compliance report generated\",\n    why_eyebrow: \"Why us\", why_title: \"Why should you choose CONCENTER.IO?\",\n    why_lede: \"Six reasons SMEs and public administrations trust our platform.\",\n    why_item1: \"24x7 Managed SOC\", why_item2: \"Automated detection and response to incidents\",\n    why_item3: \"Continuous monitoring with SIEM and XDR\",\n    why_item4: \"Artificial Intelligence applied to threat detection, analysis and network traffic\",\n    why_item5: \"Ready for NIS2, ENS and ISO 27001\",\n    why_item6: \"Integration with the Red Nacional de SOC (RN-SOC) at the highest qualification level\",\n    trust_label: \"Technologies powering our platform\",\n    skip_to_content: \"Skip to main content\",\n    tech_selks: \"Open-source platform built on the Suricata engine and the Elastic (ELK) stack, for security monitoring and network threat detection.\",\n    tech_wazuh: \"Open-source platform for threat detection, file integrity monitoring (FIM) and security compliance across endpoints.\",\n    tech_siem: \"Centralized log correlation and security event detection, powered by the Wazuh indexer and the Elastic stack.\",\n    tech_xdr: \"Extended detection and response that unifies network (Suricata) and endpoint (Wazuh) in a single security console.\",\n    tech_ndr: \"Continuous network traffic analysis with Suricata to detect anomalous behavior beyond known signatures.\",\n    tech_ids: \"Detection of suspicious network activity through Suricata's (SELKS) signature-based engine.\",\n    tech_ips: \"Real-time blocking of malicious network traffic, running inline on the Suricata (SELKS) engine.\",\n    tech_zerotrust: \"Continuous verification and least-privilege access, reinforced by Wazuh's configuration and vulnerability assessment.\",\n    tech_ti: \"Alert enrichment with threat feeds and indicators of compromise, integrated into Wazuh and Suricata's rule sets.\",\n    tech_hunting: \"Proactive hunting for undetected threats across Wazuh's indexed logs and Suricata\/EveBox alerts.\",\n    tech_rnsoc: \"Automated incident reporting and escalation to the Red Nacional de SOC (RN-SOC).\",\n    tech_ai_label: \"AI\",\n    tech_ai: \"CONCENTER.IO works with several AI models, both self-hosted and consumed via API, matched to different processes depending on the need. This includes tools such as Kimi K2, Copilot, and, for development, Cursor paired with Claude.\",\n    problems_eyebrow: \"Real risks\", problems_title: \"The Hidden Risks Threatening SMEs Every Day\",\n    problem1_title: \"Ransomware\", problem1_desc: \"Attacks that encrypt critical data and halt operations until a ransom is paid.\",\n    problem2_title: \"Phishing\", problem2_desc: \"Fraudulent emails designed to steal credentials and access your systems.\",\n    problem3_title: \"Insider Threats\", problem3_desc: \"Improper access, intentional or not, from within your own team.\",\n    problem4_title: \"Data Breaches\", problem4_desc: \"Exposure of confidential customer and company information.\",\n    problem5_title: \"Shadow IT\", problem5_desc: \"Unauthorized tools and services operating outside the security perimeter.\",\n    problem6_title: \"Compliance Failures\", problem6_desc: \"Penalties and loss of trust from failing to meet regulatory requirements.\",\n    solutions_eyebrow: \"The platform\", solutions_title: \"One Platform. Complete Visibility.\",\n    solutions_lede: \"The entire security stack unified in a single console: detection, analysis, response and reporting.\",\n    sol1_title: \"Real-time Threat Detection\", sol1_desc: \"Continuous identification of anomalous activity across your infrastructure.\",\n    sol2_title: \"AI Classification\", sol2_desc: \"Intelligent alert prioritization to cut through the noise and speed up response.\",\n    sol3_title: \"Automated Response\", sol3_desc: \"Immediate threat containment without manual intervention.\",\n    sol4_title: \"Threat Intelligence\", sol4_desc: \"Updated global threat feeds to stay ahead of attackers.\",\n    sol5_title: \"Security Monitoring\", sol5_desc: \"24\u00d77 surveillance of every critical business asset.\",\n    sol6_title: \"Network Analysis\", sol6_desc: \"Full traffic visibility to detect lateral movement.\",\n    sol7_title: \"Compliance Reporting\", sol7_desc: \"Automated documentation aligned with regulatory requirements.\",\n    sol8_title: \"Incident Investigation\", sol8_desc: \"Forensic tools to understand the scope and origin of every incident.\",\n    arch_eyebrow: \"Architecture\", arch_title: \"How Our Platform Works\",\n    arch_step1: \"Internet\", arch_step2: \"Threat Intelligence\", arch_step3: \"Detection Layer\",\n    arch_step4: \"AI Analysis Engine\", arch_step5: \"Automated Response\", arch_step6: \"Reporting Dashboard\",\n    benefits_eyebrow: \"Results\", benefits_title: \"Measurable performance, real trust\",\n    kpi1_label: \"Threat Detection Accuracy\", kpi2_label: \"Continuous Monitoring\",\n    kpi3_label: \"Response Time\", kpi4_label: \"Technology Independent\",\n    testimonials_eyebrow: \"Success stories\", testimonials_title: \"Companies that trust CONCENTER.IO\",\n    test1_result: \"\u221280% incident response time\", test1_quote: \"The visibility the dashboard gives us has changed how we manage security every day.\",\n    test1_name: \"Marta Soler\", test1_role: \"CTO, Industrial sector\",\n    test2_result: \"100% on-time compliance reporting\", test2_quote: \"We went from stressful audits to a fully automated process.\",\n    test2_name: \"Jordi Camps\", test2_role: \"IT Manager, Public administration\",\n    test3_result: \"0 undetected critical incidents\", test3_quote: \"The CONCENTER.IO team acts as a true extension of our IT department.\",\n    test3_name: \"Laura Vidal\", test3_role: \"Operations Director, Retail\",\n    test4_result: \"\u221295% false positive alerts\", test4_quote: \"CONCENTER.IO's AI-driven prioritization lets our small IT team focus on what actually matters.\",\n    test4_name: \"Pau Ribera\", test4_role: \"IT Director, Logistics sector\",\n    test_nav_prev: \"Previous success stories\", test_nav_next: \"Next success stories\",\n    final_title: \"Start Securing Your Infrastructure Today\",\n    final_cta1: \"Request Demo\", final_cta2: \"Contact Sales\",\n\n    footer_collab_text: \"CONCENTER.IO is an initiative in collaboration with:\",\n    footer_nav_home: \"Home\", footer_nav_legal: \"Legal Notice\",\n    footer_nav_privacy: \"Privacy Policy\", footer_nav_cookies: \"Cookie Policy\",\n    footer_copyright: \"All rights reserved \u00a9\",\n\n    chc_badge: \"Free tool\",\n    chc_eyebrow: \"Cyber Health Check\",\n    chc_title: \"Where does your business really stand on cybersecurity?\",\n    chc_lede: \"Answer a few quick questions and get an instant, personalized risk snapshot, built on the same controls our SOC analysts check first.\",\n    chc_intro_eyebrow: \"8 questions \u00b7 under 3 minutes\",\n    chc_intro_title: \"We'll ask about identity, assets, monitoring, vulnerabilities, backups, awareness, incident response and compliance: the eight controls that decide the outcome of most real-world incidents and audits.\",\n    chc_profile_eyebrow: \"Quick context\",\n    chc_profile_desc: \"This first block helps us put your company's profile in context, so the risk level and recommendations are tailored to your sector and size.\",\n    chc_profile_title: \"A couple of details so the report speaks your language.\",\n    chc_sector_label: \"Sector\",\n    chc_sector_placeholder: \"Select your sector\",\n    chc_sector_retail: \"Retail\",\n    chc_sector_industrial: \"Industrial & manufacturing\",\n    chc_sector_public: \"Public administration\",\n    chc_sector_professional: \"Professional services\",\n    chc_sector_healthcare: \"Healthcare\",\n    chc_sector_tech: \"Technology & SaaS\",\n    chc_sector_logistics: \"Logistics & transport\",\n    chc_sector_other: \"Other\",\n    chc_size_label: \"Company size\",\n    chc_size_placeholder: \"Select company size\",\n    chc_size_micro: \"1\u20139 employees\",\n    chc_size_small: \"10\u201349 employees\",\n    chc_size_medium: \"50\u2013249 employees\",\n    chc_size_large: \"250+ employees\",\n    chc_intro_cta: \"Start my Cyber Health Check\",\n    chc_q1_eyebrow: \"Identity & Access\",\n    chc_q1_desc: \"Assesses how well access to your organization's critical systems is protected, especially against stolen credentials.\",\n    chc_q1_title: \"How do you protect access to your critical accounts (email, ERP, remote access...)?\",\n    chc_q1_opt_ok: \"We use multi-factor authentication (MFA) on all critical accounts.\",\n    chc_q1_opt_partial: \"We use MFA on some accounts only.\",\n    chc_q1_opt_bad: \"We only protect accounts with a password.\",\n    chc_q2_eyebrow: \"Asset Visibility\",\n    chc_q2_desc: \"Measures how well your organization actually knows the devices, servers and systems connected to its infrastructure.\",\n    chc_q2_title: \"Have you identified every device and system connected to your network?\",\n    chc_q2_opt_ok: \"Yes, we keep an up-to-date inventory of our assets.\",\n    chc_q2_opt_partial: \"We know most of our equipment, but we don't have a complete inventory.\",\n    chc_q2_opt_bad: \"We don't have an up-to-date inventory.\",\n    chc_q3_eyebrow: \"Detection & Monitoring\",\n    chc_q3_desc: \"Assesses your ability to detect suspicious activity and respond to security incidents.\",\n    chc_q3_title: \"Who is watching your systems for suspicious activity?\",\n    chc_q3_opt_ok: \"We have a 24\/7 SOC or a managed detection service (SIEM\/XDR).\",\n    chc_q3_opt_partial: \"We have security tools in place, but there's no continuous monitoring.\",\n    chc_q3_opt_bad: \"Nobody. We'd probably only notice once the problem was already obvious.\",\n    chc_q4_eyebrow: \"Vulnerability Management\",\n    chc_q4_desc: \"Looks at your ability to detect and fix vulnerabilities before they can be exploited.\",\n    chc_q4_title: \"How do you detect whether your systems have security vulnerabilities?\",\n    chc_q4_opt_ok: \"We have a continuous system for detecting and tracking vulnerabilities.\",\n    chc_q4_opt_partial: \"We run periodic reviews or scans.\",\n    chc_q4_opt_bad: \"We only act once a problem or incident comes up.\",\n    chc_q5_eyebrow: \"Resilience & Recovery\",\n    chc_q5_desc: \"Measures your ability to recover operations after an attack, especially in ransomware scenarios.\",\n    chc_q5_title: \"If you were hit by a ransomware attack tomorrow, how would your backups hold up?\",\n    chc_q5_opt_ok: \"We have regular, tested, offline or immutable backups.\",\n    chc_q5_opt_partial: \"We have backups, but they're not tested or they're still connected to the network.\",\n    chc_q5_opt_bad: \"We don't have a reliable backup system.\",\n    chc_q6_eyebrow: \"People & Awareness\",\n    chc_q6_desc: \"Assesses how prepared your employees are to face the main cybersecurity threats.\",\n    chc_q6_title: \"Do your employees receive regular cybersecurity training?\",\n    chc_q6_opt_ok: \"Yes, regularly, with periodic simulations or reminders.\",\n    chc_q6_opt_partial: \"Only occasionally.\",\n    chc_q6_opt_bad: \"We don't provide any specific training.\",\n    chc_q7_eyebrow: \"Incident Response\",\n    chc_q7_desc: \"Measures how prepared your organization is to manage a cybersecurity incident in an orderly, effective way.\",\n    chc_q7_title: \"If a serious cybersecurity incident happened today, would your team know how to act?\",\n    chc_q7_opt_ok: \"We have a documented, tested procedure.\",\n    chc_q7_opt_partial: \"We have general guidelines, but no formal plan.\",\n    chc_q7_opt_bad: \"We don't have any established procedure.\",\n    chc_q8_eyebrow: \"Governance & Compliance\",\n    chc_q8_desc: \"Assesses how ready your organization is to demonstrate compliance with the main cybersecurity standards and regulations.\",\n    chc_q8_title: \"If you were audited tomorrow, could you demonstrate compliance with regulations such as NIS2, ISO 27001 or ENS?\",\n    chc_q8_opt_ok: \"Yes, we have documented policies, audits and evidence in place.\",\n    chc_q8_opt_partial: \"We have some policies, but without formal follow-up.\",\n    chc_q8_opt_bad: \"We don't have a defined compliance framework.\",\n    chc_back: \"Back\", chc_next: \"Next\", chc_next_results: \"See my results\",\n    chc_lead_eyebrow: \"Almost there\",\n    chc_lead_title: \"Where should we send your personalized report?\",\n    chc_lead_name_label: \"Full name\", chc_lead_company_label: \"Company\", chc_lead_email_label: \"Work email\",\n    chc_consent_label: \"We\u2019ll use your details to send your personalized Cyber Health Check report and contact you regarding its results. For more information, see our <a href=\\\"https:\/\/pro.concenter.io\/concenter-io-proposta-comercial\/privacy-policy\/\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">Privacy Policy<\/a>.\",\n    chc_lead_cta: \"Generate my report\",\n    chc_lead_error: \"Please fill in your name, company, and a valid email to continue.\",\n    chc_privacy_note: \"Your answers are sent securely to generate your report, which you'll receive by email.\",\n    chc_loading_text: \"Scoring your answers against our control library\u2026\",\n    chc_fatal_text: \"Something went wrong while preparing your report. Nothing was sent anywhere, so feel free to try again.\",\n    chc_fatal_retry: \"Start over\",\n    chc_score_of100: \"\/ 100\",\n    chc_restart: \"Retake the assessment\",\n    chc_api_retry: \"Try again\",\n    chc_followup_title: \"Your personalized report is on its way\",\n    chc_followup_text: \"We're finalizing your full Cyber Health Check, with the detailed findings, prioritized recommendations and compliance references behind this score. You'll receive it by email at <strong>{email}<\/strong> within the next 5 minutes.\",\n    chc_followup_spam: \"Don't see it after a few minutes? Check your spam or promotions folder.\",\n    chc_api_status_sending: \"Sending the data to the API\u2026\",\n    chc_api_status_ok: \"\u2714 Request accepted by the API.\",\n    chc_api_status_error: \"\u2718 The API did not accept the request.\",\n    chc_payload_author_label: \"Author\",\n    chc_payload_report_manager_label: \"Report owner\",\n    chc_payload_data_analyst_label: \"Data analyst\",\n    chc_payload_contact_label: \"Contact\",\n    chc_risk_low: \"Low risk\", chc_risk_moderate: \"Moderate risk\", chc_risk_high: \"High risk\", chc_risk_critical: \"Critical risk\",\n    chc_risk_sentence_low: \"The foundation is solid: the next steps are about optimization, not urgent response.\",\n    chc_risk_sentence_moderate: \"There's clear room for improvement on at least one key control; addressing it now keeps it from becoming a critical gap.\",\n    chc_risk_sentence_high: \"There are significant gaps that leave you exposed to an incident with real operational impact.\",\n    chc_risk_sentence_critical: \"There are critical gaps that leave you exposed to a serious incident at any moment, so we recommend acting immediately.\",\n\n    popupcta_eyebrow: \"Free tool\",\n    popupcta_title: \"Know your real cybersecurity risk in 3 minutes\",\n    popupcta_body: \"Answer 8 quick questions and get an instant, personalized risk score \u2014 free.\",\n    popupcta_cta: \"Take my Cyber Health Check\",\n    popupcta_dismiss: \"Not now\",\n    popupcta_close_aria: \"Close\",\n    popupcta_config_error: \"Configuration error: the Cyber Health Check popup is enabled (CC_FLAG_SHOW_CHC_POPUP = 1) but the Cyber Health Check module itself isn't shown on screen because it's disabled in the code (CC_FLAG_SHOW_CHC = 0). Promoting a hidden module makes no sense: set CC_FLAG_SHOW_CHC to 1 or CC_FLAG_SHOW_CHC_POPUP to 0.\"\n  }\n};\n\nfunction ccFormatEUR(value) {\n  var rounded = Math.round(value * 100) \/ 100;\n  var hasDecimals = Math.abs(rounded % 1) > 0.001;\n  var formatted = hasDecimals ? rounded.toFixed(2).replace('.', ',') : String(rounded);\n  return formatted + '\u20ac';\n}\n\nfunction ccApplyDynamicCommissions() {\n  var pct = CC_FLAG_CUSTOMER_COMMISSION \/ 100;\n  document.querySelectorAll('.cc-price-commission[data-base-price]').forEach(function(el) {\n    var base = parseFloat(el.getAttribute('data-base-price'));\n    if (isNaN(base)) return;\n    el.setAttribute('data-calc-amount', ccFormatEUR(base * pct));\n  });\n  document.querySelectorAll('[data-calc-base-price]').forEach(function(el) {\n    var base = parseFloat(el.getAttribute('data-calc-base-price'));\n    var count = parseFloat(el.getAttribute('data-calc-customer-count'));\n    if (isNaN(base) || isNaN(count)) return;\n    var amountEl = el.querySelector('[data-calc-amount]');\n    if (amountEl) amountEl.textContent = '~' + ccFormatEUR(base * pct * count);\n  });\n}\n\nfunction ccApplyLang(lang) {\n  var dict = ccI18n[lang];\n  if (!dict) return;\n  ccApplyDynamicCommissions();\n  document.querySelectorAll('[data-i18n]').forEach(function(el) {\n    var key = el.getAttribute('data-i18n');\n    if (dict[key] !== undefined) {\n      var text = dict[key];\n      if (text.indexOf('{partner}') !== -1) text = text.split('{partner}').join(CC_FLAG_PARTNER_NAME);\n      if (text.indexOf('{pct}') !== -1) text = text.split('{pct}').join(String(CC_FLAG_CUSTOMER_COMMISSION));\n      if (text.indexOf('{amount}') !== -1) {\n        var commissionEl = el.closest('.cc-price-commission');\n        var amount = commissionEl ? commissionEl.getAttribute('data-calc-amount') : null;\n        text = text.split('{amount}').join(amount || '');\n      }\n      el.innerHTML = text;\n    }\n  });\n  document.querySelectorAll('[data-i18n-html]').forEach(function(el) {\n    var key = el.getAttribute('data-i18n-html');\n    if (dict[key] !== undefined) el.innerHTML = dict[key];\n  });\n  document.querySelectorAll('[data-i18n-aria-label]').forEach(function(el) {\n    var key = el.getAttribute('data-i18n-aria-label');\n    if (dict[key] !== undefined) el.setAttribute('aria-label', dict[key]);\n  });\n  document.querySelectorAll('.cc-lang-btn').forEach(function(btn) {\n    var isActive = btn.getAttribute('data-lang') === lang;\n    btn.classList.toggle('cc-lang-active', isActive);\n    if (isActive) btn.setAttribute('aria-current', 'true'); else btn.removeAttribute('aria-current');\n  });\n  document.documentElement.setAttribute('lang', lang === 'ca' ? 'ca' : lang);\n  var root = document.querySelector('.cc-wrap');\n  if (root) root.setAttribute('data-current-lang', lang);\n}\n\nfunction ccSetLang(lang) {\n  ccApplyLang(lang);\n  try { localStorage.setItem('cc-lang', lang); } catch (e) {}\n}\n\nfunction ccTestScroll(dir) {\n  var el = document.getElementById('cc-test-scroll');\n  if (!el) return;\n  var card = el.querySelector('.cc-test-card');\n  var step = card ? (card.getBoundingClientRect().width + 20) : 340;\n  var maxScroll = el.scrollWidth - el.clientWidth;\n  \/\/ Already at the edge in the requested direction: do nothing. Repeatedly\n  \/\/ asking the browser to scroll past a boundary it's already at is what\n  \/\/ triggers the overscroll bounce (see the overscroll-behavior-x comment\n  \/\/ on .cc-test-grid), so we stop it here too, not just in CSS.\n  if ((dir > 0 && el.scrollLeft >= maxScroll - 1) || (dir < 0 && el.scrollLeft <= 1)) return;\n  el.scrollBy({ left: dir * step, behavior: 'smooth' });\n}\n\nfunction ccApplyPartnerFlag() {\n  var show = CC_FLAG_PARTNER === 1;\n  document.querySelectorAll('[data-partner-block]').forEach(function(el) { el.style.display = show ? '' : 'none'; });\n}\n\nfunction ccApplyChcFlag() {\n  var section = document.getElementById('cyber-health-check');\n  if (section) section.style.display = (CC_FLAG_SHOW_CHC === 1) ? '' : 'none';\n}\n\nfunction ccShowSeg(id, btn) {\n  document.querySelectorAll('.cc-segment').forEach(function(s) { s.classList.remove('cc-active'); });\n  document.querySelectorAll('.cc-tab').forEach(function(b) {\n    b.classList.remove('cc-active');\n    b.setAttribute('aria-selected', 'false');\n    b.setAttribute('tabindex', '-1');\n  });\n  document.getElementById('cc-seg-' + id).classList.add('cc-active');\n  btn.classList.add('cc-active');\n  btn.setAttribute('aria-selected', 'true');\n  btn.setAttribute('tabindex', '0');\n}\n\nfunction ccTabKeydown(event) {\n  var tabs = Array.prototype.slice.call(document.querySelectorAll('.cc-tab'));\n  var i = tabs.indexOf(event.target);\n  if (i === -1) return;\n  var next = null;\n  if (event.key === 'ArrowRight' || event.key === 'ArrowDown') next = tabs[(i + 1) % tabs.length];\n  else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') next = tabs[(i - 1 + tabs.length) % tabs.length];\n  else if (event.key === 'Home') next = tabs[0];\n  else if (event.key === 'End') next = tabs[tabs.length - 1];\n  if (next) {\n    event.preventDefault();\n    next.focus();\n    next.click();\n  }\n}\n\n\/\/ Apply the link flags (defined at the very top of the document) to the CTA buttons\n(function() {\n  var map = {\n    'cc-link-top-bookdemo': CC_LINK_TOP_BOOKDEMO,\n    'cc-link-top-seeplatform': CC_LINK_TOP_SEEPLATFORM,\n    'cc-link-bottom-requestdemo': CC_LINK_BOTTOM_REQUESTDEMO,\n    'cc-link-bottom-contactsales': CC_LINK_BOTTOM_CONTACTSALES\n  };\n  Object.keys(map).forEach(function(id) {\n    var el = document.getElementById(id);\n    if (el && map[id]) el.setAttribute('href', map[id]);\n  });\n})();\n\n\/\/ Push CTA clicks to the dataLayer so GTM\/GA4 can register them as conversions.\n\/\/ \"mailto:\" links don't fire a native conversion event in any analytics tool,\n\/\/ so this is what makes Book a Demo \/ Request Demo measurable for SEM at all.\n(function() {\n  var ctaEvents = {\n    'cc-link-top-bookdemo': 'cta_book_demo',\n    'cc-link-top-seeplatform': 'cta_see_platform',\n    'cc-link-bottom-requestdemo': 'cta_request_demo',\n    'cc-link-bottom-contactsales': 'cta_contact_sales'\n  };\n  window.dataLayer = window.dataLayer || [];\n  Object.keys(ctaEvents).forEach(function(id) {\n    var el = document.getElementById(id);\n    if (!el) return;\n    el.addEventListener('click', function() {\n      window.dataLayer.push({\n        event: ctaEvents[id],\n        cta_id: id,\n        cta_destination: el.getAttribute('href')\n      });\n    });\n  });\n})();\n\n\/\/ ============================================================================\n\/\/ SITE HEADER SCRIPT \u2014 REUSABLE COMPONENT \u2014 START\n\/\/ Copy this IIFE AS-IS into every page that includes the header markup\/CSS\n\/\/ (search \"SITE HEADER MARKUP\" \/ \"SITE HEADER \u2014 REUSABLE COMPONENT\"). It is\n\/\/ fully self-contained: it only looks up #cc-site-header and only ever\n\/\/ touches that element plus the --cc-header-h CSS custom property.\n\/\/ ============================================================================\n\/\/ Smooth header shrink-on-scroll effect\n(function() {\n  var header = document.getElementById('cc-site-header');\n  if (!header) return;\n  \/\/ Keep a live CSS var with the header's real height. Used by\n  \/\/ scroll-margin-top on focusable elements (see the tech badges) so that\n  \/\/ when the browser auto-scrolls a tapped\/focused element into view, it\n  \/\/ leaves room for the fixed header instead of tucking the element behind\n  \/\/ it \u2014 which is what made some tech badges land invisible under the\n  \/\/ header (and their popover positioned off a badge that wasn't really\n  \/\/ where it appeared to be) right after being tapped near the top of the\n  \/\/ screen.\n  function updateHeaderHeightVar() {\n    document.documentElement.style.setProperty('--cc-header-h', header.getBoundingClientRect().height + 'px');\n  }\n  function onScroll() { header.classList.toggle('cc-scrolled', window.scrollY > 12); updateHeaderHeightVar(); }\n  window.addEventListener('scroll', onScroll, { passive: true });\n  window.addEventListener('resize', updateHeaderHeightVar, { passive: true });\n  onScroll();\n  updateHeaderHeightVar();\n})();\n\/\/ ===================== SITE HEADER SCRIPT \u2014 REUSABLE COMPONENT \u2014 END =====================\n\n\/\/ Back-to-top floating button (built in JS and attached to <body> directly\n\/\/ so it is never trapped inside a WordPress\/Elementor wrapper that uses\n\/\/ transform\/filter, which would otherwise break position:fixed)\n(function() {\n  var btn = document.createElement('button');\n  btn.className = 'cc-back-to-top';\n  btn.id = 'cc-back-to-top';\n  btn.type = 'button';\n  btn.setAttribute('aria-label', 'Back to top');\n  \/* Icon is drawn entirely with CSS (::before\/::after) \u2014 see .cc-back-to-top\n     rules \u2014 so no inner markup is needed here. *\/\n  btn.addEventListener('click', function() {\n    window.scrollTo({ top: 0, behavior: 'smooth' });\n  });\n  document.body.appendChild(btn);\n\n  function onScroll() { btn.classList.toggle('cc-visible', (window.scrollY || document.documentElement.scrollTop) > 300); }\n  window.addEventListener('scroll', onScroll, { passive: true });\n  onScroll();\n})();\n\n\/\/ CHC promo popup: a one-click nudge toward the Cyber Health Check.\n\/\/ Trigger: whichever comes first between a short dwell delay and a scroll-\n\/\/ depth threshold \u2014 but never if the visitor has already scrolled the CHC\n\/\/ section into view on their own (nothing to pitch there), and only once per\n\/\/ browser tab (sessionStorage), so it can't nag across step navigation on\n\/\/ the same visit. Every show\/click\/dismiss also pushes a GTM dataLayer\n\/\/ event, so the funnel (shown \u2192 clicked \u2192 actually finished the checkup)\n\/\/ can be measured and the delay\/copy tuned from outside this file instead\n\/\/ of guessed at here.\n(function() {\n  \/\/ CC_FLAG_SHOW_CHC_POPUP and CC_FLAG_SHOW_CHC are two independent\n  \/\/ switches (one for the popup, one for the Cyber Health Check module\n  \/\/ itself) and are deliberately NOT chained together \u2014 flipping one must\n  \/\/ never silently change what the other does. But enabling the popup while\n  \/\/ the module it promotes is switched off by CC_FLAG_SHOW_CHC is a\n  \/\/ misconfiguration nobody would want live, so rather than silently doing\n  \/\/ nothing (which would be very hard to debug from the outside), that\n  \/\/ specific combination shows an on-screen error naming both flags \u2014\n  \/\/ see showConfigError() below.\n  if (CC_FLAG_SHOW_CHC_POPUP !== 1) return;\n\n  var section = document.getElementById('cyber-health-check');\n  if (CC_FLAG_SHOW_CHC !== 1 || !section) {\n    showConfigError();\n    return;\n  }\n\n  var DELAY_MS = 14000;       \/\/ show after 14s of dwell time...\n  var SCROLL_TRIGGER = 0.35;  \/\/ ...or after 35% page scroll \u2014 whichever first\n  var STORAGE_KEY = 'cc-chc-popup-dismissed';\n\n  try { if (sessionStorage.getItem(STORAGE_KEY) === '1') return; } catch (e) {}\n\n  var sectionSeen = false;\n  var shown = false;\n  var overlay = null;\n  var lastFocused = null;\n  var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n  function track(event) {\n    try { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: event }); } catch (e) {}\n  }\n\n  function popupLang() {\n    try { var saved = localStorage.getItem('cc-lang'); if (saved && ccI18n[saved]) return saved; } catch (e) {}\n    return 'en';\n  }\n  function popupT(key) {\n    var dict = ccI18n[popupLang()] || ccI18n.en;\n    return (dict && dict[key] !== undefined) ? dict[key] : key;\n  }\n\n  \/\/ On-screen (not just console) diagnostic banner for the\n  \/\/ CC_FLAG_SHOW_CHC_POPUP=1 + CC_FLAG_SHOW_CHC=0 misconfiguration. Stays\n  \/\/ on every page load until the flags are actually fixed in the code \u2014\n  \/\/ deliberately not stored\/dismissed persistently (sessionStorage etc.),\n  \/\/ since that would let the misconfiguration go unnoticed on the next visit.\n  function showConfigError() {\n    var banner = document.createElement('div');\n    banner.className = 'cc-chc-config-error';\n    banner.setAttribute('role', 'alert');\n    banner.innerHTML =\n      '<strong>\u26a0 CC_FLAG_SHOW_CHC_POPUP = 1<\/strong> \u2014 ' + popupT('popupcta_config_error') +\n      '<button type=\"button\" class=\"cc-chc-config-error-close\" aria-label=\"' + popupT('popupcta_close_aria') + '\"><\/button>';\n    document.body.appendChild(banner);\n    banner.querySelector('.cc-chc-config-error-close').addEventListener('click', function() {\n      if (banner.parentNode) banner.parentNode.removeChild(banner);\n    });\n  }\n\n  \/\/ Everything outside the dialog (header, main content, footer, the\n  \/\/ back-to-top button...) is marked inert + aria-hidden while the popup is\n  \/\/ open, and restored on close. This is what makes it an actual modal for\n  \/\/ keyboard and screen-reader users, not just visually on top: without it,\n  \/\/ Tab and a screen reader's virtual cursor can both still wander into page\n  \/\/ content \"behind\" the popup even though the mouse can't reach it.\n  function setBackgroundInert(hidden) {\n    Array.prototype.forEach.call(document.body.children, function(el) {\n      if (el === overlay) return;\n      if (hidden) {\n        el.setAttribute('data-chc-popup-restore', el.hasAttribute('aria-hidden') ? el.getAttribute('aria-hidden') : '');\n        el.setAttribute('aria-hidden', 'true');\n        el.setAttribute('inert', '');\n      } else {\n        var restore = el.getAttribute('data-chc-popup-restore');\n        el.removeAttribute('data-chc-popup-restore');\n        if (restore) el.setAttribute('aria-hidden', restore); else el.removeAttribute('aria-hidden');\n        el.removeAttribute('inert');\n      }\n    });\n  }\n\n  function getFocusable() {\n    return overlay ? Array.prototype.slice.call(overlay.querySelectorAll(FOCUSABLE_SELECTOR)) : [];\n  }\n\n  \/\/ Locks background scroll while the popup is open. Deliberately NOT just\n  \/\/ `overflow:hidden` on <html>\/<body> \u2014 that alone is well known to still\n  \/\/ let iOS Safari rubber-band\/scroll the page behind a fixed overlay on\n  \/\/ touch. Pinning body to position:fixed at its current scroll offset (and\n  \/\/ restoring window.scrollTo on unlock) is the technique that actually\n  \/\/ holds on iOS too. The scrollbar-width padding compensation stops the\n  \/\/ page (and the fixed header, sized independently of body) from shifting\n  \/\/ sideways by however wide the now-hidden scrollbar was.\n  var lockedScrollY = 0;\n  function lockBodyScroll() {\n    lockedScrollY = window.scrollY || document.documentElement.scrollTop;\n    var scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n    document.body.style.position = 'fixed';\n    document.body.style.top = (-lockedScrollY) + 'px';\n    document.body.style.left = '0';\n    document.body.style.right = '0';\n    document.body.style.width = '100%';\n    if (scrollbarWidth > 0) {\n      document.body.style.paddingRight = scrollbarWidth + 'px';\n      var header = document.getElementById('cc-site-header');\n      if (header) header.style.paddingRight = scrollbarWidth + 'px';\n    }\n  }\n  function unlockBodyScroll() {\n    document.body.style.position = '';\n    document.body.style.top = '';\n    document.body.style.left = '';\n    document.body.style.right = '';\n    document.body.style.width = '';\n    document.body.style.paddingRight = '';\n    var header = document.getElementById('cc-site-header');\n    if (header) header.style.paddingRight = '';\n    \/\/ The options-object form + behavior:'instant' is deliberate: this page\n    \/\/ sets html{scroll-behavior:smooth} globally, which a plain\n    \/\/ scrollTo(x, y) call picks up here \u2014 that would animate the page from\n    \/\/ the top back down to lockedScrollY over about a second, visibly\n    \/\/ scrolling past everything in between right as the popup closes.\n    \/\/ 'instant' overrides the CSS and snaps back with no such flash.\n    window.scrollTo({ top: lockedScrollY, left: 0, behavior: 'instant' });\n  }\n\n  \/\/ Escape closes; Tab\/Shift+Tab is trapped inside the dialog's own controls\n  \/\/ so keyboard focus can never silently land on (now-inert, but belt-and-\n  \/\/ braces) page content behind the overlay.\n  function onKeydown(e) {\n    if (e.key === 'Escape') { dismiss('dismiss'); return; }\n    if (e.key !== 'Tab') return;\n    var focusable = getFocusable();\n    if (!focusable.length) return;\n    var first = focusable[0], last = focusable[focusable.length - 1];\n    if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n    else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n  }\n\n  function dismiss(reason) {\n    if (!overlay) return;\n    overlay.classList.remove('cc-chc-popup-open');\n    try { sessionStorage.setItem(STORAGE_KEY, '1'); } catch (e) {}\n    track('chc_popup_' + reason);\n    document.removeEventListener('keydown', onKeydown);\n    setBackgroundInert(false);\n    unlockBodyScroll();\n    var toRemove = overlay;\n    overlay = null;\n    \/\/ Return focus to whatever had it before the popup opened (usually\n    \/\/ <body>, but could be a link\/button if it was triggered right after a\n    \/\/ click) \u2014 required so keyboard\/screen-reader users aren't left with\n    \/\/ focus on an element that just vanished from the page.\n    if (lastFocused && typeof lastFocused.focus === 'function' && document.body.contains(lastFocused)) {\n      lastFocused.focus();\n    }\n    lastFocused = null;\n    window.setTimeout(function() {\n      if (toRemove.parentNode) toRemove.parentNode.removeChild(toRemove);\n    }, 300);\n  }\n\n  function scrollToChc() {\n    var header = document.getElementById('cc-site-header');\n    var headerH = header ? header.getBoundingClientRect().height : 0;\n    var top = section.getBoundingClientRect().top + window.pageYOffset - headerH - 16;\n    window.scrollTo({ top: top, behavior: 'smooth' });\n  }\n\n  function build() {\n    overlay = document.createElement('div');\n    overlay.className = 'cc-chc-popup-overlay';\n    overlay.setAttribute('role', 'dialog');\n    overlay.setAttribute('aria-modal', 'true');\n    overlay.setAttribute('aria-labelledby', 'cc-chc-popup-title');\n\n    var dialog = document.createElement('div');\n    dialog.className = 'cc-chc-popup';\n    dialog.innerHTML =\n      '<button type=\"button\" class=\"cc-chc-popup-close\" aria-label=\"' + popupT('popupcta_close_aria') + '\"><\/button>' +\n      '<div class=\"cc-chc-popup-badge\"><span class=\"dot\"><\/span><span>' + popupT('popupcta_eyebrow') + '<\/span><\/div>' +\n      '<h2 class=\"cc-chc-popup-title\" id=\"cc-chc-popup-title\">' + popupT('popupcta_title') + '<\/h2>' +\n      '<p class=\"cc-chc-popup-body\">' + popupT('popupcta_body') + '<\/p>' +\n      '<button type=\"button\" class=\"cc-chc-popup-cta\">' + popupT('popupcta_cta') + '<\/button><br>' +\n      '<button type=\"button\" class=\"cc-chc-popup-dismiss\">' + popupT('popupcta_dismiss') + '<\/button>';\n\n    overlay.appendChild(dialog);\n    document.body.appendChild(overlay);\n    setBackgroundInert(true);\n    lockBodyScroll();\n\n    dialog.querySelector('.cc-chc-popup-close').addEventListener('click', function() { dismiss('dismiss'); });\n    dialog.querySelector('.cc-chc-popup-dismiss').addEventListener('click', function() { dismiss('dismiss'); });\n    dialog.querySelector('.cc-chc-popup-cta').addEventListener('click', function() {\n      dismiss('cta_click');\n      window.setTimeout(scrollToChc, 50);\n    });\n    overlay.addEventListener('click', function(e) { if (e.target === overlay) dismiss('dismiss'); });\n    document.addEventListener('keydown', onKeydown);\n  }\n\n  function show() {\n    if (shown || sectionSeen) return;\n    shown = true;\n    lastFocused = document.activeElement;\n    build();\n    requestAnimationFrame(function() {\n      requestAnimationFrame(function() {\n        overlay.classList.add('cc-chc-popup-open');\n        var closeBtn = overlay.querySelector('.cc-chc-popup-close');\n        if (closeBtn) closeBtn.focus();\n      });\n    });\n    track('chc_popup_shown');\n  }\n\n  if ('IntersectionObserver' in window) {\n    var io = new IntersectionObserver(function(entries) {\n      entries.forEach(function(entry) { if (entry.isIntersecting) { sectionSeen = true; io.disconnect(); } });\n    }, { threshold: 0.2 });\n    io.observe(section);\n  }\n\n  window.setTimeout(show, DELAY_MS);\n  window.addEventListener('scroll', function onScroll() {\n    var doc = document.documentElement;\n    var maxScroll = doc.scrollHeight - doc.clientHeight;\n    var scrolled = maxScroll > 0 ? (window.scrollY || doc.scrollTop) \/ maxScroll : 0;\n    if (scrolled >= SCROLL_TRIGGER) {\n      window.removeEventListener('scroll', onScroll);\n      show();\n    }\n  }, { passive: true });\n})();\n\n\/\/ Technology badges (SELKS, Wazuh, SIEM...) open a small card with their\n\/\/ description, anchored next to the badge itself. Placement priority:\n\/\/  1. Above the badge (preferred) \u2014 used whenever it fully fits there.\n\/\/  2. Otherwise, beside the badge \u2014 to whichever of the left\/right has more\n\/\/     room \u2014 instead of below.\n\/\/ Both the chosen side and its exact offset are recalculated from the real,\n\/\/ current viewport every time a card opens, so it's never a stale guess.\n(function() {\n  var EDGE_MARGIN = 12;\n  var GAP = 12;\n\n  function positionPopover(badge, pop) {\n    \/\/ Measure in the default \"above\" layout first; below we may switch to a\n    \/\/ side placement, but the width used for measuring is the same either way.\n    pop.classList.remove('cc-pop-left', 'cc-pop-right');\n    pop.classList.add('cc-pop-top');\n    pop.style.left = ''; pop.style.top = ''; pop.style.maxWidth = '';\n\n    var badgeRect = badge.getBoundingClientRect();\n    var popWidth = pop.offsetWidth;\n    var popHeight = pop.offsetHeight;\n    var viewportWidth = window.innerWidth;\n    var viewportHeight = window.innerHeight;\n    var headerEl = document.getElementById('cc-site-header');\n    var headerBottom = headerEl ? headerEl.getBoundingClientRect().bottom : 0;\n    var topBound = Math.max(headerBottom, 0);\n    var spaceAbove = badgeRect.top - topBound - GAP;\n\n    \/\/ This element lives directly under <body> (see the badges setup below),\n    \/\/ so top\/left here are plain fixed-position viewport pixel coordinates \u2014\n    \/\/ no conversion against the badge's own box is needed or correct anymore.\n    if (spaceAbove >= popHeight) {\n      \/\/ Fits above: keep the \"top\" placement, just clamp it horizontally so\n      \/\/ it stays fully within the screen even near the left\/right edge.\n      var idealLeft = badgeRect.left + badgeRect.width \/ 2 - popWidth \/ 2;\n      var maxLeft = viewportWidth - popWidth - EDGE_MARGIN;\n      var clampedViewportLeft = Math.max(EDGE_MARGIN, Math.min(idealLeft, maxLeft));\n      pop.style.left = clampedViewportLeft + 'px';\n      pop.style.top = (badgeRect.top - GAP - popHeight) + 'px';\n      var arrowLeft = (badgeRect.left + badgeRect.width \/ 2) - clampedViewportLeft;\n      pop.style.setProperty('--cc-pop-arrow-left', Math.max(18, Math.min(arrowLeft, popWidth - 18)) + 'px');\n      return;\n    }\n\n    \/\/ Doesn't fit above: open beside the badge instead, on whichever side\n    \/\/ has more horizontal room, and clamp it vertically within the screen\n    \/\/ (and below the fixed header) the same way.\n    pop.classList.remove('cc-pop-top');\n    var spaceLeft = badgeRect.left - EDGE_MARGIN;\n    var spaceRight = viewportWidth - badgeRect.right - EDGE_MARGIN;\n    var placeRight = spaceRight >= spaceLeft;\n    pop.classList.add(placeRight ? 'cc-pop-right' : 'cc-pop-left');\n    \/\/ Never let the card claim more width than the side actually has, so it\n    \/\/ can't spill past the opposite edge of the screen either. On a narrow\n    \/\/ phone with the badge mid-row, that available space can genuinely be\n    \/\/ small \u2014 better a narrower, taller card (text wraps more) than one that\n    \/\/ overflows the edge, so there is no artificial minimum here.\n    \/\/ Important: spaceLeft\/spaceRight are measured from the badge edge to the\n    \/\/ screen edge margin, but the popover itself is additionally offset from\n    \/\/ the badge by GAP. That GAP is not free space for the card's own width \u2014\n    \/\/ it has to be subtracted too, otherwise the card is sized as if it\n    \/\/ starts right at the badge edge instead of GAP away from it, which\n    \/\/ pushes its far edge past the screen boundary by about GAP pixels.\n    var sideSpace = (placeRight ? spaceRight : spaceLeft) - GAP;\n    pop.style.maxWidth = Math.max(Math.min(sideSpace, viewportWidth - 2 * EDGE_MARGIN, 260), 90) + 'px';\n    \/\/ Re-measure after constraining maxWidth: the box's actual rendered\n    \/\/ width\/height can shrink\/grow (text reflows) once that cap is applied,\n    \/\/ and the left-side placement in particular needs the box's true width\n    \/\/ to anchor its right edge against the badge \u2014 max-width is only a\n    \/\/ ceiling, the browser may render narrower than that.\n    var actualWidth = pop.offsetWidth;\n    var actualHeight = pop.offsetHeight;\n    pop.style.left = placeRight\n      ? (badgeRect.right + GAP) + 'px'\n      : (badgeRect.left - GAP - actualWidth) + 'px';\n\n    var idealTop = badgeRect.top + badgeRect.height \/ 2 - actualHeight \/ 2;\n    var minTop = topBound + EDGE_MARGIN;\n    var maxTop = viewportHeight - actualHeight - EDGE_MARGIN;\n    var clampedViewportTop = Math.max(minTop, Math.min(idealTop, Math.max(minTop, maxTop)));\n    pop.style.top = clampedViewportTop + 'px';\n    var arrowTop = (badgeRect.top + badgeRect.height \/ 2) - clampedViewportTop;\n    pop.style.setProperty('--cc-pop-arrow-top', Math.max(18, Math.min(arrowTop, actualHeight - 18)) + 'px');\n  }\n\n  var openBadge = null;\n  var pinnedByClick = false;\n  \/\/ Popover elements are moved out to be direct children of <body> (see the\n  \/\/ badges setup below), so they can no longer be found with\n  \/\/ badge.querySelector('.cc-popover') once that's happened \u2014 this map is\n  \/\/ the stable badge -> popover link that survives the move.\n  var badgePopovers = new WeakMap();\n  function getPop(badge) { return badgePopovers.get(badge); }\n  function openPopover(badge) {\n    if (openBadge && openBadge !== badge) closePopover(openBadge);\n    var pop = getPop(badge);\n    if (!pop) return;\n    positionPopover(badge, pop);\n    pop.classList.add('cc-pop-open');\n    openBadge = badge;\n    \/\/ A side-placed card can be tall enough to add to the page's scrollable\n    \/\/ area, which can make a vertical scrollbar appear right as the card\n    \/\/ opens. That shrinks the viewport by the scrollbar's width and shifts\n    \/\/ everything (including the badge itself) a few pixels sideways \u2014 after\n    \/\/ the first, pre-scrollbar measurement above. Re-measure and reposition\n    \/\/ once more on the next two frames, once that shift (if any) has\n    \/\/ actually happened, so the final position always matches reality\n    \/\/ instead of a viewport\/badge position that's already stale.\n    requestAnimationFrame(function() {\n      requestAnimationFrame(function() {\n        if (openBadge === badge) positionPopover(badge, pop);\n      });\n    });\n  }\n  function closePopover(badge) {\n    var pop = getPop(badge);\n    if (pop) { pop.classList.remove('cc-pop-open'); pop.style.maxWidth = ''; }\n    if (openBadge === badge) { openBadge = null; pinnedByClick = false; }\n  }\n\n  \/\/ Click\/tap is the primary trigger (it fires identically on every device);\n  \/\/ hover\/focus are layered on top as a desktop convenience. Deliberately NOT\n  \/\/ closing on mouseleave\/blur: a real click is almost always immediately\n  \/\/ followed by the mouse moving away (which is also true of Playwright's\n  \/\/ simulated click), which would otherwise close the card a few hundred ms\n  \/\/ after it opens, mid-animation \u2014 clearing its clamped width right as it\n  \/\/ was fading out and producing a brief, wide, overflowing flash. Dismissal\n  \/\/ is handled by clicking outside, Escape, or clicking a different badge.\n  \/\/\n  \/\/ A card opened by an actual click is \"pinned\": once pinned, hovering\n  \/\/ over a *different* badge no longer steals it away. This matters because\n  \/\/ a click can trigger the browser's native scroll-into-view (e.g. a badge\n  \/\/ tapped near the fixed header gets auto-scrolled clear of it) \u2014 and while\n  \/\/ that scroll animates, page content slides underneath a mouse cursor that\n  \/\/ never actually moved, which makes the browser re-evaluate what's under\n  \/\/ the pointer and can fire a genuine `mouseenter` on a neighboring badge\n  \/\/ mid-scroll. Without the pin, that phantom hover would silently close the\n  \/\/ card the user just deliberately opened and open a different one instead.\n  \/\/ Deliberately no aria-haspopup\/aria-expanded here: this is a plain\n  \/\/ tooltip (role=\"tooltip\" + aria-describedby, per the WAI-ARIA tooltip\n  \/\/ pattern), not an interactive disclosure widget, and a <span>'s default\n  \/\/ role doesn't support aria-expanded \u2014 an automated audit (axe-core)\n  \/\/ flagged that combination as an invalid ARIA attribute. aria-describedby\n  \/\/ alone already exposes the description to assistive tech regardless of\n  \/\/ the popover's visual open\/closed state, so nothing is lost by removing\n  \/\/ them.\n  var badges = document.querySelectorAll('.cc-tech-badge-popover');\n  badges.forEach(function(badge) {\n    \/\/ Move this badge's popover card out to be a direct child of <body>,\n    \/\/ escaping every \".cc-reveal\" ancestor's own stacking context (see the\n    \/\/ long comment on .cc-popover in the stylesheet for why that trap\n    \/\/ exists and why this is the real fix, not just a bigger z-index).\n    \/\/ aria-describedby keeps working regardless of where in the document\n    \/\/ the described element actually lives.\n    var pop = badge.querySelector('.cc-popover');\n    if (pop) {\n      document.body.appendChild(pop);\n      badgePopovers.set(badge, pop);\n    }\n    badge.addEventListener('mouseenter', function() {\n      if (pinnedByClick && badge !== openBadge) return;\n      openPopover(badge);\n    });\n    badge.addEventListener('focus', function() {\n      if (pinnedByClick && badge !== openBadge) return;\n      openPopover(badge);\n    });\n    badge.addEventListener('click', function(e) {\n      e.stopPropagation();\n      openPopover(badge);\n      pinnedByClick = true;\n    });\n  });\n\n  document.addEventListener('click', function() { if (openBadge) closePopover(openBadge); });\n  document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && openBadge) closePopover(openBadge); });\n  window.addEventListener('resize', function() {\n    if (openBadge) positionPopover(openBadge, getPop(openBadge));\n  }, { passive: true });\n  \/\/ Clicking\/focusing a badge can make the browser auto-scroll it into view\n  \/\/ (common when it sits just under the fixed header), which happens AFTER\n  \/\/ the card is first positioned and shifts the badge's real on-screen spot.\n  \/\/ Reposition live on scroll too so the card always tracks where the badge\n  \/\/ actually ended up, not where it was the instant it opened.\n  window.addEventListener('scroll', function() {\n    if (openBadge) positionPopover(openBadge, getPop(openBadge));\n  }, { passive: true });\n\n  \/\/ If the user actually scrolls the page while a card is open, close it\n  \/\/ instead of dragging it along \u2014 a card anchored to a badge that has\n  \/\/ scrolled away no longer makes sense pinned to the screen, and it was\n  \/\/ ending up rendered on top of \/ underneath the fixed header. Listening\n  \/\/ for the real input gestures (wheel, touch drag, keyboard paging) rather\n  \/\/ than the resulting `scroll` event lets this be told apart from the\n  \/\/ browser's own brief auto-scroll-into-view right after opening (handled\n  \/\/ above), which is not a user gesture and should not immediately close\n  \/\/ the card it just opened.\n  var SCROLL_KEYS = { ArrowUp: 1, ArrowDown: 1, PageUp: 1, PageDown: 1, Home: 1, End: 1, ' ': 1, Spacebar: 1 };\n  function closeOnUserScroll(e) {\n    if (!openBadge) return;\n    if (e && e.type === 'keydown' && !SCROLL_KEYS[e.key]) return;\n    closePopover(openBadge);\n  }\n  window.addEventListener('wheel', closeOnUserScroll, { passive: true });\n  window.addEventListener('touchmove', closeOnUserScroll, { passive: true });\n  document.addEventListener('keydown', closeOnUserScroll);\n})();\n\n\/\/ Scroll reveal for marketing sections\n(function() {\n  var els = document.querySelectorAll('.cc-reveal');\n  if (!('IntersectionObserver' in window)) { els.forEach(function(e){ e.classList.add('cc-in'); }); return; }\n  var io = new IntersectionObserver(function(entries) {\n    entries.forEach(function(entry) {\n      if (entry.isIntersecting) { entry.target.classList.add('cc-in'); io.unobserve(entry.target); }\n    });\n  }, { threshold: 0.12 });\n  els.forEach(function(e){ io.observe(e); });\n})();\n\n\/\/ Initialize\n(function() {\n  ccApplyPartnerFlag();\n  ccApplyChcFlag();\n  var initialLang = 'en';\n  try {\n    var saved = localStorage.getItem('cc-lang');\n    if (saved && ccI18n[saved]) initialLang = saved;\n  } catch (e) {}\n  ccApplyLang(initialLang);\n})();\n<\/script>\n\n<script>\n\/\/ =============================================\n\/\/ Cyber Health Check \u2014 mini-light prototype\n\/\/\n\/\/ Philosophy (per project spec): the AI never calculates risk, it only\n\/\/ drafts and contextualizes. Scoring here is 100% deterministic, versioned\n\/\/ rules \u2014 no LLM call in this preview build. The report copy is assembled\n\/\/ from a small localized knowledge base (impact \/ recommendation \/ priority\n\/\/ \/ NIS2 \/ ISO 27001 \/ ENS \/ MITRE refs), the same shape described for the\n\/\/ real Knowledge Base + Prompt Orchestrator. Swapping the template\n\/\/ assembly in chcRenderReport() for a real backend + LLM call later should\n\/\/ not require touching the scoring engine below.\n\/\/\n\/\/ Once the survey + lead form are complete, the full payload is POSTed to\n\/\/ the SOC API \u2014 see chcSendReportToApi() and its call site in\n\/\/ chcRenderReport() below.\n\/\/ =============================================\n(function() {\n\n  \/\/ ===================== CRIDA A LA API DEL SOC =====================\n  \/\/ Resolt amb un plugin de WordPress (ja actiu) que exposa aquesta ruta\n  \/\/ REST i reenvia la crida, servidor a servidor, a la API real del SOC\n  \/\/ (POST \/api\/v1\/reports amb send_email=true) \u2014 evita alhora CORS i el\n  \/\/ mixed content (la p\u00e0gina \u00e9s https, la API del SOC \u00e9s http).\n  \/\/\n  \/\/ Fem servir el format ?rest_route=... en lloc de \/wp-json\/... perqu\u00e8\n  \/\/ aquest sempre funciona independentment de la configuraci\u00f3 d'enlla\u00e7os\n  \/\/ permanents de WordPress (amb \"B\u00e0sics\" les rutes boniques \/wp-json\/...\n  \/\/ donen 404); ?rest_route= \u00e9s la ruta \"crua\" de la REST API i no dep\u00e8n\n  \/\/ de les regles de reescriptura.\n  var CHC_API_ENDPOINT = '\/?rest_route=\/chc\/v1\/reports&send_email=true';\n  \/\/ Detall t\u00e8cnic (job_id, estat, cua, codi HTTP) amagat de la pantalla per\n  \/\/ als visitants reals \u2014 es mant\u00e9 calculat i disponible (veure\n  \/\/ chcSendReportToApi()), nom\u00e9s cal posar aquest flag a true per tornar-lo\n  \/\/ a mostrar, per exemple durant proves.\n  var CHC_API_SHOW_TECHNICAL_DETAIL = false;\n  \/\/ ====================================================================\n\n  \/\/ ===================== ENTORN (PRE \/ PRO) =====================\n  \/\/ \u00daNIC punt on viuen els dominis de cada entorn \u2014 es tria autom\u00e0ticament\n  \/\/ segons location.hostname (veure chcEnvironment(), i el seu \u00fas a\n  \/\/ chcBuildPayload() m\u00e9s avall) i viatja al payload com a \"environment\".\n  \/\/ Si mai es navega des d'un domini no llistat aqu\u00ed (proves en local,\n  \/\/ previsualitzacions de WordPress, etc.), es fa servir CHC_ENVIRONMENT_DEFAULT\n  \/\/ \u2014 aix\u00ed el camp \"environment\" sempre val \"PRE\" o \"PRO\", mai queda buit ni\n  \/\/ desapareix del JSON (a difer\u00e8ncia d'un valor undefined, que JSON.stringify\n  \/\/ elimina silenciosament de l'objecte).\n  var CHC_ENVIRONMENTS = {\n    'www.sisp-corp.com': 'PRE',\n    'pro.concenter.io':  'PRO'\n  };\n  var CHC_ENVIRONMENT_DEFAULT = 'PRE';\n  function chcEnvironment() {\n    return CHC_ENVIRONMENTS[window.location.hostname] || CHC_ENVIRONMENT_DEFAULT;\n  }\n  \/\/ ================================================================\n\n  var CHC_STEPS = ['intro', 'profile', 'q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q8', 'lead', 'loading', 'report'];\n  var CHC_QUESTIONS = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q8'];\n  var chcAnswers = {};   \/\/ { q1:'ok'|'partial'|'bad', q2:..., ... q8:... }\n  var chcLead = {};      \/\/ { name, company, email }\n  var chcProfile = {};   \/\/ { sector, size }\n  var chcCurrentStep = 0;\n\n  \/\/ Export handlers to window immediately. Function declarations below are\n  \/\/ hoisted, so this is safe to do this early \u2014 it guarantees the wizard's\n  \/\/ own controls (including the \"Start over\" button in the fatal-error\n  \/\/ fallback near the bottom of this script) still work even if some later\n  \/\/ line in this file throws during setup.\n  window.chcGoto = chcGoto;\n  window.chcAnswer = chcAnswer;\n  window.chcProfileChanged = chcProfileChanged;\n  window.chcClearLeadError = chcClearLeadError;\n  window.chcSubmitLead = chcSubmitLead;\n  window.chcRestart = chcRestart;\n  window.chcRetrySend = chcRetrySend;\n\n  \/\/ ---- Scoring engine (deterministic, versioned) ----\n  \/\/ v0.3.0: expanded from 4 to 8 control categories (see CHC_CATEGORY_OF).\n  \/\/ Weights are deliberately NOT uniform (-12.5 each): categories tied to a\n  \/\/ single point of technical failure that's both common and severe in real\n  \/\/ incidents \u2014 detection\/monitoring, vulnerability management, backup \u2014\n  \/\/ are weighted roughly twice as heavily as categories that are more about\n  \/\/ process maturity or reduce risk indirectly (assets, awareness, incident\n  \/\/ response, compliance). All eight \"bad\" deductions sum to exactly 100, so\n  \/\/ an all-worst-case answer set still floors the score at 0 (same\n  \/\/ guarantee as the original 4-question engine).\n  var CHC_ENGINE_VERSION = '0.3.0-preview';\n  var CHC_RULES = {\n    q1: { ok: 0, partial: -7, bad: -14 },  \/\/ Identity & Access (MFA)\n    q2: { ok: 0, partial: -5, bad: -10 },  \/\/ Asset Visibility\n    q3: { ok: 0, partial: -9, bad: -18 },  \/\/ Detection & Monitoring\n    q4: { ok: 0, partial: -8, bad: -16 },  \/\/ Vulnerability Management\n    q5: { ok: 0, partial: -9, bad: -18 },  \/\/ Resilience & Recovery (backup)\n    q6: { ok: 0, partial: -4, bad: -8 },   \/\/ People & Awareness\n    q7: { ok: 0, partial: -4, bad: -8 },   \/\/ Incident Response\n    q8: { ok: 0, partial: -4, bad: -8 }    \/\/ Governance & Compliance\n  };\n  var CHC_CATEGORY_OF = {\n    q1: 'identity', q2: 'assets', q3: 'monitoring', q4: 'vulnerability',\n    q5: 'backup', q6: 'awareness', q7: 'incident_response', q8: 'compliance'\n  };\n  var CHC_SEVERITY = {\n    q1: { partial: 'medium', bad: 'high' },\n    q2: { partial: 'medium', bad: 'high' },\n    q3: { partial: 'medium', bad: 'critical' },\n    q4: { partial: 'medium', bad: 'critical' },\n    q5: { partial: 'medium', bad: 'critical' },\n    q6: { partial: 'medium', bad: 'high' },\n    q7: { partial: 'medium', bad: 'high' },\n    q8: { partial: 'medium', bad: 'high' }\n  };\n  var CHC_KB_KEY = {\n    q1: { bad: 'mfa_bad', partial: 'mfa_partial', ok: 'mfa_ok' },\n    q2: { bad: 'assets_bad', partial: 'assets_partial', ok: 'assets_ok' },\n    q3: { bad: 'mon_bad', partial: 'mon_partial', ok: 'mon_ok' },\n    q4: { bad: 'vuln_bad', partial: 'vuln_partial', ok: 'vuln_ok' },\n    q5: { bad: 'bkp_bad', partial: 'bkp_partial', ok: 'bkp_ok' },\n    q6: { bad: 'aware_bad', partial: 'aware_partial', ok: 'aware_ok' },\n    q7: { bad: 'ir_bad', partial: 'ir_partial', ok: 'ir_ok' },\n    q8: { bad: 'cmp_bad', partial: 'cmp_partial', ok: 'cmp_ok' }\n  };\n  \/\/ Formal control references \u2014 codes stay the same regardless of UI\n  \/\/ language. MITRE ATT&CK is only attached to categories with a clear\n  \/\/ technical attacker technique behind them (identity, monitoring,\n  \/\/ vulnerabilities, backup); the more process\/governance-flavored\n  \/\/ categories (assets, awareness, incident response, compliance)\n  \/\/ intentionally have no MITRE entry, since that framework maps attacker\n  \/\/ techniques, not documentation or process gaps.\n  var CHC_REFS = {\n    q1: { nis2: 'NIS2 \u2013 Art. 21.2(j)', iso: 'ISO 27001 \u2013 A.8.5', ens: 'ENS \u2013 op.acc.5', mitre: 'MITRE ATT&CK \u2013 T1078' },\n    q2: { nis2: 'NIS2 \u2013 Art. 21.2(i)', iso: 'ISO 27001 \u2013 A.5.9', ens: 'ENS \u2013 op.exp.1' },\n    q3: { nis2: 'NIS2 \u2013 Art. 21.2(b)', iso: 'ISO 27001 \u2013 A.8.16', ens: 'ENS \u2013 op.mon.1', mitre: 'MITRE ATT&CK \u2013 TA0011' },\n    q4: { nis2: 'NIS2 \u2013 Art. 21.2(e)', iso: 'ISO 27001 \u2013 A.8.8', ens: 'ENS \u2013 op.exp.4', mitre: 'MITRE ATT&CK \u2013 T1190' },\n    q5: { nis2: 'NIS2 \u2013 Art. 21.2(c)', iso: 'ISO 27001 \u2013 A.8.13', ens: 'ENS \u2013 mp.info.9', mitre: 'MITRE ATT&CK \u2013 T1490' },\n    q6: { nis2: 'NIS2 \u2013 Art. 21.2(g)', iso: 'ISO 27001 \u2013 A.6.3', ens: 'ENS \u2013 mp.per.3' },\n    q7: { nis2: 'NIS2 \u2013 Art. 21.2(b)', iso: 'ISO 27001 \u2013 A.5.24', ens: 'ENS \u2013 op.exp.7' },\n    q8: { nis2: 'NIS2 \u2013 Art. 21.1', iso: 'ISO 27001 \u2013 A.5.31', ens: 'ENS \u2013 org.3' }\n  };\n  var CHC_RISK_COLOR = { low: '#16A34A', moderate: '#D97706', high: '#EA580C', critical: '#DC2626' };\n\n  \/\/ ---- Analytics (GTM dataLayer) \u2014 funnel instrumentation only, no PII\n  \/\/ beyond what the lead form itself already asks the user to submit. ----\n  function chcTrack(event, props) {\n    try {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push(Object.assign({ event: event }, props || {}));\n    } catch (e) {}\n  }\n\n  function chcScore() {\n    var score = 100;\n    Object.keys(chcAnswers).forEach(function(q) { score += CHC_RULES[q][chcAnswers[q]]; });\n    return Math.max(0, Math.min(100, score));\n  }\n  function chcCategoryScore(q) { return 100 + CHC_RULES[q][chcAnswers[q]]; }\n  function chcRiskLevel(score) {\n    if (score >= 85) return 'low';\n    if (score >= 60) return 'moderate';\n    if (score >= 35) return 'high';\n    return 'critical';\n  }\n\n  function chcLang() {\n    try { var saved = localStorage.getItem('cc-lang'); if (saved && ccI18n[saved]) return saved; } catch (e) {}\n    return 'en';\n  }\n  function t(key) {\n    var dict = ccI18n[chcLang()] || ccI18n.en;\n    return (dict[key] !== undefined) ? dict[key] : (ccI18n.en[key] || key);\n  }\n  function tpl(key, vars) {\n    var s = t(key);\n    Object.keys(vars || {}).forEach(function(k) { s = s.split('{' + k + '}').join(vars[k]); });\n    return s;\n  }\n\n  \/\/ ---- Navigation ----\n  function chcGoto(index) {\n    var shell = document.getElementById('cc-chc-shell');\n    if (!shell) return;\n    chcCurrentStep = index;\n    var stepName = CHC_STEPS[index];\n    shell.querySelectorAll('.cc-chc-step').forEach(function(el) {\n      el.classList.toggle('cc-chc-step-active', el.getAttribute('data-chc-step') === stepName);\n    });\n    chcUpdateProgress(index);\n    shell.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    chcTrack('chc_step_view', { chc_step: stepName, chc_step_index: index });\n  }\n  window.chcGoto = chcGoto;\n\n  function chcUpdateProgress(index) {\n    var fill = document.getElementById('cc-chc-progress-fill');\n    var label = document.getElementById('cc-chc-progress-label');\n    if (!fill || !label) return;\n    fill.style.width = ((index \/ (CHC_STEPS.length - 1)) * 100) + '%';\n    var step = CHC_STEPS[index];\n    var qIndex = CHC_QUESTIONS.indexOf(step);\n    if (qIndex !== -1) label.textContent = (qIndex + 1) + ' \/ ' + CHC_QUESTIONS.length;\n    else if (step === 'profile') label.textContent = t('chc_profile_eyebrow');\n    else if (step === 'lead') label.textContent = t('chc_lead_eyebrow');\n    else if (step === 'report') label.textContent = '\u2713';\n    else label.textContent = '';\n  }\n\n  function chcAnswer(q, value, btn) {\n    chcAnswers[q] = value;\n    var group = btn.closest('.cc-chc-options');\n    group.querySelectorAll('.cc-chc-option').forEach(function(o) { o.classList.remove('cc-chc-selected'); });\n    btn.classList.add('cc-chc-selected');\n    var nextBtn = document.getElementById('cc-chc-next-' + q);\n    if (nextBtn) nextBtn.disabled = false;\n    chcTrack('chc_question_answered', { chc_question: q, chc_answer: value });\n  }\n  window.chcAnswer = chcAnswer;\n\n  \/\/ Sector and company size are required, same as every other question in\n  \/\/ the wizard: the Next button starts disabled (see markup) and only\n  \/\/ enables once both dropdowns have a real value, exactly like the\n  \/\/ multiple-choice steps below enable their own Next button on chcAnswer().\n  function chcProfileChanged() {\n    var sector = document.getElementById('cc-chc-sector').value;\n    var size = document.getElementById('cc-chc-size').value;\n    chcProfile = { sector: sector, size: size };\n    var nextBtn = document.getElementById('cc-chc-next-profile');\n    if (nextBtn) nextBtn.disabled = !(sector && size);\n  }\n  window.chcProfileChanged = chcProfileChanged;\n\n  \/\/ The lead <form> uses novalidate (see markup) so the browser's native\n  \/\/ \"please fill this field\" bubbles never appear \u2014 without this, a missing\n  \/\/ field or an unchecked consent box made chcSubmitLead silently return\n  \/\/ false with ZERO visible feedback: to the user it looked exactly like\n  \/\/ clicking \"Generate my report\" did nothing at all.\n  function chcClearLeadError() {\n    var err = document.getElementById('cc-chc-lead-error');\n    if (err) err.classList.remove('cc-chc-lead-error-visible');\n    ['cc-chc-field-name', 'cc-chc-field-company', 'cc-chc-field-email'].forEach(function(id) {\n      var el = document.getElementById(id);\n      if (el) el.classList.remove('cc-chc-field-invalid');\n    });\n  }\n  window.chcClearLeadError = chcClearLeadError;\n\n  \/\/ Last-resort safety net: if anything throws while validating the lead\n  \/\/ form or while rendering the report (a bad DOM lookup, a missing key,\n  \/\/ anything we didn't anticipate), this makes the failure VISIBLE instead\n  \/\/ of leaving the user staring at a spinner or a button that appears to\n  \/\/ do nothing \u2014 which is exactly what earlier bugs in this flow looked\n  \/\/ like from the outside, even though each had a different root cause.\n  function chcShowFatalError(context, err) {\n    try { console.error('[Cyber Health Check] ' + context + ':', err); } catch (e) {}\n    try { chcTrack('chc_js_error', { chc_context: context, chc_message: String((err && err.message) || err) }); } catch (e) {}\n    var normal = document.getElementById('cc-chc-loading-normal');\n    var fatal = document.getElementById('cc-chc-fatal');\n    chcGoto(CHC_STEPS.indexOf('loading')); \/\/ loading step is where the fallback message lives\n    if (normal) normal.style.display = 'none';\n    if (fatal) fatal.classList.add('cc-chc-fatal-visible');\n  }\n  window.chcShowFatalError = chcShowFatalError;\n\n  function chcSubmitLead(evt) {\n    if (evt) evt.preventDefault();\n    try {\n      var nameEl = document.getElementById('cc-chc-name');\n      var companyEl = document.getElementById('cc-chc-company');\n      var emailEl = document.getElementById('cc-chc-email');\n      var name = nameEl.value.trim();\n      var company = companyEl.value.trim();\n      var email = emailEl.value.trim();\n      var emailLooksValid = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email);\n\n      chcClearLeadError();\n      var invalidIds = [];\n      if (!name) invalidIds.push('cc-chc-field-name');\n      if (!company) invalidIds.push('cc-chc-field-company');\n      if (!email || !emailLooksValid) invalidIds.push('cc-chc-field-email');\n\n      if (invalidIds.length) {\n        invalidIds.forEach(function(id) {\n          var el = document.getElementById(id);\n          if (el) el.classList.add('cc-chc-field-invalid');\n        });\n        var err = document.getElementById('cc-chc-lead-error');\n        if (err) err.classList.add('cc-chc-lead-error-visible');\n        chcTrack('chc_lead_blocked', { chc_reason: (!email || !emailLooksValid) ? 'invalid_email' : 'missing_field' });\n        return false;\n      }\n      chcLead = { name: name, company: company, email: email };\n\n      \/\/ The actual POST to the SOC API happens a moment later, once the\n      \/\/ score\/risk are computed \u2014 see chcSendReportToApi(), called once\n      \/\/ right here (NOT from inside chcRenderReport(), which also runs\n      \/\/ again on every language switch while on the report screen \u2014 it\n      \/\/ must only ever redraw the on-screen text, never re-submit).\n      chcTrack('chc_lead_submitted', { chc_sector: chcProfile.sector, chc_company_size: chcProfile.size });\n\n      chcGoto(CHC_STEPS.indexOf('loading'));\n      window.setTimeout(function() {\n        try {\n          chcRenderReport();\n          var score = chcScore(), risk = chcRiskLevel(score);\n          chcSendReportToApi(chcBuildPayload(score, risk));\n          chcGoto(CHC_STEPS.indexOf('report'));\n        } catch (e) {\n          chcShowFatalError('render_report', e);\n        }\n      }, 900);\n      return false;\n    } catch (e) {\n      chcShowFatalError('submit_lead', e);\n      return false;\n    }\n  }\n  window.chcSubmitLead = chcSubmitLead;\n\n  function chcRestart() {\n    chcAnswers = {};\n    chcLead = {};\n    chcProfile = {};\n    chcSetApiStatus('', null);\n    var form = document.getElementById('cc-chc-lead-form');\n    if (form) form.reset();\n    chcClearLeadError();\n    var sectorSel = document.getElementById('cc-chc-sector');\n    var sizeSel = document.getElementById('cc-chc-size');\n    if (sectorSel) sectorSel.value = '';\n    if (sizeSel) sizeSel.value = '';\n    var profileNextBtn = document.getElementById('cc-chc-next-profile');\n    if (profileNextBtn) profileNextBtn.disabled = true;\n    document.querySelectorAll('.cc-chc-option').forEach(function(o) { o.classList.remove('cc-chc-selected'); });\n    CHC_QUESTIONS.forEach(function(q) {\n      var b = document.getElementById('cc-chc-next-' + q);\n      if (b) b.disabled = true;\n    });\n    var fatal = document.getElementById('cc-chc-fatal');\n    var normalLoading = document.getElementById('cc-chc-loading-normal');\n    if (fatal) fatal.classList.remove('cc-chc-fatal-visible');\n    if (normalLoading) normalLoading.style.display = '';\n    chcTrack('chc_restart');\n    chcGoto(0);\n  }\n  window.chcRestart = chcRestart;\n\n  \/\/ ---- Report data (deterministic, no HTML\/copy \u2014 codes only) ----\n  \/\/ These used to build the localized HTML for the on-screen findings \/\n  \/\/ strengths lists. Now that the report screen only shows the gauge +\n  \/\/ \"your report is on its way by email\" message, they build plain data\n  \/\/ objects instead: this is the shape that feeds chcBuildPayload() below,\n  \/\/ and later, the real backend + Prompt Orchestrator. Kept as codes\/keys\n  \/\/ (not full localized text) on purpose \u2014 the actual Knowledge Base\n  \/\/ copy stays server-side.\n  \/\/ CHC_KB_KEY stores full keys like \"mfa_bad\" (topic prefix + answer\n  \/\/ suffix) so the KB lookup stays unambiguous internally. In the payload\n  \/\/ we only want the part after the \"_\" \u2014 the topic prefix is redundant\n  \/\/ there since \"question\"\/\"category\" already say which question this is.\n  function chcKbSuffix(fullKey) {\n    return fullKey.split('_').pop();\n  }\n\n  function chcFindingData(q) {\n    var ans = chcAnswers[q];\n    if (ans === 'ok') return null;\n    return {\n      question: q,\n      category: CHC_CATEGORY_OF[q],\n      severity: CHC_SEVERITY[q][ans],\n      kb_key: chcKbSuffix(CHC_KB_KEY[q][ans]),\n      refs: CHC_REFS[q]\n    };\n  }\n\n  function chcStrengthData(q) {\n    if (chcAnswers[q] !== 'ok') return null;\n    return {\n      question: q,\n      category: CHC_CATEGORY_OF[q],\n      kb_key: chcKbSuffix(CHC_KB_KEY[q].ok)\n    };\n  }\n\n  \/\/ ---- JSON payload for the backend call ----\n  \/\/ Single source of truth for risk: computed once here on the frontend,\n  \/\/ passed as a plain value. The backend recomputes\/validates against its\n  \/\/ own copy of this same engine (versioned via CHC_ENGINE_VERSION) rather\n  \/\/ than trusting the client blindly, and takes it from there (report\n  \/\/ generation + email). Sent to the SOC API by chcSendReportToApi() below.\n  function chcBuildPayload(score, risk) {\n    var sevOrder = { critical: 0, high: 1, medium: 2 };\n    var findings = CHC_QUESTIONS.map(chcFindingData).filter(Boolean);\n    findings.sort(function(a, b) { return sevOrder[a.severity] - sevOrder[b.severity]; });\n    var strengths = CHC_QUESTIONS.map(chcStrengthData).filter(Boolean);\n    var categories = CHC_QUESTIONS.map(function(q) {\n      return { category: CHC_CATEGORY_OF[q], score: chcCategoryScore(q) };\n    });\n\n    \/\/ Sector\/size and every answer are sent as {value, label} pairs: \"value\"\n    \/\/ is the stable machine code (kept for anything downstream that matches\n    \/\/ on it), \"label\" is the full localized text the user actually saw and\n    \/\/ selected \u2014 this is what the backend needs verbatim to build the\n    \/\/ report-generation superprompt, rather than re-deriving copy from codes.\n    var profile = {\n      sector: chcProfile.sector || '',\n      sector_label: chcProfile.sector ? t('chc_sector_' + chcProfile.sector) : '',\n      size: chcProfile.size || '',\n      size_label: chcProfile.size ? t('chc_size_' + chcProfile.size) : ''\n    };\n    var answers = {};\n    CHC_QUESTIONS.forEach(function(q) {\n      var ans = chcAnswers[q];\n      answers[q] = { value: ans, label: ans ? t('chc_' + q + '_opt_' + ans) : '' };\n    });\n\n    \/\/ Report authorship metadata: label is localized per language, value is\n    \/\/ fixed regardless of language \u2014 every report is authored, managed and\n    \/\/ analyzed by CONCENTER.IO. The report manager and data analyst also\n    \/\/ carry a fixed contact address, regardless of language.\n    var meta = {\n      author_label: t('chc_payload_author_label'), author: 'CONCENTER.IO',\n      report_manager_label: t('chc_payload_report_manager_label'), report_manager: 'CONCENTER.IO',\n      report_manager_contact_label: t('chc_payload_contact_label'), report_manager_contact: 'info@concenter.io',\n      data_analyst_label: t('chc_payload_data_analyst_label'), data_analyst: 'CONCENTER.IO',\n      data_analyst_contact_label: t('chc_payload_contact_label'), data_analyst_contact: 'info@concenter.io'\n    };\n\n    return {\n      engine_version: CHC_ENGINE_VERSION,\n      submitted_at: new Date().toISOString(),\n      language: chcLang(),\n      environment: chcEnvironment(),\n      lead: { name: chcLead.name || '', company: chcLead.company || '', email: chcLead.email || '' },\n      meta: meta,\n      profile: profile,\n      answers: answers,\n      score: score,\n      risk_level: risk,\n      categories: categories,\n      findings: findings,\n      strengths: strengths,\n      consent: true\n    };\n  }\n\n  \/\/ Shows the outcome of the API call on screen (#cc-chc-api-status),\n  \/\/ so it's visible to whoever is testing the integration \u2014 not just in\n  \/\/ the console.\n  function chcSetApiStatus(message, kind) {\n    var el = document.getElementById('cc-chc-api-status');\n    if (!el) return;\n    el.textContent = message;\n    el.className = 'cc-chc-api-status' + (kind ? ' cc-chc-api-status-' + kind : '');\n  }\n\n  \/\/ \"Torna-ho a provar\": nom\u00e9s visible quan l'\u00faltima crida ha fallat.\n  function chcSetApiRetryVisible(visible) {\n    var btn = document.getElementById('cc-chc-api-retry');\n    if (!btn) return;\n    btn.classList.toggle('cc-chc-api-retry-visible', !!visible);\n  }\n\n  \/\/ Reenvia el mateix payload (recalculat a partir de les respostes, que\n  \/\/ encara s\u00f3n en mem\u00f2ria \u2014 chcRestart() \u00e9s l'\u00fanic que les esborra), sense\n  \/\/ obligar a refer l'enquesta. Enlla\u00e7at des del bot\u00f3 \"Torna-ho a provar\",\n  \/\/ que nom\u00e9s es mostra si l'enviament anterior ha fallat.\n  function chcRetrySend() {\n    var score = chcScore();\n    var risk = chcRiskLevel(score);\n    chcSendReportToApi(chcBuildPayload(score, risk));\n  }\n  window.chcRetrySend = chcRetrySend;\n\n  \/\/ Fire-and-forget POST of the full payload, via the WordPress plugin\n  \/\/ proxy, to the SOC API. The API replies immediately with 202 + a job\n  \/\/ that's queued\/running \u2014 it does NOT wait for the PDF\/email to be\n  \/\/ ready. This is intentional and asynchronous: we don't poll for the\n  \/\/ final state (there is a GET \/api\/v1\/reports\/{job_id} for that, but\n  \/\/ it's out of scope here). We only read this immediate response and\n  \/\/ reflect on screen whether the job was launched or not.\n  function chcSendReportToApi(payload) {\n    chcSetApiStatus(t('chc_api_status_sending'), 'pending');\n    chcSetApiRetryVisible(false);\n    \/\/ ===================== CRIDA REAL (des del navegador) =====================\n    \/\/ Crida al plugin de WordPress (mateix origen, sense CORS ni mixed\n    \/\/ content), que reenvia la petici\u00f3, servidor a servidor, a la API real\n    \/\/ del SOC (POST \/api\/v1\/reports?send_email=true) i en retorna la\n    \/\/ resposta (codi HTTP + JSON) tal qual.\n    fetch(CHC_API_ENDPOINT, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify(payload)\n    }).then(function(res) {\n      chcTrack('chc_api_call_result', { chc_status: res.status });\n      return res.json().catch(function() { return null; }).then(function(data) {\n        if (res.status === 200 || res.status === 202) {\n          \/\/ Confirmaci\u00f3 que el treball s'ha llan\u00e7at (encuat\/en proc\u00e9s) \u2014\n          \/\/ no esperem ni consultem l'estat final, \u00e9s as\u00edncron. Detall\n          \/\/ t\u00e8cnic (job_id, estat, cua, missatge cru de la API) calculat\n          \/\/ sempre, per\u00f2 nom\u00e9s es mostra si CHC_API_SHOW_TECHNICAL_DETAIL\n          \/\/ \u00e9s true (veure nota a la constant, m\u00e9s amunt) \u2014 per als\n          \/\/ visitants reals es queda amb el missatge gen\u00e8ric i net.\n          var extra = [];\n          if (data && data.job_id) extra.push('job_id: ' + data.job_id);\n          if (data && data.status) extra.push('estat: ' + data.status);\n          if (data && data.queue_position !== undefined && data.queue_position !== null) {\n            extra.push('cua: ' + data.queue_position + (data.queue_size !== undefined && data.queue_size !== null ? '\/' + data.queue_size : ''));\n          }\n          var msg = t('chc_api_status_ok');\n          if (CHC_API_SHOW_TECHNICAL_DETAIL) {\n            var baseMsg = (data && data.message) ? data.message : msg;\n            msg = baseMsg + (extra.length ? ' (' + extra.join(', ') + ')' : ' (HTTP ' + res.status + ')');\n          }\n          chcSetApiStatus(msg, 'ok');\n          chcSetApiRetryVisible(false);\n        } else {\n          console.error('[Cyber Health Check] API did not accept the request.', res.status, data);\n          var errMsg = t('chc_api_status_error');\n          if (CHC_API_SHOW_TECHNICAL_DETAIL) {\n            var detail = (data && data.message) ? data.message : ('HTTP ' + res.status);\n            errMsg = errMsg + ' (' + detail + ')';\n          }\n          chcSetApiStatus(errMsg, 'error');\n          chcSetApiRetryVisible(true);\n        }\n      });\n    }).catch(function(err) {\n      chcTrack('chc_api_call_error', { chc_message: String((err && err.message) || err) });\n      console.error('[Cyber Health Check] API call failed:', err);\n      var failMsg = t('chc_api_status_error');\n      if (CHC_API_SHOW_TECHNICAL_DETAIL) failMsg += ': ' + String((err && err.message) || err);\n      chcSetApiStatus(failMsg, 'error');\n      chcSetApiRetryVisible(true);\n    });\n  }\n\n  function chcRenderReport() {\n    var score = chcScore();\n    var risk = chcRiskLevel(score);\n    var color = CHC_RISK_COLOR[risk];\n\n    var shell = document.getElementById('cc-chc-shell');\n    shell.style.setProperty('--chc-gauge-color', color);\n\n    var gauge = document.getElementById('cc-chc-gauge');\n    gauge.style.setProperty('--chc-score', score);\n    document.getElementById('cc-chc-gauge-score').textContent = score;\n    document.getElementById('cc-chc-risk-badge').textContent = t('chc_risk_' + risk);\n\n    var localeMap = { ca: 'ca-ES', es: 'es-ES', en: 'en-GB' };\n    var sectorLabel = chcProfile.sector ? t('chc_sector_' + chcProfile.sector) : '';\n    var sizeLabel = chcProfile.size ? t('chc_size_' + chcProfile.size) : '';\n    var subParts = [chcLead.name, [sectorLabel, sizeLabel].filter(Boolean).join(' \u00b7 '), new Date().toLocaleDateString(localeMap[chcLang()] || 'en-GB')].filter(Boolean);\n    document.getElementById('cc-chc-report-title').textContent = chcLead.company || '';\n    document.getElementById('cc-chc-report-sub').textContent = subParts.join(' \u00b7 ');\n\n    var followupText = document.getElementById('cc-chc-followup-text');\n    if (followupText) followupText.innerHTML = tpl('chc_followup_text', { email: chcLead.email || '' });\n\n    \/\/ NOM\u00c9S pinta pantalla \u2014 no envia res a la API. Aquesta funci\u00f3 tamb\u00e9 es\n    \/\/ torna a cridar en canviar d'idioma estant a la pantalla de l'informe\n    \/\/ (veure window.ccSetLang m\u00e9s avall), i mai ha de disparar un enviament\n    \/\/ per aquest motiu. L'enviament real es fa una \u00fanica vegada, des de\n    \/\/ chcSubmitLead() (i, per a reintents, des de chcRetrySend()).\n    chcTrack('chc_report_viewed', { chc_score: score, chc_risk_level: risk, chc_sector: chcProfile.sector, chc_company_size: chcProfile.size });\n  }\n\n  \/\/ Re-render the CHC section's dynamic (non data-i18n) parts whenever the\n  \/\/ language switcher fires, without modifying the existing ccSetLang.\n  if (typeof window.ccSetLang === 'function') {\n    var chcOriginalSetLang = window.ccSetLang;\n    window.ccSetLang = function(lang) {\n      chcOriginalSetLang(lang);\n      chcUpdateProgress(chcCurrentStep);\n      if (CHC_STEPS[chcCurrentStep] === 'report' && chcLead.company) chcRenderReport();\n    };\n  }\n\n  chcUpdateProgress(0);\n})();\n<\/script>\n\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>CONCENTER.IO \u2014 Managed Detection &amp; Response | Enterprise Cybersecurity Platform Skip to main content ENG ESP CAT Managed Cybersecurity Platform Protect Your Business Before Threats Become Incidents AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses. Book a Demo See Platform 99.9%Threat Detection Accuracy 24\/7Continuous Monitoring &lt;5minResponse Time Security Operations Center [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1103","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sisp-corp.com\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -\" \/>\n<meta property=\"og:description\" content=\"CONCENTER.IO \u2014 Managed Detection &amp; Response | Enterprise Cybersecurity Platform Skip to main content ENG ESP CAT Managed Cybersecurity Platform Protect Your Business Before Threats Become Incidents AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses. Book a Demo See Platform 99.9%Threat Detection Accuracy 24\/7Continuous Monitoring &lt;5minResponse Time Security Operations Center [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sisp-corp.com\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-22T11:14:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/\",\"url\":\"https:\\\/\\\/www.sisp-corp.com\\\/\",\"name\":\"CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pro.concenter.io\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/CONCENTER_Logo_FRAMED.png\",\"datePublished\":\"2024-08-31T10:52:30+00:00\",\"dateModified\":\"2026-08-22T11:14:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sisp-corp.com\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pro.concenter.io\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/CONCENTER_Logo_FRAMED.png\",\"contentUrl\":\"https:\\\/\\\/pro.concenter.io\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/CONCENTER_Logo_FRAMED.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sisp-corp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CONCENTER.IO &#8211; Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sisp-corp.com\\\/#website\",\"url\":\"https:\\\/\\\/www.sisp-corp.com\\\/\",\"name\":\"\",\"description\":\"concenter.io - CyberSecurity SMEs Protection\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sisp-corp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sisp-corp.com\/","og_locale":"en_US","og_type":"article","og_title":"CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -","og_description":"CONCENTER.IO \u2014 Managed Detection &amp; Response | Enterprise Cybersecurity Platform Skip to main content ENG ESP CAT Managed Cybersecurity Platform Protect Your Business Before Threats Become Incidents AI-powered cybersecurity monitoring, threat detection, automated response and operational visibility for modern businesses. Book a Demo See Platform 99.9%Threat Detection Accuracy 24\/7Continuous Monitoring &lt;5minResponse Time Security Operations Center [&hellip;]","og_url":"https:\/\/www.sisp-corp.com\/","article_modified_time":"2026-08-22T11:14:12+00:00","og_image":[{"url":"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sisp-corp.com\/","url":"https:\/\/www.sisp-corp.com\/","name":"CONCENTER.IO - Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence -","isPartOf":{"@id":"https:\/\/www.sisp-corp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sisp-corp.com\/#primaryimage"},"image":{"@id":"https:\/\/www.sisp-corp.com\/#primaryimage"},"thumbnailUrl":"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png","datePublished":"2024-08-31T10:52:30+00:00","dateModified":"2026-08-22T11:14:12+00:00","breadcrumb":{"@id":"https:\/\/www.sisp-corp.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sisp-corp.com\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisp-corp.com\/#primaryimage","url":"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png","contentUrl":"https:\/\/pro.concenter.io\/wp-content\/uploads\/2024\/02\/CONCENTER_Logo_FRAMED.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sisp-corp.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sisp-corp.com\/"},{"@type":"ListItem","position":2,"name":"CONCENTER.IO &#8211; Real-time Threat Detection &amp; Blocking + Operational Visibility + Technology Independence"}]},{"@type":"WebSite","@id":"https:\/\/www.sisp-corp.com\/#website","url":"https:\/\/www.sisp-corp.com\/","name":"","description":"concenter.io - CyberSecurity SMEs Protection","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sisp-corp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/pages\/1103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1103"}],"version-history":[{"count":231,"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/pages\/1103\/revisions"}],"predecessor-version":[{"id":1430,"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=\/wp\/v2\/pages\/1103\/revisions\/1430"}],"wp:attachment":[{"href":"https:\/\/www.sisp-corp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}