{"id":27746,"date":"2026-08-02T12:37:23","date_gmt":"2026-08-02T09:37:23","guid":{"rendered":"https:\/\/ovza.com\/?page_id=27746"},"modified":"2026-08-13T15:29:19","modified_gmt":"2026-08-13T12:29:19","slug":"comparacion-de-empresas-offshore","status":"publish","type":"page","link":"https:\/\/ovza.com\/es\/tools\/offshore-company-comparison\/","title":{"rendered":"Comparaci\u00f3n de empresas offshore"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27746\" class=\"elementor elementor-27746\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5f0fe01 e-con-full e-flex e-con e-child\" data-id=\"5f0fe01\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a0d8f5b elementor-widget elementor-widget-html\" data-id=\"a0d8f5b\" 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<!--\r\n  OVZA HERO SECTION \u2014 STANDALONE WIDGET\r\n  Hero markup\/CSS extracted from the \"perfect\" reference build\r\n  (comparison-table-with-hero.html) supplied directly, converted from its\r\n  JS-rendered \/ shared-store form into plain static HTML \u2014 this widget has\r\n  no script tag of its own for the hero content, no store, nothing shared\r\n  with the Comparison\/Quiz widget except the shared window.ovzaOpenQuiz\r\n  handoff below.\r\n\r\n  \"Not sure? Take the quiz\" button:\r\n    id=\"hero-quiz-cta\" \u2014 no click handler here, on purpose. Whatever\r\n    already targets this ID elsewhere on the page owns that behavior.\r\n\r\n  MOBILE MEDIA: per explicit instruction, the mobile illustration has NO\r\n  background box \/ rounded placeholder behind it \u2014 just the image itself,\r\n  same as the reference file's own mobile CSS (which never gave\r\n  .ovza-hero__media a background on mobile either).\r\n\r\n  HOW TO USE IN ELEMENTOR\r\n  1. Add an \"HTML\" widget where you want the Hero.\r\n  2. Paste this entire file's content into that widget.\r\n  3. Make sure \"Poppins\" is loaded on your site (Google Fonts) \u2014 see the\r\n     @import below the section markup. Delete it if your theme already\r\n     loads Poppins.\r\n-->\r\n\r\n<section class=\"ovza-hero\" id=\"ovza-hero-root\">\r\n  <div class=\"ovza-hero__inner\">\r\n    <div class=\"ovza-hero__content\">\r\n      <p class=\"ovza-hero__eyebrow\">Jurisdiction comparison<\/p>\r\n      <h1 id='eighteen-jurisdictions-one-right-answer-for-your-business'  id=\"boomdevs_1\" class=\"ovza-hero__title\">Eighteen jurisdictions.<br \/>One <span class=\"ovza-hero__title-accent\">right answer<\/span> for your business.<\/h1>\r\n      <p class=\"ovza-hero__subtitle\">Compare costs, taxation, privacy and compliance side by side \u2014 or answer four questions and we'll narrow it down for you.<\/p>\r\n      <div class=\"ovza-hero__actions\">\r\n        <a class=\"ovza-hero__btn-primary\" href=\"#ovza-cmp-root\">Compare jurisdictions<\/a>\r\n        <button type=\"button\" class=\"ovza-hero__btn-secondary ovza-quiz-trigger\" id=\"ovza-quiz-start-btn\">Not sure? Take the quiz<\/button>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"ovza-hero__media\">\r\n      <img fetchpriority=\"high\" decoding=\"async\"\r\n        class=\"ovza-hero__media-img\"\r\n        src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/07\/comparison-countries-1.png\"\r\n        width=\"700\"\r\n        height=\"700\"\r\n        fetchpriority=\"high\"\r\n        alt=\"offshore company comparison\"\r\n      \/>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700&display=swap');\r\n\r\n  #ovza-hero-root, #ovza-hero-root * { box-sizing: border-box; }\r\n\r\n  .ovza-hero {\r\n    --ink: #0B1113;\r\n    --label: #37474F;\r\n    --line: #E6E8E6;\r\n    --green: #34BE86;\r\n    --green-deep: #02542D;\r\n    --stat-bg: #FAFAF8;\r\n\r\n    position: relative;\r\n    overflow: hidden;\r\n    padding: 120px 120px 120px 120px;\r\n    background:\r\n      radial-gradient(120% 130% at 82% 8%, rgba(52,190,134,0.24) 0%, rgba(52,190,134,0) 58%),\r\n      linear-gradient(180deg, #EAF8F1 0%, #FFFFFF 92%);\r\n  }\r\n\r\n  .ovza-hero__inner {\r\n    max-width: 1440px; margin: 0 auto;\r\n    display: flex; align-items: center; justify-content: space-between;\r\n    gap: 64px;\r\n  }\r\n\r\n  .ovza-hero__content {\r\n    display: flex; flex-direction: column; align-items: flex-start;\r\n    gap: 22px;\r\n    max-width: 592px; flex: 1 1 460px; min-width: 0;\r\n  }\r\n\r\n  .ovza-hero__eyebrow {\r\n    margin: 0; font-family: 'Poppins', sans-serif; font-weight: 700;\r\n    font-size: 11px; letter-spacing: 1.54px; text-transform: uppercase;\r\n    color: var(--green-deep);\r\n  }\r\n\r\n  .ovza-hero__title {\r\n    margin: 0; font-family: 'Poppins', sans-serif; font-weight: 600;\r\n    font-size: 60px; line-height: 1.2; letter-spacing: -2.16px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-hero__title-accent { color: var(--green); }\r\n\r\n  .ovza-hero__subtitle {\r\n    margin: 0; font-family: 'Poppins', sans-serif; font-weight: 300;\r\n    font-size: 18px; line-height: 30.6px; letter-spacing: -0.16px;\r\n    color: var(--label); max-width: 504px;\r\n  }\r\n\r\n  .ovza-hero__actions { display: flex; gap: 10px; flex-wrap: wrap; }\r\n\r\n  .ovza-hero__btn-primary,\r\n  .ovza-hero__btn-secondary {\r\n    all: unset; box-sizing: border-box; cursor: pointer;\r\n    display: inline-flex; align-items: center; justify-content: center;\r\n    padding: 12px 20px; border-radius: 8px;\r\n    font-family: 'Poppins', sans-serif; font-weight: 500; font-size: 14.5px;\r\n    letter-spacing: -0.16px; white-space: nowrap;\r\n  }\r\n  .ovza-hero__btn-primary { background: var(--green); color: #fff; }\r\n  .ovza-hero__btn-primary:hover { background: #2aa974; }\r\n  .ovza-hero__btn-secondary {\r\n    background: #fff; color: var(--ink);\r\n    border: 1px solid var(--line); padding: 13px 21px;\r\n  }\r\n  .ovza-hero__btn-secondary:hover { background: var(--stat-bg); }\r\n\r\n  .ovza-hero__media {\r\n    flex: 1 1 380px; min-width: 0;\r\n    display: flex; align-items: center; justify-content: center;\r\n  }\r\n  .ovza-hero__media-img {\r\n    width: 100%; max-width: 460px; height: auto; display: block;max-width: 85% !important;\r\n  }\r\n\r\n    @media (max-width: 1400px) {\r\n        .ovza-hero__media-img {\r\n    max-width: 100% !important;\r\n        }\r\n        \r\n  @media (max-width: 900px) {\r\n    .ovza-hero { padding: 40px 20px 32px; }\r\n    .ovza-hero__inner { flex-direction: column; align-items: stretch; gap: 28px; }\r\n    .ovza-hero__content { max-width: 100%; gap: 16px; flex: 0 0 auto; }\r\n    .ovza-hero__title { font-size: 32px; letter-spacing: -1px; }\r\n    .ovza-hero__subtitle { font-size: 14.5px; line-height: 24px; max-width: 100%; }\r\n    .ovza-hero__actions { flex-direction: column; align-items: stretch; width: 100%; }\r\n    .ovza-hero__btn-primary, .ovza-hero__btn-secondary { width: 100%; padding: 13px 20px; }\r\n    \/* No background\/border-radius here \u2014 image sits directly on the page\r\n       background on mobile, per explicit instruction (no placeholder box). *\/\r\n    .ovza-hero__media { order: 1; flex: 0 0 auto; }\r\n    .ovza-hero__media-img { max-width: 320px; margin: 0 auto; }\r\n  }\r\n<\/style>\r\n<script>\r\n(function () {\r\n  function openQuiz() {\r\n    if (typeof window.ovzaOpenQuiz === 'function') {\r\n      window.ovzaOpenQuiz();\r\n    }\r\n  }\r\n\r\n  \/\/ Multiple distinct IDs -> loop and attach to each\r\n  ['ovza-quiz-start-btn', 'ovza-quiz-start-btn-2', 'ovza-quiz-start-btn-3'].forEach(function (id) {\r\n    var btn = document.getElementById(id);\r\n    if (btn) btn.addEventListener('click', openQuiz);\r\n  });\r\n\r\n  var step1 = document.getElementById('ovza-quiz-step-1');\r\n  if (step1) {\r\n    step1.addEventListener('click', openQuiz);\r\n    step1.addEventListener('keydown', function (e) {\r\n      if (e.key === 'Enter' || e.key === ' ') {\r\n        e.preventDefault();\r\n        openQuiz();\r\n      }\r\n    });\r\n  }\r\n})();\r\n<\/script>\r\n<script>\r\n(function () {\r\n  function openQuiz() {\r\n    if (typeof window.ovzaOpenQuiz === 'function') {\r\n      window.ovzaOpenQuiz();\r\n    }\r\n  }\r\n\r\n  document.querySelectorAll('.ovza-quiz-trigger').forEach(function (btn) {\r\n    btn.addEventListener('click', openQuiz);\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5715ecb e-con-full e-flex e-con e-child\" data-id=\"5715ecb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ae15545 elementor-widget elementor-widget-html\" data-id=\"ae15545\" 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<!--\r\n  OVZA COMPARISON TABLE + COUNTRY PICKER\r\n  Built from Figma Dev Mode specs (Comparison Table \/ Desktop 8827:761,\r\n  Comparison Table \/ Mobile 9007:1034, Country Picker \/ Modal 8827:982).\r\n\r\n  ARCHITECTURE: this widget is built following the OVZA project's Domain\r\n  Model \/ State Model \/ Renderer separation (see PROJECT_CONTEXT.md,\r\n  ARCHITECTURE decisions ADR-001 through ADR-012). Everything is currently\r\n  inlined into one script tag per the \"stay in one HTML widget first\"\r\n  decision \u2014 the code is organized in clearly delimited sections so it can\r\n  be split into separate enqueued files later with no logic changes, only\r\n  moving section boundaries into file boundaries.\r\n\r\n  HOW TO USE IN ELEMENTOR\r\n  1. Add an \"HTML\" widget where you want this section.\r\n  2. Paste this entire file's content into that widget.\r\n  3. Make sure \"Plus Jakarta Sans\" is loaded on your site (Google Fonts). If\r\n     your theme already loads it, delete the @import line below.\r\n\r\n  KNOWN GAPS (see conversation history for full detail \u2014 flagged, not\r\n  silently resolved):\r\n  - Only 3 countries (BVI, Costa Rica, Bahamas) have real comparison-table\r\n    content; the rest have scoring data only. They'll appear in the table\r\n    once real content is supplied in the domain model's COUNTRIES array.\r\n  - Full region assignment for all 18 countries in the Picker is an\r\n    engineering placeholder (approved as such).\r\n  - No distinct mobile \"Add country\" affordance was shown in Figma \u2014 this\r\n    build reuses the desktop dashed-pill style as a placeholder pending\r\n    design review.\r\n  - Empty-search-results state in the picker was designed by engineering\r\n    (no Figma frame existed for it, explicitly approved as an exception).\r\n-->\r\n\r\n<div class=\"ovza-cmp-root\" id=\"ovza-cmp-root\">\r\n  <div class=\"ovza-cmp-wrap\" data-ovza-slot=\"table\"><\/div>\r\n<\/div>\r\n<!-- Picker backdrop is created dynamically by JS at runtime \u2014 see mountOvzaComparison() -->\r\n\r\n<style>\r\n  @import url(\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800&display=swap\");\r\n\r\n  #ovza-cmp-root,\r\n  #ovza-cmp-root *,\r\n  .ovza-cmp__picker-backdrop,\r\n  .ovza-cmp__picker-backdrop * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .ovza-cmp-root,\r\n  .ovza-cmp__picker-backdrop {\r\n    --ink: #0b1113;\r\n    --body: #5a6a72;\r\n    --label: #37474f;\r\n    --line: #e6e8e6;\r\n    --green: #34be86;\r\n    --green-deep: #02542d;\r\n    --green-bg: #e8f7ef;\r\n    --neutral-bg: #f1f3f2;\r\n    --neutral-text: #4a5a55;\r\n    --placeholder-bg: #fdf6e7;\r\n    --placeholder-border: #dca53e;\r\n    --placeholder-text: #7a5b14;\r\n    --stat-bg: #fafaf8;\r\n  }\r\n\r\n  .ovza-cmp-root {\r\n    font-family: \"Plus Jakarta Sans\", sans-serif !important;\r\n    background: #fff;\r\n    padding: 0px 120px 70px 120px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-cmp-wrap {\r\n    max-width: 1440px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  \/* ============ DESKTOP PANEL ============ *\/\r\n  .ovza-cmp__panel {\r\n    background: #fff;\r\n    border: 1px solid var(--line);\r\n    border-radius: 20px;\r\n    box-shadow: 0px 24px 48px -24px rgba(11, 17, 19, 0.14);\r\n    overflow: hidden;\r\n  }\r\n\r\n  .ovza-cmp__panel-bar {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    border-bottom: 1px solid var(--line);\r\n    padding: 28px 36px;\r\n  }\r\n\r\n  .ovza-cmp__title-block {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n  }\r\n  .ovza-cmp__title {\r\n    margin: 0;\r\n    font-weight: 600;\r\n    font-size: 22px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__subtitle {\r\n    margin: 4px 0 0;\r\n    font-weight: 400;\r\n    font-size: 14px;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__add-block {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n  .ovza-cmp__add-btn {\r\n    all: unset;\r\n    cursor: pointer;\r\n    border: 1.5px dashed var(--green);\r\n    border-radius: 999px;\r\n    padding: 9px 18px;\r\n    font-weight: 600;\r\n    font-size: 13.5px;\r\n    color: var(--green-deep);\r\n    white-space: nowrap;\r\n  }\r\n  .ovza-cmp__add-btn:hover {\r\n    background: var(--green-bg);\r\n  }\r\n  .ovza-cmp__cap-note {\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: var(--body);\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .ovza-cmp__panel-bar-controls {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 20px;\r\n  }\r\n\r\n  \/* \"Show all characteristics\" toggle \u2014 no Figma frame existed for this\r\n     control (confirmed with Product as an approved exception); built as a\r\n     standard iOS-style switch matching the existing green accent system. *\/\r\n  .ovza-cmp__toggle {\r\n    all: unset;\r\n    cursor: pointer;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n  .ovza-cmp__toggle--full {\r\n    width: 100%;\r\n    justify-content: space-between;\r\n  }\r\n  .ovza-cmp__toggle-label {\r\n    font-family: \"Plus Jakarta Sans\", sans-serif;\r\n    font-weight: 500;\r\n    font-size: 13px;\r\n    color: var(--body);\r\n    white-space: nowrap;\r\n  }\r\n  .ovza-cmp__toggle-track {\r\n    position: relative;\r\n    width: 34px;\r\n    height: 20px;\r\n    border-radius: 999px;\r\n    background: var(--line);\r\n    flex-shrink: 0;\r\n    transition: background 0.2s ease;\r\n  }\r\n  .ovza-cmp__toggle[aria-pressed=\"true\"] .ovza-cmp__toggle-track {\r\n    background: var(--green);\r\n  }\r\n  .ovza-cmp__toggle-thumb {\r\n    position: absolute;\r\n    top: 2px;\r\n    left: 2px;\r\n    width: 16px;\r\n    height: 16px;\r\n    border-radius: 999px;\r\n    background: #fff;\r\n    box-shadow: 0 1px 3px rgba(11, 17, 19, 0.25);\r\n    transition: transform 0.2s ease;\r\n  }\r\n  .ovza-cmp__toggle[aria-pressed=\"true\"] .ovza-cmp__toggle-thumb {\r\n    transform: translateX(14px);\r\n  }\r\n\r\n  \/* Header row + all data rows live inside ONE shared horizontal scroll\r\n     container (.ovza-cmp__scroll-wrap) so they scroll in sync as a single\r\n     unit \u2014 per ADR-004, up to 4 columns should scroll rather than squeeze\r\n     on narrower desktop\/laptop screens.\r\n\r\n     Uses CSS Grid with ONE shared column template (set via a custom\r\n     property on this wrapper, inherited by every row below) instead of\r\n     flexbox per-row sizing. This guarantees byte-identical column\r\n     boundaries across the header row and every data row \u2014 flexbox's\r\n     per-row distribution computation was the root cause of recurring\r\n     alignment drift; grid tracks defined once and shared eliminate that\r\n     class of bug entirely, rather than patching it incrementally.\r\n     minmax(260px, 1fr) lets columns grow to fill extra width when there's\r\n     room (e.g. only 2-3 selected on a wide screen) while never shrinking\r\n     below 260px \u2014 forcing horizontal scroll instead once more columns are\r\n     added than fit. *\/\r\n  .ovza-cmp__scroll-wrap {\r\n    overflow-x: auto;\r\n  }\r\n\r\n  .ovza-cmp__header-row,\r\n  .ovza-cmp__row {\r\n    display: grid;\r\n    grid-template-columns: var(\r\n      --ovza-cmp-grid-template,\r\n      210px repeat(3, minmax(260px, 1fr))\r\n    );\r\n    min-width: fit-content;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__row {\r\n    border-top: 1px solid var(--line);\r\n    background: #fff;\r\n  }\r\n\r\n  .ovza-cmp__corner-cell {\r\n    display: flex;\r\n    align-items: flex-end;\r\n    padding: 28px 16px 22px 36px;\r\n    position: sticky;\r\n    left: 0;\r\n    z-index: 2;\r\n    background: #fff;\r\n  }\r\n  .ovza-cmp__corner-label {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 11px;\r\n    letter-spacing: 1.54px;\r\n    text-transform: uppercase;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__country-header {\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: space-between;\r\n    align-items: flex-start;\r\n    gap: 14px;\r\n    padding: 24px 24px 22px;\r\n    background: #fff;\r\n    min-width: 0;\r\n    border-left: 1px solid var(--line);\r\n  }\r\n  .ovza-cmp__country-header-top {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 14px;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__country-header-bottom {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 14px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-cmp__name-row {\r\n    display: flex;\r\n    align-items: baseline;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n    gap: 8px;\r\n  }\r\n  .ovza-cmp__country-name {\r\n    margin: 0;\r\n    font-weight: 600;\r\n    font-size: 17px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__change-link {\r\n    all: unset;\r\n    cursor: pointer;\r\n    font-weight: 500;\r\n    font-size: 12px;\r\n    color: var(--body);\r\n    text-decoration: underline;\r\n    white-space: nowrap;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .ovza-cmp__entity-type {\r\n    margin: 0;\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__stats {\r\n    display: flex;\r\n    gap: 8px;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__stat-card {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    background: var(--stat-bg);\r\n    border: 1px solid var(--line);\r\n    border-radius: 8px;\r\n    padding: 9px 10px 8px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 2px;\r\n  }\r\n  .ovza-cmp__stat-value {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 15px;\r\n    color: var(--ink);\r\n    word-break: break-word;\r\n  }\r\n  .ovza-cmp__stat-label {\r\n    margin: 0;\r\n    font-weight: 500;\r\n    font-size: 9.5px;\r\n    letter-spacing: 0.665px;\r\n    text-transform: uppercase;\r\n    color: var(--body);\r\n    overflow-wrap: break-word;\r\n    word-break: break-word;\r\n  }\r\n\r\n  .ovza-cmp__cta {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 100%;\r\n    padding: 11px 24px;\r\n    background: var(--green);\r\n    \/* Fixed radius (not 999px), same reasoning as .ovza-cmp__cta--m \u2014 see\r\n       that rule's comment. Calculated for this button's larger desktop\r\n       padding\/font-size. *\/\r\n    border-radius: 21px;\r\n    box-shadow: 0px 8px 20px -10px rgba(52, 190, 134, 0.45);\r\n    font-weight: 600;\r\n    font-size: 14px;\r\n    color: #fff;\r\n    text-decoration: none;\r\n  }\r\n  .ovza-cmp__cta:hover {\r\n    background: #2aa974;\r\n  }\r\n\r\n  .ovza-cmp__guide-link {\r\n    font-weight: 500;\r\n    font-size: 12.5px;\r\n    color: var(--body);\r\n    text-align: center;\r\n    width: 100%;\r\n    text-decoration: none;\r\n  }\r\n  .ovza-cmp__guide-link:hover {\r\n    text-decoration: underline;\r\n  }\r\n\r\n  .ovza-cmp__label-cell {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 6px;\r\n    padding: 17px 16px 17px 32px;\r\n    position: sticky;\r\n    left: 0;\r\n    z-index: 1;\r\n    background: #fff;\r\n  }\r\n  .ovza-cmp__row-label {\r\n    margin: 0;\r\n    font-weight: 600;\r\n    font-size: 14px;\r\n    color: var(--label);\r\n  }\r\n\r\n  .ovza-cmp__value-cell {\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 17px 24px;\r\n    min-width: 0;\r\n    border-left: 1px solid var(--line);\r\n  }\r\n  \/* CORRECTED: earlier this was a sibling selector that deliberately skipped\r\n     the first cell, based on an incorrect assumption that the header row's\r\n     first column had no border. Direct inspection of the actual Figma\r\n     output confirms \"Value Cell 1\" and the first Country Header instance\r\n     BOTH explicitly have border-l \u2014 every column gets a left divider,\r\n     including the first, right after the label column. *\/\r\n\r\n  .ovza-cmp__pill {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 7px;\r\n    padding: 5px 13px;\r\n    border-radius: 999px;\r\n    font-weight: 600;\r\n    font-size: 13px;\r\n  }\r\n  .ovza-cmp__pill--positive {\r\n    background: var(--green-bg);\r\n    color: var(--green-deep);\r\n  }\r\n  .ovza-cmp__pill--neutral {\r\n    background: var(--neutral-bg);\r\n    color: var(--neutral-text);\r\n  }\r\n  .ovza-cmp__pill-empty {\r\n    color: var(--body);\r\n    font-size: 13px;\r\n  }\r\n\r\n  .ovza-cmp__meter {\r\n    display: inline-flex;\r\n    gap: 3px;\r\n  }\r\n  .ovza-cmp__meter i {\r\n    width: 6px;\r\n    height: 6px;\r\n    border-radius: 999px;\r\n    display: block;\r\n    background: currentColor;\r\n    opacity: 0.35;\r\n  }\r\n  .ovza-cmp__meter--strong i {\r\n    opacity: 1;\r\n  }\r\n  .ovza-cmp__meter--strong i:nth-child(1) {\r\n    opacity: 1;\r\n  }\r\n  .ovza-cmp__meter--strong i:nth-child(2) {\r\n    opacity: 1;\r\n  }\r\n  .ovza-cmp__meter--strong i:nth-child(3) {\r\n    opacity: 1;\r\n  }\r\n  .ovza-cmp__meter--moderate i:nth-child(3) {\r\n    opacity: 0.35;\r\n  }\r\n\r\n  .ovza-cmp__dot {\r\n    width: 6px;\r\n    height: 6px;\r\n    border-radius: 999px;\r\n    display: inline-block;\r\n  }\r\n  .ovza-cmp__dot--positive {\r\n    background: var(--green-deep);\r\n  }\r\n  .ovza-cmp__dot--neutral {\r\n    background: var(--neutral-text);\r\n  }\r\n  .ovza-cmp__lock {\r\n    font-size: 10px;\r\n    line-height: 1;\r\n  }\r\n  .ovza-cmp__pill-label {\r\n    line-height: normal;\r\n  }\r\n\r\n  .ovza-cmp__placeholder-tag {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    background: var(--placeholder-bg);\r\n    border: 1px dashed var(--placeholder-border);\r\n    border-radius: 5px;\r\n    padding: 3px 7px;\r\n    font-weight: 700;\r\n    font-size: 9.5px;\r\n    letter-spacing: 0.76px;\r\n    color: var(--placeholder-text);\r\n  }\r\n\r\n  .ovza-cmp__no-data-notice {\r\n    padding: 32px 36px;\r\n    color: var(--body);\r\n    font-size: 14px;\r\n    border-top: 1px solid var(--line);\r\n  }\r\n\r\n  .ovza-cmp__footer {\r\n    background: var(--stat-bg);\r\n    border-top: 1px solid var(--line);\r\n    padding: 18px 36px 22px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 7px;\r\n  }\r\n  .ovza-cmp__footer p {\r\n    margin: 0;\r\n    font-weight: 400;\r\n    font-size: 13px;\r\n    color: var(--body);\r\n  }\r\n\r\n  \/* ============ MOBILE PANEL ============ *\/\r\n  .ovza-cmp__panel--m {\r\n    border-radius: 16px;\r\n    box-shadow: 0px 16px 36px -18px rgba(11, 17, 19, 0.12);\r\n  }\r\n  .ovza-cmp__panel-bar--m {\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n    gap: 10px;\r\n    padding: 20px 20px 16px;\r\n  }\r\n  .ovza-cmp__title--m {\r\n    font-size: 18px;\r\n  }\r\n  .ovza-cmp__subtitle--m {\r\n    font-size: 12.5px;\r\n    margin-top: 0;\r\n  }\r\n\r\n  \/* The ENTIRE mobile table (header row + every label-strip\/cells pair)\r\n     lives inside one shared scroll container, matching desktop's pattern.\r\n     This replaces an earlier per-row-scroll + JS-sync approach: dragging\r\n     from anywhere in the table (including a row-label strip, not just a\r\n     cell) now scrolls everything together as one real scroll region,\r\n     because it genuinely is one \u2014 not three separately-scrolling elements\r\n     kept in sync after the fact. Scrollbar is intentionally visible (not\r\n     hidden) as a hint to the user that more columns exist off-screen. *\/\r\n  .ovza-cmp__scroll-wrap-m {\r\n    overflow-x: auto;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .ovza-cmp__header-row-m,\r\n  .ovza-cmp__cells-m {\r\n    display: grid;\r\n    grid-template-columns: var(\r\n      --ovza-cmp-grid-template-m,\r\n      repeat(2, minmax(175px, 1fr))\r\n    );\r\n    min-width: fit-content;\r\n  }\r\n\r\n  .ovza-cmp__country-header-m {\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: space-between;\r\n    gap: 10px;\r\n    padding: 16px 16px 14px;\r\n    min-width: 0;\r\n    border-left: 1px solid var(--line);\r\n  }\r\n  .ovza-cmp__country-header-m-top {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n  .ovza-cmp__country-header-m-bottom {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n  }\r\n  .ovza-cmp__country-name-m {\r\n    margin: 0;\r\n    font-weight: 600;\r\n    font-size: 15px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__entity-type-m {\r\n    margin: 0;\r\n    font-weight: 400;\r\n    font-size: 10.5px;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__facts {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n    font-size: 11.5px;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__fact-row {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__fact-row span {\r\n    color: var(--body);\r\n    font-weight: 400;\r\n  }\r\n  .ovza-cmp__fact-row strong {\r\n    color: var(--ink);\r\n    font-weight: 700;\r\n  }\r\n\r\n  .ovza-cmp__cta--m {\r\n    padding: 9px;\r\n    font-size: 12.5px;\r\n    \/* Fixed radius (not 999px) calculated to equal ~half this button's\r\n       normal single-line height \u2014 visually indistinguishable from a full\r\n       pill at that height (border-radius clamps at 50% of the smaller\r\n       dimension either way), but degrades gracefully to a normal rounded\r\n       rectangle instead of a distorted \"blob\" if longer translated text\r\n       ever wraps to 2 lines. *\/\r\n    border-radius: 18px;\r\n  }\r\n  .ovza-cmp__guide-link--m {\r\n    font-size: 10.5px;\r\n  }\r\n\r\n  .ovza-cmp__row-label-strip-m {\r\n    display: grid;\r\n    grid-template-columns: var(\r\n      --ovza-cmp-grid-template-m,\r\n      repeat(2, minmax(150px, 1fr))\r\n    );\r\n    background: var(--stat-bg);\r\n    border-top: 1px solid var(--line);\r\n  }\r\n  .ovza-cmp__row-label-strip-m p {\r\n    grid-column: 1 \/ -1;\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 10.5px;\r\n    letter-spacing: 0.735px;\r\n    color: var(--body);\r\n    padding: 8px 20px;\r\n  }\r\n\r\n  .ovza-cmp__cell-m {\r\n    border-top: 1px solid var(--line);\r\n    padding: 12px 12px 12px 16px;\r\n    display: flex;\r\n    align-items: center;\r\n    min-width: 0;\r\n    border-left: 1px solid var(--line);\r\n  }\r\n\r\n  .ovza-cmp__pill--sm {\r\n    padding: 4px 10px;\r\n    font-size: 11.5px;\r\n    gap: 6px;\r\n  }\r\n\r\n  .ovza-cmp__add-block--m {\r\n    padding: 0;\r\n    border-top: none;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n  .ovza-cmp__footer--m {\r\n    padding: 14px 20px 18px;\r\n    gap: 6px;\r\n  }\r\n  .ovza-cmp__footer--m p {\r\n    font-size: 11px;\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .ovza-cmp-root {\r\n      padding: 24px 16px 48px;\r\n    }\r\n  }\r\n\r\n  \/* ============ COUNTRY PICKER ============ *\/\r\n  .ovza-cmp__picker-backdrop {\r\n    display: none;\r\n    position: fixed;\r\n    inset: 0;\r\n    background: rgba(11, 17, 19, 0.35);\r\n    \/* Must beat the host site's fixed header, which uses\r\n       z-index: 9999 !important \u2014 confirmed from the live page's own\r\n       custom CSS. 1000 was getting rendered UNDER the sticky header,\r\n       which is exactly what clipped the quiz modal's top bar\/progress\r\n       bar on shorter viewports. *\/\r\n    z-index: 999999;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-family: \"Plus Jakarta Sans\", sans-serif;\r\n  }\r\n  .ovza-cmp__picker-backdrop--active {\r\n    display: flex;\r\n  }\r\n\r\n  .ovza-cmp__picker-modal {\r\n    background: #fff;\r\n    border-radius: 12px;\r\n    box-shadow: 0px 40px 80px -30px rgba(0, 0, 0, 0.35);\r\n    width: 100%;\r\n    max-width: 560px;\r\n    min-height: 420px;\r\n    max-height: 80vh;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .ovza-cmp__picker-header {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    padding: 20px 24px 14px;\r\n    flex-shrink: 0;\r\n  }\r\n  .ovza-cmp__picker-title {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 16px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__picker-close {\r\n    all: unset;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    color: var(--body);\r\n    padding: 4px;\r\n  }\r\n\r\n  .ovza-cmp__picker-search-wrap {\r\n    padding: 0 24px 14px;\r\n    flex-shrink: 0;\r\n  }\r\n  .ovza-cmp__picker-search-field {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    border: 1.5px solid var(--line);\r\n    border-radius: 999px;\r\n    padding: 10px 18px;\r\n  }\r\n  .ovza-cmp__picker-search-field span {\r\n    color: var(--body);\r\n  }\r\n  .ovza-cmp__picker-search-field input {\r\n    all: unset;\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    font-family: \"Plus Jakarta Sans\", sans-serif;\r\n    font-size: 14px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__picker-search-field input::placeholder {\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__picker-list {\r\n    overflow-y: auto;\r\n    padding: 0 12px 16px;\r\n    flex: 1 1 auto;\r\n  }\r\n\r\n  .ovza-cmp__picker-region {\r\n    padding: 14px 14px 6px;\r\n  }\r\n  .ovza-cmp__picker-region p {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 10.5px;\r\n    letter-spacing: 1.26px;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__picker-option {\r\n    all: unset;\r\n    cursor: pointer;\r\n    box-sizing: border-box;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 12px;\r\n    width: 100%;\r\n    padding: 11px 14px;\r\n    border-radius: 10px;\r\n  }\r\n  .ovza-cmp__picker-option:hover {\r\n    background: var(--stat-bg);\r\n  }\r\n  .ovza-cmp__picker-option-name {\r\n    font-weight: 500;\r\n    font-size: 14px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__picker-option--disabled {\r\n    cursor: not-allowed;\r\n  }\r\n  .ovza-cmp__picker-option--disabled .ovza-cmp__picker-option-name {\r\n    opacity: 0.45;\r\n  }\r\n  .ovza-cmp__picker-option--disabled:hover {\r\n    background: none;\r\n  }\r\n\r\n  .ovza-cmp__comparing-tag {\r\n    background: var(--green-bg);\r\n    color: var(--green-deep);\r\n    font-weight: 700;\r\n    font-size: 9.5px;\r\n    letter-spacing: 0.475px;\r\n    padding: 3px 10px;\r\n    border-radius: 999px;\r\n    text-transform: uppercase;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .ovza-cmp__picker-empty {\r\n    padding: 48px 24px;\r\n    text-align: center;\r\n  }\r\n  .ovza-cmp__picker-empty-icon {\r\n    font-size: 28px;\r\n    margin: 0 0 8px;\r\n  }\r\n  .ovza-cmp__picker-empty-title {\r\n    margin: 0 0 4px;\r\n    font-weight: 600;\r\n    font-size: 14px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__picker-empty-text {\r\n    margin: 0;\r\n    font-weight: 400;\r\n    font-size: 13px;\r\n    color: var(--body);\r\n  }\r\n\r\n  \/* Mobile picker: full-screen bottom sheet, per Business Rules *\/\r\n  @media (max-width: 900px) {\r\n    .ovza-cmp__picker-backdrop {\r\n      align-items: flex-end;\r\n    }\r\n    .ovza-cmp__picker-modal {\r\n      width: 100%;\r\n      max-width: 100%;\r\n      min-height: 60vh;\r\n      max-height: 85vh;\r\n      border-radius: 20px 20px 0 0;\r\n      animation: ovzaSlideUp 0.3s ease-out;\r\n    }\r\n  }\r\n\r\n  @keyframes ovzaSlideUp {\r\n    from {\r\n      transform: translateY(100%);\r\n    }\r\n    to {\r\n      transform: translateY(0);\r\n    }\r\n  }\r\n\r\n  \/* ============ RECOMMENDATION BANNER ============ *\/\r\n  .ovza-cmp__banner-wrap {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 14px;\r\n  }\r\n\r\n  .ovza-cmp__banner {\r\n    background: #e8f7ef;\r\n    border: 1px solid #d3eedf;\r\n    border-radius: 12px;\r\n    padding: 16px 28px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    font-family: \"Plus Jakarta Sans\", sans-serif;\r\n  }\r\n  .ovza-cmp__banner-left {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 12px;\r\n  }\r\n  .ovza-cmp__banner-badge {\r\n    background: var(--green);\r\n    color: #fff;\r\n    font-weight: 700;\r\n    font-size: 10px;\r\n    letter-spacing: 0.6px;\r\n    padding: 4px 12px;\r\n    border-radius: 999px;\r\n    white-space: nowrap;\r\n  }\r\n  .ovza-cmp__banner-message {\r\n    margin: 0;\r\n    font-weight: 500;\r\n    font-size: 14px;\r\n    color: var(--ink);\r\n  }\r\n  .ovza-cmp__banner-actions {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 16px;\r\n  }\r\n  .ovza-cmp__banner-retake,\r\n  .ovza-cmp__banner-dismiss {\r\n    all: unset;\r\n    cursor: pointer;\r\n    font-size: 13px;\r\n    white-space: nowrap;\r\n  }\r\n  .ovza-cmp__banner-retake {\r\n    font-weight: 600;\r\n    color: var(--green-deep);\r\n  }\r\n  .ovza-cmp__banner-dismiss {\r\n    font-weight: 400;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-cmp__banner--m {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 10px;\r\n    padding: 14px 16px;\r\n  }\r\n  .ovza-cmp__banner-row1 {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    width: 100%;\r\n  }\r\n  .ovza-cmp__banner-message--m {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    font-size: 12.5px;\r\n  }\r\n  .ovza-cmp__banner--m .ovza-cmp__banner-actions {\r\n    gap: 16px;\r\n    font-size: 12px;\r\n  }\r\n  .ovza-cmp__banner--m .ovza-cmp__banner-badge {\r\n    font-size: 9px;\r\n    letter-spacing: 0.54px;\r\n    padding: 3px 10px;\r\n  }\r\n\r\n  \/* Completion pulse \u2014 per Dev Annotation #8 (\"panel pulses once ~600ms\") *\/\r\n  @keyframes ovzaPanelPulse {\r\n    0% {\r\n      box-shadow: 0 0 0 0 rgba(52, 190, 134, 0.5);\r\n    }\r\n    50% {\r\n      box-shadow: 0 0 0 8px rgba(52, 190, 134, 0);\r\n    }\r\n    100% {\r\n      box-shadow: 0 0 0 0 rgba(52, 190, 134, 0);\r\n    }\r\n  }\r\n  .ovza-cmp__panel--pulse {\r\n    animation: ovzaPanelPulse 0.6s ease-out;\r\n  }\r\n\r\n  \/* ============ QUIZ OVERLAY ============ *\/\r\n  \/* Every rule below is scoped under #ovza-cmp-quiz-backdrop (not just the\r\n     .ovza-cmp__quiz-backdrop class) \u2014 this boosts specificity to reliably\r\n     beat generic theme rules (e.g. a WordPress theme's default `p` or `a`\r\n     color\/typography styles), which is the likely cause of elements like\r\n     the illustration slot rendering as plain blue link-styled text instead\r\n     of the designed green box. *\/\r\n  #ovza-cmp-quiz-backdrop.ovza-cmp__quiz-backdrop {\r\n    display: none;\r\n    position: fixed;\r\n    inset: 0;\r\n    background: rgba(11, 17, 19, 0.35);\r\n    \/* Must beat the host site's fixed header, which uses\r\n       z-index: 9999 !important \u2014 confirmed directly from the live page's\r\n       own custom CSS (#page-header.l-header { z-index: 9999 !important }).\r\n       The old z-index:1000 here was rendering UNDER that fixed header,\r\n       which is what was clipping\/hiding the modal's top bar and progress\r\n       bar \u2014 worse on shorter viewports where a vertically-centered modal's\r\n       top edge lands underneath the header strip. Not a CSS specificity\r\n       issue at all; this was a stacking-order issue. *\/\r\n    z-index: 999999;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-family: \"Plus Jakarta Sans\", sans-serif;\r\n    overflow-y: auto !important;\r\n    padding: 40px 20px;\r\n    box-sizing: border-box;\r\n  }\r\n  #ovza-cmp-quiz-backdrop.ovza-cmp__quiz-backdrop--active {\r\n    display: flex;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal {\r\n    background: #fff;\r\n    border-radius: 20px;\r\n    box-shadow: 0px 40px 90px -30px rgba(0, 0, 0, 0.4);\r\n    width: 100% !important;\r\n    max-width: 680px !important;\r\n    max-height: 90vh !important;\r\n    overflow-y: auto !important;\r\n    display: flex !important;\r\n    flex-direction: column !important;\r\n    margin: auto;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-topbar {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    padding: 22px 30px 0;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-counter {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 11.5px;\r\n    letter-spacing: 0.92px;\r\n    color: var(--green-deep);\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-close {\r\n    all: unset;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    color: var(--body);\r\n    padding: 4px;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-progress {\r\n    display: flex !important;\r\n    gap: 6px;\r\n    padding: 14px 30px 0;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-segment {\r\n    flex: 1 0 0;\r\n    height: 4px !important;\r\n    min-height: 4px;\r\n    border-radius: 999px;\r\n    background: var(--line) !important;\r\n    display: block !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-segment--done {\r\n    background: var(--green) !important;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-body {\r\n    display: flex;\r\n    gap: 24px;\r\n    align-items: flex-start;\r\n    padding: 30px 30px 0;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-question-wrap {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 8px;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-question {\r\n    margin: 0;\r\n    font-weight: 700;\r\n    font-size: 23px;\r\n    color: var(--ink);\r\n    text-align: left;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-illustration {\r\n    flex-shrink: 0 !important;\r\n    width: 150px !important;\r\n    height: 120px !important;\r\n    min-width: 150px !important;\r\n    min-height: 120px !important;\r\n    max-width: none !important;\r\n    max-height: none !important;\r\n    background: var(--green-bg) !important;\r\n    border-radius: 12px !important;\r\n    border: none !important;\r\n    display: flex !important;\r\n    align-items: center !important;\r\n    justify-content: center !important;\r\n    padding: 0 12px !important;\r\n    box-sizing: border-box !important;\r\n    margin: 0 !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-illustration p {\r\n    margin: 0 !important;\r\n    font-size: 10px !important;\r\n    color: var(--green-deep) !important;\r\n    text-align: center !important;\r\n    text-decoration: none !important;\r\n    background: none !important;\r\n    display: inline !important;\r\n    width: auto !important;\r\n    line-height: normal !important;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answers {\r\n    display: flex !important;\r\n    flex-direction: column !important;\r\n    gap: 12px !important;\r\n    padding: 20px 30px 0 !important;\r\n    width: 100% !important;\r\n    box-sizing: border-box !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer-row {\r\n    display: flex !important;\r\n    gap: 12px !important;\r\n    width: 100% !important;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer {\r\n    all: unset;\r\n    cursor: pointer !important;\r\n    box-sizing: border-box !important;\r\n    flex: 1 1 0 !important;\r\n    min-width: 0 !important;\r\n    display: flex !important;\r\n    align-items: center !important;\r\n    gap: 12px !important;\r\n    border-width: 1.5px !important;\r\n    border-style: solid !important;\r\n    border-color: var(--line) !important;\r\n    border-radius: 12px !important;\r\n    background: #fff !important;\r\n    padding: 16px 20px !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer:hover {\r\n    border-color: #34be86 !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer--selected {\r\n    background: var(--green-bg) !important;\r\n    border-color: var(--green) !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer--notsure {\r\n    width: 100% !important;\r\n    border-style: dashed !important;\r\n    justify-content: center !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer-icon {\r\n    flex-shrink: 0 !important;\r\n    width: 34px !important;\r\n    height: 34px !important;\r\n    min-width: 34px !important;\r\n    min-height: 34px !important;\r\n    background: var(--stat-bg) !important;\r\n    border: 1px solid var(--line) !important;\r\n    border-radius: 9px !important;\r\n    display: flex !important;\r\n    align-items: center !important;\r\n    justify-content: center !important;\r\n    font-size: 15px !important;\r\n    color: #000 !important;\r\n    box-sizing: border-box !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer-label {\r\n    flex: 1 1 0 !important;\r\n    min-width: 0 !important;\r\n    font-weight: 600 !important;\r\n    font-size: 14.5px !important;\r\n    color: var(--ink) !important;\r\n    text-align: left !important;\r\n    text-decoration: none !important;\r\n    background: none !important;\r\n    margin: 0 !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop\r\n    .ovza-cmp__quiz-answer--notsure\r\n    .ovza-cmp__quiz-answer-label {\r\n    flex: 0 1 auto !important;\r\n    font-weight: 500 !important;\r\n    font-size: 14px !important;\r\n    color: var(--body) !important;\r\n    text-align: center !important;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answer-check {\r\n    flex-shrink: 0 !important;\r\n    font-weight: 700 !important;\r\n    font-size: 14px !important;\r\n    color: var(--green-deep) !important;\r\n  }\r\n\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-footer {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    padding: 18px 30px 26px;\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-back {\r\n    all: unset;\r\n    cursor: pointer;\r\n    font-weight: 500;\r\n    font-size: 13.5px;\r\n    color: var(--body);\r\n  }\r\n  #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-privacy {\r\n    margin: 0;\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: var(--body);\r\n    text-align: right;\r\n  }\r\n\r\n  \/* Mobile: full-screen bottom sheet, single-column answers, no illustration *\/\r\n  @media (max-width: 900px) {\r\n    #ovza-cmp-quiz-backdrop.ovza-cmp__quiz-backdrop {\r\n      align-items: flex-end;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m {\r\n      width: 100%;\r\n      max-width: 100%;\r\n      max-height: 92vh;\r\n      border-radius: 20px 20px 0 0;\r\n      animation: ovzaSlideUp 0.3s ease-out;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-topbar {\r\n      padding: 22px 24px 0;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-counter {\r\n      font-size: 11px;\r\n      letter-spacing: 0.88px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-progress {\r\n      padding: 14px 24px 0;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-body {\r\n      padding: 32px 24px 0;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-question {\r\n      font-size: 22px;\r\n      letter-spacing: -0.22px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answers--m {\r\n      padding: 24px 24px 0;\r\n      gap: 10px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-answers--m .ovza-cmp__quiz-answer {\r\n      width: 100%;\r\n      padding: 16px 18px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop\r\n      .ovza-cmp__quiz-answers--m\r\n      .ovza-cmp__quiz-answer-icon {\r\n      width: 32px;\r\n      height: 32px;\r\n      border-radius: 8px;\r\n      font-size: 14px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-footer {\r\n      padding: 22px 24px 28px;\r\n    }\r\n    #ovza-cmp-quiz-backdrop .ovza-cmp__quiz-modal--m .ovza-cmp__quiz-privacy {\r\n      font-size: 11px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n  (function () {\r\n    \/**\r\n     * ============================================================================\r\n     * OVZA COMPARISON \u2014 DOMAIN MODEL\r\n     * ============================================================================\r\n     *\r\n     * This file contains ONLY data shapes and pure functions.\r\n     *\r\n     * RULES (per ADR-002 \/ ADR-011):\r\n     * - Nothing in this file touches the DOM.\r\n     * - Nothing in this file reads from `document`, `window` events, or user input.\r\n     * - Every function here should be callable from a plain Node script with the\r\n     *   exact same result \u2014 that's the test for \"is this really domain logic\".\r\n     *\r\n     * This file is organized so it can later be split into separate ES modules\r\n     * (config.js, ratings.js, countries.js, comparison.js, scoring.js) without\r\n     * changing any function body \u2014 only the import\/export wiring changes.\r\n     * ============================================================================\r\n     *\/\r\n\r\n    \/* ============================================================================\r\n     * SECTION 1 \u2014 CONFIG (per ADR-010: all tunable values live here, nowhere else)\r\n     * ============================================================================\r\n     * Every \"Engineering Assumption\" default from our architecture review lives\r\n     * in this one object. Product can change any of these without touching logic\r\n     * code. Nothing below this section should contain a magic number.\r\n     *\/\r\n    const OVZA_CONFIG = {\r\n      \/\/ ---- Comparison table column limits (per ADR-004) ----\r\n      comparison: {\r\n        desktop: { defaultCount: 3, maxCount: 4 },\r\n        mobile: { defaultCount: 2, maxCount: 4 },\r\n        \/\/ Tablet has no distinct tier \u2014 inherits desktop or mobile behavior based\r\n        \/\/ on this single breakpoint (px). Below this width = mobile behavior.\r\n        breakpointPx: 900,\r\n      },\r\n\r\n      \/\/ ---- Rating label \u2192 numeric scale conversion ----\r\n      \/\/ Engineering Assumption (flagged in review, ships with this default,\r\n      \/\/ fully overridable without touching scoring logic).\r\n      \/\/ Scale is 1 (worst) to 5 (best) for every factor, so scoring code never\r\n      \/\/ needs to know which factor is \"inverted\" \u2014 polarity is normalized here.\r\n      ratingScale: {\r\n        internationalRecognition: {\r\n          Excellent: 5,\r\n          \"Very High\": 5,\r\n          High: 4,\r\n          Moderate: 3,\r\n          \/\/ no lower tiers observed in source data for this factor\r\n        },\r\n        easeOfMaintenance: {\r\n          \"Very Easy\": 5,\r\n          Easy: 4,\r\n          Moderate: 3,\r\n          Complex: 1,\r\n        },\r\n        confidentiality: {\r\n          \"Very High\": 5,\r\n          High: 4,\r\n          Moderate: 3,\r\n          Low: 1,\r\n        },\r\n      },\r\n\r\n      \/\/ ---- Recommendation engine tuning (all Engineering Assumption defaults) ----\r\n      scoring: {\r\n        \/\/ Q1 business-type category bonus \u2014 additive, capped, deliberately sized\r\n        \/\/ to be meaningful but never override poor scores on the 3 real factors.\r\n        \/\/ Roughly equivalent to moving one full rating tier on one factor.\r\n        categoryBonusWeight: 1,\r\n\r\n        \/\/ Q3\/Q5 regional & \"premium jurisdiction\" nudges \u2014 half the category\r\n        \/\/ bonus, per our agreed default (a real but genuinely minor tiebreaker).\r\n        minorNudgeWeight: 0.5,\r\n\r\n        \/\/ Direct factor-weight multipliers for questions where an answer says\r\n        \/\/ \"this factor matters to me\" (Q2, Q4, Q5). Multiplicative, not additive\r\n        \/\/ \u2014 a 'strong' pick makes that factor's rating count for 50% more in the\r\n        \/\/ total score; 'slight' (Q5's third-option recognition nudge) is a much\r\n        \/\/ smaller bump. Engineering Assumption default, fully configurable.\r\n        factorWeightMultiplier: {\r\n          strong: 1.5,\r\n          moderate: 1.3,\r\n          slight: 1.15,\r\n        },\r\n\r\n        \/\/ Q2's \"Lowest Cost\" option doesn't map to any of the 3 rated factors \u2014\r\n        \/\/ cost isn't a scored factor, it's price data. Modeled as a minor nudge\r\n        \/\/ (reuses minorNudgeWeight) toward the N cheapest comparison-ready\r\n        \/\/ countries, rather than inventing a new scoring dimension.\r\n        lowestCostNudgeCount: 3,\r\n\r\n        \/\/ Budget behaviour: confirmed as a HARD CUTOFF (Product decision), but\r\n        \/\/ the mode is configurable so switching to a soft nudge later is a\r\n        \/\/ config change, not a rewrite.\r\n        budgetMode: \"hard\", \/\/ 'hard' | 'soft' (soft not yet implemented)\r\n\r\n        \/\/ Confidence thresholds \u2014 gap between rank 3 and rank 4, as a percentage\r\n        \/\/ of the maximum possible score.\r\n        confidence: {\r\n          highThresholdPct: 0.15,\r\n          mediumThresholdPct: 0.05,\r\n          \/\/ below mediumThresholdPct => 'low'\r\n        },\r\n\r\n        \/\/ How many jurisdictions the engine returns.\r\n        recommendationCount: 3,\r\n      },\r\n\r\n      \/\/ ---- Comparison table behaviour (per ADR-006 \/ Business Rules #1) ----\r\n      comparisonTable: {\r\n        defaultShowAllCharacteristics: false,\r\n        \/\/ Fields that are ALWAYS visible regardless of the diff filter.\r\n        alwaysVisibleFields: [\r\n          \"formationPrice\",\r\n          \"formationTime\",\r\n          \"renewalPrice\",\r\n        ],\r\n      },\r\n    };\r\n\r\n    \/* ============================================================================\r\n     * SECTION 2 \u2014 RATING CONVERSION\r\n     * ============================================================================\r\n     *\/\r\n\r\n    \/**\r\n     * Converts a qualitative rating label (e.g. \"Very Easy\") into a normalized\r\n     * 1\u20135 numeric value for a given scoring factor, using OVZA_CONFIG.ratingScale.\r\n     *\r\n     * Returns `null` if the label isn't recognized for that factor, rather than\r\n     * guessing \u2014 callers should treat null as \"needs content review\", not \"0\".\r\n     *\r\n     * @param {string} factor - one of 'internationalRecognition' | 'easeOfMaintenance' | 'confidentiality'\r\n     * @param {string} label - the qualitative label from source data, e.g. \"High\"\r\n     * @returns {number|null}\r\n     *\/\r\n    function convertRatingLabelToScore(factor, label) {\r\n      const scale = OVZA_CONFIG.ratingScale[factor];\r\n      if (!scale) return null;\r\n      if (!(label in scale)) return null;\r\n      return scale[label];\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 3 \u2014 COUNTRY DATA (seed \/ adapter)\r\n     * ============================================================================\r\n     * Per ADR-003: V1 uses local JSON. This section is the ONLY place that knows\r\n     * that. Everything else calls getCountryById() \/ getAllCountries() \u2014 when\r\n     * this becomes a real REST\/ACF call later, only this section changes.\r\n     *\r\n     * IMPORTANT \u2014 data completeness note:\r\n     * Only 3 countries (BVI, Costa Rica, Bahamas) have REAL comparison-table\r\n     * content, pulled directly from the Figma design.\r\n     *\r\n     * The other 15 countries below have OBVIOUSLY FAKE placeholder pricing\/CTA\/\r\n     * comparison data (identical numbers, \"TEST DATA \u2014 not real\" strings) \u2014\r\n     * added deliberately (approved by Product) purely so the Add\/Replace\/Remove\r\n     * picker flow can be exercised end-to-end during testing. This is NOT real\r\n     * business content and must be replaced before this goes live. The\r\n     * repeated\/identical values across all 15 are intentional \u2014 makes it\r\n     * obvious at a glance that it's placeholder, not real per-country research.\r\n     *\r\n     * `scoring` data for ALL 18 countries IS real, sourced directly from the\r\n     * source doc's Section 8 ratings table.\r\n     *\/\r\n\r\n    const COUNTRIES = [\r\n      {\r\n        id: \"bvi\",\r\n        name: \"British Virgin Islands\",\r\n        shortName: \"BVI\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddfb\ud83c\uddec\" },\r\n        entityType: \"Business Company (BC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1690, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1450, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=British_Virgin_Islands\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-british-virgin-islands\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"BC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Excellent\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Excellent\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n      {\r\n        id: \"costa_rica\",\r\n        name: \"Costa Rica\",\r\n        shortName: \"Costa Rica\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde8\ud83c\uddf7\" },\r\n        entityType: \"Limited Company (SRL \/ SA)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1890, currency: \"USD\" },\r\n          formationTime: { min: 4, max: 7, unit: \"days\" },\r\n          renewalPrice: { amount: 1400, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Costa_Rica\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-costa-rica\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"territorial\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"SRL \/ SA\" },\r\n          localSubstance: { required: true },\r\n          publicRegister: { level: \"partial\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Moderate\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Moderate\"),\r\n          },\r\n        },\r\n      },\r\n      {\r\n        id: \"bahamas\",\r\n        name: \"Bahamas\",\r\n        shortName: \"Bahamas\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde7\ud83c\uddf8\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1390, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1120, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Bahamas\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-bahamas\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: \"greylist\" },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Very High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Moderate\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      \/\/ ---- Remaining 15 countries: scoring data only (sourced from doc Section 8).\r\n      \/\/ `comparison: null` is intentional \u2014 see note above. Do not fabricate.\r\n      {\r\n        id: \"antigua_barbuda\",\r\n        name: \"Antigua & Barbuda\",\r\n        shortName: \"Antigua & Barbuda\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde6\ud83c\uddec\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 2250, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1400, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Antigua_and_Barbuda\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-antigua-and-barbuda\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"belize\",\r\n        name: \"Belize\",\r\n        shortName: \"Belize\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde7\ud83c\uddff\" },\r\n        entityType: \"\tInternational Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 990, currency: \"USD\" },\r\n          formationTime: { min: 1, max: 2, unit: \"days\" },\r\n          renewalPrice: { amount: 1490, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Belize\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-belize\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Moderate\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"bermuda\",\r\n        name: \"Bermuda\",\r\n        shortName: \"Bermuda\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde7\ud83c\uddf2\" },\r\n        entityType: \"Exempted Company\",\r\n        pricing: {\r\n          formationPrice: { amount: 8850, currency: \"USD\" },\r\n          formationTime: { min: 3, max: 5, unit: \"days\" },\r\n          renewalPrice: { amount: 9850, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Bermuda\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-bermuda\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"Exempted Company\" },\r\n          localSubstance: { required: true },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Excellent\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Excellent\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Complex\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Complex\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Moderate\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"cayman_islands\",\r\n        name: \"Cayman Islands\",\r\n        shortName: \"Cayman Islands\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf0\ud83c\uddfe\" },\r\n        entityType: \"Exempted Company\",\r\n        pricing: {\r\n          formationPrice: { amount: 2900, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 2160, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Cayman_Islands\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-the-cayman-islands\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"Exempted Company\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Excellent\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Excellent\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Complex\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Complex\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Moderate\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"cook_islands\",\r\n        name: \"Cook Islands\",\r\n        shortName: \"Cook Islands\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\udde8\ud83c\uddf0\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1790, currency: \"USD\" },\r\n          formationTime: { min: 4, max: 7, unit: \"days\" },\r\n          renewalPrice: { amount: 1490, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Cook_Islands\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-cook-islands\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"International Company (IC)\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Moderate\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Very High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"liberia\",\r\n        name: \"Liberia\",\r\n        shortName: \"Liberia\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf1\ud83c\uddf7\" },\r\n        entityType: \"\tInternational Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1190, currency: \"USD\" },\r\n          formationTime: { min: 3, max: 5, unit: \"days\" },\r\n          renewalPrice: { amount: 1150, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Liberia\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-liberia\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"Non-Resident Corporation\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Moderate\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"marshall_islands\",\r\n        name: \"Marshall Islands\",\r\n        shortName: \"Marshall Islands\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf2\ud83c\udded\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1090, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1090, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Marshall_Islands\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-the-marshall-islands\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"blacklisted\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"Non-Resident\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"panama\",\r\n        name: \"Panama\",\r\n        shortName: \"Panama\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf5\ud83c\udde6\" },\r\n        entityType: \"Sociedad de Responsabilidad Limitada (SRL)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1490, currency: \"USD\" },\r\n          formationTime: { min: 5, max: 7, unit: \"days\" },\r\n          renewalPrice: { amount: 980, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Panama\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-panama\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: \"greylist\" },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"SA\" },\r\n          localSubstance: { required: true },\r\n          publicRegister: { level: \"partial\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Very High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Moderate\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Moderate\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"samoa\",\r\n        name: \"Samoa\",\r\n        shortName: \"Samoa\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddfc\ud83c\uddf8\" },\r\n        entityType: \"International Company (IC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 840, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 755, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Samoa\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-samoa\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"blacklisted\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Moderate\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Very High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"seychelles\",\r\n        name: \"Seychelles\",\r\n        shortName: \"Seychelles\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf8\ud83c\udde8\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 595, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 590, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Seychelles\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-seychelles\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"blacklisted\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Very High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"st_kitts_nevis\",\r\n        name: \"St. Kitts & Nevis\",\r\n        shortName: \"St. Kitts & Nevis\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf0\ud83c\uddf3\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1470, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1390, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=St_Kitts_Nevis\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-st-kitts-and-nevis\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC \/ LLC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Very High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"st_lucia\",\r\n        name: \"St. Lucia\",\r\n        shortName: \"St. Lucia\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddf1\ud83c\udde8\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1850, currency: \"USD\" },\r\n          formationTime: { min: 2, max: 3, unit: \"days\" },\r\n          renewalPrice: { amount: 1600, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=St_Lucia\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-st-lucia\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"territorial\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: true },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"st_vincent_grenadines\",\r\n        name: \"St. Vincent & the Grenadines\",\r\n        shortName: \"St. Vincent & Grenadines\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddfb\ud83c\udde8\" },\r\n        entityType: \"Limited Liability Company (LLC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1110, currency: \"USD\" },\r\n          formationTime: { min: 4, max: 5, unit: \"days\" },\r\n          renewalPrice: { amount: 970, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=St_Vincent_%26_Grenadines\",\r\n          countryGuideUrl:\r\n            \"https:\/\/ovza.com\/register-a-company-in-st-vincent-and-the-grenadines\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"cleared\", priorListing: \"blacklist\" },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"IBC\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Moderate\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"High\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"usvi\",\r\n        name: \"United States Virgin Islands\",\r\n        shortName: \"USVI\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddfb\ud83c\uddee\" },\r\n        entityType: \"Exempted Company (EC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1850, currency: \"USD\" },\r\n          formationTime: { min: 4, max: 5, unit: \"days\" },\r\n          renewalPrice: { amount: 2650, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=United%20States%20Virgin%20Islands\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-the-usvi\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"blacklisted\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"Exempt Company\" },\r\n          localSubstance: { required: true },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"High\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"High\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Complex\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Complex\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Low\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Low\"),\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        id: \"vanuatu\",\r\n        name: \"Vanuatu\",\r\n        shortName: \"Vanuatu\",\r\n        flag: { type: \"emoji\", value: \"\ud83c\uddfb\ud83c\uddfa\" },\r\n        entityType: \"International Business Company (IBC)\",\r\n        pricing: {\r\n          formationPrice: { amount: 1400, currency: \"USD\" },\r\n          formationTime: { min: 6, max: 7, unit: \"days\" },\r\n          renewalPrice: { amount: 900, currency: \"USD\" },\r\n        },\r\n        cta: {\r\n          startFormationUrl:\r\n            \"https:\/\/ovza.com\/company-checkout\/?jurisdiction=Vanuatu\",\r\n          countryGuideUrl: \"https:\/\/ovza.com\/register-a-company-in-vanuatu\/\",\r\n        },\r\n        comparison: {\r\n          euStatus: { status: \"blacklisted\", priorListing: null },\r\n          oecdAlignment: { frameworks: [\"AEOI\", \"EOIR\", \"BEPS\"] },\r\n          taxOnOffshoreProfits: { type: \"none\" },\r\n          foreignOwnership: { allowed: true },\r\n          companyType: { name: \"International Company (IC)\" },\r\n          localSubstance: { required: false },\r\n          publicRegister: { level: \"none\" },\r\n        },\r\n        scoring: {\r\n          internationalRecognition: {\r\n            label: \"Moderate\",\r\n            value: convertRatingLabelToScore(\r\n              \"internationalRecognition\",\r\n              \"Moderate\",\r\n            ),\r\n          },\r\n          easeOfMaintenance: {\r\n            label: \"Very Easy\",\r\n            value: convertRatingLabelToScore(\"easeOfMaintenance\", \"Very Easy\"),\r\n          },\r\n          confidentiality: {\r\n            label: \"Very High\",\r\n            value: convertRatingLabelToScore(\"confidentiality\", \"Very High\"),\r\n          },\r\n        },\r\n      },\r\n    ];\r\n\r\n    \/**\r\n     * Region grouping for the Country Picker (per the Figma picker design).\r\n     * Kept separate from the country record itself since it's a *picker\r\n     * presentation* concern, not an inherent property used elsewhere.\r\n     *\r\n     * Only 3 region groups (The Americas, Asia Pacific, Africa) and a subset of\r\n     * countries were visible in the Figma picker frame. Remaining assignments\r\n     * below are engineering best-guesses \u2014 explicitly APPROVED for use as a\r\n     * placeholder pending any future real content update.\r\n     *\/\r\n    const COUNTRY_REGIONS = {\r\n      antigua_barbuda: \"The Americas\",\r\n      bahamas: \"The Americas\",\r\n      belize: \"The Americas\",\r\n      bermuda: \"The Americas\",\r\n      bvi: \"The Americas\",\r\n      cayman_islands: \"The Americas\",\r\n      costa_rica: \"The Americas\",\r\n      panama: \"The Americas\",\r\n      st_kitts_nevis: \"The Americas\",\r\n      st_lucia: \"The Americas\",\r\n      st_vincent_grenadines: \"The Americas\",\r\n      usvi: \"The Americas\",\r\n      cook_islands: \"Asia Pacific\",\r\n      marshall_islands: \"Asia Pacific\",\r\n      samoa: \"Asia Pacific\",\r\n      vanuatu: \"Asia Pacific\",\r\n      liberia: \"Africa\",\r\n      seychelles: \"Africa\",\r\n    };\r\n\r\n    \/**\r\n     * @param {string} id\r\n     * @returns {object|undefined}\r\n     *\/\r\n    function getCountryById(id) {\r\n      return COUNTRIES.find(function (c) {\r\n        return c.id === id;\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * @returns {object[]} a copy of the full country list (callers should not\r\n     *   mutate the returned array\/objects directly \u2014 treat as read-only)\r\n     *\/\r\n    function getAllCountries() {\r\n      return COUNTRIES.slice();\r\n    }\r\n\r\n    \/**\r\n     * A country is \"comparison ready\" when it has enough real content to render\r\n     * in the Comparison Table without crashing or showing broken cells \u2014 i.e.\r\n     * it has pricing and CTA data. Countries with scoring data only (used by\r\n     * the Recommendation Engine but no real comparison-table content yet) are\r\n     * NOT ready. This is a content-completeness gate, not a business rule \u2014\r\n     * it simply prevents selecting a country that would render broken\/empty\r\n     * cells until real content is supplied for it.\r\n     *\r\n     * @param {object} country\r\n     * @returns {boolean}\r\n     *\/\r\n    function isCountryComparisonReady(country) {\r\n      return !!(country && country.pricing && country.cta);\r\n    }\r\n\r\n    \/**\r\n     * @returns {object[]} only countries with complete comparison-table content\r\n     *\/\r\n    function getComparisonReadyCountries() {\r\n      return COUNTRIES.filter(isCountryComparisonReady);\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 4 \u2014 COMPARISON LOGIC (pure, no rendering)\r\n     * ============================================================================\r\n     *\/\r\n\r\n    \/**\r\n     * Normalized equality check for two comparison-row values.\r\n     * Compares the semantic value only \u2014 NOT display formatting. This is the\r\n     * fix for the legacy code's bug where pre-formatted display strings (with\r\n     * emoji baked in) caused false \"different\" rows.\r\n     *\r\n     * @param {*} a\r\n     * @param {*} b\r\n     * @returns {boolean}\r\n     *\/\r\n    function areComparisonValuesEqual(a, b) {\r\n      if (a === b) return true;\r\n      if (a == null || b == null) return a === b;\r\n      if (typeof a !== typeof b) return false;\r\n      if (typeof a === \"object\") {\r\n        \/\/ Shallow structural equality \u2014 sufficient for the flat {level, note},\r\n        \/\/ {type}, {summary} shapes used in `comparison` fields today. If nested\r\n        \/\/ structures are added later, this should become a deeper comparison.\r\n        const aKeys = Object.keys(a);\r\n        const bKeys = Object.keys(b);\r\n        if (aKeys.length !== bKeys.length) return false;\r\n        return aKeys.every(function (key) {\r\n          return a[key] === b[key];\r\n        });\r\n      }\r\n      return false;\r\n    }\r\n\r\n    \/**\r\n     * Given a list of selected country IDs and the field list to consider,\r\n     * returns the field keys that are NOT identical across all selected\r\n     * countries (per Business Rule: hide rows where every value matches).\r\n     *\r\n     * Always-visible fields (per config) are excluded from filtering entirely \u2014\r\n     * callers should render those separately, always.\r\n     *\r\n     * @param {string[]} countryIds\r\n     * @param {boolean} showAllCharacteristics\r\n     * @returns {string[]} the comparison field keys to render, in a stable order\r\n     *\/\r\n    function getVisibleComparisonFieldKeys(countryIds, showAllCharacteristics) {\r\n      const countries = countryIds.map(getCountryById).filter(Boolean);\r\n      const withComparisonData = countries.filter(function (c) {\r\n        return c.comparison;\r\n      });\r\n\r\n      if (withComparisonData.length === 0) return [];\r\n\r\n      \/\/ Field order is defined by the first populated country's field order \u2014\r\n      \/\/ NOT alphabetical, NOT hardcoded \u2014 so adding a new field to the data\r\n      \/\/ just works without touching this function.\r\n      const allFieldKeys = Object.keys(withComparisonData[0].comparison);\r\n\r\n      if (showAllCharacteristics) return allFieldKeys;\r\n\r\n      return allFieldKeys.filter(function (fieldKey) {\r\n        const values = withComparisonData.map(function (c) {\r\n          return c.comparison[fieldKey];\r\n        });\r\n        const allEqual = values.every(function (v) {\r\n          return areComparisonValuesEqual(v, values[0]);\r\n        });\r\n        return !allEqual; \/\/ visible only if NOT all equal\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * Returns the max allowed comparison count for the current viewport width,\r\n     * per ADR-004 (no distinct tablet tier \u2014 inherits desktop\/mobile by width).\r\n     *\r\n     * @param {number} viewportWidth\r\n     * @returns {{ defaultCount: number, maxCount: number }}\r\n     *\/\r\n    function getComparisonLimitsForViewport(viewportWidth) {\r\n      return viewportWidth < OVZA_CONFIG.comparison.breakpointPx\r\n        ? OVZA_CONFIG.comparison.mobile\r\n        : OVZA_CONFIG.comparison.desktop;\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 5 \u2014 QUIZ DOMAIN MODEL\r\n     * ============================================================================\r\n     * Real question\/answer content, sourced directly from the source doc\r\n     * (Section 9). Every question includes a universal \"not sure\" skip option\r\n     * per the Figma Quiz frames \u2014 represented here as answerId 'not_sure' with\r\n     * no `effects` at all (contributes nothing to scoring), consistent with\r\n     * Dev Annotation #7 (\"all not-sure answers -> default comparison\").\r\n     *\r\n     * `icon` values are placeholder emoji (flagged, not final content \u2014 same\r\n     * status as the Figma frame's own icon slots, which are themselves\r\n     * explicitly marked placeholder per Dev Annotation #9). `whyWeAsk` is\r\n     * intentionally omitted throughout \u2014 no real copy exists for it yet, and\r\n     * the Figma layer itself marks it \"(optional)\".\r\n     *\r\n     * `effects` shapes:\r\n     *   - categoryBonus: true              \u2192 this answer feeds Q1's business-type\r\n     *                                         bonus lookup (BUSINESS_TYPE_PREFERRED_JURISDICTIONS)\r\n     *   - factorWeight: { factor, level }  \u2192 multiplies that factor's weight by\r\n     *                                         OVZA_CONFIG.scoring.factorWeightMultiplier[level]\r\n     *   - regionNudgeCountryIds: [...]     \u2192 these specific countries get minorNudgeWeight\r\n     *   - lowestCostNudge: true            \u2192 nudges the N cheapest comparison-ready countries\r\n     *   - budget: { min, max }             \u2192 hard-filters candidates (Q6, confirmed decision)\r\n     *\/\r\n    \/**\r\n     * Per-question illustration slot art. Simple flat-icon SVGs matching the\r\n     * app's existing green palette (--green #34BE86, --green-bg #E8F7EF,\r\n     * --green-deep #02542D) \u2014 replaces the generic placeholder text that\r\n     * previously filled this slot on desktop. Each icon is a light visual nod\r\n     * to that question's topic, not literal\/detailed artwork.\r\n     *\/\r\n    const QUIZ_ILLUSTRATIONS = {\r\n      \/\/ Q1 \u2014 business purpose \u2192 briefcase\r\n      q1_business_type:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<rect x=\"20\" y=\"12\" width=\"16\" height=\"10\" rx=\"2\" fill=\"none\" stroke=\"#02542D\" stroke-width=\"2.5\"\/>' +\r\n        '<rect x=\"8\" y=\"20\" width=\"40\" height=\"26\" rx=\"4\" fill=\"#E8F7EF\" stroke=\"#34BE86\" stroke-width=\"2.5\"\/>' +\r\n        '<line x1=\"8\" y1=\"31\" x2=\"48\" y2=\"31\" stroke=\"#34BE86\" stroke-width=\"2\"\/>' +\r\n        '<rect x=\"24\" y=\"27\" width=\"8\" height=\"8\" rx=\"1.5\" fill=\"#02542D\"\/>' +\r\n        \"<\/svg>\",\r\n\r\n      \/\/ Q2 \u2014 priority \u2192 target\r\n      q2_priority:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<circle cx=\"28\" cy=\"28\" r=\"19\" fill=\"#E8F7EF\" stroke=\"#34BE86\" stroke-width=\"2.5\"\/>' +\r\n        '<circle cx=\"28\" cy=\"28\" r=\"11\" fill=\"none\" stroke=\"#34BE86\" stroke-width=\"2.5\"\/>' +\r\n        '<circle cx=\"28\" cy=\"28\" r=\"4\" fill=\"#02542D\"\/>' +\r\n        \"<\/svg>\",\r\n\r\n      \/\/ Q3 \u2014 customer location \u2192 globe with pin\r\n      q3_customer_location:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<circle cx=\"26\" cy=\"26\" r=\"16\" fill=\"#E8F7EF\" stroke=\"#34BE86\" stroke-width=\"2.2\"\/>' +\r\n        '<path d=\"M10 26 H42 M26 10 C19 17 19 35 26 42 C33 35 33 17 26 10Z\" stroke=\"#34BE86\" stroke-width=\"1.6\" fill=\"none\"\/>' +\r\n        '<path d=\"M38 34 C38 40 32 46 32 46 C32 46 26 40 26 34 C26 30.5 28.7 28 32 28 C35.3 28 38 30.5 38 34Z\" fill=\"#02542D\"\/>' +\r\n        '<circle cx=\"32\" cy=\"34\" r=\"2.4\" fill=\"#fff\"\/>' +\r\n        \"<\/svg>\",\r\n\r\n      \/\/ Q4 \u2014 confidentiality \u2192 shield with lock\r\n      q4_confidentiality:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<path d=\"M28 6 L45 12 V26 C45 37 38 45 28 49 C18 45 11 37 11 26 V12 Z\" fill=\"#E8F7EF\" stroke=\"#34BE86\" stroke-width=\"2.5\"\/>' +\r\n        '<path d=\"M23.5 26 V22.5 C23.5 19.5 25.5 17 28 17 C30.5 17 32.5 19.5 32.5 22.5 V26\" stroke=\"#02542D\" stroke-width=\"2.2\" fill=\"none\"\/>' +\r\n        '<rect x=\"20.5\" y=\"26\" width=\"15\" height=\"11\" rx=\"2\" fill=\"#02542D\"\/>' +\r\n        \"<\/svg>\",\r\n\r\n      \/\/ Q5 \u2014 admin tolerance \u2192 gauge\/dial\r\n      q5_admin_tolerance:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<path d=\"M9 36 A19 19 0 0 1 47 36\" stroke=\"#34BE86\" stroke-width=\"4.5\" fill=\"none\" stroke-linecap=\"round\"\/>' +\r\n        '<path d=\"M9 36 A19 19 0 0 1 22 18.5\" stroke=\"#02542D\" stroke-width=\"4.5\" fill=\"none\" stroke-linecap=\"round\"\/>' +\r\n        '<line x1=\"28\" y1=\"36\" x2=\"19\" y2=\"25\" stroke=\"#02542D\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>' +\r\n        '<circle cx=\"28\" cy=\"36\" r=\"3.5\" fill=\"#02542D\"\/>' +\r\n        \"<\/svg>\",\r\n\r\n      \/\/ Q6 \u2014 budget \u2192 wallet\r\n      q6_budget:\r\n        '<svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n        '<rect x=\"8\" y=\"17\" width=\"40\" height=\"27\" rx=\"4\" fill=\"#E8F7EF\" stroke=\"#34BE86\" stroke-width=\"2.5\"\/>' +\r\n        '<path d=\"M8 25 H48\" stroke=\"#34BE86\" stroke-width=\"2\"\/>' +\r\n        '<rect x=\"34\" y=\"27\" width=\"12\" height=\"9\" rx=\"2\" fill=\"#fff\" stroke=\"#34BE86\" stroke-width=\"1.8\"\/>' +\r\n        '<circle cx=\"39\" cy=\"31.5\" r=\"2.2\" fill=\"#02542D\"\/>' +\r\n        \"<\/svg>\",\r\n    };\r\n\r\n    const QUIZ_QUESTIONS = [\r\n      {\r\n        id: \"q1_business_type\",\r\n        order: 1,\r\n        text: \"What will your company primarily be used for?\",\r\n        selectType: \"single\",\r\n        weight: \"primary\", \/\/ per source doc: \"the most important question... greatest influence\"\r\n        answers: [\r\n          {\r\n            id: \"holding_company\",\r\n            text: \"Holding Company\",\r\n            icon: \"\ud83c\udfdb\ufe0f\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"investment_vehicle\",\r\n            text: \"Investment Vehicle\",\r\n            icon: \"\ud83d\udcc8\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"international_trading\",\r\n            text: \"International Trading\",\r\n            icon: \"\ud83d\udea2\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"ecommerce\",\r\n            text: \"E-commerce\",\r\n            icon: \"\ud83d\uded2\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"saas_software\",\r\n            text: \"SaaS \/ Software\",\r\n            icon: \"\ud83d\udcbb\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"consulting\",\r\n            text: \"Consulting\",\r\n            icon: \"\ud83e\udd1d\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"asset_protection\",\r\n            text: \"Asset Protection\",\r\n            icon: \"\ud83d\udee1\ufe0f\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          {\r\n            id: \"family_wealth_estate_planning\",\r\n            text: \"Family Wealth \/ Estate Planning\",\r\n            icon: \"\ud83d\udc6a\",\r\n            effects: { categoryBonus: true },\r\n          },\r\n          { id: \"other\", text: \"Other\", icon: \"\u2733\ufe0f\", effects: {} }, \/\/ intentionally no bonus mapping, per source doc\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        id: \"q2_priority\",\r\n        order: 2,\r\n        text: \"What matters most to you?\",\r\n        selectType: \"single\",\r\n        weight: \"standard\",\r\n        answers: [\r\n          {\r\n            id: \"international_reputation\",\r\n            text: \"International Reputation\",\r\n            icon: \"\ud83c\udf0d\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"strong\",\r\n              },\r\n            },\r\n          },\r\n          {\r\n            id: \"easy_maintenance\",\r\n            text: \"Easy Maintenance\",\r\n            icon: \"\ud83e\uddf0\",\r\n            effects: {\r\n              factorWeight: { factor: \"easeOfMaintenance\", level: \"strong\" },\r\n            },\r\n          },\r\n          {\r\n            id: \"privacy\",\r\n            text: \"Privacy\",\r\n            icon: \"\ud83d\udd12\",\r\n            effects: {\r\n              factorWeight: { factor: \"confidentiality\", level: \"strong\" },\r\n            },\r\n          },\r\n          \/\/ \"Best Long-Term Structure\" doesn't map cleanly to one of the 3 rated\r\n          \/\/ factors \u2014 treated as a slight International Recognition nudge\r\n          \/\/ (closest fit: prestige\/stability). Engineering Assumption, flagged.\r\n          {\r\n            id: \"best_long_term_structure\",\r\n            text: \"Best Long-Term Structure\",\r\n            icon: \"\ud83c\udfd7\ufe0f\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"slight\",\r\n              },\r\n            },\r\n          },\r\n          \/\/ \"Lowest Cost\" isn't a rated factor either \u2014 modeled as a nudge\r\n          \/\/ toward the cheapest comparison-ready countries instead of a\r\n          \/\/ factor-weight change. See OVZA_CONFIG.scoring.lowestCostNudgeCount.\r\n          {\r\n            id: \"lowest_cost\",\r\n            text: \"Lowest Cost\",\r\n            icon: \"\ud83d\udcb0\",\r\n            effects: { lowestCostNudge: true },\r\n          },\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        id: \"q3_customer_location\",\r\n        order: 3,\r\n        text: \"Where are your customers located?\",\r\n        selectType: \"single\",\r\n        weight: \"standard\",\r\n        answers: [\r\n          {\r\n            id: \"worldwide\",\r\n            text: \"Worldwide\",\r\n            icon: \"\ud83c\udf10\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"moderate\",\r\n              },\r\n            },\r\n          },\r\n          {\r\n            id: \"europe\",\r\n            text: \"Europe\",\r\n            icon: \"\ud83c\uddea\ud83c\uddfa\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"moderate\",\r\n              },\r\n            },\r\n          },\r\n          {\r\n            id: \"north_america\",\r\n            text: \"North America\",\r\n            icon: \"\ud83d\uddfd\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"moderate\",\r\n              },\r\n            },\r\n          },\r\n          \/\/ Latin America: recognition boost + explicit regional nudge (source doc: \"should slightly favour Costa Rica and Panama\")\r\n          {\r\n            id: \"latin_america\",\r\n            text: \"Latin America\",\r\n            icon: \"\ud83c\udf0e\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"moderate\",\r\n              },\r\n              regionNudgeCountryIds: [\"costa_rica\", \"panama\"],\r\n            },\r\n          },\r\n          \/\/ Asia Pacific: recognition boost + explicit regional nudge (source doc: \"should slightly favour Samoa, Marshall Islands and Vanuatu\")\r\n          {\r\n            id: \"asia_pacific\",\r\n            text: \"Asia Pacific\",\r\n            icon: \"\ud83c\udf0f\",\r\n            effects: {\r\n              factorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"moderate\",\r\n              },\r\n              regionNudgeCountryIds: [\"samoa\", \"marshall_islands\", \"vanuatu\"],\r\n            },\r\n          },\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        id: \"q4_confidentiality\",\r\n        order: 4,\r\n        text: \"How important is confidentiality?\",\r\n        selectType: \"single\",\r\n        weight: \"standard\",\r\n        answers: [\r\n          {\r\n            id: \"extremely_important\",\r\n            text: \"Extremely Important\",\r\n            icon: \"\ud83d\udd10\",\r\n            effects: {\r\n              factorWeight: { factor: \"confidentiality\", level: \"strong\" },\r\n            },\r\n          },\r\n          {\r\n            id: \"somewhat_important\",\r\n            text: \"Somewhat Important\",\r\n            icon: \"\ud83d\udd0f\",\r\n            effects: {\r\n              factorWeight: { factor: \"confidentiality\", level: \"moderate\" },\r\n            },\r\n          },\r\n          {\r\n            id: \"not_important\",\r\n            text: \"Not Important\",\r\n            icon: \"\ud83d\udd13\",\r\n            effects: {},\r\n          },\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        id: \"q5_admin_tolerance\",\r\n        order: 5,\r\n        text: \"How much ongoing administration are you comfortable with?\",\r\n        selectType: \"single\",\r\n        weight: \"standard\",\r\n        answers: [\r\n          {\r\n            id: \"simplest_possible\",\r\n            text: \"I want the simplest possible company.\",\r\n            icon: \"\u2728\",\r\n            effects: {\r\n              factorWeight: { factor: \"easeOfMaintenance\", level: \"strong\" },\r\n            },\r\n          },\r\n          {\r\n            id: \"some_administration\",\r\n            text: \"Some administration is acceptable.\",\r\n            icon: \"\ud83d\udccb\",\r\n            effects: {},\r\n          },\r\n          \/\/ Third option: increases Ease of Maintenance weight AND slightly\r\n          \/\/ increases International Recognition weight (source doc: \"allowing\r\n          \/\/ premium jurisdictions such as Cayman Islands and Bermuda to rank\r\n          \/\/ higher\") \u2014 modeled as two factorWeight effects, not a per-country\r\n          \/\/ nudge, since the doc describes it as a general weighting change.\r\n          {\r\n            id: \"more_administration_ok\",\r\n            text: \"I don't mind more administration if the jurisdiction is stronger.\",\r\n            icon: \"\ud83c\udfc6\",\r\n            effects: {\r\n              factorWeight: { factor: \"easeOfMaintenance\", level: \"moderate\" },\r\n              secondaryFactorWeight: {\r\n                factor: \"internationalRecognition\",\r\n                level: \"slight\",\r\n              },\r\n            },\r\n          },\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        id: \"q6_budget\",\r\n        order: 6,\r\n        text: \"What is your approximate budget?\",\r\n        selectType: \"single\",\r\n        weight: \"secondary\", \/\/ per source doc: budget is a secondary ranking factor, hard cutoff (confirmed decision)\r\n        answers: [\r\n          {\r\n            id: \"under_1500\",\r\n            text: \"Under $1,500\",\r\n            icon: \"\ud83d\udcb5\",\r\n            effects: { budget: { min: null, max: 1500 } },\r\n          },\r\n          {\r\n            id: \"1500_to_3000\",\r\n            text: \"$1,500\u20133,000\",\r\n            icon: \"\ud83d\udcb5\",\r\n            effects: { budget: { min: 1500, max: 3000 } },\r\n          },\r\n          {\r\n            id: \"above_3000\",\r\n            text: \"Above $3,000\",\r\n            icon: \"\ud83d\udcb5\",\r\n            effects: { budget: { min: 3000, max: null } },\r\n          },\r\n          {\r\n            id: \"not_sure\",\r\n            text: \"I'm not sure yet \u2014 skip this\",\r\n            isSkip: true,\r\n            effects: {},\r\n          },\r\n        ],\r\n      },\r\n    ];\r\n\r\n    \/**\r\n     * @param {string} questionId\r\n     * @returns {object|undefined}\r\n     *\/\r\n    function getQuizQuestionById(questionId) {\r\n      return QUIZ_QUESTIONS.find(function (q) {\r\n        return q.id === questionId;\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * @returns {object[]} all quiz questions, in display order\r\n     *\/\r\n    function getAllQuizQuestions() {\r\n      return QUIZ_QUESTIONS.slice().sort(function (a, b) {\r\n        return a.order - b.order;\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * Looks up a specific answer's full record (including its `effects`) given\r\n     * a question id + answer id pair \u2014 the shape stored in Quiz Session state.\r\n     *\r\n     * @param {string} questionId\r\n     * @param {string} answerId\r\n     * @returns {object|undefined}\r\n     *\/\r\n    function getQuizAnswerById(questionId, answerId) {\r\n      const question = getQuizQuestionById(questionId);\r\n      if (!question) return undefined;\r\n      return question.answers.find(function (a) {\r\n        return a.id === answerId;\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * True when every question the user actually reached was answered 'not_sure'\r\n     * (or left unanswered) \u2014 triggers the fallback path per Dev Annotation #7:\r\n     * \"all not-sure answers -> default comparison\", not a dead end.\r\n     *\r\n     * @param {object} answers - { questionId: answerId }\r\n     * @returns {boolean}\r\n     *\/\r\n    function isNoSignalQuizResult(answers) {\r\n      const answeredIds = Object.keys(answers || {});\r\n      if (answeredIds.length === 0) return true;\r\n      return answeredIds.every(function (qid) {\r\n        return answers[qid] === \"not_sure\";\r\n      });\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 6 \u2014 RECOMMENDATION SCORING (pure)\r\n     * ============================================================================\r\n     * This section computes WHAT is recommended. Per ADR-009, HOW it's explained\r\n     * to the user (reasons \/ trade-off wording) is a SEPARATE module \u2014 see\r\n     * 02-recommendation-explainer.js (not yet built) \u2014 deliberately decoupled so\r\n     * that module can later be swapped for an AI-generated version without any\r\n     * change here.\r\n     *\/\r\n\r\n    \/**\r\n     * Business-type category bonus lookup, sourced directly from the source\r\n     * doc's \"Preferred Jurisdictions\" table (Section 9, Question 1). This is\r\n     * the categorical match discussed in Clarifying Question 2 \u2014 NOT part of\r\n     * the 1-5 scored factors.\r\n     *\/\r\n    const BUSINESS_TYPE_PREFERRED_JURISDICTIONS = {\r\n      holding_company: [\"bvi\", \"bahamas\", \"st_lucia\", \"marshall_islands\"],\r\n      investment_vehicle: [\"cayman_islands\", \"bvi\", \"bermuda\"],\r\n      international_trading: [\r\n        \"bvi\",\r\n        \"panama\",\r\n        \"marshall_islands\",\r\n        \"antigua_barbuda\",\r\n      ],\r\n      ecommerce: [\"seychelles\", \"costa_rica\", \"belize\"],\r\n      saas_software: [\"seychelles\", \"costa_rica\", \"vanuatu\"],\r\n      consulting: [\"bvi\", \"seychelles\", \"st_lucia\"],\r\n      asset_protection: [\"st_kitts_nevis\", \"cook_islands\", \"samoa\"],\r\n      family_wealth_estate_planning: [\r\n        \"bahamas\",\r\n        \"cayman_islands\",\r\n        \"cook_islands\",\r\n      ],\r\n      \/\/ 'other' intentionally has no bonus mapping \u2014 no jurisdictions singled out\r\n    };\r\n\r\n    \/**\r\n     * A single jurisdiction's weighted score for a given set of factor weights.\r\n     * Pure function: same inputs always produce the same output, no side effects.\r\n     *\r\n     * @param {object} country - a country record from COUNTRIES\r\n     * @param {object} factorWeights - e.g. { internationalRecognition: 1.4, easeOfMaintenance: 1, confidentiality: 1.2 }\r\n     * @param {string|null} businessTypeAnswerId - Q1 answer id, or null if unanswered\r\n     * @param {string[]} minorNudgeCountryIds - country ids receiving a Q3\/Q5 minor nudge this session\r\n     * @returns {number}\r\n     *\/\r\n    function computeCountryScore(\r\n      country,\r\n      factorWeights,\r\n      businessTypeAnswerId,\r\n      minorNudgeCountryIds,\r\n    ) {\r\n      const factors = [\r\n        \"internationalRecognition\",\r\n        \"easeOfMaintenance\",\r\n        \"confidentiality\",\r\n      ];\r\n\r\n      let score = factors.reduce(function (sum, factor) {\r\n        const rating = country.scoring[factor];\r\n        const value = rating ? rating.value : null;\r\n        const weight = factorWeights[factor] || 1;\r\n        \/\/ A null\/unconverted rating contributes 0, rather than crashing or\r\n        \/\/ silently defaulting to a made-up mid-point value.\r\n        return sum + (value != null ? value * weight : 0);\r\n      }, 0);\r\n\r\n      \/\/ Q1 categorical bonus\r\n      if (businessTypeAnswerId) {\r\n        const preferred =\r\n          BUSINESS_TYPE_PREFERRED_JURISDICTIONS[businessTypeAnswerId] || [];\r\n        if (preferred.indexOf(country.id) !== -1) {\r\n          score += OVZA_CONFIG.scoring.categoryBonusWeight;\r\n        }\r\n      }\r\n\r\n      \/\/ Q3\/Q5 minor nudges (regional preference, premium-jurisdiction preference)\r\n      if (\r\n        minorNudgeCountryIds &&\r\n        minorNudgeCountryIds.indexOf(country.id) !== -1\r\n      ) {\r\n        score += OVZA_CONFIG.scoring.minorNudgeWeight;\r\n      }\r\n\r\n      return score;\r\n    }\r\n\r\n    \/**\r\n     * Applies the budget hard-cutoff filter (confirmed Product decision:\r\n     * budget is a hard filter, not a soft nudge \u2014 but implemented as a\r\n     * swappable strategy so 'soft' mode can be added later via config only).\r\n     *\r\n     * @param {object[]} countries\r\n     * @param {{min: number, max: number}|null} budgetRange - null = no budget answer given\r\n     * @returns {object[]} filtered country list\r\n     *\/\r\n    function applyBudgetFilter(countries, budgetRange) {\r\n      if (!budgetRange || OVZA_CONFIG.scoring.budgetMode !== \"hard\")\r\n        return countries;\r\n\r\n      return countries.filter(function (country) {\r\n        if (!country.pricing) return true; \/\/ can't filter what we don't have pricing for\r\n        const price = country.pricing.formationPrice.amount;\r\n        const aboveMin = budgetRange.min == null || price >= budgetRange.min;\r\n        const belowMax = budgetRange.max == null || price <= budgetRange.max;\r\n        return aboveMin && belowMax;\r\n      });\r\n    }\r\n\r\n    \/**\r\n     * Computes confidence level from the score gap between rank 3 and rank 4.\r\n     *\r\n     * @param {number[]} sortedScoresDescending\r\n     * @returns {'high'|'medium'|'low'}\r\n     *\/\r\n    function computeConfidence(sortedScoresDescending) {\r\n      if (sortedScoresDescending.length < 4) return \"high\"; \/\/ no 4th place to compare against\r\n      const maxPossible =\r\n        5 * 3 +\r\n        OVZA_CONFIG.scoring.categoryBonusWeight +\r\n        OVZA_CONFIG.scoring.minorNudgeWeight;\r\n      const gap = sortedScoresDescending[2] - sortedScoresDescending[3];\r\n      const gapPct = gap \/ maxPossible;\r\n\r\n      if (gapPct >= OVZA_CONFIG.scoring.confidence.highThresholdPct)\r\n        return \"high\";\r\n      if (gapPct >= OVZA_CONFIG.scoring.confidence.mediumThresholdPct)\r\n        return \"medium\";\r\n      return \"low\";\r\n    }\r\n\r\n    \/**\r\n     * Translates a completed (or partially completed) quiz answers map into the\r\n     * inputs computeCountryScore() needs \u2014 factor weights, the Q1 business-type\r\n     * id, and the combined list of minor-nudge country ids (regional nudges +\r\n     * lowest-cost nudge, de-duplicated).\r\n     *\r\n     * Pure function, no knowledge of the DOM, the quiz UI, or state \u2014 just\r\n     * answers in, scoring inputs out.\r\n     *\r\n     * @param {object} answers - { questionId: answerId }, e.g. { q1_business_type: 'holding_company' }\r\n     * @returns {{ factorWeights: object, businessTypeAnswerId: string|null, minorNudgeCountryIds: string[], budget: object|null }}\r\n     *\/\r\n    function buildScoringInputsFromQuizAnswers(answers) {\r\n      const factorWeights = {\r\n        internationalRecognition: 1,\r\n        easeOfMaintenance: 1,\r\n        confidentiality: 1,\r\n      };\r\n      let businessTypeAnswerId = null;\r\n      let minorNudgeCountryIds = [];\r\n      let budget = null;\r\n      let wantsLowestCostNudge = false;\r\n\r\n      function applyFactorWeight(factorWeight) {\r\n        if (!factorWeight) return;\r\n        const multiplier =\r\n          OVZA_CONFIG.scoring.factorWeightMultiplier[factorWeight.level] || 1;\r\n        factorWeights[factorWeight.factor] =\r\n          (factorWeights[factorWeight.factor] || 1) * multiplier;\r\n      }\r\n\r\n      Object.keys(answers || {}).forEach(function (questionId) {\r\n        const answerId = answers[questionId];\r\n        if (!answerId || answerId === \"not_sure\") return; \/\/ 'not sure' contributes nothing, per Dev Annotation #7\r\n        const answer = getQuizAnswerById(questionId, answerId);\r\n        if (!answer || !answer.effects) return;\r\n        const effects = answer.effects;\r\n\r\n        if (effects.categoryBonus) businessTypeAnswerId = answerId;\r\n        if (effects.factorWeight) applyFactorWeight(effects.factorWeight);\r\n        if (effects.secondaryFactorWeight)\r\n          applyFactorWeight(effects.secondaryFactorWeight);\r\n        if (effects.regionNudgeCountryIds)\r\n          minorNudgeCountryIds = minorNudgeCountryIds.concat(\r\n            effects.regionNudgeCountryIds,\r\n          );\r\n        if (effects.lowestCostNudge) wantsLowestCostNudge = true;\r\n        if (effects.budget) budget = effects.budget;\r\n      });\r\n\r\n      if (wantsLowestCostNudge) {\r\n        const cheapest = getComparisonReadyCountries()\r\n          .slice()\r\n          .sort(function (a, b) {\r\n            return (\r\n              a.pricing.formationPrice.amount - b.pricing.formationPrice.amount\r\n            );\r\n          })\r\n          .slice(0, OVZA_CONFIG.scoring.lowestCostNudgeCount)\r\n          .map(function (c) {\r\n            return c.id;\r\n          });\r\n        minorNudgeCountryIds = minorNudgeCountryIds.concat(cheapest);\r\n      }\r\n\r\n      \/\/ De-duplicate (a country could conceivably qualify for both a regional\r\n      \/\/ nudge and the lowest-cost nudge \u2014 only apply the bonus once).\r\n      minorNudgeCountryIds = minorNudgeCountryIds.filter(function (id, index) {\r\n        return minorNudgeCountryIds.indexOf(id) === index;\r\n      });\r\n\r\n      return {\r\n        factorWeights: factorWeights,\r\n        businessTypeAnswerId: businessTypeAnswerId,\r\n        minorNudgeCountryIds: minorNudgeCountryIds,\r\n        budget: budget,\r\n      };\r\n    }\r\n\r\n    \/**\r\n     * Main entry point: computes the top N recommended jurisdictions from a\r\n     * completed quiz answers map.\r\n     *\r\n     * @param {object} answers - { questionId: answerId }, per QUIZ_QUESTIONS shape\r\n     * @returns {{ isFallback: boolean, generatedAt: string, countries: object[] }}\r\n     *   countries: [{ countryId, rank, score, confidence }] \u2014 score\/confidence\r\n     *   are null when isFallback is true (no meaningful ranking was computed).\r\n     *\/\r\n    function computeRecommendations(answers) {\r\n      \/\/ Fallback path \u2014 per Dev Annotation #7: \"all not-sure answers -> default\r\n      \/\/ comparison... no dead end.\" Rather than fabricate a \"most popular\"\r\n      \/\/ ranking we have no real data for, this reuses the same default\r\n      \/\/ selection the table already shows on first load.\r\n      if (isNoSignalQuizResult(answers)) {\r\n        const fallbackCountries = getComparisonReadyCountries().slice(\r\n          0,\r\n          OVZA_CONFIG.scoring.recommendationCount,\r\n        );\r\n        return {\r\n          isFallback: true,\r\n          generatedAt: new Date().toISOString(),\r\n          countries: fallbackCountries.map(function (c, index) {\r\n            return {\r\n              countryId: c.id,\r\n              rank: index + 1,\r\n              score: null,\r\n              confidence: null,\r\n            };\r\n          }),\r\n        };\r\n      }\r\n\r\n      const inputs = buildScoringInputsFromQuizAnswers(answers);\r\n\r\n      let candidates = getAllCountries();\r\n      candidates = applyBudgetFilter(candidates, inputs.budget);\r\n\r\n      const scored = candidates.map(function (country) {\r\n        return {\r\n          countryId: country.id,\r\n          score: computeCountryScore(\r\n            country,\r\n            inputs.factorWeights,\r\n            inputs.businessTypeAnswerId,\r\n            inputs.minorNudgeCountryIds,\r\n          ),\r\n        };\r\n      });\r\n\r\n      scored.sort(function (a, b) {\r\n        return b.score - a.score;\r\n      });\r\n\r\n      const sortedScores = scored.map(function (s) {\r\n        return s.score;\r\n      });\r\n      const confidence = computeConfidence(sortedScores);\r\n\r\n      return {\r\n        isFallback: false,\r\n        generatedAt: new Date().toISOString(),\r\n        countries: scored\r\n          .slice(0, OVZA_CONFIG.scoring.recommendationCount)\r\n          .map(function (entry, index) {\r\n            return {\r\n              countryId: entry.countryId,\r\n              rank: index + 1,\r\n              score: entry.score,\r\n              \/\/ Per-result confidence: only rank 1 uses the rank3\/rank4 gap directly;\r\n              \/\/ ranks 2-3 inherit the same overall confidence for now (simplest\r\n              \/\/ consistent behavior \u2014 revisit if Product wants per-rank confidence).\r\n              confidence: confidence,\r\n            };\r\n          }),\r\n      };\r\n    }\r\n    \/**\r\n     * ============================================================================\r\n     * OVZA COMPARISON \u2014 STATE MODEL\r\n     * ============================================================================\r\n     *\r\n     * Depends on: 01-domain-model.js (OVZA_CONFIG, getAllCountries, etc.)\r\n     *\r\n     * RULES (per ADR-011):\r\n     * - UI components NEVER mutate state directly.\r\n     * - The only way to change state is: dispatch(action) -> reducer -> new state\r\n     *   -> subscribers notified -> renderer reacts (renderer built separately,\r\n     *   not in this file).\r\n     * - This file has zero DOM references. A future renderer subscribes to this\r\n     *   store; this file doesn't know renderers exist.\r\n     * ============================================================================\r\n     *\/\r\n\r\n    \/* ============================================================================\r\n     * SECTION 1 \u2014 ACTION TYPES\r\n     * ============================================================================\r\n     * Every possible state change in the whole feature is named here. If a new\r\n     * kind of change is needed later, it gets a new named action \u2014 nothing ever\r\n     * mutates state through an ad hoc function call from a click handler.\r\n     *\/\r\n    const ActionTypes = Object.freeze({\r\n      \/\/ Country selection\r\n      COUNTRY_ADDED: \"COUNTRY_ADDED\",\r\n      COUNTRY_REPLACED: \"COUNTRY_REPLACED\",\r\n      COUNTRY_REMOVED: \"COUNTRY_REMOVED\",\r\n\r\n      \/\/ Comparison table display\r\n      SHOW_ALL_CHARACTERISTICS_TOGGLED: \"SHOW_ALL_CHARACTERISTICS_TOGGLED\",\r\n\r\n      \/\/ Country Picker modal\r\n      PICKER_OPENED: \"PICKER_OPENED\", \/\/ payload: { mode: 'add' | 'replace', targetCountryId?: string }\r\n      PICKER_CLOSED: \"PICKER_CLOSED\",\r\n      PICKER_SEARCH_CHANGED: \"PICKER_SEARCH_CHANGED\",\r\n\r\n      \/\/ Quiz\r\n      QUIZ_OPENED: \"QUIZ_OPENED\",\r\n      QUIZ_CLOSED: \"QUIZ_CLOSED\", \/\/ per Business Rules: discards progress immediately, no confirm\r\n      QUIZ_ANSWER_SELECTED: \"QUIZ_ANSWER_SELECTED\",\r\n      QUIZ_BACK: \"QUIZ_BACK\",\r\n      QUIZ_COMPLETED: \"QUIZ_COMPLETED\", \/\/ payload: { recommendationResult }\r\n\r\n      \/\/ Recommendation banner\r\n      RECOMMENDATION_REAPPLIED: \"RECOMMENDATION_REAPPLIED\",\r\n      RECOMMENDATION_DISMISSED: \"RECOMMENDATION_DISMISSED\",\r\n    });\r\n\r\n    \/* ============================================================================\r\n     * SECTION 2 \u2014 INITIAL STATE\r\n     * ============================================================================\r\n     * Matches the shape sketched in DATA_MODEL.md. Depends on OVZA_CONFIG from\r\n     * the domain model for the default comparison count \u2014 never hardcoded here.\r\n     *\/\r\n    function createInitialState() {\r\n      const viewportWidth =\r\n        (typeof window !== \"undefined\" && window.innerWidth) || 1440;\r\n      const limits = getComparisonLimitsForViewport(viewportWidth);\r\n\r\n      const defaultCountries = getAllCountries()\r\n        .filter(function (c) {\r\n          return c.comparison != null;\r\n        }) \/\/ only countries with real content, for now\r\n        .slice(0, limits.defaultCount)\r\n        .map(function (c) {\r\n          return c.id;\r\n        });\r\n\r\n      return {\r\n        selectedCountryIds: defaultCountries,\r\n\r\n        ui: {\r\n          showAllCharacteristics:\r\n            OVZA_CONFIG.comparisonTable.defaultShowAllCharacteristics,\r\n          viewportWidth: viewportWidth,\r\n\r\n          picker: {\r\n            isOpen: false,\r\n            mode: null, \/\/ 'add' | 'replace'\r\n            targetCountryId: null, \/\/ which country slot is being replaced (mode === 'replace')\r\n            searchQuery: \"\",\r\n          },\r\n        },\r\n\r\n        quiz: {\r\n          isOpen: false,\r\n          currentQuestionIndex: 0,\r\n          answers: {}, \/\/ never persisted beyond this session \u2014 cleared on close\/complete\r\n        },\r\n\r\n        recommendation: {\r\n          status: \"none\", \/\/ 'none' | 'recommended' \u2014 see resolveConflict note on\r\n          \/\/ dismissRecommendationIfNeeded() below: a prior draft had\r\n          \/\/ a third 'modified' value; resolved as unreachable per\r\n          \/\/ Figma Dev Annotation #2 vs. BUSINESS_RULES.md conflict.\r\n          result: null, \/\/ Recommendation Result object (see domain model), or null\r\n        },\r\n      };\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 3 \u2014 REDUCER\r\n     * ============================================================================\r\n     * One pure function: (state, action) -> new state. Never mutates the input\r\n     * state object \u2014 always returns a new one. This is what makes the store\r\n     * predictable and testable without any DOM involved.\r\n     *\/\r\n    function reducer(state, action) {\r\n      switch (action.type) {\r\n        case ActionTypes.COUNTRY_ADDED: {\r\n          const limits = getComparisonLimitsForViewport(state.ui.viewportWidth);\r\n          if (state.selectedCountryIds.length >= limits.maxCount) return state; \/\/ silently no-op at cap\r\n          if (state.selectedCountryIds.indexOf(action.payload.countryId) !== -1)\r\n            return state; \/\/ no duplicates, per ADR-007\r\n\r\n          return Object.assign({}, state, {\r\n            selectedCountryIds: state.selectedCountryIds.concat(\r\n              action.payload.countryId,\r\n            ),\r\n            recommendation: dismissRecommendationIfNeeded(state.recommendation),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.COUNTRY_REPLACED: {\r\n          const { targetCountryId, newCountryId } = action.payload;\r\n          if (state.selectedCountryIds.indexOf(newCountryId) !== -1)\r\n            return state; \/\/ no duplicates\r\n\r\n          return Object.assign({}, state, {\r\n            selectedCountryIds: state.selectedCountryIds.map(function (id) {\r\n              return id === targetCountryId ? newCountryId : id;\r\n            }),\r\n            recommendation: dismissRecommendationIfNeeded(state.recommendation),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.COUNTRY_REMOVED: {\r\n          return Object.assign({}, state, {\r\n            selectedCountryIds: state.selectedCountryIds.filter(function (id) {\r\n              return id !== action.payload.countryId;\r\n            }),\r\n            recommendation: dismissRecommendationIfNeeded(state.recommendation),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.SHOW_ALL_CHARACTERISTICS_TOGGLED: {\r\n          return Object.assign({}, state, {\r\n            ui: Object.assign({}, state.ui, {\r\n              showAllCharacteristics: !state.ui.showAllCharacteristics,\r\n            }),\r\n          });\r\n          \/\/ Note: per Business Rules, this NEVER touches recommendation.status \u2014\r\n          \/\/ it's a rendering-only setting, not a \"manual change\" to selection.\r\n        }\r\n\r\n        case ActionTypes.PICKER_OPENED: {\r\n          return Object.assign({}, state, {\r\n            ui: Object.assign({}, state.ui, {\r\n              picker: {\r\n                isOpen: true,\r\n                mode: action.payload.mode,\r\n                targetCountryId: action.payload.targetCountryId || null,\r\n                searchQuery: \"\",\r\n              },\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.PICKER_CLOSED: {\r\n          return Object.assign({}, state, {\r\n            ui: Object.assign({}, state.ui, {\r\n              picker: Object.assign({}, state.ui.picker, { isOpen: false }),\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.PICKER_SEARCH_CHANGED: {\r\n          return Object.assign({}, state, {\r\n            ui: Object.assign({}, state.ui, {\r\n              picker: Object.assign({}, state.ui.picker, {\r\n                searchQuery: action.payload.query,\r\n              }),\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.QUIZ_OPENED: {\r\n          return Object.assign({}, state, {\r\n            quiz: { isOpen: true, currentQuestionIndex: 0, answers: {} },\r\n          });\r\n        }\r\n\r\n        case ActionTypes.QUIZ_CLOSED: {\r\n          \/\/ Per Business Rules: immediate discard, no confirmation.\r\n          return Object.assign({}, state, {\r\n            quiz: { isOpen: false, currentQuestionIndex: 0, answers: {} },\r\n          });\r\n        }\r\n\r\n        case ActionTypes.QUIZ_ANSWER_SELECTED: {\r\n          const { questionId, answerId } = action.payload;\r\n          return Object.assign({}, state, {\r\n            quiz: Object.assign({}, state.quiz, {\r\n              answers: Object.assign({}, state.quiz.answers, {\r\n                [questionId]: answerId,\r\n              }),\r\n              currentQuestionIndex: state.quiz.currentQuestionIndex + 1,\r\n              \/\/ Per Business Rules: single-select auto-advances after a (renderer-\r\n              \/\/ owned) ~300ms animation delay. The delay\/animation itself is a\r\n              \/\/ rendering concern; this reducer just advances the index\r\n              \/\/ immediately when the action arrives.\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.QUIZ_BACK: {\r\n          if (state.quiz.currentQuestionIndex === 0) return state; \/\/ back hidden on Q1, per Business Rules\r\n          return Object.assign({}, state, {\r\n            quiz: Object.assign({}, state.quiz, {\r\n              currentQuestionIndex: state.quiz.currentQuestionIndex - 1,\r\n              \/\/ Business Rules: \"Back restores previous answer\" \u2014 the answer\r\n              \/\/ itself is untouched in state.quiz.answers, so simply moving the\r\n              \/\/ index back naturally re-reveals it. Nothing to restore explicitly.\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.QUIZ_COMPLETED: {\r\n          const result = action.payload.recommendationResult;\r\n          return Object.assign({}, state, {\r\n            selectedCountryIds: result.countries.map(function (c) {\r\n              return c.countryId;\r\n            }),\r\n            quiz: { isOpen: false, currentQuestionIndex: 0, answers: {} }, \/\/ discarded per Business Rules\r\n            recommendation: { status: \"recommended\", result: result },\r\n          });\r\n        }\r\n\r\n        case ActionTypes.RECOMMENDATION_REAPPLIED: {\r\n          if (!state.recommendation.result) return state;\r\n          return Object.assign({}, state, {\r\n            selectedCountryIds: state.recommendation.result.countries.map(\r\n              function (c) {\r\n                return c.countryId;\r\n              },\r\n            ),\r\n            recommendation: Object.assign({}, state.recommendation, {\r\n              status: \"recommended\",\r\n            }),\r\n          });\r\n        }\r\n\r\n        case ActionTypes.RECOMMENDATION_DISMISSED: {\r\n          \/\/ CONFIRMED: Dismiss only hides the banner (status -> 'none'). The\r\n          \/\/ computed result is deliberately kept, not nulled, so Reapply\r\n          \/\/ remains available afterward (e.g. from wherever else it might\r\n          \/\/ surface later) even though the banner itself is no longer shown.\r\n          return Object.assign({}, state, {\r\n            recommendation: Object.assign({}, state.recommendation, {\r\n              status: \"none\",\r\n            }),\r\n          });\r\n        }\r\n\r\n        default:\r\n          return state;\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * CONFLICT RESOLVED (confirmed decision): BUSINESS_RULES.md \/ DECISIONS.md\r\n     * originally described a third banner state, MODIFIED (distinct copy +\r\n     * \"Reapply Recommendation\" button). Figma Dev Annotation #2 instead says any\r\n     * manual change \"auto-dismisses\" the banner. Confirmed reading: this means\r\n     * manual changes collapse straight to 'none' \u2014 the same visible outcome as\r\n     * clicking Dismiss \u2014 not a separate visual state. There is no MODIFIED UI to\r\n     * build.\r\n     *\r\n     * `result` is deliberately NOT cleared here (same as the Dismiss action) \u2014\r\n     * so a future \"Reapply\" entry point elsewhere (not the banner, since it's\r\n     * hidden) remains possible without recomputing anything. If Product later\r\n     * wants that affordance, RECOMMENDATION_REAPPLIED already works from this\r\n     * state \u2014 it only checks that `result` exists, not the current status.\r\n     *\r\n     * Triggered by ANY manual selection change (Add \/ Replace \/ Remove) \u2014 not\r\n     * just replacing a recommended country specifically \u2014 per Dev Annotation #2.\r\n     * No-ops if status is already 'none' (nothing to dismiss).\r\n     *\/\r\n    function dismissRecommendationIfNeeded(recommendation) {\r\n      if (recommendation.status !== \"recommended\") return recommendation;\r\n      return Object.assign({}, recommendation, { status: \"none\" });\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 4 \u2014 STORE (subscribe \/ dispatch)\r\n     * ============================================================================\r\n     * Minimal pub-sub store, framework-free (per PROJECT_CONTEXT.md: no\r\n     * frameworks). This is the ONLY object a future renderer should ever touch \u2014\r\n     * renderers call store.getState() and store.subscribe(), and dispatch\r\n     * actions in response to DOM events. Renderers never call the reducer\r\n     * directly and never mutate state.\r\n     *\/\r\n    function createStore(initialState, reducerFn) {\r\n      let state = initialState;\r\n      const listeners = [];\r\n\r\n      return {\r\n        getState: function () {\r\n          return state;\r\n        },\r\n        dispatch: function (action) {\r\n          state = reducerFn(state, action);\r\n          listeners.forEach(function (listener) {\r\n            listener(state, action);\r\n          });\r\n        },\r\n        subscribe: function (listener) {\r\n          listeners.push(listener);\r\n          return function unsubscribe() {\r\n            const index = listeners.indexOf(listener);\r\n            if (index !== -1) listeners.splice(index, 1);\r\n          };\r\n        },\r\n      };\r\n    }\r\n\r\n    \/**\r\n     * The single shared store instance for this feature, per ADR-001 (Comparison\r\n     * Table, Country Picker, Quiz, Recommendation Engine, and Banner all read\r\n     * from and dispatch to this one store \u2014 not independent widgets).\r\n     *\/\r\n    const ovzaStore = createStore(createInitialState(), reducer);\r\n    \/**\r\n     * ============================================================================\r\n     * OVZA COMPARISON \u2014 RENDERER\r\n     * ============================================================================\r\n     *\r\n     * Depends on: 01-domain-model.js, 02-state-model.js\r\n     *\r\n     * RULES (per ADR-002 \/ ADR-011):\r\n     * - Render functions read state and domain data, and return HTML strings.\r\n     *   They never calculate business rules themselves (e.g. they call\r\n     *   getVisibleComparisonFieldKeys() rather than diffing values inline here).\r\n     * - Only ONE place in this file touches the real DOM directly: the bootstrap\r\n     *   section at the bottom, which subscribes to the store and writes\r\n     *   innerHTML. Event listeners there ONLY dispatch actions \u2014 they never\r\n     *   compute new state themselves.\r\n     * - Event delegation is used throughout (one listener per container), not\r\n     *   inline onclick attributes \u2014 per ADR-011 \/ performance goals.\r\n     * ============================================================================\r\n     *\/\r\n\r\n    \/* ============================================================================\r\n     * SECTION 1 \u2014 SHARED PRESENTATION HELPERS\r\n     * ============================================================================\r\n     * Small pure formatting helpers used by multiple render functions. These are\r\n     * presentation-only (how a value LOOKS), not business logic (what the value\r\n     * IS) \u2014 that distinction is why they live here and not in the domain model.\r\n     *\/\r\n\r\n    function escapeHtml(str) {\r\n      if (str == null) return \"\";\r\n      return String(str)\r\n        .replace(\/&\/g, \"&amp;\")\r\n        .replace(\/<\/g, \"&lt;\")\r\n        .replace(\/>\/g, \"&gt;\")\r\n        .replace(\/\"\/g, \"&quot;\");\r\n    }\r\n\r\n    function formatMoney(amount, currency) {\r\n      if (amount == null) return \"\u2014\";\r\n      return (\r\n        \"$\" +\r\n        amount.toLocaleString(\"en-US\") +\r\n        (currency && currency !== \"USD\" ? \" \" + currency : \"\")\r\n      );\r\n    }\r\n\r\n    function formatFormationTime(formationTime) {\r\n      if (!formationTime) return \"\u2014\";\r\n      return (\r\n        formationTime.min +\r\n        \"\u2013\" +\r\n        formationTime.max +\r\n        \" \" +\r\n        (formationTime.unit === \"days\" ? \"days\" : formationTime.unit)\r\n      );\r\n    }\r\n\r\n    function formatFormationTimeShort(formationTime) {\r\n      if (!formationTime) return \"\u2014\";\r\n      return formationTime.min + \"\u2013\" + formationTime.max + \"d\";\r\n    }\r\n\r\n    \/**\r\n     * Renders a comparison-field value as a status pill. Field-specific icon\r\n     * choices (meter \/ dot \/ lock) match the Figma design's per-row icon\r\n     * language. This is presentation logic only \u2014 deciding HOW a value looks,\r\n     * not whether it's shown (that's the domain model's job).\r\n     *\/\r\n    function renderStatusPill(fieldKey, value, size) {\r\n      if (!value) return '<span class=\"ovza-cmp__pill-empty\">\u2014<\/span>';\r\n\r\n      const sizeClass = size === \"sm\" ? \"ovza-cmp__pill--sm\" : \"\";\r\n      let isPositive = false;\r\n      let icon = \"\";\r\n      let label = \"\";\r\n\r\n      if (fieldKey === \"euStatus\") {\r\n        isPositive = value.status === \"cleared\";\r\n        icon =\r\n          '<span class=\"ovza-cmp__dot ' +\r\n          (isPositive ? \"ovza-cmp__dot--positive\" : \"ovza-cmp__dot--neutral\") +\r\n          '\"><\/span>';\r\n        label =\r\n          escapeHtml(isPositive ? \"Cleared\" : \"Blacklisted\") +\r\n          (value.priorListing\r\n            ? \" \u00b7 was \" + escapeHtml(value.priorListing)\r\n            : \"\");\r\n      } else if (fieldKey === \"oecdAlignment\") {\r\n        \/\/ Compliance-framework participation reads as a positive\/neutral signal\r\n        \/\/ either way \u2014 not something to visually penalize.\r\n        isPositive = true;\r\n        icon = '<span class=\"ovza-cmp__dot ovza-cmp__dot--positive\"><\/span>';\r\n        label = escapeHtml((value.frameworks || []).join(\", \"));\r\n      } else if (fieldKey === \"taxOnOffshoreProfits\") {\r\n        isPositive = value.type === \"none\";\r\n        icon =\r\n          '<span class=\"ovza-cmp__dot ' +\r\n          (isPositive ? \"ovza-cmp__dot--positive\" : \"ovza-cmp__dot--neutral\") +\r\n          '\"><\/span>';\r\n        label =\r\n          value.type === \"none\"\r\n            ? \"None\"\r\n            : escapeHtml(\r\n                value.type.charAt(0).toUpperCase() + value.type.slice(1),\r\n              );\r\n      } else if (fieldKey === \"foreignOwnership\") {\r\n        isPositive = value.allowed === true;\r\n        icon =\r\n          '<span class=\"ovza-cmp__dot ' +\r\n          (isPositive ? \"ovza-cmp__dot--positive\" : \"ovza-cmp__dot--neutral\") +\r\n          '\"><\/span>';\r\n        label = value.allowed ? \"100% allowed\" : \"Restricted\";\r\n      } else if (fieldKey === \"companyType\") {\r\n        \/\/ Purely informational \u2014 not a \"good\/bad\" comparison, just a fact.\r\n        isPositive = false;\r\n        label = escapeHtml(value.name);\r\n      } else if (fieldKey === \"localSubstance\") {\r\n        \/\/ \"Not required\" reads as simpler\/lower compliance burden \u2014 favorable\r\n        \/\/ for someone comparing ease of setup, consistent with how the rest of\r\n        \/\/ this table treats \"fewer requirements\" as the positive state.\r\n        isPositive = value.required === false;\r\n        icon =\r\n          '<span class=\"ovza-cmp__dot ' +\r\n          (isPositive ? \"ovza-cmp__dot--positive\" : \"ovza-cmp__dot--neutral\") +\r\n          '\"><\/span>';\r\n        label = value.required ? \"Required\" : \"Not required\";\r\n      } else if (fieldKey === \"publicRegister\") {\r\n        isPositive = value.level === \"none\";\r\n        icon =\r\n          '<span class=\"ovza-cmp__lock\">' +\r\n          (isPositive ? \"\ud83d\udd12\" : \"\ud83d\udd13\") +\r\n          \"<\/span>\";\r\n        label =\r\n          value.level === \"none\"\r\n            ? \"Private\"\r\n            : value.level === \"partial\"\r\n              ? \"Partial\"\r\n              : \"Public\";\r\n      } else {\r\n        \/\/ Generic fallback for future fields not yet given specific icon treatment.\r\n        label = escapeHtml(JSON.stringify(value));\r\n      }\r\n\r\n      const pillClass = isPositive\r\n        ? \"ovza-cmp__pill--positive\"\r\n        : \"ovza-cmp__pill--neutral\";\r\n      return (\r\n        '<span class=\"ovza-cmp__pill ' +\r\n        pillClass +\r\n        \" \" +\r\n        sizeClass +\r\n        '\">' +\r\n        icon +\r\n        '<span class=\"ovza-cmp__pill-label\">' +\r\n        label +\r\n        \"<\/span><\/span>\"\r\n      );\r\n    }\r\n\r\n    function fieldTitle(fieldKey) {\r\n      \/\/ Presentation-only label map \u2014 matches the legacy `features` array's own\r\n      \/\/ titles exactly, since that's the confirmed source of truth for this\r\n      \/\/ factor set. If a field is added to the data without a matching title\r\n      \/\/ here, falls back to a readable auto-generated label rather than\r\n      \/\/ showing raw camelCase.\r\n      const titles = {\r\n        euStatus: \"EU List Status\",\r\n        oecdAlignment: \"OECD Alignment\",\r\n        taxOnOffshoreProfits: \"Taxation on Offshore Profits\",\r\n        foreignOwnership: \"100% Foreign Ownership\",\r\n        companyType: \"Offshore Company Type\",\r\n        localSubstance: \"Local Substance Requirements\",\r\n        publicRegister: \"Public Register of Directors\",\r\n      };\r\n      if (titles[fieldKey]) return titles[fieldKey];\r\n      return fieldKey.replace(\/([A-Z])\/g, \" $1\").replace(\/^.\/, function (s) {\r\n        return s.toUpperCase();\r\n      });\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 2 \u2014 COMPARISON TABLE RENDER (desktop)\r\n     * ============================================================================\r\n     *\/\r\n\r\n    function renderCountryHeaderDesktop(country, isFirst) {\r\n      if (!isCountryComparisonReady(country)) {\r\n        return (\r\n          '<div class=\"ovza-cmp__country-header\">' +\r\n          '<div class=\"ovza-cmp__country-header-top\">' +\r\n          '<div class=\"ovza-cmp__name-row\"><p class=\"ovza-cmp__country-name\">' +\r\n          escapeHtml(country.flag.value) +\r\n          \" \" +\r\n          escapeHtml(country.name) +\r\n          \"<\/p><\/div>\" +\r\n          '<p class=\"ovza-cmp__entity-type\">Content coming soon for this jurisdiction.<\/p>' +\r\n          \"<\/div>\" +\r\n          \"<\/div>\"\r\n        );\r\n      }\r\n      return (\r\n        '<div class=\"ovza-cmp__country-header\">' +\r\n        '<div class=\"ovza-cmp__country-header-top\">' +\r\n        '<div class=\"ovza-cmp__name-row\">' +\r\n        '<p class=\"ovza-cmp__country-name\">' +\r\n        escapeHtml(country.flag.value) +\r\n        \" \" +\r\n        escapeHtml(country.name) +\r\n        \"<\/p>\" +\r\n        '<button type=\"button\" class=\"ovza-cmp__change-link\" data-action=\"open-replace\" data-country-id=\"' +\r\n        country.id +\r\n        '\">Change<\/button>' +\r\n        \"<\/div>\" +\r\n        '<p class=\"ovza-cmp__entity-type\">' +\r\n        escapeHtml(country.entityType || \"\") +\r\n        \"<\/p>\" +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__country-header-bottom\">' +\r\n        '<div class=\"ovza-cmp__stats\">' +\r\n        '<div class=\"ovza-cmp__stat-card\"><p class=\"ovza-cmp__stat-value\">' +\r\n        formatMoney(\r\n          country.pricing.formationPrice.amount,\r\n          country.pricing.formationPrice.currency,\r\n        ) +\r\n        '<\/p><p class=\"ovza-cmp__stat-label\">From<\/p><\/div>' +\r\n        '<div class=\"ovza-cmp__stat-card\"><p class=\"ovza-cmp__stat-value\">' +\r\n        formatFormationTimeShort(country.pricing.formationTime) +\r\n        '<\/p><p class=\"ovza-cmp__stat-label\">Formation<\/p><\/div>' +\r\n        '<div class=\"ovza-cmp__stat-card\"><p class=\"ovza-cmp__stat-value\">' +\r\n        formatMoney(\r\n          country.pricing.renewalPrice.amount,\r\n          country.pricing.renewalPrice.currency,\r\n        ) +\r\n        '<\/p><p class=\"ovza-cmp__stat-label\">Renewal\/yr<\/p><\/div>' +\r\n        \"<\/div>\" +\r\n        '<a class=\"ovza-cmp__cta\" href=\"' +\r\n        escapeHtml(country.cta.startFormationUrl) +\r\n        '\">Start formation<\/a>' +\r\n        '<a class=\"ovza-cmp__guide-link\" href=\"' +\r\n        escapeHtml(country.cta.countryGuideUrl) +\r\n        '\">' +\r\n        escapeHtml(country.shortName) +\r\n        \" Country Page \u2192<\/a>\" +\r\n        \"<\/div>\" +\r\n        \"<\/div>\"\r\n      );\r\n    }\r\n\r\n    function renderShowAllToggle(showAll, fullWidth) {\r\n      return (\r\n        '<button type=\"button\" class=\"ovza-cmp__toggle' +\r\n        (fullWidth ? \" ovza-cmp__toggle--full\" : \"\") +\r\n        '\" data-action=\"toggle-show-all\" aria-pressed=\"' +\r\n        (showAll ? \"true\" : \"false\") +\r\n        '\">' +\r\n        '<span class=\"ovza-cmp__toggle-label\">Show all characteristics<\/span>' +\r\n        '<span class=\"ovza-cmp__toggle-track\"><span class=\"ovza-cmp__toggle-thumb\"><\/span><\/span>' +\r\n        \"<\/button>\"\r\n      );\r\n    }\r\n\r\n    function renderAddCountryBlock(currentCount, maxCount) {\r\n      if (currentCount >= maxCount) {\r\n        return (\r\n          '<p class=\"ovza-cmp__cap-note\">Maximum reached (' + maxCount + \")<\/p>\"\r\n        );\r\n      }\r\n      return (\r\n        '<div class=\"ovza-cmp__add-block\">' +\r\n        '<button type=\"button\" class=\"ovza-cmp__add-btn\" data-action=\"open-add\">+ Add country<\/button>' +\r\n        '<span class=\"ovza-cmp__cap-note\">up to ' +\r\n        maxCount +\r\n        \"<\/span>\" +\r\n        \"<\/div>\"\r\n      );\r\n    }\r\n\r\n    function renderComparisonTableDesktop(state) {\r\n      const countries = state.selectedCountryIds\r\n        .map(getCountryById)\r\n        .filter(Boolean);\r\n      const withData = countries.filter(function (c) {\r\n        return c.comparison;\r\n      });\r\n      const fieldKeys = getVisibleComparisonFieldKeys(\r\n        state.selectedCountryIds,\r\n        state.ui.showAllCharacteristics,\r\n      );\r\n      const limits = OVZA_CONFIG.comparison.desktop;\r\n\r\n      let html = '<div class=\"ovza-cmp__panel\">';\r\n\r\n      \/\/ Panel bar\r\n      html +=\r\n        '<div class=\"ovza-cmp__panel-bar\">' +\r\n        '<div class=\"ovza-cmp__title-block\">' +\r\n        '<p class=\"ovza-cmp__title\">Compare jurisdictions<\/p>' +\r\n        '<p class=\"ovza-cmp__subtitle\">Showing only what differs between countries.<\/p>' +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__panel-bar-controls\">' +\r\n        renderShowAllToggle(state.ui.showAllCharacteristics, false) +\r\n        renderAddCountryBlock(countries.length, limits.maxCount) +\r\n        \"<\/div>\" +\r\n        \"<\/div>\";\r\n\r\n      \/\/ Header row + all data rows share ONE horizontal scroll container so\r\n      \/\/ they scroll in sync as a single unit \u2014 per ADR-004 (\"additional columns\r\n      \/\/ accessed through horizontal scrolling\"). Fixed min-widths on columns\r\n      \/\/ (set in CSS) mean content triggers real scrolling instead of squishing\r\n      \/\/ on narrower desktop\/laptop screens once 4 countries are selected.\r\n      html +=\r\n        '<div class=\"ovza-cmp__scroll-wrap\" style=\"--ovza-cmp-grid-template: 210px repeat(' +\r\n        countries.length +\r\n        ', minmax(260px, 1fr));\">';\r\n\r\n      \/\/ Header row\r\n      html += '<div class=\"ovza-cmp__header-row\">';\r\n      html +=\r\n        '<div class=\"ovza-cmp__corner-cell\"><p class=\"ovza-cmp__corner-label\">Side by side<\/p><\/div>';\r\n      countries.forEach(function (country, index) {\r\n        html += renderCountryHeaderDesktop(country, index === 0);\r\n      });\r\n      html += \"<\/div>\";\r\n\r\n      \/\/ Data rows \u2014 only rendered for countries that actually have comparison data.\r\n      if (withData.length > 0) {\r\n        fieldKeys.forEach(function (fieldKey) {\r\n          html += '<div class=\"ovza-cmp__row\">';\r\n          html +=\r\n            '<div class=\"ovza-cmp__label-cell\"><p class=\"ovza-cmp__row-label\">' +\r\n            escapeHtml(fieldTitle(fieldKey)) +\r\n            \"<\/p><\/div>\";\r\n          countries.forEach(function (country) {\r\n            const value = country.comparison\r\n              ? country.comparison[fieldKey]\r\n              : null;\r\n            html +=\r\n              '<div class=\"ovza-cmp__value-cell\">' +\r\n              renderStatusPill(fieldKey, value) +\r\n              \"<\/div>\";\r\n          });\r\n          html += \"<\/div>\";\r\n        });\r\n      } else {\r\n        html +=\r\n          '<div class=\"ovza-cmp__no-data-notice\">Comparison content for the selected countries isn\\'t available yet.<\/div>';\r\n      }\r\n\r\n      html += \"<\/div>\"; \/\/ close .ovza-cmp__scroll-wrap\r\n\r\n      \/\/ Footer \u2014 static per Figma; only rendered when we have real comparison data to show alongside it.\r\n      if (withData.length > 0) {\r\n        html +=\r\n          '<div class=\"ovza-cmp__footer\">' +\r\n          \"<p>True for every jurisdiction we register in: 100% foreign ownership \u00b7 no public register of directors \u00b7 OECD-aligned (AEOI \u00b7 EOIR \u00b7 BEPS)<\/p>\" +\r\n          \"<p>Worth knowing: the factor people underestimate isn\\u2019t price \u2014 it\\u2019s banking. Weigh compliance standing as heavily as cost.<\/p>\" +\r\n          \"<p>Data reviewed July 2026 \u00b7<\/p>\" +\r\n          \"<\/div>\";\r\n      }\r\n\r\n      html += \"<\/div>\";\r\n      return html;\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 3 \u2014 COMPARISON TABLE RENDER (mobile)\r\n     * ============================================================================\r\n     *\/\r\n\r\n    function renderCountryHeaderMobile(country, isFirst) {\r\n      if (!isCountryComparisonReady(country)) {\r\n        return (\r\n          '<div class=\"ovza-cmp__country-header-m\">' +\r\n          '<div class=\"ovza-cmp__country-header-m-top\">' +\r\n          '<div class=\"ovza-cmp__name-row\"><p class=\"ovza-cmp__country-name-m\">' +\r\n          escapeHtml(country.flag.value) +\r\n          \" \" +\r\n          escapeHtml(country.shortName) +\r\n          \"<\/p><\/div>\" +\r\n          '<p class=\"ovza-cmp__entity-type-m\">Content coming soon.<\/p>' +\r\n          \"<\/div>\" +\r\n          \"<\/div>\"\r\n        );\r\n      }\r\n      return (\r\n        '<div class=\"ovza-cmp__country-header-m\">' +\r\n        '<div class=\"ovza-cmp__country-header-m-top\">' +\r\n        '<div class=\"ovza-cmp__name-row\">' +\r\n        '<p class=\"ovza-cmp__country-name-m\">' +\r\n        escapeHtml(country.flag.value) +\r\n        \" \" +\r\n        escapeHtml(country.shortName) +\r\n        \"<\/p>\" +\r\n        '<button type=\"button\" class=\"ovza-cmp__change-link\" data-action=\"open-replace\" data-country-id=\"' +\r\n        country.id +\r\n        '\">Change<\/button>' +\r\n        \"<\/div>\" +\r\n        '<p class=\"ovza-cmp__entity-type-m\">' +\r\n        escapeHtml(country.entityType || \"\") +\r\n        \"<\/p>\" +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__country-header-m-bottom\">' +\r\n        '<div class=\"ovza-cmp__facts\">' +\r\n        '<div class=\"ovza-cmp__fact-row\"><span>From<\/span><strong>' +\r\n        formatMoney(\r\n          country.pricing.formationPrice.amount,\r\n          country.pricing.formationPrice.currency,\r\n        ) +\r\n        \"<\/strong><\/div>\" +\r\n        '<div class=\"ovza-cmp__fact-row\"><span>Formation<\/span><strong>' +\r\n        formatFormationTime(country.pricing.formationTime) +\r\n        \"<\/strong><\/div>\" +\r\n        '<div class=\"ovza-cmp__fact-row\"><span>Renewal<\/span><strong>' +\r\n        formatMoney(\r\n          country.pricing.renewalPrice.amount,\r\n          country.pricing.renewalPrice.currency,\r\n        ) +\r\n        \"\/yr<\/strong><\/div>\" +\r\n        \"<\/div>\" +\r\n        '<a class=\"ovza-cmp__cta ovza-cmp__cta--m\" href=\"' +\r\n        escapeHtml(country.cta.startFormationUrl) +\r\n        '\">Start formation<\/a>' +\r\n        '<a class=\"ovza-cmp__guide-link ovza-cmp__guide-link--m\" href=\"' +\r\n        escapeHtml(country.cta.countryGuideUrl) +\r\n        '\">' +\r\n        escapeHtml(country.shortName) +\r\n        \" Page \u2192<\/a>\" +\r\n        \"<\/div>\" +\r\n        \"<\/div>\"\r\n      );\r\n    }\r\n\r\n    function renderComparisonTableMobile(state) {\r\n      const countries = state.selectedCountryIds\r\n        .map(getCountryById)\r\n        .filter(Boolean);\r\n      const withData = countries.filter(function (c) {\r\n        return c.comparison;\r\n      });\r\n      const fieldKeys = getVisibleComparisonFieldKeys(\r\n        state.selectedCountryIds,\r\n        state.ui.showAllCharacteristics,\r\n      );\r\n      const limits = OVZA_CONFIG.comparison.mobile;\r\n      const gridTemplateM =\r\n        \"repeat(\" + countries.length + \", minmax(150px, 1fr))\";\r\n\r\n      let html = '<div class=\"ovza-cmp__panel ovza-cmp__panel--m\">';\r\n\r\n      html +=\r\n        '<div class=\"ovza-cmp__panel-bar ovza-cmp__panel-bar--m\">' +\r\n        '<p class=\"ovza-cmp__title ovza-cmp__title--m\">Compare jurisdictions<\/p>' +\r\n        '<p class=\"ovza-cmp__subtitle ovza-cmp__subtitle--m\">' +\r\n        countries.length +\r\n        \" side by side \u2014 change a country to compare others.<\/p>\" +\r\n        renderShowAllToggle(state.ui.showAllCharacteristics, true);\r\n\r\n      \/\/ Add-country control now sits in the panel bar (top), matching desktop\r\n      \/\/ placement \u2014 moved per explicit request; still uses the desktop-style\r\n      \/\/ dashed pill visual as no distinct mobile Figma frame exists for this\r\n      \/\/ control (flagged previously, unchanged design-wise, only repositioned).\r\n      if (countries.length < limits.maxCount) {\r\n        html +=\r\n          '<div class=\"ovza-cmp__add-block ovza-cmp__add-block--m\">' +\r\n          '<button type=\"button\" class=\"ovza-cmp__add-btn\" data-action=\"open-add\">+ Add country<\/button>' +\r\n          '<span class=\"ovza-cmp__cap-note\">up to ' +\r\n          limits.maxCount +\r\n          \"<\/span>\" +\r\n          \"<\/div>\";\r\n      }\r\n\r\n      html += \"<\/div>\"; \/\/ close panel-bar--m\r\n\r\n      \/\/ Entire table (header + every label-strip\/cells pair) shares ONE scroll\r\n      \/\/ container \u2014 see CSS comment on .ovza-cmp__scroll-wrap-m for why. The\r\n      \/\/ grid template is set ONCE here via a CSS custom property and inherited\r\n      \/\/ by the header row, every cells row, AND every label strip \u2014 guaranteeing\r\n      \/\/ identical column tracks everywhere without any per-element width math.\r\n      html +=\r\n        '<div class=\"ovza-cmp__scroll-wrap-m\" style=\"--ovza-cmp-grid-template-m: ' +\r\n        gridTemplateM +\r\n        ';\">';\r\n\r\n      html += '<div class=\"ovza-cmp__header-row-m\">';\r\n      countries.forEach(function (country, index) {\r\n        html += renderCountryHeaderMobile(country, index === 0);\r\n      });\r\n      html += \"<\/div>\";\r\n\r\n      if (withData.length > 0) {\r\n        fieldKeys.forEach(function (fieldKey) {\r\n          html +=\r\n            '<div class=\"ovza-cmp__row-label-strip-m\"><p>' +\r\n            escapeHtml(fieldTitle(fieldKey).toUpperCase()) +\r\n            \"<\/p><\/div>\";\r\n          html += '<div class=\"ovza-cmp__cells-m\">';\r\n          countries.forEach(function (country) {\r\n            const value = country.comparison\r\n              ? country.comparison[fieldKey]\r\n              : null;\r\n            html +=\r\n              '<div class=\"ovza-cmp__cell-m\">' +\r\n              renderStatusPill(fieldKey, value, \"sm\") +\r\n              \"<\/div>\";\r\n          });\r\n          html += \"<\/div>\";\r\n        });\r\n      } else {\r\n        html +=\r\n          '<div class=\"ovza-cmp__no-data-notice\">Comparison content for the selected countries isn\\'t available yet.<\/div>';\r\n      }\r\n\r\n      html += \"<\/div>\"; \/\/ close .ovza-cmp__scroll-wrap-m\r\n\r\n      if (withData.length > 0) {\r\n        html +=\r\n          '<div class=\"ovza-cmp__footer ovza-cmp__footer--m\">' +\r\n          \"<p>True for every jurisdiction we register in: 100% foreign ownership \u00b7 no public register of directors \u00b7 OECD-aligned (AEOI \u00b7 EOIR \u00b7 BEPS)<\/p>\" +\r\n          \"<p>Worth knowing: the factor people underestimate isn\\u2019t price \u2014 it\\u2019s banking. Weigh compliance standing as heavily as cost.<\/p>\" +\r\n          \"<p>Data reviewed July 2026 \u00b7<\/p>\" +\r\n          \"<\/div>\";\r\n      }\r\n\r\n      html += \"<\/div>\";\r\n      return html;\r\n    }\r\n\r\n    function renderComparisonTable(state) {\r\n      return state.ui.viewportWidth < OVZA_CONFIG.comparison.breakpointPx\r\n        ? renderComparisonTableMobile(state)\r\n        : renderComparisonTableDesktop(state);\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 4 \u2014 COUNTRY PICKER RENDER\r\n     * ============================================================================\r\n     * Same markup serves both desktop (centered modal) and mobile (full-screen\r\n     * sheet) \u2014 per Business Rules, only the CSS presentation differs, not the\r\n     * content or interaction logic.\r\n     *\/\r\n\r\n    function getRegionGroupedCountries(searchQuery) {\r\n      const query = (searchQuery || \"\").trim().toLowerCase();\r\n      \/\/ Only countries with complete comparison-table content are selectable\r\n      \/\/ here \u2014 see isCountryComparisonReady() in the domain model. The other\r\n      \/\/ 15 countries (scoring-only, no real pricing\/CTA content yet) simply\r\n      \/\/ won't appear in this list until real content is supplied for them.\r\n      const all = getComparisonReadyCountries().filter(function (c) {\r\n        return !query || c.name.toLowerCase().indexOf(query) !== -1;\r\n      });\r\n\r\n      const groups = {};\r\n      all.forEach(function (country) {\r\n        const region = COUNTRY_REGIONS[country.id] || \"Other\";\r\n        if (!groups[region]) groups[region] = [];\r\n        groups[region].push(country);\r\n      });\r\n      return groups;\r\n    }\r\n\r\n    function renderPickerCountryOption(country, selectedCountryIds) {\r\n      \/\/ Any country already in the current selection \u2014 INCLUDING the one being\r\n      \/\/ replaced in the current picker slot \u2014 shows as disabled + \"Comparing\".\r\n      \/\/ Previously the target slot's own country was excluded from this check,\r\n      \/\/ which read as a bug (it looked unselected even though it's literally\r\n      \/\/ the country currently occupying that slot). Re-selecting your own\r\n      \/\/ current country via the picker is a meaningless no-op either way.\r\n      const isAlreadySelected = selectedCountryIds.indexOf(country.id) !== -1;\r\n\r\n      return (\r\n        '<button type=\"button\" class=\"ovza-cmp__picker-option' +\r\n        (isAlreadySelected ? \" ovza-cmp__picker-option--disabled\" : \"\") +\r\n        '\"' +\r\n        (isAlreadySelected\r\n          ? \" disabled\"\r\n          : ' data-action=\"select-country\" data-country-id=\"' +\r\n            country.id +\r\n            '\"') +\r\n        \">\" +\r\n        '<span class=\"ovza-cmp__picker-option-name\">' +\r\n        escapeHtml(country.flag.value) +\r\n        \" \" +\r\n        escapeHtml(country.name) +\r\n        \"<\/span>\" +\r\n        (isAlreadySelected\r\n          ? '<span class=\"ovza-cmp__comparing-tag\">Comparing<\/span>'\r\n          : \"\") +\r\n        \"<\/button>\"\r\n      );\r\n    }\r\n\r\n    function renderCountryPicker(state) {\r\n      const picker = state.ui.picker;\r\n      if (!picker.isOpen) return \"\";\r\n\r\n      const targetCountry = picker.targetCountryId\r\n        ? getCountryById(picker.targetCountryId)\r\n        : null;\r\n      const headerText =\r\n        picker.mode === \"replace\" && targetCountry\r\n          ? \"Replace \" + escapeHtml(targetCountry.name)\r\n          : \"Choose a jurisdiction\";\r\n\r\n      const grouped = getRegionGroupedCountries(picker.searchQuery);\r\n      const regionNames = Object.keys(grouped);\r\n\r\n      let listHtml = \"\";\r\n      if (regionNames.length === 0) {\r\n        \/\/ Empty-search state \u2014 no Figma design existed for this; built to match\r\n        \/\/ the modal's existing visual language (approved as an exception to the\r\n        \/\/ \"don't invent UI\" rule).\r\n        listHtml =\r\n          '<div class=\"ovza-cmp__picker-empty\">' +\r\n          '<p class=\"ovza-cmp__picker-empty-icon\">\ud83d\udd0d<\/p>' +\r\n          '<p class=\"ovza-cmp__picker-empty-title\">No jurisdictions found<\/p>' +\r\n          '<p class=\"ovza-cmp__picker-empty-text\">Try a different search term.<\/p>' +\r\n          \"<\/div>\";\r\n      } else {\r\n        regionNames.forEach(function (region) {\r\n          listHtml +=\r\n            '<div class=\"ovza-cmp__picker-region\"><p>' +\r\n            escapeHtml(region.toUpperCase()) +\r\n            \"<\/p><\/div>\";\r\n          grouped[region].forEach(function (country) {\r\n            listHtml += renderPickerCountryOption(\r\n              country,\r\n              state.selectedCountryIds,\r\n            );\r\n          });\r\n        });\r\n      }\r\n\r\n      return (\r\n        '<div class=\"ovza-cmp__picker-modal\">' +\r\n        '<div class=\"ovza-cmp__picker-header\">' +\r\n        '<p class=\"ovza-cmp__picker-title\">' +\r\n        headerText +\r\n        \"<\/p>\" +\r\n        '<button type=\"button\" class=\"ovza-cmp__picker-close\" data-action=\"close-picker\">\u2715<\/button>' +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__picker-search-wrap\">' +\r\n        '<div class=\"ovza-cmp__picker-search-field\">' +\r\n        \"<span>\u2315<\/span>\" +\r\n        '<input type=\"text\" placeholder=\"Search countries\u2026\" data-action=\"picker-search\" value=\"' +\r\n        escapeHtml(picker.searchQuery) +\r\n        '\" \/>' +\r\n        \"<\/div>\" +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__picker-list\">' +\r\n        listHtml +\r\n        \"<\/div>\" +\r\n        \"<\/div>\"\r\n      );\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 5 \u2014 RECOMMENDATION BANNER RENDER\r\n     * ============================================================================\r\n     * Only the RECOMMENDED state has a visual \u2014 MODIFIED collapses straight to\r\n     * hidden (same as NONE), per the confirmed Figma Dev Annotation #2 vs.\r\n     * BUSINESS_RULES.md conflict resolution. See dismissRecommendationIfNeeded()\r\n     * in the state model for the state-side half of that decision.\r\n     *\/\r\n\r\n    function renderRecommendationBanner(state) {\r\n      if (\r\n        state.recommendation.status !== \"recommended\" ||\r\n        !state.recommendation.result\r\n      )\r\n        return \"\";\r\n\r\n      const isFallback = state.recommendation.result.isFallback;\r\n      const message = isFallback\r\n        ? \"Tell us more anytime \u2014 here are our most popular jurisdictions.\"\r\n        : \"Based on your answers, these jurisdictions are the best fit. Compare them below.\";\r\n      const messageMobile = isFallback\r\n        ? \"Tell us more anytime \u2014 most popular below.\"\r\n        : \"Based on your answers \u2014 compare below.\";\r\n\r\n      if (state.ui.viewportWidth < OVZA_CONFIG.comparison.breakpointPx) {\r\n        return (\r\n          '<div class=\"ovza-cmp__banner ovza-cmp__banner--m\">' +\r\n          '<div class=\"ovza-cmp__banner-row1\">' +\r\n          '<span class=\"ovza-cmp__banner-badge\">YOUR MATCHES<\/span>' +\r\n          '<p class=\"ovza-cmp__banner-message ovza-cmp__banner-message--m\">' +\r\n          escapeHtml(messageMobile) +\r\n          \"<\/p>\" +\r\n          \"<\/div>\" +\r\n          '<div class=\"ovza-cmp__banner-actions\">' +\r\n          '<button type=\"button\" class=\"ovza-cmp__banner-retake\" data-action=\"retake-quiz\">Retake quiz<\/button>' +\r\n          '<button type=\"button\" class=\"ovza-cmp__banner-dismiss\" data-action=\"dismiss-banner\">\u2715 Dismiss<\/button>' +\r\n          \"<\/div>\" +\r\n          \"<\/div>\"\r\n        );\r\n      }\r\n\r\n      return (\r\n        '<div class=\"ovza-cmp__banner\">' +\r\n        '<div class=\"ovza-cmp__banner-left\">' +\r\n        '<span class=\"ovza-cmp__banner-badge\">YOUR MATCHES<\/span>' +\r\n        '<p class=\"ovza-cmp__banner-message\">' +\r\n        escapeHtml(message) +\r\n        \"<\/p>\" +\r\n        \"<\/div>\" +\r\n        '<div class=\"ovza-cmp__banner-actions\">' +\r\n        '<button type=\"button\" class=\"ovza-cmp__banner-retake\" data-action=\"retake-quiz\">Retake quiz<\/button>' +\r\n        '<button type=\"button\" class=\"ovza-cmp__banner-dismiss\" data-action=\"dismiss-banner\">\u2715 Dismiss<\/button>' +\r\n        \"<\/div>\" +\r\n        \"<\/div>\"\r\n      );\r\n    }\r\n\r\n    \/**\r\n     * Combines banner + table into one render pass, matching the Figma layout\r\n     * (banner directly above the table, 14px gap, both full width). This is\r\n     * what actually fills the \"table\" DOM slot now, not renderComparisonTable\r\n     * alone.\r\n     *\/\r\n    function renderComparisonSection(state) {\r\n      const bannerHtml = renderRecommendationBanner(state);\r\n      const tableHtml = renderComparisonTable(state);\r\n      if (!bannerHtml) return tableHtml;\r\n      return (\r\n        '<div class=\"ovza-cmp__banner-wrap\">' +\r\n        bannerHtml +\r\n        \"<\/div>\" +\r\n        tableHtml\r\n      );\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 6 \u2014 QUIZ OVERLAY RENDER\r\n     * ============================================================================\r\n     * Desktop: centered modal, 2-per-row answer grid + full-width \"not sure\" row.\r\n     * Mobile: full-screen bottom sheet, single-column answer stack, no\r\n     * illustration slot at all (confirmed from the real Figma mobile frame).\r\n     *\r\n     * Per Dev Annotation #1: Back restores the previous answer \u2014 handled here by\r\n     * reading state.quiz.answers[question.id] and rendering that answer in its\r\n     * Selected state when re-visiting an already-answered question.\r\n     *\/\r\n\r\n    function renderQuizAnswerCard(question, answer, selectedAnswerId) {\r\n      if (answer.isSkip) {\r\n        return (\r\n          '<button type=\"button\" class=\"ovza-cmp__quiz-answer ovza-cmp__quiz-answer--notsure\" ' +\r\n          'data-action=\"quiz-answer\" data-question-id=\"' +\r\n          question.id +\r\n          '\" data-answer-id=\"' +\r\n          answer.id +\r\n          '\" ' +\r\n          'role=\"radio\" aria-checked=\"' +\r\n          (selectedAnswerId === answer.id ? \"true\" : \"false\") +\r\n          '\" tabindex=\"0\">' +\r\n          '<span class=\"ovza-cmp__quiz-answer-label\">' +\r\n          escapeHtml(answer.text) +\r\n          \"<\/span>\" +\r\n          \"<\/button>\"\r\n        );\r\n      }\r\n\r\n      const isSelected = selectedAnswerId === answer.id;\r\n      return (\r\n        '<button type=\"button\" class=\"ovza-cmp__quiz-answer' +\r\n        (isSelected ? \" ovza-cmp__quiz-answer--selected\" : \"\") +\r\n        '\" ' +\r\n        'data-action=\"quiz-answer\" data-question-id=\"' +\r\n        question.id +\r\n        '\" data-answer-id=\"' +\r\n        answer.id +\r\n        '\" ' +\r\n        'role=\"radio\" aria-checked=\"' +\r\n        (isSelected ? \"true\" : \"false\") +\r\n        '\" tabindex=\"0\">' +\r\n        '<span class=\"ovza-cmp__quiz-answer-icon\">' +\r\n        escapeHtml(answer.icon || \"\") +\r\n        \"<\/span>\" +\r\n        '<span class=\"ovza-cmp__quiz-answer-label\">' +\r\n        escapeHtml(answer.text) +\r\n        \"<\/span>\" +\r\n        (isSelected\r\n          ? '<span class=\"ovza-cmp__quiz-answer-check\">\u2713<\/span>'\r\n          : \"\") +\r\n        \"<\/button>\"\r\n      );\r\n    }\r\n\r\n    function renderQuizAnswersDesktop(question, selectedAnswerId) {\r\n      const realAnswers = question.answers.filter(function (a) {\r\n        return !a.isSkip;\r\n      });\r\n      const skipAnswer = question.answers.filter(function (a) {\r\n        return a.isSkip;\r\n      })[0];\r\n\r\n      let html = '<div class=\"ovza-cmp__quiz-answers\">';\r\n      for (let i = 0; i < realAnswers.length; i += 2) {\r\n        html += '<div class=\"ovza-cmp__quiz-answer-row\">';\r\n        html += renderQuizAnswerCard(\r\n          question,\r\n          realAnswers[i],\r\n          selectedAnswerId,\r\n        );\r\n        if (realAnswers[i + 1])\r\n          html += renderQuizAnswerCard(\r\n            question,\r\n            realAnswers[i + 1],\r\n            selectedAnswerId,\r\n          );\r\n        html += \"<\/div>\";\r\n      }\r\n      if (skipAnswer)\r\n        html += renderQuizAnswerCard(question, skipAnswer, selectedAnswerId);\r\n      html += \"<\/div>\";\r\n      return html;\r\n    }\r\n\r\n    function renderQuizAnswersMobile(question, selectedAnswerId) {\r\n      let html =\r\n        '<div class=\"ovza-cmp__quiz-answers ovza-cmp__quiz-answers--m\">';\r\n      question.answers.forEach(function (answer) {\r\n        html += renderQuizAnswerCard(question, answer, selectedAnswerId);\r\n      });\r\n      html += \"<\/div>\";\r\n      return html;\r\n    }\r\n\r\n    function renderQuizOverlay(state) {\r\n      if (!state.quiz.isOpen) return \"\";\r\n\r\n      const questions = getAllQuizQuestions();\r\n      const currentIndex = state.quiz.currentQuestionIndex;\r\n      const question = questions[currentIndex];\r\n      if (!question) return \"\"; \/\/ defensive \u2014 completion is handled before this can render\r\n\r\n      const isMobile =\r\n        state.ui.viewportWidth < OVZA_CONFIG.comparison.breakpointPx;\r\n      const totalQuestions = questions.length;\r\n      const selectedAnswerId = state.quiz.answers[question.id] || null;\r\n\r\n      let html =\r\n        '<div class=\"ovza-cmp__quiz-modal' +\r\n        (isMobile ? \" ovza-cmp__quiz-modal--m\" : \"\") +\r\n        '\">';\r\n\r\n      \/\/ Top bar\r\n      html +=\r\n        '<div class=\"ovza-cmp__quiz-topbar\">' +\r\n        '<p class=\"ovza-cmp__quiz-counter\">QUESTION ' +\r\n        (currentIndex + 1) +\r\n        \" OF \" +\r\n        totalQuestions +\r\n        \"<\/p>\" +\r\n        '<button type=\"button\" class=\"ovza-cmp__quiz-close\" data-action=\"quiz-close\" aria-label=\"Close quiz\">\u2715<\/button>' +\r\n        \"<\/div>\";\r\n\r\n      \/\/ Progress bar \u2014 segments up to and including the current question are\r\n      \/\/ \"done\" (matches the real Figma example: on Q2, segments 1 AND 2 show green).\r\n      html += '<div class=\"ovza-cmp__quiz-progress\">';\r\n      for (let i = 0; i < totalQuestions; i++) {\r\n        html +=\r\n          '<div class=\"ovza-cmp__quiz-segment' +\r\n          (i <= currentIndex ? \" ovza-cmp__quiz-segment--done\" : \"\") +\r\n          '\"><\/div>';\r\n      }\r\n      html += \"<\/div>\";\r\n\r\n      \/\/ Question body\r\n      html +=\r\n        '<div class=\"ovza-cmp__quiz-body\">' +\r\n        '<div class=\"ovza-cmp__quiz-question-wrap\">' +\r\n        '<p class=\"ovza-cmp__quiz-question\">' +\r\n        escapeHtml(question.text) +\r\n        \"<\/p>\" +\r\n        \"<\/div>\";\r\n      if (!isMobile) {\r\n        var illustrationSvg = QUIZ_ILLUSTRATIONS[question.id] || \"\";\r\n        html +=\r\n          '<div class=\"ovza-cmp__quiz-illustration\">' +\r\n          illustrationSvg +\r\n          \"<\/div>\";\r\n      }\r\n      html += \"<\/div>\";\r\n\r\n      \/\/ Answers\r\n      html += isMobile\r\n        ? renderQuizAnswersMobile(question, selectedAnswerId)\r\n        : renderQuizAnswersDesktop(question, selectedAnswerId);\r\n\r\n      \/\/ Footer\r\n      html += '<div class=\"ovza-cmp__quiz-footer\">';\r\n      html +=\r\n        currentIndex > 0\r\n          ? '<button type=\"button\" class=\"ovza-cmp__quiz-back\" data-action=\"quiz-back\">\u2190 Back<\/button>'\r\n          : \"<span><\/span>\";\r\n      html +=\r\n        '<p class=\"ovza-cmp__quiz-privacy\">' +\r\n        (isMobile\r\n          ? \"Answers aren't stored or shared.\"\r\n          : \"Your answers aren't stored or shared.\") +\r\n        \"<\/p>\";\r\n      html += \"<\/div>\";\r\n\r\n      html += \"<\/div>\";\r\n      return html;\r\n    }\r\n\r\n    \/* ============================================================================\r\n     * SECTION 7 \u2014 BOOTSTRAP (the one place this file touches the real DOM)\r\n     * ============================================================================\r\n     *\/\r\n\r\n    function mountOvzaComparison(rootEl, store) {\r\n      const tableEl = rootEl.querySelector('[data-ovza-slot=\"table\"]');\r\n\r\n      \/\/ Picker backdrop \u2014 created in JS rather than authored as a static empty\r\n      \/\/ <div> in the HTML. Some hosting\/optimization setups strip genuinely-\r\n      \/\/ empty elements before this script runs (this is exactly what broke the\r\n      \/\/ picker on first deployment) \u2014 creating it at runtime sidesteps that\r\n      \/\/ entirely, and also solves future multi-instance support for free, since\r\n      \/\/ each mount call gets its own dedicated, uniquely-identified nodes\r\n      \/\/ instead of relying on a single shared page-wide selector.\r\n      let pickerBackdropEl = document.getElementById(\r\n        \"ovza-cmp-picker-backdrop\",\r\n      );\r\n      let pickerEl;\r\n      if (!pickerBackdropEl) {\r\n        pickerBackdropEl = document.createElement(\"div\");\r\n        pickerBackdropEl.id = \"ovza-cmp-picker-backdrop\";\r\n        pickerBackdropEl.className = \"ovza-cmp__picker-backdrop\";\r\n        pickerEl = document.createElement(\"div\");\r\n        pickerBackdropEl.appendChild(pickerEl);\r\n        document.body.appendChild(pickerBackdropEl);\r\n      } else {\r\n        pickerEl = pickerBackdropEl.firstElementChild;\r\n      }\r\n\r\n      \/\/ Quiz backdrop \u2014 same runtime-creation pattern as the picker, same reasoning.\r\n      let quizBackdropEl = document.getElementById(\"ovza-cmp-quiz-backdrop\");\r\n      let quizEl;\r\n      if (!quizBackdropEl) {\r\n        quizBackdropEl = document.createElement(\"div\");\r\n        quizBackdropEl.id = \"ovza-cmp-quiz-backdrop\";\r\n        quizBackdropEl.className = \"ovza-cmp__quiz-backdrop\";\r\n        quizEl = document.createElement(\"div\");\r\n        quizBackdropEl.appendChild(quizEl);\r\n        document.body.appendChild(quizBackdropEl);\r\n      } else {\r\n        quizEl = quizBackdropEl.firstElementChild;\r\n      }\r\n\r\n      function render() {\r\n        const state = store.getState();\r\n        tableEl.innerHTML = renderComparisonSection(state);\r\n\r\n        \/\/ Preserve the search input's focus + cursor position across this\r\n        \/\/ re-render. Replacing innerHTML destroys the existing <input> DOM\r\n        \/\/ node and creates a new one \u2014 even with the correct value restored,\r\n        \/\/ a newly created element never has focus, which is why typing a\r\n        \/\/ single character used to kick focus out of the field on every\r\n        \/\/ keystroke (PICKER_SEARCH_CHANGED triggers this same render()).\r\n        var activeEl = document.activeElement;\r\n        var wasSearchFocused =\r\n          activeEl && activeEl.getAttribute && activeEl.getAttribute(\"data-action\") === \"picker-search\";\r\n        var savedSelectionStart = wasSearchFocused ? activeEl.selectionStart : null;\r\n        var savedSelectionEnd = wasSearchFocused ? activeEl.selectionEnd : null;\r\n\r\n        pickerEl.innerHTML = renderCountryPicker(state);\r\n\r\n        if (wasSearchFocused) {\r\n          var newSearchInput = pickerEl.querySelector('[data-action=\"picker-search\"]');\r\n          if (newSearchInput) {\r\n            newSearchInput.focus();\r\n            if (savedSelectionStart != null && savedSelectionEnd != null) {\r\n              newSearchInput.setSelectionRange(savedSelectionStart, savedSelectionEnd);\r\n            }\r\n          }\r\n        }\r\n\r\n        pickerBackdropEl.classList.toggle(\r\n          \"ovza-cmp__picker-backdrop--active\",\r\n          state.ui.picker.isOpen,\r\n        );\r\n        quizEl.innerHTML = renderQuizOverlay(state);\r\n        quizBackdropEl.classList.toggle(\r\n          \"ovza-cmp__quiz-backdrop--active\",\r\n          state.quiz.isOpen,\r\n        );\r\n\r\n        \/\/ Lock page scroll while EITHER overlay is open \u2014 only touches\r\n        \/\/ `overflow`, restores it exactly on close rather than assuming the\r\n        \/\/ host page had no prior overflow setting of its own.\r\n        const anyOverlayOpen = state.ui.picker.isOpen || state.quiz.isOpen;\r\n        if (anyOverlayOpen) {\r\n          if (document.body.dataset.ovzaScrollLock !== \"true\") {\r\n            document.body.dataset.ovzaPrevOverflow =\r\n              document.body.style.overflow || \"\";\r\n            document.body.style.overflow = \"hidden\";\r\n            document.body.dataset.ovzaScrollLock = \"true\";\r\n          }\r\n        } else if (document.body.dataset.ovzaScrollLock === \"true\") {\r\n          document.body.style.overflow =\r\n            document.body.dataset.ovzaPrevOverflow || \"\";\r\n          document.body.dataset.ovzaScrollLock = \"false\";\r\n        }\r\n      }\r\n\r\n      store.subscribe(render);\r\n      render();\r\n\r\n      \/\/ ---- Event delegation: one listener per container, per ADR performance goal ----\r\n\r\n      rootEl.addEventListener(\"click\", function (e) {\r\n        const btn = e.target.closest(\"[data-action]\");\r\n        if (!btn) return;\r\n        const action = btn.getAttribute(\"data-action\");\r\n        const countryId = btn.getAttribute(\"data-country-id\");\r\n\r\n        if (action === \"open-add\") {\r\n          store.dispatch({\r\n            type: ActionTypes.PICKER_OPENED,\r\n            payload: { mode: \"add\" },\r\n          });\r\n        } else if (action === \"open-replace\") {\r\n          store.dispatch({\r\n            type: ActionTypes.PICKER_OPENED,\r\n            payload: { mode: \"replace\", targetCountryId: countryId },\r\n          });\r\n        } else if (action === \"toggle-show-all\") {\r\n          store.dispatch({\r\n            type: ActionTypes.SHOW_ALL_CHARACTERISTICS_TOGGLED,\r\n          });\r\n        } else if (action === \"retake-quiz\") {\r\n          \/\/ \"Retake quiz\" starts fresh with empty answers \u2014 QUIZ_OPENED already\r\n          \/\/ resets quiz state unconditionally, per Dev Annotation #3.\r\n          store.dispatch({ type: ActionTypes.QUIZ_OPENED });\r\n        } else if (action === \"dismiss-banner\") {\r\n          store.dispatch({ type: ActionTypes.RECOMMENDATION_DISMISSED });\r\n        }\r\n      });\r\n\r\n      pickerBackdropEl.addEventListener(\"click\", function (e) {\r\n        if (e.target === pickerBackdropEl) {\r\n          store.dispatch({ type: ActionTypes.PICKER_CLOSED });\r\n        }\r\n        const btn = e.target.closest(\"[data-action]\");\r\n        if (!btn) return;\r\n        const action = btn.getAttribute(\"data-action\");\r\n        const countryId = btn.getAttribute(\"data-country-id\");\r\n        const state = store.getState();\r\n\r\n        if (action === \"close-picker\") {\r\n          store.dispatch({ type: ActionTypes.PICKER_CLOSED });\r\n        } else if (action === \"select-country\") {\r\n          if (state.ui.picker.mode === \"replace\") {\r\n            store.dispatch({\r\n              type: ActionTypes.COUNTRY_REPLACED,\r\n              payload: {\r\n                targetCountryId: state.ui.picker.targetCountryId,\r\n                newCountryId: countryId,\r\n              },\r\n            });\r\n          } else {\r\n            store.dispatch({\r\n              type: ActionTypes.COUNTRY_ADDED,\r\n              payload: { countryId: countryId },\r\n            });\r\n          }\r\n          store.dispatch({ type: ActionTypes.PICKER_CLOSED });\r\n        }\r\n      });\r\n\r\n      pickerBackdropEl.addEventListener(\"input\", function (e) {\r\n        if (e.target.getAttribute(\"data-action\") === \"picker-search\") {\r\n          store.dispatch({\r\n            type: ActionTypes.PICKER_SEARCH_CHANGED,\r\n            payload: { query: e.target.value },\r\n          });\r\n        }\r\n      });\r\n\r\n      \/\/ ---- Quiz overlay event handling ----\r\n\r\n      quizBackdropEl.addEventListener(\"click\", function (e) {\r\n        \/\/ Per Dev Annotation #4: closing mid-quiz has NO confirm dialog, by\r\n        \/\/ design \u2014 clicking the backdrop closes immediately, same as the \u2715.\r\n        if (e.target === quizBackdropEl) {\r\n          store.dispatch({ type: ActionTypes.QUIZ_CLOSED });\r\n          return;\r\n        }\r\n\r\n        const btn = e.target.closest(\"[data-action]\");\r\n        if (!btn) return;\r\n        const action = btn.getAttribute(\"data-action\");\r\n\r\n        if (action === \"quiz-close\") {\r\n          store.dispatch({ type: ActionTypes.QUIZ_CLOSED });\r\n        } else if (action === \"quiz-back\") {\r\n          store.dispatch({ type: ActionTypes.QUIZ_BACK });\r\n        } else if (action === \"quiz-answer\") {\r\n          if (btn.dataset.locked === \"true\") return; \/\/ ignore repeat clicks during the auto-advance delay\r\n          const questionId = btn.getAttribute(\"data-question-id\");\r\n          const answerId = btn.getAttribute(\"data-answer-id\");\r\n\r\n          \/\/ Immediate visual feedback per Dev Annotation #6 (\"cards auto-advance\r\n          \/\/ ~300ms after selection state shows\"). Done imperatively on this\r\n          \/\/ element rather than waiting for a state-driven re-render, since\r\n          \/\/ state.quiz.answers isn't actually updated until the delay completes.\r\n          const answersContainer = btn.closest(\".ovza-cmp__quiz-answers\");\r\n          if (answersContainer) {\r\n            answersContainer\r\n              .querySelectorAll('[data-action=\"quiz-answer\"]')\r\n              .forEach(function (el) {\r\n                el.dataset.locked = \"true\";\r\n              });\r\n          }\r\n          if (!btn.classList.contains(\"ovza-cmp__quiz-answer--notsure\")) {\r\n            btn.classList.add(\"ovza-cmp__quiz-answer--selected\");\r\n            if (!btn.querySelector(\".ovza-cmp__quiz-answer-check\")) {\r\n              const check = document.createElement(\"span\");\r\n              check.className = \"ovza-cmp__quiz-answer-check\";\r\n              check.textContent = \"\u2713\";\r\n              btn.appendChild(check);\r\n            }\r\n          }\r\n\r\n          setTimeout(function () {\r\n            store.dispatch({\r\n              type: ActionTypes.QUIZ_ANSWER_SELECTED,\r\n              payload: { questionId: questionId, answerId: answerId },\r\n            });\r\n\r\n            const newState = store.getState();\r\n            const totalQuestions = getAllQuizQuestions().length;\r\n            if (newState.quiz.currentQuestionIndex >= totalQuestions) {\r\n              \/\/ Last question answered \u2014 compute the real recommendation here\r\n              \/\/ (business logic call site, not inside the reducer) and dispatch\r\n              \/\/ the result. Per Dev Annotation #8: overlay fades (handled by\r\n              \/\/ QUIZ_COMPLETED closing it), page scrolls to table, panel pulses\r\n              \/\/ once (~600ms).\r\n              const result = computeRecommendations(newState.quiz.answers);\r\n              store.dispatch({\r\n                type: ActionTypes.QUIZ_COMPLETED,\r\n                payload: { recommendationResult: result },\r\n              });\r\n\r\n              const panelEl = tableEl.querySelector(\".ovza-cmp__panel\");\r\n              if (panelEl) {\r\n                panelEl.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n                panelEl.classList.add(\"ovza-cmp__panel--pulse\");\r\n                setTimeout(function () {\r\n                  panelEl.classList.remove(\"ovza-cmp__panel--pulse\");\r\n                }, 600);\r\n              }\r\n            }\r\n          }, 300);\r\n        }\r\n      });\r\n\r\n      \/\/ Basic keyboard support per Dev Annotation #6 (\"cards are radio buttons\r\n      \/\/ semantically \u2014 arrows + enter\"). Enter\/Space activates the focused\r\n      \/\/ answer card. NOTE: this covers activation only \u2014 full arrow-key roving\r\n      \/\/ focus between cards (moving focus without Tab) is not implemented here;\r\n      \/\/ Tab-based keyboard navigation still works, just not arrow-key roving.\r\n      quizBackdropEl.addEventListener(\"keydown\", function (e) {\r\n        if (\r\n          (e.key === \"Enter\" || e.key === \" \") &&\r\n          e.target.getAttribute &&\r\n          e.target.getAttribute(\"data-action\") === \"quiz-answer\"\r\n        ) {\r\n          e.preventDefault();\r\n          e.target.click();\r\n        }\r\n      });\r\n\r\n      \/\/ Viewport width tracking \u2014 re-renders only when crossing the breakpoint,\r\n      \/\/ not on every resize pixel (avoids the legacy code's destructive resize\r\n      \/\/ behavior; selection is never mutated here, only the ui.viewportWidth flag).\r\n      let resizeTimeout;\r\n      window.addEventListener(\"resize\", function () {\r\n        clearTimeout(resizeTimeout);\r\n        resizeTimeout = setTimeout(function () {\r\n          const newWidth = window.innerWidth;\r\n          const state = store.getState();\r\n          const wasMobile =\r\n            state.ui.viewportWidth < OVZA_CONFIG.comparison.breakpointPx;\r\n          const isMobile = newWidth < OVZA_CONFIG.comparison.breakpointPx;\r\n          if (wasMobile !== isMobile || state.ui.viewportWidth !== newWidth) {\r\n            state.ui.viewportWidth = newWidth;\r\n            render();\r\n          }\r\n        }, 150);\r\n      });\r\n\r\n      \/\/ Global entry point for external buttons (Hero CTA, Quiz landing section)\r\n      \/\/ that aren't part of this widget's own DOM \u2014 see quiz-section.html, which\r\n      \/\/ already calls this defensively via a typeof check.\r\n      window.ovzaOpenQuiz = function () {\r\n        store.dispatch({ type: ActionTypes.QUIZ_OPENED });\r\n      };\r\n\r\n      \/\/ Any button anywhere on the page with class \"ovza-quiz-trigger\" opens the\r\n      \/\/ quiz \u2014 covers native Elementor Button widgets and custom-HTML buttons\r\n      \/\/ alike, and any future trigger button just needs this class added, no\r\n      \/\/ new script required. Delegated on document (not rootEl) since trigger\r\n      \/\/ buttons can live in completely separate Elementor sections\/widgets.\r\n      document.addEventListener(\"click\", function (e) {\r\n        var trigger = e.target.closest(\".ovza-quiz-trigger\");\r\n        if (trigger) {\r\n          e.preventDefault();\r\n          window.ovzaOpenQuiz();\r\n        }\r\n      });\r\n    }\r\n\r\n    \/\/ ---- Bootstrap ----\r\n    \/\/ Deferred until DOMContentLoaded, deliberately \u2014 mounting synchronously\r\n    \/\/ during initial parse can race any other page script that installs\r\n    \/\/ watchers on the DOM (e.g. a translation plugin's MutationObserver),\r\n    \/\/ causing this widget's first render to go unnoticed by anything that\r\n    \/\/ hasn't finished loading yet. Waiting for DOMContentLoaded guarantees\r\n    \/\/ every other same-priority script has already run first.\r\n    var rootEl = document.getElementById(\"ovza-cmp-root\");\r\n    function ovzaCmpMount() { mountOvzaComparison(rootEl, ovzaStore); }\r\n    if (document.readyState === \"loading\") {\r\n      document.addEventListener(\"DOMContentLoaded\", ovzaCmpMount);\r\n    } else {\r\n      ovzaCmpMount();\r\n    }\r\n  })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ae1c98a e-con-full e-flex e-con e-child\" data-id=\"ae1c98a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-44c4143 elementor-arrows-position-inside elementor-widget elementor-widget-n-carousel\" data-id=\"44c4143\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;carousel_items&quot;:[{&quot;slide_title&quot;:&quot;Slide #1&quot;,&quot;_id&quot;:&quot;765fa59&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;c06f6e6&quot;},{&quot;slide_title&quot;:&quot;Slide #3&quot;,&quot;_id&quot;:&quot;fd0e13a&quot;},{&quot;slide_title&quot;:&quot;Slide #3&quot;,&quot;_id&quot;:&quot;243f522&quot;},{&quot;slide_title&quot;:&quot;Virgin&quot;,&quot;_id&quot;:&quot;7091faa&quot;},{&quot;slide_title&quot;:&quot;Cayman&quot;,&quot;_id&quot;:&quot;de77d5d&quot;},{&quot;slide_title&quot;:&quot;Costa&quot;,&quot;_id&quot;:&quot;96c8495&quot;},{&quot;slide_title&quot;:&quot;Panama&quot;,&quot;_id&quot;:&quot;aef151d&quot;},{&quot;slide_title&quot;:&quot;St Kitts&quot;,&quot;_id&quot;:&quot;8e57390&quot;},{&quot;slide_title&quot;:&quot;St Lucia&quot;,&quot;_id&quot;:&quot;ca528f0&quot;},{&quot;slide_title&quot;:&quot;St Vincent&quot;,&quot;_id&quot;:&quot;2ae73f0&quot;},{&quot;slide_title&quot;:&quot;US Virgin&quot;,&quot;_id&quot;:&quot;0b5a3d6&quot;},{&quot;slide_title&quot;:&quot;Cook Islands&quot;,&quot;_id&quot;:&quot;b833ad1&quot;},{&quot;slide_title&quot;:&quot;Marshall Islands&quot;,&quot;_id&quot;:&quot;07bff42&quot;},{&quot;slide_title&quot;:&quot;Samoa&quot;,&quot;_id&quot;:&quot;06983cf&quot;},{&quot;slide_title&quot;:&quot;Vanuatu&quot;,&quot;_id&quot;:&quot;81e3dc9&quot;},{&quot;slide_title&quot;:&quot;Liberia&quot;,&quot;_id&quot;:&quot;5bf7d19&quot;},{&quot;slide_title&quot;:&quot;Seychelles&quot;,&quot;_id&quot;:&quot;e316da6&quot;}],&quot;slides_to_show&quot;:&quot;8&quot;,&quot;slides_to_show_mobile&quot;:&quot;4&quot;,&quot;slides_to_scroll&quot;:&quot;2&quot;,&quot;slides_to_scroll_mobile&quot;:&quot;2&quot;,&quot;autoplay_speed&quot;:2000,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:8,&quot;sizes&quot;:[]},&quot;offset_sides&quot;:&quot;both&quot;,&quot;slides_to_show_tablet&quot;:&quot;2&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500,&quot;offset_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:80,&quot;sizes&quot;:[]},&quot;offset_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;offset_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;arrows&quot;:&quot;yes&quot;,&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-carousel.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-carousel swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carousel\" dir=\"rtl\">\n\t\t\t<div class=\"swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"1\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b7ae63a e-flex e-con-boxed e-con e-child\" data-id=\"b7ae63a\" 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-5593d0d elementor-widget elementor-widget-image\" data-id=\"5593d0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-antigua-and-barbuda\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_Antigua_and_Barbuda.svg-2.png\" class=\"attachment-full size-full wp-image-11008\" alt=\"Register a company in Antigua and Barbuda\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"2\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cfd4a00 e-flex e-con-boxed e-con e-child\" data-id=\"cfd4a00\" 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-cc49387 elementor-widget elementor-widget-image\" data-id=\"cc49387\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-bahamas\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_the_Bahamas.svg-2.jpg\" class=\"attachment-full size-full wp-image-11029\" alt=\"Register a Company in Bahamas\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"3\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f519b8e e-flex e-con-boxed e-con e-child\" data-id=\"f519b8e\" 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-e8115c9 elementor-widget elementor-widget-image\" data-id=\"e8115c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-belize\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_Belize.svg-2.png\" class=\"attachment-full size-full wp-image-11037\" alt=\"Register a Company in Belize\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"4\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5da153b e-flex e-con-boxed e-con e-child\" data-id=\"5da153b\" 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-b04d832 elementor-widget elementor-widget-image\" data-id=\"b04d832\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-bermuda\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/07\/Flag-Bermuda.webp\" class=\"attachment-full size-full wp-image-26630\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"5\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7634eba e-flex e-con-boxed e-con e-child\" data-id=\"7634eba\" 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-2be0469 elementor-widget elementor-widget-image\" data-id=\"2be0469\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-british-virgin-islands\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_the_British_Virgin_Islands.svg-2.png\" class=\"attachment-full size-full wp-image-11033\" alt=\"register a company in british virgin islands\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"6\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ebbd467 e-flex e-con-boxed e-con e-child\" data-id=\"ebbd467\" 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-f1550ec elementor-widget elementor-widget-image\" data-id=\"f1550ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-the-cayman-islands\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/08\/Flag_of_the_Cayman_Islands.svg.jpg\" class=\"attachment-full size-full wp-image-11815\" alt=\"Register a company in the Cayman Islands\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"7\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"7 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cd91dd6 e-flex e-con-boxed e-con e-child\" data-id=\"cd91dd6\" 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-5509456 elementor-widget elementor-widget-image\" data-id=\"5509456\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-costa-rica\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/03\/Costa-Rica-Flag.png\" class=\"attachment-full size-full wp-image-21112\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"8\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"8 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c0ee2af e-flex e-con-boxed e-con e-child\" data-id=\"c0ee2af\" 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-35572ad elementor-widget elementor-widget-image\" data-id=\"35572ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-panama\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg.png\" class=\"attachment-full size-full wp-image-761\" alt=\"Panama flag\" srcset=\"https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg.png 800w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-300x200.png 300w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-595xh.png 595w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-24x16.png 24w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-36x24.png 36w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-48x32.png 48w, https:\/\/ovza.com\/wp-content\/uploads\/2024\/04\/Flag_of_Panama.svg-600x400.png 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"9\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"9 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f219e1a e-flex e-con-boxed e-con e-child\" data-id=\"f219e1a\" 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-1629239 elementor-widget elementor-widget-image\" data-id=\"1629239\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-st-kitts-and-nevis\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/08\/Flag_of_Saint_Kitts_and_Nevis.svg.jpg\" class=\"attachment-full size-full wp-image-11814\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"10\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"10 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-99dac6e e-flex e-con-boxed e-con e-child\" data-id=\"99dac6e\" 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-ef0848d elementor-widget elementor-widget-image\" data-id=\"ef0848d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-st-lucia\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_Saint_Lucia-1.jpg\" class=\"attachment-full size-full wp-image-11056\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"11\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"11 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c7aa140 e-flex e-con-boxed e-con e-child\" data-id=\"c7aa140\" 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-8aaf378 elementor-widget elementor-widget-image\" data-id=\"8aaf378\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-st-vincent-and-the-grenadines\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/11\/image2-1.png\" class=\"attachment-full size-full wp-image-17984\" alt=\"Saint Vincent and the Grenadines\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"12\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"12 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bae923a e-flex e-con-boxed e-con e-child\" data-id=\"bae923a\" 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-ede0c47 elementor-widget elementor-widget-image\" data-id=\"ede0c47\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-the-usvi\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/06\/Flag_of_the_United_States_Virgin_Islands.svg.png\" class=\"attachment-full size-full wp-image-24084\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"13\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"13 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-836654d e-flex e-con-boxed e-con e-child\" data-id=\"836654d\" 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-500a7a4 elementor-widget elementor-widget-image\" data-id=\"500a7a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"http:\/\/register-a-company-in-cook-islands\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/02\/Cook-Islands.png\" class=\"attachment-full size-full wp-image-19893\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"14\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"14 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-406f869 e-flex e-con-boxed e-con e-child\" data-id=\"406f869\" 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-ccd7d6d elementor-widget elementor-widget-image\" data-id=\"ccd7d6d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-the-marshall-islands\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_the_Marshall_Islands.svg-2.jpg\" class=\"attachment-full size-full wp-image-12858\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"15\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"15 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5458236 e-flex e-con-boxed e-con e-child\" data-id=\"5458236\" 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-f9ce750 elementor-widget elementor-widget-image\" data-id=\"f9ce750\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-samoa\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/02\/Samoa.png\" class=\"attachment-full size-full wp-image-19892\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"16\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"16 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e08ddf4 e-flex e-con-boxed e-con e-child\" data-id=\"e08ddf4\" 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-6133265 elementor-widget elementor-widget-image\" data-id=\"6133265\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-vanuatu\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag_of_Vanuatu-2.jpg\" class=\"attachment-full size-full wp-image-11014\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"17\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"17 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2188e87 e-flex e-con-boxed e-con e-child\" data-id=\"2188e87\" 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-da2b8e5 elementor-widget elementor-widget-image\" data-id=\"da2b8e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-liberia\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2026\/06\/Flag_of_Liberia.svg.png\" class=\"attachment-full size-full wp-image-24080\" alt=\"liberia flag\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"18\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"18 of 18\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d26bf21 e-flex e-con-boxed e-con e-child\" data-id=\"d26bf21\" 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-14fd690 elementor-widget elementor-widget-image\" data-id=\"14fd690\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/register-a-company-in-seychelles\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/ovza.com\/wp-content\/uploads\/2025\/09\/Flag-Seychelles-2.jpg\" class=\"attachment-full size-full wp-image-12748\" alt=\"Register a Company in Seychelles\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\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\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Anterior\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Siguiente\">\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d3ee349 e-con-full elementor-hidden-mobile elementor-hidden-tablet e-flex e-con e-child\" data-id=\"d3ee349\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e9a2d49 elementor-widget elementor-widget-html\" data-id=\"e9a2d49\" 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<!--\r\n  QUIZ Section \u2014 \"Don't know where to start? Four questions.\"\r\n  Built from Figma Dev Mode specs (desktop node 8827:867, mobile node 9007:1157)\r\n  STATIC VERSION \u2014 visual only, no quiz logic wired up yet (per plan: build static first,\r\n  add interactivity in a follow-up pass).\r\n\r\n  HOW TO USE IN ELEMENTOR\r\n  1. Add an \"HTML\" widget where you want this section.\r\n  2. Paste this entire file's content into that widget.\r\n  3. Make sure \"Poppins\" is loaded on your site. If your theme already loads it, delete\r\n     the @import line in the style block to avoid loading it twice.\r\n-->\r\n\r\n<div class=\"ovza-quiz\" id=\"ovza-quiz-root\">\r\n  <div class=\"ovza-quiz__panel\">\r\n\r\n    <!-- decorative background blobs (recreated in CSS \u2014 Figma originals were local dev-only assets) -->\r\n    <div class=\"ovza-quiz__blob ovza-quiz__blob--a\" aria-hidden=\"true\"><\/div>\r\n    <div class=\"ovza-quiz__blob ovza-quiz__blob--b\" aria-hidden=\"true\"><\/div>\r\n\r\n    <!-- LEFT: copy + CTA -->\r\n    <div class=\"ovza-quiz__copy\">\r\n      <h2 id='don-t-know-where-to-start-four-questions'  id=\"boomdevs_2\" class=\"ovza-quiz__title\">Don't know where to start? Four questions.<\/h2>\r\n      <p class=\"ovza-quiz__subtitle\">Tell us how you'll use the company \u2014 we'll suggest the jurisdictions that fit. Then compare them right here.<\/p>\r\n\r\n      <div class=\"ovza-quiz__cta\">\r\n        <button type=\"button\" class=\"ovza-quiz__btn ovza-quiz-trigger\" id=\"ovza-quiz-start-btn-2\">\r\n          <span>Start the quiz<\/span>\r\n          <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"ovza-quiz__btn-arrow\">\r\n            <path d=\"M3.5 8H12.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\/>\r\n            <path d=\"M9 4.5L12.5 8L9 11.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n          <\/svg>\r\n        <\/button>\r\n        <span class=\"ovza-quiz__cta-note\">Takes about a minute<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- RIGHT: step preview list -->\r\n    <div class=\"ovza-quiz__steps\">\r\n      <div class=\"ovza-quiz__step ovza-quiz__step--active\" id=\"ovza-quiz-step-1\" role=\"button\" tabindex=\"0\">\r\n        <span class=\"ovza-quiz__step-num\">1<\/span>\r\n        <span class=\"ovza-quiz__step-label\">What will the company do?<\/span>\r\n        <span class=\"ovza-quiz__step-tap\">Tap to start \u2192<\/span>\r\n      <\/div>\r\n      <div class=\"ovza-quiz__step\">\r\n        <span class=\"ovza-quiz__step-num\">2<\/span>\r\n        <span class=\"ovza-quiz__step-label\">How will the product be delivered?<\/span>\r\n      <\/div>\r\n      <div class=\"ovza-quiz__step\">\r\n        <span class=\"ovza-quiz__step-num\">3<\/span>\r\n        <span class=\"ovza-quiz__step-label\">Who is the target customer?<\/span>\r\n      <\/div>\r\n      <div class=\"ovza-quiz__step\">\r\n        <span class=\"ovza-quiz__step-num\">4<\/span>\r\n        <span class=\"ovza-quiz__step-label\">How soon do you need it?<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600&display=swap');\r\n\r\n  #ovza-quiz-root, #ovza-quiz-root * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .ovza-quiz {\r\n    --ink: #0B1113;\r\n    --body: #37474F;\r\n    --green: #34BE86;\r\n    --green-deep: #02542D;\r\n    --green-pale: #D2EADD;\r\n    --line: #E6E8E6;\r\n    --panel-bg: #EFF9F4;\r\n\r\n    font-family: 'Poppins', sans-serif;\r\n    background: #fff;\r\n    padding: 70px 120px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-quiz__panel {\r\n    position: relative;\r\n    max-width: 1200px;\r\n    margin: 0 auto;\r\n    display: grid;\r\n    grid-template-columns: repeat(2, minmax(0, 1fr));\r\n    gap: 56px 120px;\r\n    align-items: center;\r\n    padding: 72px;\r\n    border-radius: 28px;\r\n    background: var(--panel-bg);\r\n    overflow: hidden;\r\n  }\r\n\r\n  .ovza-quiz__blob {\r\n    position: absolute;\r\n    width: 420px;\r\n    height: 420px;\r\n    border-radius: 50%;\r\n    background: radial-gradient(circle, rgba(52, 190, 134, 0.35) 0%, rgba(52, 190, 134, 0) 70%);\r\n    filter: blur(10px);\r\n    opacity: 0.5;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ovza-quiz__blob--a {\r\n    left: -120px;\r\n    top: 210px;\r\n  }\r\n\r\n  .ovza-quiz__blob--b {\r\n    right: -140px;\r\n    top: -170px;\r\n  }\r\n\r\n  \/* ---------- LEFT: copy ---------- *\/\r\n  .ovza-quiz__copy {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 16px;\r\n    max-width: 470px;\r\n  }\r\n\r\n  .ovza-quiz__title {\r\n    margin: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 500;\r\n    font-size: 40px;\r\n    line-height: 1.3;\r\n    letter-spacing: -1.3px;\r\n    color: var(--ink);\r\n  }\r\n\r\n  .ovza-quiz__subtitle {\r\n    margin: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 300;\r\n    font-size: 16.5px;\r\n    line-height: 28.88px;\r\n    letter-spacing: -0.16px;\r\n    color: var(--body);\r\n  }\r\n\r\n  .ovza-quiz__cta {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    margin-top: 4px;\r\n  }\r\n\r\n  .ovza-quiz__btn {\r\n    all: unset;\r\n    cursor: pointer;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 8px;\r\n    padding: 12px 20px;\r\n    border-radius: 8px;\r\n    background: var(--green);\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 500;\r\n    font-size: 14.5px;\r\n    letter-spacing: -0.16px;\r\n    color: #fff;\r\n    white-space: nowrap;\r\n    transition: background 0.15s ease, transform 0.15s ease;\r\n  }\r\n\r\n  .ovza-quiz__btn:hover {\r\n    background: #2aa974;\r\n  }\r\n\r\n  .ovza-quiz__btn:active {\r\n    transform: scale(0.98);\r\n  }\r\n\r\n  .ovza-quiz__btn-arrow {\r\n    width: 16px;\r\n    height: 16px;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .ovza-quiz__cta-note {\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 300;\r\n    font-size: 12px;\r\n    letter-spacing: -0.16px;\r\n    color: var(--body);\r\n    white-space: nowrap;\r\n  }\r\n\r\n  \/* ---------- RIGHT: step preview ---------- *\/\r\n  .ovza-quiz__steps {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 24px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-quiz__step {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 16px;\r\n    width: 100%;\r\n    padding: 17px 25px;\r\n    border-radius: 12px;\r\n    background: #fff;\r\n    border: 1px solid var(--line);\r\n    opacity: 0.5;\r\n  }\r\n\r\n  .ovza-quiz__step--active {\r\n    opacity: 1;\r\n    border: 1px solid var(--green);\r\n    cursor: pointer;\r\n  }\r\n\r\n  .ovza-quiz__step-num {\r\n    flex-shrink: 0;\r\n    width: 27px;\r\n    height: 27px;\r\n    border-radius: 999px;\r\n    background: var(--green);\r\n    color: #fff;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    font-family: 'Inter', 'Poppins', sans-serif;\r\n    font-weight: 600;\r\n    font-size: 16px;\r\n  }\r\n\r\n  .ovza-quiz__step-label {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 400;\r\n    font-size: 16px;\r\n    letter-spacing: -0.16px;\r\n    color: var(--ink);\r\n  }\r\n\r\n  .ovza-quiz__step-tap {\r\n    flex-shrink: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 300;\r\n    font-size: 12px;\r\n    letter-spacing: -0.16px;\r\n    color: var(--body);\r\n    white-space: nowrap;\r\n  }\r\n\r\n  \/* ---------- RESPONSIVE ---------- *\/\r\n  @media (max-width: 900px) {\r\n    .ovza-quiz {\r\n      padding: 32px 16px 48px;\r\n    }\r\n\r\n    .ovza-quiz__panel {\r\n      display: flex;\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 14px;\r\n      padding: 36px 24px 32px;\r\n      border-radius: 16px;\r\n      background: linear-gradient(125deg, #EDFAF3 0%, #F7FCF9 71.43%);\r\n      border: 1px solid #DDF2E7;\r\n    }\r\n\r\n    .ovza-quiz__blob {\r\n      display: none;\r\n    }\r\n\r\n    .ovza-quiz__copy {\r\n      max-width: 100%;\r\n      gap: 8px;\r\n    }\r\n\r\n    .ovza-quiz__title {\r\n      font-size: 22px;\r\n      letter-spacing: -0.22px;\r\n      line-height: 1.3;\r\n    }\r\n\r\n    .ovza-quiz__subtitle {\r\n      font-size: 14px;\r\n      line-height: 1.5;\r\n    }\r\n\r\n    .ovza-quiz__steps {\r\n      gap: 8px;\r\n      padding-top: 6px;\r\n    }\r\n\r\n    .ovza-quiz__step {\r\n      padding: 12px 14px;\r\n      border-radius: 10px;\r\n      gap: 10px;\r\n    }\r\n\r\n    .ovza-quiz__step--active {\r\n      border-width: 1.5px;\r\n      box-shadow: 0px 8px 20px -10px rgba(11, 17, 19, 0.1);\r\n    }\r\n\r\n    .ovza-quiz__step-num {\r\n      width: 22px;\r\n      height: 22px;\r\n      font-size: 10.5px;\r\n    }\r\n\r\n    .ovza-quiz__step:not(.ovza-quiz__step--active) .ovza-quiz__step-num {\r\n      background: var(--green-pale);\r\n      color: var(--green-deep);\r\n    }\r\n\r\n    .ovza-quiz__step-label {\r\n      font-size: 13px;\r\n    }\r\n\r\n    .ovza-quiz__step-tap {\r\n      font-size: 11px;\r\n      font-weight: 600;\r\n      color: var(--green-deep);\r\n    }\r\n\r\n    .ovza-quiz__cta {\r\n      flex-direction: column;\r\n      align-items: stretch;\r\n      gap: 8px;\r\n      margin-top: 6px;\r\n    }\r\n\r\n    .ovza-quiz__btn {\r\n      width: 100%;\r\n    }\r\n\r\n    .ovza-quiz__cta-note {\r\n      text-align: center;\r\n      font-size: 11.5px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  \/\/ Both entry points in this section call the same shared, page-wide\r\n  \/\/ function that the Comparison\/Quiz interactive widget defines once its\r\n  \/\/ real logic is built. Guarded with a typeof check so clicking these\r\n  \/\/ buttons is a harmless no-op (not a JS error) until that widget is live\r\n  \/\/ on the page \u2014 safe to ship this section ahead of Quiz interactivity.\r\n  function openQuiz() {\r\n    if (typeof window.ovzaOpenQuiz === 'function') {\r\n      window.ovzaOpenQuiz();\r\n    }\r\n  }\r\n\r\n  var startBtn = document.getElementById('ovza-quiz-start-btn-2');\r\n  if (startBtn) startBtn.addEventListener('click', openQuiz);\r\n\r\n  var step1 = document.getElementById('ovza-quiz-step-1');\r\n  if (step1) {\r\n    step1.addEventListener('click', openQuiz);\r\n    step1.addEventListener('keydown', function (e) {\r\n      if (e.key === 'Enter' || e.key === ' ') {\r\n        e.preventDefault();\r\n        openQuiz();\r\n      }\r\n    });\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d8eb3b7 e-con-full elementor-hidden-desktop elementor-hidden-tablet e-flex e-con e-parent\" data-id=\"d8eb3b7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-f62e29e e-con-full e-flex e-con e-child\" data-id=\"f62e29e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5cf7370 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"5cf7370\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Don't know where to start? Four questions.<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-399e2ec elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"399e2ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Tell us how you&#8217;ll use the company \u2014 we&#8217;ll suggest the jurisdictions that fit. Then compare them right here.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5ede2d1 e-con-full e-flex e-con e-child\" data-id=\"5ede2d1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-049bf91 e-con-full e-flex e-con e-child\" data-id=\"049bf91\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-220d4c7 e-con-full e-flex e-con e-child\" data-id=\"220d4c7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9844b71 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"9844b71\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">1<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cdebcf elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"2cdebcf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">What will the company do?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6aab80e elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"6aab80e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Tap to start \u2192<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c64aa30 e-con-full e-flex e-con e-child\" data-id=\"c64aa30\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-6c2e815 e-con-full e-flex e-con e-child\" data-id=\"6c2e815\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-29b2e8b elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"29b2e8b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">2<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f7b6e4 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"8f7b6e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">How will the product be delivered?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0776567 e-con-full e-flex e-con e-child\" data-id=\"0776567\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-5642c15 e-con-full e-flex e-con e-child\" data-id=\"5642c15\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-067dd41 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"067dd41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">3<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5abd125 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"5abd125\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Who is the target customer?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4524fed e-con-full e-flex e-con e-child\" data-id=\"4524fed\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-bc498a1 e-con-full e-flex e-con e-child\" data-id=\"bc498a1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a696e17 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"a696e17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">4<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da92208 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"da92208\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">How soon do you need it?<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4dbd42f e-con-full e-flex e-con e-child\" data-id=\"4dbd42f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3aaf779 elementor-align-justify elementor-widget__width-initial ovza-quiz-trigger elementor-widget elementor-widget-button\" data-id=\"3aaf779\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"ovza-quiz-start-btn-3\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3.33331 8.00004H12.6666M7.99998 12.6667L12.6666 8.00004L7.99998 3.33337\" stroke=\"white\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Start the quiz<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64577fd elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"64577fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Takes about a minute<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7071f20 e-con-full e-flex e-con e-child\" data-id=\"7071f20\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-893adc8 elementor-widget elementor-widget-html\" data-id=\"893adc8\" 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<!--\r\n  FAQ Section \u2014 \"Questions, answered by topic\"\r\n  Built from Figma Dev Mode specs (desktop node 8827:823, mobile node 9007:1183)\r\n\r\n  HOW TO USE IN ELEMENTOR\r\n  1. Add an \"HTML\" widget to your page, in the section where you want the FAQ block.\r\n  2. Paste this entire file's content into that widget.\r\n  3. Edit the FAQ_DATA array near the top of the script block to add\/edit\/remove\r\n     categories and questions \u2014 no other code needs to change.\r\n  4. Make sure \"Poppins\" is loaded on your site (Google Fonts). If your theme already\r\n     loads it, you can delete the @import line in the style block below to avoid\r\n     loading it twice.\r\n-->\r\n\r\n<div class=\"ovza-faq\" id=\"ovza-faq-root\">\r\n  <div class=\"ovza-faq__inner\">\r\n\r\n    <!-- LEFT: heading + category nav -->\r\n    <div class=\"ovza-faq__aside\">\r\n      <div class=\"ovza-faq__intro\">\r\n        <h2 id='questions-answered-by-topic'  id=\"boomdevs_3\" class=\"ovza-faq__title\">Questions, answered by topic<\/h2>\r\n        <p class=\"ovza-faq__subtitle\">Detailed answers on tax, privacy, banking and formation \u2014 without scrolling through all of them.<\/p>\r\n      <\/div>\r\n\r\n      <!-- Desktop: vertical sidebar -->\r\n      <nav class=\"ovza-faq__sidebar\" aria-label=\"FAQ categories\"><\/nav>\r\n\r\n      <!-- Mobile: wrapping pill tabs -->\r\n      <nav class=\"ovza-faq__pills\" aria-label=\"FAQ categories\"><\/nav>\r\n    <\/div>\r\n\r\n    <!-- RIGHT: accordion -->\r\n    <div class=\"ovza-faq__panel\">\r\n      <div class=\"ovza-faq__accordion\" role=\"presentation\"><\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600&display=swap');\r\n\r\n  #ovza-faq-root, #ovza-faq-root * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .ovza-faq {\r\n    --ink: #0B1113;\r\n    --body: #37474F;\r\n    --muted: #9AA8A1;\r\n    --line: #E6E8E6;\r\n    --green: #34BE86;\r\n    --green-deep: #1E7F5C;\r\n    --green-bg: #F0FAF7;\r\n    --pill-active-bg: #E8F7EF;\r\n    --pill-active-text: #02542D;\r\n\r\n    font-family: 'Poppins', sans-serif;\r\n    background: #fff;\r\n    padding: 70px 120px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-faq__inner {\r\n    display: flex;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n    gap: 174px;\r\n    max-width: 1440px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  \/* ---------- LEFT ASIDE ---------- *\/\r\n  .ovza-faq__aside {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    gap: 24px;\r\n    width: 364px;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .ovza-faq__intro {\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-faq__title {\r\n    margin: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 500;\r\n    font-size: 40px;\r\n    line-height: 1.3;\r\n    letter-spacing: -1.3px;\r\n    color: var(--ink);\r\n  }\r\n\r\n  .ovza-faq__subtitle {\r\n    margin: 0;\r\n    margin-top: 4px;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 300;\r\n    font-size: 16.5px;\r\n    line-height: 28.88px;\r\n    letter-spacing: -0.16px;\r\n    color: var(--body);\r\n  }\r\n\r\n  \/* Desktop sidebar *\/\r\n  .ovza-faq__sidebar {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n    width: 136px;\r\n    border-left: 1px solid var(--line);\r\n  }\r\n\r\n  .ovza-faq__sidebar .ovza-faq__tab {\r\n    all: unset;\r\n    cursor: pointer;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    padding: 9px 16px;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 400;\r\n    font-size: 11.5px;\r\n    color: var(--muted);\r\n    border-left: 2px solid transparent;\r\n    margin-left: -1px;\r\n    white-space: nowrap;\r\n    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;\r\n  }\r\n\r\n  .ovza-faq__sidebar .ovza-faq__tab:hover {\r\n    color: var(--green-deep);\r\n  }\r\n\r\n  .ovza-faq__sidebar .ovza-faq__tab[aria-selected=\"true\"] {\r\n    background: var(--green-bg);\r\n    border-left: 2px solid var(--green);\r\n    color: var(--green-deep);\r\n    font-weight: 500;\r\n  }\r\n\r\n  \/* Mobile pill nav \u2014 hidden on desktop *\/\r\n  .ovza-faq__pills {\r\n    display: none;\r\n    flex-wrap: wrap;\r\n    gap: 6px;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-faq__pills .ovza-faq__tab {\r\n    all: unset;\r\n    cursor: pointer;\r\n    box-sizing: border-box;\r\n    padding: 7px 14px;\r\n    border-radius: 999px;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 400;\r\n    font-size: 12.5px;\r\n    color: var(--muted);\r\n    background: #fff;\r\n    border: 1px solid var(--line);\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .ovza-faq__pills .ovza-faq__tab[aria-selected=\"true\"] {\r\n    background: var(--pill-active-bg);\r\n    color: var(--pill-active-text);\r\n    border-color: var(--pill-active-bg);\r\n    font-weight: 700;\r\n  }\r\n\r\n  \/* ---------- RIGHT PANEL \/ ACCORDION ---------- *\/\r\n  .ovza-faq__panel {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-faq__accordion {\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100%;\r\n  }\r\n\r\n  .ovza-faq__item {\r\n    border-bottom: 1px solid var(--line);\r\n  }\r\n\r\n  .ovza-faq__item:first-child {\r\n    border-top: 1px solid var(--line);\r\n  }\r\n\r\n  .ovza-faq__q {\r\n    all: unset;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: flex-start;\r\n    gap: 14px;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    padding: 24px 0;\r\n  }\r\n\r\n  .ovza-faq__q-text {\r\n    flex: 1 1 0;\r\n    min-width: 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 500;\r\n    font-size: 16px;\r\n    line-height: 28px;\r\n    letter-spacing: -0.16px;\r\n    color: #000;\r\n  }\r\n\r\n  .ovza-faq__chevron {\r\n    flex-shrink: 0;\r\n    width: 24px;\r\n    height: 24px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: var(--ink);\r\n    transition: transform 0.25s ease;\r\n  }\r\n\r\n  .ovza-faq__item[data-open=\"true\"] .ovza-faq__chevron {\r\n    transform: rotate(180deg);\r\n  }\r\n\r\n  .ovza-faq__chevron svg {\r\n    width: 20px;\r\n    height: 20px;\r\n  }\r\n\r\n  .ovza-faq__a {\r\n    max-height: 0;\r\n    overflow: hidden;\r\n    transition: max-height 0.3s ease;\r\n  }\r\n\r\n  .ovza-faq__a-inner {\r\n    padding: 0 38px 24px 0;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-weight: 300;\r\n    font-size: 15px;\r\n    line-height: 1.7;\r\n    color: var(--body);\r\n  }\r\n\r\n  \/* ---------- RESPONSIVE ---------- *\/\r\n  @media (max-width: 900px) {\r\n    .ovza-faq {\r\n      padding: 48px 24px;\r\n      padding-top: 16px;\r\n    }\r\n\r\n    .ovza-faq__inner {\r\n      flex-direction: column;\r\n      gap: 16px;\r\n      align-items: stretch;\r\n    }\r\n\r\n    .ovza-faq__aside {\r\n      width: 100%;\r\n      gap: 16px;\r\n    }\r\n\r\n    .ovza-faq__title {\r\n      font-size: 24px;\r\n      letter-spacing: -0.24px;\r\n      line-height: 1.3;\r\n    }\r\n\r\n    .ovza-faq__subtitle {\r\n      font-size: 13.5px;\r\n      line-height: 1.5;\r\n      margin-top: 0;\r\n    }\r\n\r\n    .ovza-faq__sidebar {\r\n      display: none;\r\n    }\r\n\r\n    .ovza-faq__pills {\r\n      display: flex;\r\n    }\r\n\r\n    .ovza-faq__panel {\r\n      width: 100%;\r\n    }\r\n\r\n    .ovza-faq__q {\r\n      padding: 16px 0;\r\n      gap: 14px;\r\n    }\r\n\r\n    .ovza-faq__q-text {\r\n      font-size: 14px;\r\n      line-height: 1.5;\r\n      font-weight: 600;\r\n    }\r\n\r\n    .ovza-faq__chevron {\r\n      width: 18px;\r\n      height: 18px;\r\n      color: var(--green);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  \/* ============================================================\r\n     EDIT YOUR FAQ CONTENT HERE\r\n     - Add\/remove categories by adding\/removing keys to FAQ_DATA\r\n     - Category tab order follows the order of keys below\r\n     - Each question needs a \"q\" (question) and \"a\" (answer)\r\n     ============================================================ *\/\r\n  var FAQ_DATA = {\r\n    \"General\": [\r\n      {\r\n        q: \"What is an offshore company, and how does it work?\",\r\n        a: \"An offshore company is a legal entity incorporated in a jurisdiction outside the owner\\u2019s primary country of residence or main operational footprint. These entities are typically established in zero-tax or tax-neutral financial centers to facilitate cross-border commercial trade, intellectual property licensing, international B2B invoicing, and multi-jurisdictional asset holding.\"\r\n      },\r\n      {\r\n        q: \"Is owning an offshore company legal?\",\r\n        a: \"Incorporating and operating an offshore company is fully legal across almost all sovereign jurisdictions. However, legal standing depends entirely on complete transparency and compliance. Business owners must meet all mandatory tax reporting obligations in their home jurisdiction, including disclosing foreign bank accounts and foreign corporate ownership structures under local tax rules.\"\r\n      },\r\n      {\r\n        q: \"How do I choose the right jurisdiction for my business?\",\r\n        a: \"Selecting the proper jurisdiction requires evaluating your primary commercial goals, target client geography, and operational needs. Key considerations include the jurisdiction's reputation among global clearing banks, local compliance requirements such as economic substance mandates, total annual incorporation and agent renewal fees, and how easily the corporate structure integrates with payment processors or electronic money institutions.\"\r\n      },\r\n      {\r\n        q: \"What is the difference between an IBC and an LLC?\",\r\n        a: \"An International Business Company is a traditional corporate structure governed by directors, officers, and shareholders, making it ideal for multi-owner ventures, joint investments, and businesses seeking external capital. A Limited Liability Company is owned by members and governed by an operating agreement, offering pass-through management flexibility and simplified operational governance that suits single-owner businesses and asset holding structures.\"\r\n      },\r\n      {\r\n        q: \"What is a Registered Agent, and why is one required?\",\r\n        a: \"A Registered Agent is a licensed corporate service provider mandated by local corporate statute in offshore jurisdictions. The agent serves as the legal liaison between your company and the local government registrar, maintaining mandatory corporate records, receiving official legal notices on behalf of the entity, and submitting annual statutory filings to ensure the company remains in good standing.\"\r\n      }\r\n    ],\r\n    \"Tax\": [\r\n      {\r\n        q: \"What does \\\"Tax Neutrality\\\" mean in an offshore context?\",\r\n        a: \"Tax neutrality means that the host jurisdiction does not levy local corporate income taxes, capital gains taxes, dividend taxes, or withholding taxes on revenue generated outside its borders. This allows international trade, investments, and corporate transactions to flow without incurring an extra layer of local taxation at the entity level.\"\r\n      },\r\n      {\r\n        q: \"What are Controlled Foreign Corporation (CFC) rules?\",\r\n        a: \"Controlled Foreign Corporation rules are domestic tax regulations enforced by an entrepreneur's home country to prevent tax deferral through foreign entities. Under these regulations, passive or operating income earned by an offshore entity may be attributed directly to the owner's personal tax return in their home residence, regardless of whether profits are distributed as dividends.\"\r\n      },\r\n      {\r\n        q: \"What is the Common Reporting Standard (CRS)?\",\r\n        a: \"The Common Reporting Standard is an international framework developed by the OECD for the automatic exchange of financial account information. Participating financial institutions collect account details of non-resident business owners and automatically transmit that financial data annually to the tax authority in the account owner\\u2019s primary country of tax residence.\"\r\n      },\r\n      {\r\n        q: \"Does an offshore company need a Tax Identification Number (TIN)?\",\r\n        a: \"An increasing number of international jurisdictions mandate or issue tax identification numbers for corporate entities to align with global transparency standards. Financial institutions routinely request a valid corporate tax identification number during initial onboarding and annual compliance reviews to fulfill mandatory reporting obligations under global tax exchange protocols.\"\r\n      },\r\n      {\r\n        q: \"What are Economic Substance rules, and do they apply to my company?\",\r\n        a: \"Economic Substance rules require companies engaging in specific core business activities, such as fund management, financing, shipping, or headquarters operations, to demonstrate actual physical and operational presence within their incorporation jurisdiction. Entities must show adequate local expenditure, board management, and operational activities, whereas pure holding entities typically face reduced substance requirements.\"\r\n      }\r\n    ],\r\n    \"Privacy\": [\r\n      {\r\n        q: \"Is offshore company ownership visible on public registries?\",\r\n        a: \"Public visibility depends entirely on the transparency laws of the chosen jurisdiction. Private jurisdictions maintain ownership details confidentially through the licensed registered agent without public database access, semi-private jurisdictions store owner data in restricted central registries accessible only by official government authorities, and public jurisdictions index director and shareholder details online for public viewing.\"\r\n      },\r\n      {\r\n        q: \"What is the role of a Nominee Director or Shareholder?\",\r\n        a: \"A nominee is an appointed individual or entity listed on official public records to hold directorship or legal share title on behalf of the actual business owner. The nominee operates strictly under a formal agreement and power of attorney, ensuring that full operational decision-making, bank account management, and financial control remain entirely with the ultimate beneficial owner.\"\r\n      },\r\n      {\r\n        q: \"How do international authorities request access to confidential corporate records?\",\r\n        a: \"Foreign government authorities cannot access private corporate registries without formal legal grounds. Access requires filing an official request through international legal channels such as Mutual Legal Assistance Treaties or Tax Information Exchange Agreements, supported by evidence demonstrating an ongoing criminal investigation or formal legal inquiry.\"\r\n      },\r\n      {\r\n        q: \"What is the difference between legal confidentiality and illegal secrecy?\",\r\n        a: \"Legal confidentiality involves utilizing statutory privacy protections, such as private registries or trusts, to safeguard business data and personal assets from commercial competitors, bad actors, and public exposure while fully declaring all holdings to home tax authorities. Illegal secrecy refers to deliberately hiding corporate entities or bank accounts from revenue authorities to evade legal reporting responsibilities or taxes.\"\r\n      },\r\n      {\r\n        q: \"How is sensitive personal data secured during the onboarding process?\",\r\n        a: \"Personal documentation is protected through encrypted upload systems and strict data privacy standards during corporate onboarding. Identity verification and document collection are processed through certified digital compliance systems, ensuring that personal details and identification files are shared strictly with regulated corporate registrars and compliance personnel under official confidentiality obligations.\"\r\n      }\r\n    ],\r\n    \"Banking\": [\r\n      {\r\n        q: \"Can an offshore company open a corporate bank account remotely?\",\r\n        a: \"Offshore companies can establish corporate banking accounts without physical travel. Modern international financial institutions, including commercial banks, private banks, and regulated electronic money institutions, utilize secure remote onboarding processes that verify identity, review business activities, and validate corporate documents digitally.\"\r\n      },\r\n      {\r\n        q: \"What is the difference between a traditional bank and an EMI for an offshore company?\",\r\n        a: \"Traditional commercial banks offer complete transactional facilities, credit lines, and high-volume merchant clearance, though they generally require higher opening deposit balances, longer review timelines, and extensive business plan evaluations. Electronic money institutions specialize in multi-currency transactional accounts with rapid digital onboarding and flexible balance thresholds, making them a popular choice for digital businesses despite not offering traditional credit facilities.\"\r\n      },\r\n      {\r\n        q: \"What documents do banks require for offshore company account opening?\",\r\n        a: \"Financial institutions require a complete corporate pack, including the Certificate of Incorporation, Memorandum and Articles of Association, and a fresh Certificate of Incumbency or Good Standing for entities older than twelve months. Additionally, banks require certified copies of passports and utility bill proof of address for all ultimate beneficial owners and directors, proof of source of funds, and a clear business plan explaining the company's operational flow and client base.\"\r\n      },\r\n      {\r\n        q: \"What causes international bank account approvals to get delayed or rejected?\",\r\n        a: \"Delays or rejections typically happen when applicants submit incomplete identity verification, outdated proof of address documents, or vague operational business descriptions. Banks also decline applications when high-risk business activities lack proper compliance documentation, or when the applicant fails to demonstrate a clear economic or commercial rationale for their chosen corporate structure.\"\r\n      },\r\n      {\r\n        q: \"What is a correspondent bank, and how does it affect wire transfers?\",\r\n        a: \"A correspondent bank is an intermediary financial institution that processes cross-border currency transfers between two financial institutions that lack a direct relationship. Delays in international wire transfers frequently occur when correspondent clearing banks hold funds temporarily to perform routine anti-money laundering checks or verify transaction details before clearing the payment.\"\r\n      }\r\n    ],\r\n    \"Formation\": [\r\n      {\r\n        q: \"How long does it take to register an offshore company?\",\r\n        a: \"Standard offshore incorporation typically requires two to five business days once identity verification checks and company name availability are approved. The precise timeline depends on the processing speed of the local corporate registry and whether the jurisdiction supports fully digital filing procedures.\"\r\n      },\r\n      {\r\n        q: \"What information do I need to provide to start incorporation?\",\r\n        a: \"To begin the registration process, you must supply proposed company names, a description of planned business activities, and certified passport copies for all directors and ultimate beneficial owners. Additionally, you must provide a recent utility bill or bank statement confirming residential address details for all key individuals associated with the new entity.\"\r\n      },\r\n      {\r\n        q: \"Do I need to physically travel to the offshore jurisdiction to incorporate?\",\r\n        a: \"Physical travel is never required to register an offshore entity or complete corporate formation. The entire incorporation process is conducted remotely through digital document submission, online identity verification, electronic filing with the local registry, and secure digital delivery of the final corporate documents.\"\r\n      },\r\n      {\r\n        q: \"What corporate documents do I receive after incorporation is complete?\",\r\n        a: \"Upon successful incorporation, you receive an official corporate pack containing the Certificate of Incorporation, Memorandum and Articles of Association or Operating Agreement, and the first board resolution appointing company directors. The documentation also includes the official share certificates and statutory registers recording the company's officers and beneficial owners.\"\r\n      },\r\n      {\r\n        q: \"What are the ongoing annual requirements to keep my offshore company active?\",\r\n        a: \"Maintaining an offshore company in good standing requires paying annual government registry fees, maintaining a licensed local registered agent and registered office address, and completing required annual compliance filings or economic substance declarations. Companies must also maintain clear accounting records to comply with local corporate statutes.\"\r\n      }\r\n    ]\r\n  };\r\n  \/* ============================================================ *\/\r\n\r\n  var root = document.getElementById('ovza-faq-root');\r\n  var sidebar = root.querySelector('.ovza-faq__sidebar');\r\n  var pills = root.querySelector('.ovza-faq__pills');\r\n  var accordion = root.querySelector('.ovza-faq__accordion');\r\n\r\n  var categories = Object.keys(FAQ_DATA);\r\n  var activeCategory = categories[0];\r\n\r\n  var chevronSVG =\r\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">' +\r\n    '<path d=\"M6 9L12 15L18 9\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>' +\r\n    '<\/svg>';\r\n\r\n  function buildNav() {\r\n    sidebar.innerHTML = '';\r\n    pills.innerHTML = '';\r\n\r\n    categories.forEach(function (cat) {\r\n      var isActive = cat === activeCategory;\r\n\r\n      var sideBtn = document.createElement('button');\r\n      sideBtn.type = 'button';\r\n      sideBtn.className = 'ovza-faq__tab';\r\n      sideBtn.textContent = cat;\r\n      sideBtn.setAttribute('aria-selected', isActive ? 'true' : 'false');\r\n      sideBtn.addEventListener('click', function () { setCategory(cat); });\r\n      sidebar.appendChild(sideBtn);\r\n\r\n      var pillBtn = document.createElement('button');\r\n      pillBtn.type = 'button';\r\n      pillBtn.className = 'ovza-faq__tab';\r\n      pillBtn.textContent = cat;\r\n      pillBtn.setAttribute('aria-selected', isActive ? 'true' : 'false');\r\n      pillBtn.addEventListener('click', function () { setCategory(cat); });\r\n      pills.appendChild(pillBtn);\r\n    });\r\n  }\r\n\r\n  function buildAccordion() {\r\n    accordion.innerHTML = '';\r\n    var questions = FAQ_DATA[activeCategory] || [];\r\n\r\n    questions.forEach(function (item, index) {\r\n      var wrap = document.createElement('div');\r\n      wrap.className = 'ovza-faq__item';\r\n      wrap.setAttribute('data-open', index === 0 ? 'true' : 'false');\r\n\r\n      var btnId = 'ovza-faq-q-' + index;\r\n      var panelId = 'ovza-faq-a-' + index;\r\n\r\n      wrap.innerHTML =\r\n        '<button type=\"button\" class=\"ovza-faq__q\" id=\"' + btnId + '\" aria-expanded=\"' + (index === 0 ? 'true' : 'false') + '\" aria-controls=\"' + panelId + '\">' +\r\n          '<span class=\"ovza-faq__q-text\">' + item.q + '<\/span>' +\r\n          '<span class=\"ovza-faq__chevron\">' + chevronSVG + '<\/span>' +\r\n        '<\/button>' +\r\n        '<div class=\"ovza-faq__a\" id=\"' + panelId + '\" role=\"region\" aria-labelledby=\"' + btnId + '\">' +\r\n          '<div class=\"ovza-faq__a-inner\">' + item.a + '<\/div>' +\r\n        '<\/div>';\r\n\r\n      accordion.appendChild(wrap);\r\n\r\n      var qBtn = wrap.querySelector('.ovza-faq__q');\r\n      qBtn.addEventListener('click', function () {\r\n        toggleItem(wrap);\r\n      });\r\n    });\r\n\r\n    \/\/ Open the first item by default, matching the Figma \"open\" state\r\n    var first = accordion.querySelector('.ovza-faq__item');\r\n    if (first) openItem(first);\r\n  }\r\n\r\n  function toggleItem(item) {\r\n    var isOpen = item.getAttribute('data-open') === 'true';\r\n    \/\/ close all\r\n    accordion.querySelectorAll('.ovza-faq__item').forEach(function (el) {\r\n      closeItem(el);\r\n    });\r\n    if (!isOpen) openItem(item);\r\n  }\r\n\r\n  function openItem(item) {\r\n    item.setAttribute('data-open', 'true');\r\n    var btn = item.querySelector('.ovza-faq__q');\r\n    var panel = item.querySelector('.ovza-faq__a');\r\n    btn.setAttribute('aria-expanded', 'true');\r\n    panel.style.maxHeight = panel.scrollHeight + 'px';\r\n  }\r\n\r\n  function closeItem(item) {\r\n    item.setAttribute('data-open', 'false');\r\n    var btn = item.querySelector('.ovza-faq__q');\r\n    var panel = item.querySelector('.ovza-faq__a');\r\n    btn.setAttribute('aria-expanded', 'false');\r\n    panel.style.maxHeight = '0px';\r\n  }\r\n\r\n  function setCategory(cat) {\r\n    if (cat === activeCategory) return;\r\n    activeCategory = cat;\r\n    buildNav();\r\n    buildAccordion();\r\n  }\r\n\r\n  \/\/ Deferred until DOMContentLoaded, deliberately \u2014 building this on initial\r\n  \/\/ script execution can race any other page script that installs watchers\r\n  \/\/ on the DOM (e.g. a translation plugin's MutationObserver), causing this\r\n  \/\/ section's first render to go unnoticed by anything that hasn't finished\r\n  \/\/ loading yet. Waiting for DOMContentLoaded guarantees every other\r\n  \/\/ same-priority script has already run first.\r\n  function ovzaFaqInit() {\r\n    buildNav();\r\n    buildAccordion();\r\n  }\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', ovzaFaqInit);\r\n  } else {\r\n    ovzaFaqInit();\r\n  }\r\n\r\n  \/\/ Recalculate open panel height on resize (in case text reflows)\r\n  window.addEventListener('resize', function () {\r\n    var openItem = accordion.querySelector('.ovza-faq__item[data-open=\"true\"]');\r\n    if (openItem) {\r\n      var panel = openItem.querySelector('.ovza-faq__a');\r\n      panel.style.maxHeight = panel.scrollHeight + 'px';\r\n    }\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-46655c8 e-flex e-con-boxed e-con e-parent\" data-id=\"46655c8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-dddbf61 e-con-full e-flex e-con e-child\" data-id=\"dddbf61\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-cd72ed0 e-con-full e-flex e-con e-child\" data-id=\"cd72ed0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3f31733 elementor-widget elementor-widget-heading\" data-id=\"3f31733\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 id='get-started'  id=\"boomdevs_4\" class=\"elementor-heading-title elementor-size-default\">- Get Started -<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed8dd31 elementor-widget elementor-widget-heading\" data-id=\"ed8dd31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 id='not-sure-which-one-fits-your-situation'  id=\"boomdevs_5\" class=\"elementor-heading-title elementor-size-default\">Not sure which one fits your situation?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36fa8c7 elementor-widget elementor-widget-text-editor\" data-id=\"36fa8c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Run your thinking past an advisor. No call bookings, no ticket queue \u2014 a real person, usually within 30 minutes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4b045eb e-con-full e-flex e-con e-child\" data-id=\"4b045eb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4829159 elementor-widget elementor-widget-shortcode\" data-id=\"4829159\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"frm_forms  with_frm_style frm_style_formidable-style\" id=\"frm_form_6_container\" data-token=\"5baab0c29f7b3449291861d1d1833ae4\">\n<form enctype=\"multipart\/form-data\" method=\"post\" class=\"frm-show-form  frm_js_validate  frm_ajax_submit  frm_pro_form \" id=\"form_contact-us9\" data-token=\"5baab0c29f7b3449291861d1d1833ae4\">\n<div class=\"frm_form_fields \">\n<fieldset>\n<legend class=\"frm_screen_reader\">Contact page<\/legend>\r\n\r\n<div class=\"frm_fields_container\">\n<input type=\"hidden\" name=\"frm_action\" value=\"create\" \/>\n<input type=\"hidden\" name=\"form_id\" value=\"6\" \/>\n<input type=\"hidden\" name=\"frm_hide_fields_6\" id=\"frm_hide_fields_6\" value=\"\" \/>\n<input type=\"hidden\" name=\"form_key\" value=\"contact-us9\" \/>\n<input type=\"hidden\" name=\"item_meta[0]\" value=\"\" \/>\n<input type=\"hidden\" id=\"frm_submit_entry_6\" name=\"frm_submit_entry_6\" value=\"69fa670adf\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/es\/wp-json\/wp\/v2\/pages\/27746\" \/><div id=\"frm_field_70_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm6 frm_first\">\r\n    <label for=\"field_qh4icy29\" class=\"frm_primary_label\">Name\r\n        <span class=\"frm_required\">*<\/span>\r\n    <\/label>\r\n    <input  type=\"text\" id=\"field_qh4icy29\" name=\"item_meta[70]\" value=\"\"  data-reqmsg=\"Name cannot be blank.\" aria-required=\"true\" data-invmsg=\"Name is invalid\" aria-invalid=\"false\"   \/>\r\n    \r\n    \r\n<\/div>\n<div id=\"frm_field_71_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm6\">\r\n    <label for=\"field_29yf4d29\" class=\"frm_primary_label\">Email\r\n        <span class=\"frm_required\">*<\/span>\r\n    <\/label>\r\n    <input type=\"email\" id=\"field_29yf4d29\" name=\"item_meta[71]\" value=\"\"  data-reqmsg=\"Email cannot be blank.\" aria-required=\"true\" data-invmsg=\"Please enter a valid email address\" aria-invalid=\"false\"  \/>\r\n    \r\n    \r\n<\/div>\n<div id=\"frm_field_72_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm_full\">\r\n    <label for=\"field_9jv0r129\" class=\"frm_primary_label\">Message\r\n        <span class=\"frm_required\">*<\/span>\r\n    <\/label>\r\n    <textarea name=\"item_meta[72]\" id=\"field_9jv0r129\" rows=\"5\"  data-reqmsg=\"Message cannot be blank.\" aria-required=\"true\" data-invmsg=\"Message is invalid\" aria-invalid=\"false\"  ><\/textarea>\r\n    \r\n    \r\n<\/div>\n<div id=\"frm_field_73_container\" class=\"frm_form_field form-field  frm_none_container vertical_radio\">\r\n\t<div  id=\"field_nezt8_label\" class=\"frm_primary_label\">news\r\n\t\t<span class=\"frm_required\" aria-hidden=\"true\"><\/span>\r\n\t<\/div>\r\n\t<div class=\"frm_opt_container\" aria-labelledby=\"field_nezt8_label\" role=\"group\">\t\t<div class=\"frm_checkbox\" id=\"frm_checkbox_73-1\">\t\t\t<label  for=\"field_nezt8-1\">\n\t\t\t<input type=\"checkbox\" name=\"item_meta[73][]\" id=\"field_nezt8-1\" value=\"I agree to sign up for OVZA\u2019s newsletter\"  data-invmsg=\"news is invalid\"   \/> I agree to sign up for OVZA\u2019s newsletter<\/label><\/div>\n<\/div>\r\n\t\r\n\t\r\n<\/div>\n<div id=\"frm_field_78_container\" class=\"frm_form_field form-field  frm_none_container\">\r\n\t<label for=\"g-recaptcha-response\" id=\"field_nmuxz_label\" class=\"frm_primary_label\">Captcha\r\n\t\t<span class=\"frm_required\" aria-hidden=\"true\"><\/span>\r\n\t<\/label>\r\n\t<div  id=\"field_nmuxz\" class=\"frm-g-recaptcha\" data-sitekey=\"6LchS8wrAAAAAPGvq6z-7KAh6e9B-guu9kl7WGv_\" data-size=\"invisible\" data-theme=\"light\"><\/div>\r\n\t\r\n\t\r\n<\/div>\n\t\t<input  type=\"hidden\" name=\"item_meta[95]\" id=\"field_7l803\" value=\"Offshore Company Comparison\"  data-frmval=\"Offshore Company Comparison\"   \/>\n\t\t<div id=\"frm_field_74_container\" class=\"frm_form_field form-field \">\r\n\t<div class=\"frm_submit\">\r\n\r\n<button class=\"frm_button_submit frm_final_submit\" type=\"submit\"  formnovalidate=\"formnovalidate\">Submit Form<\/button>\r\n\r\n<\/div>\r\n<\/div>\n\t<input type=\"hidden\" name=\"item_key\" value=\"\" \/>\n\t\t\t<div id=\"frm_field_121_container\">\n\t\t\t<label for=\"field_7xomw\" >\n\t\t\t\tSi eres humano, deja este campo en blanco.\t\t\t<\/label>\n\t\t\t<input  id=\"field_7xomw\" type=\"text\" class=\"frm_form_field form-field frm_verify\" name=\"item_meta[121]\" value=\"\"  \/>\n\t\t<\/div>\n\t\t<input name=\"frm_state\" type=\"hidden\" value=\"ZImldfY4cOA2wLIZMmrczXFa7SCe1dhs91nTENmgDMpH6j6TJouC2gztbk7JPO+P\" \/><\/div>\n<\/fieldset>\n<\/div>\n\n<p style=\"display: none !important;\" class=\"akismet-fields-container\" data-prefix=\"ak_\"><label>&#916;<textarea name=\"ak_hp_textarea\" cols=\"45\" rows=\"8\" maxlength=\"100\"><\/textarea><\/label><input type=\"hidden\" id=\"ak_js_1\" name=\"ak_js\" value=\"188\"\/><script>\ndocument.getElementById( \"ak_js_1\" ).setAttribute( \"value\", ( new Date() ).getTime() );\n<\/script>\n<\/p><\/form>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\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<div class=\"elementor-element elementor-element-8669483 elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"8669483\" 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-87c6248 elementor-widget elementor-widget-html\" data-id=\"87c6248\" 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<style>label#field_2us8s_label {\r\n    font-size: 14px!important;\r\n}\r\n\r\nselect#field_4jop3{\r\nheight:30px!important;\r\ncolor:#000!important;}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c56d6a elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"6c56d6a\" 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<style>\n    .frm_submit {\n    text-align: right !important;\n    padding: 3px !important;\n}\n\n.with_frm_style .frm_checkbox {\n    text-decoration: underline;\n}\n\n<\/style>\n\n<script>\njQuery(document).on('frmFormComplete', function(event, form, response){\n    if(jQuery(form).find('input[name=\"form_id\"]').val() == '12') {\n        jQuery('#side-text-box .elementor-heading-title')\n            .text('Contact Us For Text-Free Antigua Company IBC Registration').css('font-size', '24px');\n    }\n});\n<\/script>\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<div class=\"elementor-element elementor-element-5437091 e-flex e-con-boxed e-con e-parent\" data-id=\"5437091\" 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-6e8a341 elementor-widget elementor-widget-html\" data-id=\"6e8a341\" 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<!--\r\n  OVZA HEADER \u2014 FORCE \"STICKY \/ SCROLLED\" LOOK ON THIS PAGE ONLY\r\n  ================================================================\r\n  Paste this whole block into an Elementor \"HTML\" widget on the\r\n  page(s) where you want it. Best placement: as the very FIRST\r\n  widget on the page (top of the layout), so the browser parses it\r\n  before it paints the header. If you have Elementor Pro, pasting\r\n  the <style> contents into Page Settings \u2192 Advanced \u2192 Custom CSS\r\n  is even safer, since Elementor guarantees that renders in <head>.\r\n\r\n  WHAT THIS DOES\r\n  - Forces the logo, menu link colors, button colors, and background\r\n    to look exactly like the \"scrolled\" \/ \"filled\" state, from the\r\n    very first paint \u2014 no JS, no timer, nothing to \"switch\" after\r\n    load, so there is no flash\/glitch.\r\n  - Does NOT touch position\/sticky behavior. Whether the header pins\r\n    to the top on scroll is still controlled by the preset you've\r\n    picked in the plugin's own settings (Header_Settings). This\r\n    snippet only overrides how it LOOKS.\r\n  - Scoped to this page only, because it only exists in this page's\r\n    HTML widget \u2014 no other page is affected.\r\n  - Harmless if the real .is-scrolled class later gets added by the\r\n    plugin's own scroll listener (e.g. the visitor actually scrolls)\r\n    \u2014 the values match, so nothing visibly changes either way.\r\n-->\r\n<style>\r\n  \/* 1. Background + shadow \u2014 beats .ovza-nav--transparent's\r\n        `background:transparent` on desktop *\/\r\n  html body .ovza-nav--transparent {\r\n    background: #ffffff !important;\r\n    box-shadow: 0 4px 20px rgba(0,0,0,0.05), inset 0 -1px 0 var(--border, #E5E7EB) !important;\r\n  }\r\n\r\n  \/* 2. Logo \u2014 force full color (un-invert) on desktop *\/\r\n  html body .ovza-nav__logo img {\r\n    filter: none !important;\r\n  }\r\n\r\n  \/* 3. Nav links \u2014 dark text + the \"scrolled\" hover treatment *\/\r\n  html body .ovza-nav__link {\r\n    color: var(--text-main, #1F2937) !important;\r\n  }\r\n\r\n  html body .ovza-nav__link:hover,\r\n  html body .ovza-nav__item:hover > .ovza-nav__link {\r\n    background-color: #ECFDF5 !important;\r\n    color: var(--primary-dark, #00966b) !important;\r\n  }\r\n\r\n  \/* 4. Desktop \"Contact\" CTA \u2014 dark text (its hover state, green bg \/\r\n        white text, is already unconditional in the plugin CSS, so it's\r\n        left alone here) *\/\r\n  html body .ovza-nav__cta--desktop,\r\n  html body .ovza-nav__cta--desktop:link,\r\n  html body .ovza-nav__cta--desktop:visited,\r\n  html body a.ovza-nav__cta--desktop,\r\n  html body a.ovza-nav__cta--desktop:link,\r\n  html body a.ovza-nav__cta--desktop:visited {\r\n    color: var(--text-main, #1F2937) !important;\r\n  }\r\n\r\n  \/* 5. Mobile burger icon \u2014 dark, matches scrolled\/filled state *\/\r\n  html body .ovza-nav__mobile-open {\r\n    color: var(--text-main, #1F2937) !important;\r\n  }\r\n\r\n  \/* 6. Mobile (\u2264991px) \u2014 the plugin's own \"transparent + unscrolled\"\r\n        rules use !important, so these clones need matching selectors\r\n        (prefixed with html\/body to edge out the specificity) to win\r\n        reliably regardless of stylesheet load order. *\/\r\n  @media (max-width: 991px) {\r\n    html body .ovza-nav--transparent:not(.is-scrolled) {\r\n      background: #ffffff !important;\r\n      box-shadow: inset 0 -1px 0 var(--border, #E5E7EB) !important;\r\n    }\r\n\r\n    html body .ovza-nav--transparent:not(.is-scrolled) .ovza-nav__bar .ovza-nav__logo img {\r\n      filter: none !important;\r\n    }\r\n\r\n    html body .ovza-nav--transparent:not(.is-scrolled) .ovza-nav__mobile-open {\r\n      color: var(--text-main, #1F2937) !important;\r\n    }\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-046e1ea elementor-widget elementor-widget-html\" data-id=\"046e1ea\" 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<script>\r\n(function () {\r\n  var btn = document.getElementById('hero-quiz-cta');\r\n  if (btn) {\r\n    btn.addEventListener('click', function (e) {\r\n      e.preventDefault();\r\n      if (typeof window.ovzaOpenQuiz === 'function') {\r\n        window.ovzaOpenQuiz();\r\n      }\r\n    });\r\n  }\r\n})();\r\n<\/script>\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>Jurisdiction comparison Eighteen jurisdictions.One right answer for your business. Compare costs, taxation, privacy and compliance side by side \u2014 or answer four questions and we&#8217;ll narrow it down for you. Compare jurisdictions Not sure? Take the quiz Don&#8217;t know where to start? Four questions. Tell us how you&#8217;ll use the company \u2014 we&#8217;ll suggest the&#8230;<\/p>","protected":false},"author":65,"featured_media":0,"parent":16440,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-27746","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/pages\/27746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/comments?post=27746"}],"version-history":[{"count":347,"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/pages\/27746\/revisions"}],"predecessor-version":[{"id":28908,"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/pages\/27746\/revisions\/28908"}],"up":[{"embeddable":true,"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/pages\/16440"}],"wp:attachment":[{"href":"https:\/\/ovza.com\/es\/wp-json\/wp\/v2\/media?parent=27746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}