{"id":37790,"date":"2026-02-05T13:42:05","date_gmt":"2026-02-05T05:42:05","guid":{"rendered":"https:\/\/www.goglobalsafe.com\/?page_id=37790"},"modified":"2026-02-05T13:51:19","modified_gmt":"2026-02-05T05:51:19","slug":"schools","status":"publish","type":"page","link":"https:\/\/www.goglobalsafe.com\/zh\/schools\/","title":{"rendered":"schools"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"37790\" class=\"elementor elementor-37790\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4741ae0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4741ae0\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a00af96\" data-id=\"a00af96\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fca01c4 elementor-widget elementor-widget-shortcode\" data-id=\"fca01c4\" data-element_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\">\n    <script>\n        window.us_config = {\"school_slug\":null,\"school_id\":null,\"source\":null};\n    <\/script>\n\n    <head>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link href=\"\/wp-content\/static\/element\/index.min.css\" rel=\"stylesheet\">\n    <link href=\"\/wp-content\/static\/js\/flatpickr.min.css\" rel=\"stylesheet\">\n<\/head>\n\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n<script src=\"\/wp-content\/static\/js\/vue.global.js\"><\/script>\n<script src=\"\/wp-content\/static\/js\/axios.min.js\"><\/script>\n<script src=\"\/wp-content\/static\/js\/flatpickr.min.js\"><\/script>\n\n<style>\n    [v-cloak] {\n        display: none;\n    }\n\n    @font-face {\n        font-family: 'GGS Inter';\n        src: url('\/wp-content\/static\/font\/Inter\/Inter-Regular.woff2') format('woff2');\n        font-weight: 400;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Inter';\n        src: url('\/wp-content\/static\/font\/Inter\/Inter-Medium.woff2') format('woff2');\n        font-weight: 500;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Inter';\n        src: url('\/wp-content\/static\/font\/Inter\/Inter-SemiBold.woff2') format('woff2');\n        font-weight: 600;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Inter';\n        src: url('\/wp-content\/static\/font\/Inter\/Inter-Bold.woff2') format('woff2');\n        font-weight: 700;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Inter';\n        src: url('\/wp-content\/static\/font\/Inter\/Inter-ExtraBold.woff2') format('woff2');\n        font-weight: 800;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Alibaba';\n        src: url('\/wp-content\/static\/font\/alibaba\/AlibabaPuHuiTi-3-55-Regular.woff2') format('woff2');\n        font-weight: 400;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Alibaba';\n        src: url('\/wp-content\/static\/font\/alibaba\/AlibabaPuHuiTi-3-65-Medium.woff2') format('woff2');\n        font-weight: 500;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Alibaba';\n        src: url('\/wp-content\/static\/font\/alibaba\/AlibabaPuHuiTi-3-75-SemiBold.woff2') format('woff2');\n        font-weight: 600;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS Alibaba';\n        src: url('\/wp-content\/static\/font\/alibaba\/AlibabaPuHuiTi-3-85-Bold.woff2') format('woff2');\n        font-weight: 700;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    @font-face {\n        font-family: 'GGS DIN';\n        src: url('\/wp-content\/static\/font\/din\/DIN-Bold.woff2') format('woff2');\n        font-weight: 700;\n        font-style: normal;\n        font-display: swap;\n    }\n\n    .entry-content,\n    .site-content {\n        background: #fafafa;\n    }\n\n    #product-list-allnew-app {\n        position: relative;\n        width: 100%;\n        max-width: 100vw;\n        overflow-x: clip;\n        background: #fafafa;\n        color: #0f172a;\n        font-family: 'GGS Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n        font-variant-numeric: lining-nums tabular-nums;\n    }\n\n    #product-list-allnew-app.ggs-lang-zh {\n        font-family: 'GGS Inter', 'GGS Alibaba', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    #product-list-allnew-app.ggs-lang-en {\n        font-family: 'GGS Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    #product-list-allnew-app h1,\n    #product-list-allnew-app h2,\n    #product-list-allnew-app h3,\n    #product-list-allnew-app h4,\n    #product-list-allnew-app h5,\n    #product-list-allnew-app h6 {\n        font-family: inherit !important;\n        font-style: normal !important;\n        text-transform: none !important;\n    }\n\n    #product-list-allnew-app button,\n    #product-list-allnew-app input,\n    #product-list-allnew-app a {\n        -webkit-appearance: none !important;\n        appearance: none !important;\n        background-image: none !important;\n        text-shadow: none !important;\n        font-family: inherit !important;\n        font-style: inherit !important;\n        letter-spacing: inherit !important;\n    }\n\n    .ggs-display {\n        font-family: 'GGS Inter', 'GGS Alibaba', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    .ggs-cn {\n        font-family: 'GGS Alibaba', 'GGS Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    .ggs-sans {\n        font-family: 'GGS Inter', 'GGS Alibaba', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    .ggs-din {\n        font-family: 'GGS DIN', 'GGS Inter', ui-sans-serif, system-ui, sans-serif !important;\n        font-variant-numeric: lining-nums tabular-nums;\n    }\n\n    .ggs-highlight {\n        position: absolute;\n        left: 0;\n        width: 100%;\n        bottom: 0.5rem;\n        height: 1rem;\n        background: rgba(253, 224, 71, 0.6);\n        transform: rotate(-1deg);\n        z-index: 1;\n        pointer-events: none;\n    }\n\n    #product-list-allnew-app .ggs-top-banner {\n        position: fixed !important;\n        top: 0 !important;\n        left: 50% !important;\n        z-index: 120 !important;\n        width: 100vw !important;\n        transform: translate3d(-50%, -100%, 0) !important;\n        transition: transform 300ms ease !important;\n        background: #2563eb !important;\n        color: #ffffff !important;\n        box-shadow: 0 4px 12px rgba(37, 99, 235, 0.24) !important;\n    }\n\n    #product-list-allnew-app .ggs-top-banner--visible {\n        transform: translate3d(-50%, 0, 0) !important;\n    }\n\n    #product-list-allnew-app .ggs-top-banner-inner {\n        display: flex !important;\n        min-height: 48px !important;\n        width: 100% !important;\n        align-items: center !important;\n        justify-content: center !important;\n        gap: 0.5rem !important;\n        padding: 0 1rem !important;\n        box-sizing: border-box !important;\n        text-align: center !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 500 !important;\n        color: #ffffff !important;\n    }\n\n    @media (min-width: 768px) {\n        #product-list-allnew-app .ggs-top-banner-inner {\n            font-size: 1rem !important;\n            line-height: 1.5rem !important;\n        }\n    }\n\n    #product-list-allnew-app .ggs-hero-section {\n        margin-bottom: 2.5rem !important;\n        gap: 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-copy {\n        min-width: 0 !important;\n        flex: 1 1 auto !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-actions {\n        flex: 0 0 auto !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-title-wrap {\n        position: relative !important;\n        display: block !important;\n        max-width: 100% !important;\n        isolation: isolate !important;\n        margin: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-title {\n        font-size: 2.25rem !important;\n        line-height: 1 !important;\n        font-weight: 800 !important;\n        letter-spacing: -0.035em !important;\n        color: #111827 !important;\n        overflow-wrap: break-word !important;\n        word-break: normal !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-title-text {\n        position: relative !important;\n        z-index: 2 !important;\n        background: linear-gradient(to top, rgba(253, 224, 71, 0.6) 0 34%, transparent 34% 100%) !important;\n        -webkit-box-decoration-break: clone !important;\n        box-decoration-break: clone !important;\n        padding: 0 0.025em !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-title-wrap .ggs-highlight {\n        display: none !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-acronym {\n        display: block !important;\n        margin: 0.5rem 0 0 0.125rem !important;\n        color: #94a3b8 !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 700 !important;\n        letter-spacing: 0.18em !important;\n        text-transform: uppercase !important;\n        white-space: nowrap !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-refund {\n        display: inline-flex !important;\n        align-items: center !important;\n        gap: 0.5rem !important;\n        padding: 0.625rem 1.25rem !important;\n        border-radius: 9999px !important;\n        border: 1px solid #bbf7d0 !important;\n        background: rgba(240, 253, 244, 0.9) !important;\n        color: #15803d !important;\n        box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08) !important;\n        backdrop-filter: blur(8px) !important;\n        -webkit-backdrop-filter: blur(8px) !important;\n        appearance: none !important;\n        -webkit-appearance: none !important;\n        text-decoration: none !important;\n        white-space: nowrap !important;\n        transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease !important;\n        cursor: pointer !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-refund:hover,\n    #product-list-allnew-app .ggs-hero-refund:focus,\n    #product-list-allnew-app .ggs-hero-refund:focus-visible,\n    #product-list-allnew-app .ggs-hero-refund:active {\n        background: #dcfce7 !important;\n        color: #15803d !important;\n        box-shadow: 0 4px 12px rgba(34, 197, 94, 0.12) !important;\n        outline: none !important;\n        transform: translateY(-1px) !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-label {\n        display: inline-block !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 700 !important;\n        white-space: nowrap !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-switch {\n        align-items: center !important;\n        row-gap: 0.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-switch--mobile {\n        display: grid !important;\n        grid-template-columns: auto auto minmax(0, 1fr) !important;\n        column-gap: 0.75rem !important;\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-switch--desktop {\n        display: grid !important;\n        grid-template-columns: auto auto minmax(0, 1fr) !important;\n        column-gap: 0.75rem !important;\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-toggle {\n        display: inline-flex !important;\n        align-items: center !important;\n        flex: 0 0 auto !important;\n        min-width: 3.5rem !important;\n        min-height: 2rem !important;\n        justify-self: start !important;\n    }\n\n    #product-list-allnew-app .ggs-billing-label--secondary {\n        min-width: 0 !important;\n        white-space: normal !important;\n        line-height: 1.15rem !important;\n        overflow-wrap: anywhere !important;\n        word-break: break-word !important;\n    }\n\n    @media (min-width: 768px) {\n        #product-list-allnew-app .ggs-hero-title {\n            font-size: 3rem !important;\n            line-height: 1 !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-acronym {\n            margin-top: 0.875rem !important;\n            font-size: 0.9375rem !important;\n            line-height: 1.375rem !important;\n        }\n\n        #product-list-allnew-app .ggs-billing-label {\n            font-size: 1rem !important;\n            line-height: 1.5rem !important;\n        }\n\n        #product-list-allnew-app .ggs-billing-label--secondary {\n            line-height: 1.35rem !important;\n        }\n    }\n\n    @media (min-width: 1024px) {\n        #product-list-allnew-app .ggs-hero-section {\n            display: grid !important;\n            grid-template-columns: minmax(0, 1fr) max-content !important;\n            align-items: start !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-actions {\n            width: auto !important;\n            min-width: 18.5rem !important;\n            align-items: flex-end !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta,\n        #product-list-allnew-app .ggs-refund-panel,\n        #product-list-allnew-app .ggs-hero-refund {\n            width: auto !important;\n            max-width: 100% !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta,\n        #product-list-allnew-app .ggs-hero-refund {\n            justify-content: center !important;\n            text-align: center !important;\n        }\n    }\n\n    @media (min-width: 1024px) and (max-width: 1279px) {\n        #product-list-allnew-app .ggs-hero-section {\n            grid-template-columns: minmax(0, 1fr) minmax(17rem, 20rem) !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-title {\n            font-size: clamp(2.55rem, 4.25vw, 3rem) !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-actions {\n            width: 100% !important;\n            min-width: 0 !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta,\n        #product-list-allnew-app .ggs-hero-refund {\n            max-width: 100% !important;\n        }\n    }\n\n    #product-list-allnew-app .ggs-equity-card {\n        padding: 1.5rem !important;\n        margin-bottom: 1.25rem !important;\n        border: 1px solid #dbeafe !important;\n        border-radius: 1rem !important;\n        background: #ffffff !important;\n        box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04) !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-header,\n    #product-list-allnew-app .ggs-equity-heading,\n    #product-list-allnew-app .ggs-equity-copy,\n    #product-list-allnew-app .ggs-equity-meta-group {\n        min-width: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-header {\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-heading {\n        flex: 1 1 auto !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-copy {\n        max-width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-title {\n        margin: 0 !important;\n        font-size: 1.125rem !important;\n        line-height: 1.75rem !important;\n        font-weight: 700 !important;\n        color: #111827 !important;\n        letter-spacing: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-subtitle {\n        margin: 0 !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 400 !important;\n        color: #6b7280 !important;\n        overflow-wrap: break-word !important;\n    }\n\n    #product-list-allnew-app .ggs-modal-title {\n        margin: 0 !important;\n        font-size: 1.25rem !important;\n        line-height: 1.75rem !important;\n        font-weight: 700 !important;\n        color: #111827 !important;\n    }\n\n    #product-list-allnew-app .ggs-state-title {\n        margin: 0 !important;\n        font-size: 1.125rem !important;\n        line-height: 1.75rem !important;\n        font-weight: 700 !important;\n        color: #020617 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-icon-shell {\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        border-radius: 0.75rem !important;\n        background: #eff6ff !important;\n        padding: 0.75rem !important;\n        color: #2563eb !important;\n        flex-shrink: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-icon {\n        width: 1.5rem !important;\n        height: 1.5rem !important;\n        stroke: currentColor !important;\n        fill: none !important;\n        stroke-width: 2 !important;\n        stroke-linecap: round !important;\n        stroke-linejoin: round !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-meta-label {\n        margin-bottom: 0.375rem !important;\n        font-size: 11px !important;\n        line-height: 1rem !important;\n        font-weight: 700 !important;\n        letter-spacing: 0.08em !important;\n        text-transform: uppercase !important;\n        color: #9ca3af !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-meta-value {\n        display: inline-flex !important;\n        align-items: center !important;\n        gap: 0.5rem !important;\n        border-radius: 0.5rem !important;\n        padding: 0.375rem 0.75rem !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 600 !important;\n        white-space: nowrap !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-meta-group {\n        align-items: center !important;\n        row-gap: 1rem !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-meta-item,\n    #product-list-allnew-app .ggs-equity-divider {\n        flex: 0 0 auto !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-divider {\n        align-self: center !important;\n    }\n\n    @media (min-width: 1024px) and (max-width: 1279px) {\n        #product-list-allnew-app .ggs-equity-header {\n            flex-direction: column !important;\n            align-items: flex-start !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-heading {\n            width: 100% !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-subtitle {\n            max-width: 44rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-meta-group {\n            width: 100% !important;\n            justify-content: flex-start !important;\n            gap: 1rem 1.25rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-divider {\n            display: none !important;\n        }\n    }\n\n    @media (min-width: 1280px) {\n        #product-list-allnew-app .ggs-equity-header {\n            display: grid !important;\n            grid-template-columns: minmax(0, 1fr) auto !important;\n            align-items: center !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-subtitle {\n            max-width: 42rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-meta-group {\n            flex-wrap: nowrap !important;\n            justify-content: flex-end !important;\n        }\n    }\n\n    #product-list-allnew-app .ggs-equity-panel {\n        border-radius: 0.75rem !important;\n        padding: 1rem !important;\n        background: rgba(239, 246, 255, 0.5) !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-panel-title {\n        display: block !important;\n        margin-bottom: 0.25rem !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 600 !important;\n        color: #111827 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-panel-copy {\n        margin: 0 !important;\n        font-size: 0.875rem !important;\n        line-height: 1.625 !important;\n        font-weight: 400 !important;\n        color: #4b5563 !important;\n    }\n\n    .ggs-feature-scroll::-webkit-scrollbar,\n    .ggs-compare-table::-webkit-scrollbar {\n        height: 8px;\n        width: 8px;\n    }\n\n    .ggs-feature-scroll::-webkit-scrollbar-thumb,\n    .ggs-compare-table::-webkit-scrollbar-thumb {\n        background: rgba(148, 163, 184, 0.6);\n        border-radius: 999px;\n    }\n\n    .ggs-range {\n        -webkit-appearance: none;\n        appearance: none;\n        width: 100%;\n        height: 12px;\n        border-radius: 999px;\n        background: linear-gradient(\n                to right,\n                #2563eb 0%,\n                #2563eb var(--range-progress, 0%),\n                #dbeafe var(--range-progress, 0%),\n                #dbeafe 100%\n        );\n        outline: none;\n    }\n\n    .ggs-range::-webkit-slider-thumb {\n        -webkit-appearance: none;\n        appearance: none;\n        width: 26px;\n        height: 26px;\n        border-radius: 999px;\n        background: linear-gradient(135deg, #facc15 0%, #f59e0b 100%);\n        border: 3px solid #ffffff;\n        box-shadow: 0 8px 18px rgba(37, 99, 235, 0.22);\n        cursor: pointer;\n    }\n\n    .ggs-range::-moz-range-thumb {\n        width: 26px;\n        height: 26px;\n        border-radius: 999px;\n        background: linear-gradient(135deg, #facc15 0%, #f59e0b 100%);\n        border: 3px solid #ffffff;\n        box-shadow: 0 8px 18px rgba(37, 99, 235, 0.22);\n        cursor: pointer;\n    }\n\n    .ggs-range::-moz-range-track {\n        height: 12px;\n        border-radius: 999px;\n        background: transparent;\n    }\n\n    .ggs-price-card {\n        transition: transform 0.28s ease, box-shadow 0.28s ease, border-color 0.28s ease;\n    }\n\n    .ggs-price-card:hover {\n        transform: translateY(-8px);\n    }\n\n    .ggs-hero::before,\n    .ggs-hero::after {\n        display: none;\n    }\n\n    .ggs-fade-up {\n        animation: ggsFadeUp 0.28s ease;\n    }\n\n    #product-list-allnew-app .ggs-force-link,\n    #product-list-allnew-app .ggs-force-link:hover,\n    #product-list-allnew-app .ggs-force-link:focus,\n    #product-list-allnew-app .ggs-force-link:visited {\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta {\n        background-color: #2563eb !important;\n        color: #ffffff !important;\n        border: 0 !important;\n        text-decoration: none !important;\n        border-radius: 999px !important;\n        padding: 0.875rem 1.5rem !important;\n        gap: 0.625rem !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 700 !important;\n        letter-spacing: -0.01em !important;\n        box-shadow: 0 10px 22px rgba(37, 99, 235, 0.22) !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta:hover,\n    #product-list-allnew-app .ggs-hero-cta:focus,\n    #product-list-allnew-app .ggs-hero-cta:visited {\n        background-color: #1d4ed8 !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta-label {\n        display: inline-flex !important;\n        align-items: center !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 700 !important;\n        color: #ffffff !important;\n        text-transform: none !important;\n        letter-spacing: -0.01em !important;\n        -webkit-text-fill-color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta-savings {\n        display: inline-flex !important;\n        align-items: center !important;\n        gap: 0.375rem !important;\n        color: #fde047 !important;\n        white-space: nowrap !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 700 !important;\n        -webkit-text-fill-color: #fde047 !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta-amount {\n        display: inline-flex !important;\n        align-items: center !important;\n        color: #fde047 !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 700 !important;\n        -webkit-text-fill-color: #fde047 !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta-wave {\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        transform-origin: 72% 72% !important;\n        animation: ggsWaveHand 1.8s ease-in-out infinite !important;\n        will-change: transform !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-refund-icon {\n        animation: ggsShieldBreath 2.4s ease-in-out infinite !important;\n        transform-origin: center !important;\n        will-change: transform, opacity !important;\n    }\n\n    #product-list-allnew-app .ggs-select-primary {\n        background: #2563eb !important;\n        color: #ffffff !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-select-primary:hover,\n    #product-list-allnew-app .ggs-select-primary:focus {\n        background: #1d4ed8 !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-select-secondary {\n        background: #eff6ff !important;\n        color: #1d4ed8 !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-select-secondary:hover,\n    #product-list-allnew-app .ggs-select-secondary:focus {\n        background: #dbeafe !important;\n        color: #1d4ed8 !important;\n    }\n\n    #product-list-allnew-app .ggs-footer-link {\n        background: transparent !important;\n        color: #2563eb !important;\n        border: 0 !important;\n        box-shadow: none !important;\n        padding: 0 !important;\n        min-height: auto !important;\n        line-height: 1.25rem !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        gap: 0.375rem !important;\n        font-size: 0.875rem !important;\n        font-weight: 600 !important;\n    }\n\n    #product-list-allnew-app .ggs-footer-icon {\n        width: 1rem !important;\n        height: 1rem !important;\n        stroke: currentColor !important;\n        fill: none !important;\n        stroke-width: 2 !important;\n        stroke-linecap: round !important;\n        stroke-linejoin: round !important;\n        flex-shrink: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-select {\n        display: inline-flex !important;\n        width: 100% !important;\n        min-height: 2.75rem !important;\n        align-items: center !important;\n        justify-content: center !important;\n        border: 0 !important;\n        box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08) !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-head-title {\n        display: block !important;\n        min-height: 0 !important;\n        font-size: 1rem !important;\n        font-weight: 700 !important;\n        text-align: center !important;\n        line-height: 1.25rem !important;\n        word-break: break-word !important;\n    }\n\n    #product-list-allnew-app .ggs-hero-cta *,\n    #product-list-allnew-app .ggs-select-primary *,\n    #product-list-allnew-app .ggs-select-secondary *,\n    #product-list-allnew-app .ggs-footer-link *,\n    #product-list-allnew-app .ggs-compare-fab *,\n    #product-list-allnew-app .ggs-view-more-btn * {\n        color: inherit !important;\n    }\n\n    #product-list-allnew-app .ggs-footer-link:hover,\n    #product-list-allnew-app .ggs-footer-link:focus {\n        background: transparent !important;\n        color: #1e40af !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab {\n        background: #111827 !important;\n        color: #ffffff !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab-wrap {\n        z-index: 2147483640 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab-wrap--floating {\n        left: 1rem !important;\n        right: auto !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-sidebar-wrap {\n        display: none !important;\n        padding-right: 1rem !important;\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab--sidebar {\n        width: 100% !important;\n        min-height: 3.75rem !important;\n        justify-content: center !important;\n        gap: 0.625rem !important;\n        padding-left: 0.875rem !important;\n        padding-right: 0.875rem !important;\n        font-size: 0.8125rem !important;\n        white-space: nowrap !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab-count {\n        flex: 0 0 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab-label {\n        min-width: 0 !important;\n        white-space: nowrap !important;\n    }\n\n    body.ggs-product-compare-active #chat-widget-container {\n        z-index: 90 !important;\n    }\n\n    body.ggs-product-compare-modal-open #chat-widget-container {\n        opacity: 0 !important;\n        visibility: hidden !important;\n        pointer-events: none !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-fab:hover,\n    #product-list-allnew-app .ggs-compare-fab:focus {\n        background: #1f2937 !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-close {\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        width: 2.5rem !important;\n        height: 2.5rem !important;\n        border-radius: 999px !important;\n        border: 1px solid #e5e7eb !important;\n        background: #f9fafb !important;\n        background-image: none !important;\n        box-shadow: none !important;\n        color: #6b7280 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-close:hover,\n    #product-list-allnew-app .ggs-compare-close:focus {\n        background: #f3f4f6 !important;\n        background-image: none !important;\n        color: #111827 !important;\n        border-color: #d1d5db !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-close * {\n        color: inherit !important;\n    }\n\n    #product-list-allnew-app .ggs-view-more-btn {\n        background: #eff6ff !important;\n        color: #2563eb !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-login-overlay {\n        position: fixed !important;\n        inset: 0 !important;\n        z-index: 160 !important;\n        display: flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        padding: 1rem !important;\n        background: rgba(15, 23, 42, 0.56) !important;\n        backdrop-filter: blur(8px) !important;\n    }\n\n    #product-list-allnew-app .ggs-login-dialog {\n        position: relative !important;\n        width: min(100%, 34rem) !important;\n        border-radius: 1.5rem !important;\n        background: #ffffff !important;\n        padding: 2rem !important;\n        box-shadow: 0 24px 70px rgba(15, 23, 42, 0.22) !important;\n    }\n\n    #product-list-allnew-app .ggs-login-close {\n        position: absolute !important;\n        top: 1rem !important;\n        right: 1rem !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        width: 2.25rem !important;\n        height: 2.25rem !important;\n        border-radius: 999px !important;\n        border: 1px solid #e2e8f0 !important;\n        background: #f8fafc !important;\n        color: #475569 !important;\n        transition: background-color 180ms ease, color 180ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-login-close:hover,\n    #product-list-allnew-app .ggs-login-close:focus {\n        background: #eff6ff !important;\n        color: #1d4ed8 !important;\n    }\n\n    #product-list-allnew-app .ggs-login-eyebrow {\n        margin: 0 0 0.5rem !important;\n        font-size: 0.875rem !important;\n        line-height: 1.25rem !important;\n        font-weight: 800 !important;\n        color: #0f172a !important;\n        text-align: center !important;\n    }\n\n    #product-list-allnew-app .ggs-login-title {\n        margin: 0 !important;\n        font-size: 1.5rem !important;\n        line-height: 2rem !important;\n        font-weight: 700 !important;\n        color: #0f172a !important;\n        text-align: center !important;\n    }\n\n    #product-list-allnew-app .ggs-login-accent {\n        margin: 0 auto 1.25rem !important;\n        width: 4.75rem !important;\n        height: 0.5rem !important;\n        border-radius: 999px !important;\n        background: linear-gradient(90deg, rgba(253, 224, 71, 0.92), rgba(251, 191, 36, 0.78)) !important;\n    }\n\n    #product-list-allnew-app .ggs-login-fields {\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 0.875rem !important;\n        margin-top: 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-login-input {\n        width: 100% !important;\n        border: 1px solid #dbeafe !important;\n        border-radius: 0.95rem !important;\n        background: #f8fbff !important;\n        padding: 0.95rem 1rem !important;\n        font-size: 0.95rem !important;\n        line-height: 1.4rem !important;\n        color: #0f172a !important;\n        box-shadow: none !important;\n        outline: none !important;\n        transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-login-input:focus {\n        border-color: #60a5fa !important;\n        background: #ffffff !important;\n        box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.16) !important;\n    }\n\n    #product-list-allnew-app .ggs-login-error {\n        margin: -0.25rem 0 0 !important;\n        font-size: 0.8125rem !important;\n        line-height: 1.2rem !important;\n        font-weight: 700 !important;\n        color: #dc2626 !important;\n    }\n\n    #product-list-allnew-app .ggs-login-forgot {\n        margin-top: 0.25rem !important;\n        display: inline-flex !important;\n        justify-content: flex-end !important;\n        width: 100% !important;\n        font-size: 0.875rem !important;\n        font-weight: 600 !important;\n        color: #2563eb !important;\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-login-forgot:hover,\n    #product-list-allnew-app .ggs-login-forgot:focus {\n        color: #1d4ed8 !important;\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-login-submit {\n        width: 100% !important;\n        margin-top: 1.5rem !important;\n        min-height: 3.25rem !important;\n        border-radius: 1rem !important;\n        background: #111827 !important;\n        color: #ffffff !important;\n        font-size: 0.95rem !important;\n        line-height: 1.35rem !important;\n        font-weight: 700 !important;\n        border: 0 !important;\n        box-shadow: 0 16px 32px rgba(15, 23, 42, 0.16) !important;\n        transition: transform 180ms ease, opacity 180ms ease, background-color 180ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-login-submit:hover,\n    #product-list-allnew-app .ggs-login-submit:focus {\n        background: #020617 !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-login-submit:disabled {\n        opacity: 0.68 !important;\n        cursor: wait !important;\n        transform: none !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-note {\n        margin-top: 1rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 0.75rem !important;\n        border-radius: 1rem !important;\n        background: #f8fbff !important;\n        padding: 1rem !important;\n        color: #334155 !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-note-item {\n        font-size: 0.9rem !important;\n        line-height: 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-date {\n        margin-top: 1rem !important;\n        display: inline-flex !important;\n        flex-direction: column !important;\n        align-items: center !important;\n        justify-content: center !important;\n        gap: 0.35rem !important;\n        width: 100% !important;\n        border-radius: 1rem !important;\n        background: linear-gradient(180deg, #fffaf0 0%, #fff7d6 100%) !important;\n        padding: 1rem !important;\n        text-align: center !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-referral-toggle {\n        margin-top: 1rem !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: flex-end !important;\n        width: 100% !important;\n        font-size: 0.875rem !important;\n        font-weight: 600 !important;\n        color: #2563eb !important;\n        text-decoration: none !important;\n        background: transparent !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-referral-toggle:hover,\n    #product-list-allnew-app .ggs-purchase-referral-toggle:focus {\n        color: #1d4ed8 !important;\n    }\n\n    #product-list-allnew-app .ggs-purchase-referral {\n        margin-top: 1rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 0.875rem !important;\n    }\n\n    #product-list-allnew-app .ggs-referral-message {\n        margin: -0.2rem 0 0 !important;\n        font-size: 0.8125rem !important;\n        line-height: 1.2rem !important;\n        font-weight: 700 !important;\n    }\n\n    #product-list-allnew-app .ggs-referral-message--success {\n        color: #16a34a !important;\n    }\n\n    #product-list-allnew-app .ggs-referral-message--error {\n        color: #dc2626 !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-section {\n        margin-top: 5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-shell {\n        max-width: 56rem !important;\n        margin: 0 auto !important;\n        padding: 0 !important;\n        background: transparent !important;\n        border: 0 !important;\n        box-shadow: none !important;\n        text-align: center !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-title {\n        margin: 0 0 1rem !important;\n        font-size: 1.875rem !important;\n        line-height: 2.25rem !important;\n        font-weight: 800 !important;\n        color: #0f172a !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-description {\n        margin: 0 !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 500 !important;\n        color: #6b7280 !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-list {\n        margin-top: 2.5rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 1rem !important;\n        text-align: left !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-item {\n        border-radius: 1rem !important;\n        border: 1px solid #f3f4f6 !important;\n        background: #ffffff !important;\n        box-shadow: none !important;\n        overflow: hidden !important;\n        transition: border-color 0.2s ease, box-shadow 0.2s ease !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-item:hover {\n        border-color: #dbeafe !important;\n        box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06) !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-item--open {\n        border-color: #f3f4f6 !important;\n        box-shadow: none !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-item--closed {\n        box-shadow: none !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-trigger {\n        width: 100% !important;\n        display: flex !important;\n        align-items: center !important;\n        justify-content: space-between !important;\n        gap: 1rem !important;\n        padding: 1.25rem 1.5rem !important;\n        background: #ffffff !important;\n        border: 0 !important;\n        border-radius: 0 !important;\n        box-shadow: none !important;\n        text-shadow: none !important;\n        outline: none !important;\n        appearance: none !important;\n        -webkit-appearance: none !important;\n        text-align: left !important;\n        color: #0f172a !important;\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-trigger:hover,\n    #product-list-allnew-app .ggs-faq-trigger:focus,\n    #product-list-allnew-app .ggs-faq-trigger:focus-visible,\n    #product-list-allnew-app .ggs-faq-trigger:active {\n        background: #ffffff !important;\n        border: 0 !important;\n        box-shadow: none !important;\n        outline: none !important;\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-question {\n        margin: 0 !important;\n        font-size: 1rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 800 !important;\n        color: #0f172a !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-icon {\n        width: 2rem !important;\n        height: 2rem !important;\n        padding: 0.375rem !important;\n        border-radius: 999px !important;\n        background: #f9fafb !important;\n        color: #9ca3af !important;\n        transition: background-color 200ms ease, color 200ms ease, transform 200ms ease !important;\n        flex-shrink: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-icon--open {\n        background: #eff6ff !important;\n        color: #2563eb !important;\n        transform: rotate(180deg) !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-answer {\n        padding: 1rem 1.5rem 1.5rem !important;\n        color: #4b5563 !important;\n        font-size: 1rem !important;\n        line-height: 1.75rem !important;\n        border-top: 1px solid #f9fafb !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-trigger[aria-expanded='true'] + .ggs-faq-answer {\n        padding-top: 1rem !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-answer > :first-child {\n        margin-top: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-faq-answer > :last-child,\n    #product-list-allnew-app .ggs-faq-answer p:last-child {\n        margin-bottom: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-equity-emphasis {\n        font-weight: 700 !important;\n        color: #0f172a !important;\n    }\n\n    #product-list-allnew-app .ggs-view-more-btn:hover,\n    #product-list-allnew-app .ggs-view-more-btn:focus {\n        background: #dbeafe !important;\n        color: #1d4ed8 !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-active {\n        background: #facc15 !important;\n        color: #111827 !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-inactive {\n        background: transparent !important;\n        color: #6b7280 !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-inactive:hover,\n    #product-list-allnew-app .ggs-deductible-inactive:focus {\n        color: #374151 !important;\n    }\n\n    #product-list-allnew-app .ggs-toggle-track {\n        background: #2563eb !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-toggle-thumb {\n        background: #facc15 !important;\n        border: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-dob-input {\n        background: #eff6ff !important;\n        border: 0 !important;\n        box-shadow: none !important;\n        color: #6b7280 !important;\n    }\n\n    #product-list-allnew-app .ggs-dob-input:focus {\n        outline: none !important;\n        box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.45) !important;\n    }\n\n    #product-list-allnew-app .ggs-dob-field {\n        position: relative !important;\n        display: block !important;\n        width: 100% !important;\n        cursor: pointer !important;\n    }\n\n    #product-list-allnew-app .ggs-dob-field:focus-visible {\n        outline: none !important;\n    }\n\n    #product-list-allnew-app .ggs-dob-native {\n        position: absolute !important;\n        inset: 0 !important;\n        width: 100% !important;\n        height: 100% !important;\n        opacity: 0 !important;\n        pointer-events: none !important;\n        z-index: -1 !important;\n    }\n\n    .ggs-dob-calendar.flatpickr-calendar {\n        border: 1px solid #dbeafe !important;\n        border-radius: 18px !important;\n        box-shadow: 0 18px 45px rgba(37, 99, 235, 0.18) !important;\n        font-family: 'GGS Inter', sans-serif !important;\n        overflow: hidden !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-months {\n        background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%) !important;\n        padding: 10px 10px 6px !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-current-month {\n        padding-top: 6px !important;\n        font-size: 16px !important;\n        font-weight: 700 !important;\n        color: #0f172a !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-monthDropdown-months,\n    .ggs-dob-calendar .numInputWrapper input {\n        color: #0f172a !important;\n        font-weight: 700 !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-weekdays {\n        background: #ffffff !important;\n    }\n\n    .ggs-dob-calendar span.flatpickr-weekday {\n        color: #64748b !important;\n        font-weight: 700 !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-day {\n        border-radius: 12px !important;\n        color: #1e293b !important;\n        font-weight: 500 !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-day:hover {\n        background: #eff6ff !important;\n        border-color: #eff6ff !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-day.today {\n        border-color: #93c5fd !important;\n        color: #2563eb !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-day.selected,\n    .ggs-dob-calendar .flatpickr-day.startRange,\n    .ggs-dob-calendar .flatpickr-day.endRange {\n        background: #2563eb !important;\n        border-color: #2563eb !important;\n        color: #ffffff !important;\n    }\n\n    .ggs-dob-calendar .flatpickr-prev-month,\n    .ggs-dob-calendar .flatpickr-next-month {\n        color: #2563eb !important;\n        fill: #2563eb !important;\n    }\n\n    #product-list-allnew-app .ggs-card-head {\n        height: 20rem !important;\n        min-height: 20rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n        align-items: center !important;\n        text-align: center !important;\n        overflow: visible !important;\n    }\n\n    #product-list-allnew-app .ggs-sidebar-head {\n        height: 20rem !important;\n        min-height: 20rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n    }\n\n    #product-list-allnew-app .ggs-card-title {\n        min-height: 2.125rem !important;\n        display: block !important;\n        margin-bottom: 0.375rem !important;\n        font-size: 1.25rem !important;\n        line-height: 1.5rem !important;\n        font-weight: 800 !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price {\n        display: flex !important;\n        align-items: flex-end !important;\n        justify-content: center !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-group {\n        display: inline-flex !important;\n        align-items: baseline !important;\n        justify-content: center !important;\n        white-space: nowrap !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-stage {\n        display: inline-grid !important;\n        place-items: center !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-currency {\n        margin-right: 0.125rem !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-unit {\n        margin-left: 0.25rem !important;\n    }\n\n    #product-list-allnew-app .ggs-card-select {\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-toggle {\n        margin-top: 1.5rem !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        gap: 0.5rem !important;\n        width: auto !important;\n        padding: 0 !important;\n        border: 0 !important;\n        background: transparent !important;\n        box-shadow: none !important;\n        color: #4b5563 !important;\n        text-decoration: none !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-toggle:hover,\n    #product-list-allnew-app .ggs-compare-toggle:focus {\n        background: transparent !important;\n        color: #111827 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-box {\n        width: 1.25rem !important;\n        height: 1.25rem !important;\n        border-radius: 0.25rem !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        flex-shrink: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-box--inactive {\n        border: 2px solid #d1d5db !important;\n        background: #ffffff !important;\n        color: transparent !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-box--active {\n        border: 0 !important;\n        background: #2563eb !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-row {\n        width: 100% !important;\n        display: flex !important;\n        align-items: center !important;\n        margin-top: auto !important;\n        min-height: 4.5rem !important;\n        padding-top: 1.125rem !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-wrap {\n        display: flex !important;\n        width: 100% !important;\n        min-height: 3.25rem !important;\n        align-items: center !important;\n        border-radius: 0.75rem !important;\n        padding: 0.375rem !important;\n        overflow: hidden !important;\n        box-sizing: border-box !important;\n        transition: background-color 220ms ease, box-shadow 220ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-row--empty {\n        visibility: hidden !important;\n        pointer-events: none !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-tab {\n        min-height: 2.5rem !important;\n        min-width: 0 !important;\n        flex: 1 1 0% !important;\n        width: 0 !important;\n        max-width: 100% !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        border: 0 !important;\n        box-shadow: none !important;\n        padding: 0.625rem 0.875rem !important;\n        touch-action: manipulation !important;\n        position: relative !important;\n        white-space: nowrap !important;\n        overflow: hidden !important;\n        text-overflow: ellipsis !important;\n        transition: background-color 220ms ease, color 220ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 220ms ease, opacity 180ms ease !important;\n        will-change: transform, background-color, box-shadow !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-tab:hover,\n    #product-list-allnew-app .ggs-deductible-tab:focus-visible {\n        transform: translateY(-1px) !important;\n    }\n\n    #product-list-allnew-app .ggs-deductible-active {\n        transform: translateY(-1px) !important;\n        box-shadow: 0 6px 16px rgba(250, 204, 21, 0.28) !important;\n    }\n\n    #product-list-allnew-app .ggs-value-transition {\n        display: inline-grid !important;\n        justify-items: start !important;\n        align-items: end !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-swap {\n        min-width: 7ch !important;\n    }\n\n    #product-list-allnew-app .ggs-card-feature-value-wrap {\n        display: grid !important;\n        width: 100% !important;\n        min-height: 1.5rem !important;\n        place-items: center !important;\n    }\n\n    #product-list-allnew-app .ggs-transition-item {\n        grid-area: 1 \/ 1 !important;\n    }\n\n    #product-list-allnew-app .ggs-card-price-value,\n    #product-list-allnew-app .ggs-card-feature-value {\n        display: inline-block !important;\n    }\n\n    #product-list-allnew-app .ggs-value-fade-enter-active,\n    #product-list-allnew-app .ggs-value-fade-leave-active {\n        transition: opacity 180ms ease, transform 180ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-value-fade-enter-from,\n    #product-list-allnew-app .ggs-value-fade-leave-to {\n        opacity: 0 !important;\n        transform: translateY(2px) !important;\n    }\n\n    #product-list-allnew-app .ggs-feature-label-list {\n        padding-top: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-card-features {\n        padding-top: 0 !important;\n    }\n\n    #product-list-allnew-app .ggs-plan-layout {\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 1.5rem !important;\n        align-items: stretch !important;\n    }\n\n    #product-list-allnew-app .ggs-plan-mobile-controls {\n        display: flex !important;\n        flex-direction: column !important;\n        gap: 1.25rem !important;\n        margin-bottom: 2rem !important;\n    }\n\n    #product-list-allnew-app .ggs-plan-sidebar {\n        display: none !important;\n        width: 16rem !important;\n        flex: 0 0 16rem !important;\n    }\n\n    #product-list-allnew-app .ggs-plan-grid-wrap {\n        min-width: 0 !important;\n        flex: 1 1 0% !important;\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-desktop-feature-column {\n        display: none !important;\n    }\n\n    #product-list-allnew-app .ggs-cards-wrap {\n        min-width: 0 !important;\n        flex: 1 1 0% !important;\n        width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-card-feature-row {\n        display: flex !important;\n        flex-direction: column !important;\n        align-items: center !important;\n        justify-content: center !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid {\n        width: 100% !important;\n        min-width: 760px !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid-row {\n        display: grid !important;\n        grid-template-columns: minmax(220px, 1.35fr) repeat(3, minmax(170px, 1fr)) !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid-row--head {\n        position: sticky !important;\n        top: 0 !important;\n        z-index: 20 !important;\n        background: #ffffff !important;\n        box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06) !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-feature-head {\n        display: flex !important;\n        align-items: center !important;\n        justify-content: flex-start !important;\n        min-height: 8rem !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid-cell {\n        min-width: 0 !important;\n        box-sizing: border-box !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid-row:not(.ggs-compare-grid-row--head) .ggs-compare-grid-cell {\n        display: flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        min-height: 56px !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-grid-row:not(.ggs-compare-grid-row--head) .ggs-compare-grid-cell:first-child {\n        justify-content: flex-start !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-head-cell {\n        display: flex !important;\n        align-items: stretch !important;\n        justify-content: stretch !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-head-inner {\n        min-height: 8rem !important;\n        width: 100% !important;\n        display: flex !important;\n        flex-direction: column !important;\n        align-items: stretch !important;\n        justify-content: center !important;\n        gap: 0.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-feature-label-wrap {\n        position: relative !important;\n        display: inline-flex !important;\n        align-items: center !important;\n        gap: 0.375rem !important;\n        max-width: 100% !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-tooltip-trigger {\n        display: inline-flex !important;\n        align-items: center !important;\n        justify-content: center !important;\n        width: 0.95rem !important;\n        height: 0.95rem !important;\n        border-radius: 999px !important;\n        border: 1px solid #dbe3ef !important;\n        background: rgba(255, 255, 255, 0.92) !important;\n        color: #94a3b8 !important;\n        font-size: 0.65rem !important;\n        line-height: 1 !important;\n        font-weight: 800 !important;\n        cursor: pointer !important;\n        flex-shrink: 0 !important;\n        padding: 0 !important;\n        box-shadow: none !important;\n        opacity: 0.9 !important;\n        transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease, opacity 160ms ease !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-tooltip-trigger:hover,\n    #product-list-allnew-app .ggs-compare-tooltip-trigger:focus-visible {\n        background: #eff6ff !important;\n        color: #2563eb !important;\n        border-color: #bfdbfe !important;\n        opacity: 1 !important;\n        outline: none !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-tooltip-panel {\n        position: absolute !important;\n        left: calc(100% + 0.6rem) !important;\n        top: 50% !important;\n        transform: translateY(-50%) !important;\n        width: min(20rem, calc(100vw - 4rem)) !important;\n        padding: 0.8rem 0.9rem !important;\n        border-radius: 0.9rem !important;\n        background: #1f2937 !important;\n        color: #ffffff !important;\n        font-size: 0.75rem !important;\n        line-height: 1.3rem !important;\n        font-weight: 500 !important;\n        box-shadow: 0 18px 40px rgba(15, 23, 42, 0.24) !important;\n        z-index: 40 !important;\n        text-transform: none !important;\n        letter-spacing: normal !important;\n        white-space: normal !important;\n    }\n\n    #product-list-allnew-app .ggs-compare-tooltip-arrow {\n        position: absolute !important;\n        left: -0.35rem !important;\n        top: 50% !important;\n        width: 0.7rem !important;\n        height: 0.7rem !important;\n        background: #1f2937 !important;\n        transform: translateY(-50%) rotate(45deg) !important;\n        border-radius: 0.125rem !important;\n    }\n\n    #product-list-allnew-app .ggs-cards-grid {\n        display: grid !important;\n        width: 100% !important;\n        grid-template-columns: minmax(0, 1fr) !important;\n        gap: 1.5rem !important;\n    }\n\n    #product-list-allnew-app .ggs-card-feature-row {\n        height: 4rem !important;\n        display: flex !important;\n        flex-direction: column !important;\n        align-items: center !important;\n        justify-content: center !important;\n        border-bottom: 1px solid #f9fafb !important;\n    }\n\n    #product-list-allnew-app .ggs-mobile-feature-label {\n        display: flex !important;\n    }\n\n    @media (min-width: 768px) {\n        #product-list-allnew-app .ggs-cards-grid {\n            grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\n        }\n\n        #product-list-allnew-app .ggs-cards-grid--single {\n            grid-template-columns: minmax(17rem, 22rem) !important;\n            justify-content: center !important;\n        }\n\n        #product-list-allnew-app .ggs-cards-grid--two {\n            grid-template-columns: repeat(2, minmax(17rem, 22rem)) !important;\n            justify-content: center !important;\n        }\n    }\n\n    @media (min-width: 1024px) {\n        #product-list-allnew-app .ggs-plan-layout {\n            flex-direction: row !important;\n        }\n\n        #product-list-allnew-app .ggs-plan-mobile-controls {\n            display: none !important;\n        }\n\n        #product-list-allnew-app .ggs-desktop-feature-column {\n            display: block !important;\n            width: 16rem !important;\n            flex-shrink: 0 !important;\n        }\n\n        #product-list-allnew-app .ggs-plan-sidebar {\n            display: block !important;\n        }\n\n        #product-list-allnew-app .ggs-compare-sidebar-wrap {\n            display: block !important;\n        }\n\n        #product-list-allnew-app .ggs-compare-fab-wrap--floating {\n            display: none !important;\n        }\n\n        #product-list-allnew-app .ggs-card-feature-row {\n            flex-direction: row !important;\n            justify-content: center !important;\n        }\n\n        #product-list-allnew-app .ggs-mobile-feature-label {\n            display: none !important;\n        }\n\n        #product-list-allnew-app .ggs-card-title {\n            white-space: nowrap !important;\n        }\n    }\n\n    @keyframes ggsFadeUp {\n        from {\n            opacity: 0;\n            transform: translateY(10px);\n        }\n        to {\n            opacity: 1;\n            transform: translateY(0);\n        }\n    }\n\n    @keyframes ggsWaveHand {\n        0%, 100% {\n            transform: rotate(0deg);\n        }\n        15% {\n            transform: rotate(16deg);\n        }\n        30% {\n            transform: rotate(-10deg);\n        }\n        45% {\n            transform: rotate(14deg);\n        }\n        60% {\n            transform: rotate(-6deg);\n        }\n        75% {\n            transform: rotate(10deg);\n        }\n    }\n\n    @keyframes ggsShieldBreath {\n        0%, 100% {\n            transform: scale(1);\n            opacity: 0.96;\n        }\n        50% {\n            transform: scale(1.08);\n            opacity: 1;\n        }\n    }\n\n    @media (max-width: 1024px) {\n        .ggs-feature-labels {\n            display: none;\n        }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n        #product-list-allnew-app .ggs-hero-cta-wave,\n        #product-list-allnew-app .ggs-hero-refund-icon {\n            animation: none !important;\n        }\n    }\n\n    #product-list-allnew-app .ggs-module-icon {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: 20px;\n        height: 20px;\n        flex-shrink: 0;\n    }\n\n    #product-list-allnew-app .ggs-module-icon svg {\n        width: 100%;\n        height: 100%;\n        display: block;\n    }\n\n    #product-list-allnew-app .ggs-module-icon--sm {\n        width: 16px;\n        height: 16px;\n    }\n\n    #product-list-allnew-app .ggs-module-icon--check {\n        color: #22c55e;\n    }\n\n    #product-list-allnew-app .ggs-module-icon--close {\n        color: #f87171;\n    }\n\n    #product-list-allnew-app .ggs-module-icon--info {\n        color: #60a5fa;\n    }\n\n    #product-list-allnew-app .ggs-refund-panel {\n        position: relative;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover {\n        position: absolute;\n        top: calc(100% + 14px);\n        right: 0;\n        width: min(344px, calc(100vw - 32px));\n        background: #ffffff;\n        border: 1px solid #f3f4f6;\n        border-radius: 1rem;\n        box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.2);\n        padding: 1.25rem;\n        z-index: 40;\n        text-align: left;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-arrow {\n        position: absolute;\n        top: -8px;\n        right: 40px;\n        width: 16px;\n        height: 16px;\n        background: #ffffff;\n        border-left: 1px solid #f3f4f6;\n        border-top: 1px solid #f3f4f6;\n        transform: rotate(45deg);\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-title {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        padding-bottom: 0.5rem;\n        margin-bottom: 0.75rem;\n        border-bottom: 1px solid #f9fafb;\n        color: #0f172a;\n        font-size: 14px;\n        font-weight: 800;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-list {\n        display: grid;\n        gap: 12px;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-item {\n        display: flex;\n        align-items: flex-start;\n        gap: 10px;\n        color: #6b7280;\n        font-size: 14px;\n        line-height: 1.6;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-item .ggs-module-icon {\n        width: 18px;\n        min-width: 18px;\n        height: 18px;\n        justify-content: center;\n        margin-top: 1px;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-copy {\n        flex: 1;\n        min-width: 0;\n        display: block;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-copy strong {\n        color: #0f172a;\n        font-weight: 800;\n        margin: 0;\n        display: inline;\n        white-space: normal;\n    }\n\n    #product-list-allnew-app .ggs-refund-popover-text {\n        display: inline;\n        min-width: 0;\n        line-height: 1.5;\n    }\n\n    #product-list-allnew-app .ggs-equity-highlights {\n        display: grid;\n        grid-template-columns: repeat(1, minmax(0, 1fr));\n        gap: 10px 16px;\n        margin: 0 0 24px;\n        padding: 0;\n        list-style: none;\n    }\n\n    #product-list-allnew-app .ggs-equity-highlight {\n        display: grid;\n        grid-template-columns: 18px minmax(0, 1fr);\n        column-gap: 8px;\n        align-items: start;\n        color: #374151;\n        font-size: 14px;\n        font-weight: 800;\n        line-height: 1.45;\n        margin: 0;\n        padding: 0;\n    }\n\n    #product-list-allnew-app .ggs-equity-highlight .ggs-module-icon {\n        width: 18px;\n        min-width: 18px;\n        height: 18px;\n        justify-content: center;\n        margin-top: 1px;\n    }\n\n    #product-list-allnew-app .ggs-equity-panel {\n        background: rgba(239, 246, 255, 0.5);\n        border: 1px solid rgba(219, 234, 254, 0.5);\n    }\n\n    #product-list-allnew-app .ggs-waiver-requirements {\n        margin: 0 0 40px;\n    }\n\n    #product-list-allnew-app .ggs-requirements-shell {\n        background: #fff;\n        border: 1px solid #bbf7d0;\n        border-radius: 1.1rem;\n        box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05);\n        overflow: hidden;\n    }\n\n    #product-list-allnew-app .ggs-requirements-shell--open {\n        background: #ffffff;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger {\n        width: 100%;\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: 12px;\n        padding: 0.98rem 1.38rem 0.9rem;\n        text-align: left;\n        background: #ffffff;\n        transition: background-color 0.2s ease;\n        box-shadow: none !important;\n        border: 0 !important;\n        outline: none !important;\n        appearance: none !important;\n        -webkit-appearance: none !important;\n        min-height: 0 !important;\n        height: auto !important;\n        line-height: normal !important;\n        cursor: pointer;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger:hover {\n        background: #ffffff;\n        box-shadow: none !important;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger[aria-expanded='true'] {\n        background: #ffffff;\n    }\n\n    #product-list-allnew-app .ggs-requirements-shell--open .ggs-requirements-trigger {\n        background: #ffffff;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger:focus,\n    #product-list-allnew-app .ggs-requirements-trigger:focus-visible,\n    #product-list-allnew-app .ggs-requirements-trigger:active {\n        outline: none !important;\n        box-shadow: none !important;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger-main {\n        display: flex;\n        align-items: flex-start;\n        gap: 13px;\n        min-width: 0;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger-main > div:last-child {\n        min-width: 0;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger-icon {\n        width: 35px;\n        height: 35px;\n        border-radius: 999px;\n        background: #dcfce7;\n        color: #15803d;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n\n    #product-list-allnew-app .ggs-requirements-trigger-icon .ggs-module-icon {\n        width: 18px;\n        height: 18px;\n    }\n\n    #product-list-allnew-app .ggs-requirements-title {\n        margin: 0;\n        color: #0f172a;\n        font-size: 19px;\n        font-weight: 800;\n        line-height: 1.25;\n    }\n\n    #product-list-allnew-app .ggs-requirements-subtitle {\n        margin: 1px 0 0;\n        color: #6b7280;\n        font-size: 14px;\n        line-height: 1.35;\n        font-weight: 500;\n    }\n\n    #product-list-allnew-app .ggs-requirements-chevron {\n        width: 22px;\n        height: 22px;\n        color: #94a3b8;\n        flex-shrink: 0;\n        margin-top: 6px;\n        transition: transform 0.25s ease;\n    }\n\n    #product-list-allnew-app .ggs-requirements-chevron--open {\n        transform: rotate(180deg);\n    }\n\n    #product-list-allnew-app .ggs-requirements-body {\n        border-top: 1px solid #dcfce7;\n        background: #fafefb;\n        padding: 0.9rem 1.65rem 1.15rem;\n    }\n\n    #product-list-allnew-app .ggs-requirements-intro {\n        margin: 0 0 0.5rem;\n        color: #14532d;\n        font-size: 17px;\n        font-weight: 800;\n        line-height: 1.5;\n    }\n\n    #product-list-allnew-app .ggs-requirements-inline-link {\n        color: #166534;\n        text-decoration: underline;\n        text-decoration-color: #4ade80;\n        text-underline-offset: 2px;\n        transition: color 0.2s ease;\n    }\n\n    #product-list-allnew-app .ggs-requirements-inline-link:hover {\n        color: #15803d;\n    }\n\n    #product-list-allnew-app .ggs-requirements-description {\n        margin: 0 0 1rem;\n        color: #4b5563;\n        font-size: 15px;\n        line-height: 1.625;\n        font-weight: 500;\n    }\n\n    #product-list-allnew-app .ggs-requirements-checklist {\n        display: grid;\n        grid-template-columns: repeat(1, minmax(0, 1fr));\n        gap: 14px;\n    }\n\n    #product-list-allnew-app .ggs-requirements-check {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        background: #fff;\n        padding: 13px 15px;\n        border-radius: 0.85rem;\n        border: 1px solid rgba(220, 252, 231, 0.6);\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02);\n        color: #374151;\n        font-size: 15px;\n        font-weight: 700;\n        line-height: 1.45;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-section {\n        margin-top: 5rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-shell {\n        position: relative;\n        overflow: hidden;\n        background: #fff;\n        border: 1px solid #e5e7eb;\n        border-radius: 1.5rem;\n        box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05);\n        padding: 2rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-glow {\n        position: absolute;\n        top: 0;\n        right: 0;\n        width: 16rem;\n        height: 16rem;\n        border-radius: 999px;\n        background: rgba(239, 246, 255, 1);\n        filter: blur(64px);\n        transform: translate(50%, -50%);\n        opacity: 0.6;\n        pointer-events: none;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-heading {\n        position: relative;\n        z-index: 1;\n        text-align: center;\n        margin-bottom: 3rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-title {\n        color: #0f172a;\n        font-size: 1.875rem;\n        font-weight: 800;\n        line-height: 1.2;\n        margin-bottom: 1rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-highlight {\n        display: inline-block;\n        color: #2563eb;\n        background: #eff6ff;\n        border-radius: 0.5rem;\n        padding: 0 0.5rem;\n        margin-left: 0.5rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-subtitle {\n        color: #6b7280;\n        font-size: 1rem;\n        font-weight: 500;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-steps {\n        position: relative;\n        z-index: 1;\n        display: grid;\n        grid-template-columns: repeat(1, minmax(0, 1fr));\n        gap: 2rem;\n        margin-bottom: 2.5rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-line {\n        display: none;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step {\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        text-align: center;\n        gap: 0;\n        width: 100%;\n        padding: 0;\n        background: transparent;\n        border: 0;\n        border-radius: 0;\n        box-shadow: none;\n        color: inherit;\n        appearance: none;\n        -webkit-appearance: none;\n        text-decoration: none;\n        cursor: pointer;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step:hover,\n    #product-list-allnew-app .ggs-waiver-guide-step:focus,\n    #product-list-allnew-app .ggs-waiver-guide-step:focus-visible,\n    #product-list-allnew-app .ggs-waiver-guide-step:active {\n        background: transparent;\n        border: 0;\n        box-shadow: none;\n        outline: none;\n        text-decoration: none;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-number {\n        position: relative;\n        width: 80px;\n        height: 80px;\n        margin-bottom: 1.25rem;\n        border-radius: 1rem;\n        background: #eff6ff;\n        border: 2px solid transparent;\n        color: #2563eb;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 30px;\n        font-weight: 900;\n        transition: all 0.25s ease;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-number--active {\n        background: #2563eb;\n        color: #fff;\n        box-shadow: 0 20px 25px -5px rgba(37, 99, 235, 0.3);\n        transform: scale(1.05);\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-number--locked {\n        background: #ffffff;\n        border-color: #f3f4f6;\n        color: #9ca3af;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step:hover .ggs-waiver-guide-step-number {\n        background: #dbeafe;\n        transform: scale(1.05);\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step:hover .ggs-waiver-guide-step-number--active {\n        background: #2563eb;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step:hover .ggs-waiver-guide-step-number--locked {\n        background: #f8fbff;\n        border-color: #93c5fd;\n        box-shadow: 0 12px 24px rgba(59, 130, 246, 0.12);\n        transform: translateY(-2px);\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step--locked {\n        cursor: pointer;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step--locked:hover .ggs-waiver-guide-step-title,\n    #product-list-allnew-app .ggs-waiver-guide-step--locked:hover .ggs-waiver-guide-step-copy {\n        color: #64748b;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-lock {\n        position: absolute;\n        top: 9px;\n        right: 9px;\n        width: 14px;\n        height: 14px;\n        opacity: 0.55;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-title {\n        color: #0f172a;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 0.375rem;\n        margin-bottom: 0.5rem;\n        font-size: 1.125rem;\n        font-weight: 800;\n        line-height: 1.25;\n        transition: color 0.2s ease;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-title--active {\n        color: #2563eb;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step--locked .ggs-waiver-guide-step-title,\n    #product-list-allnew-app .ggs-waiver-guide-step--locked .ggs-waiver-guide-step-copy {\n        color: #9ca3af;\n    }\n\n    #product-list-allnew-app .ggs-unlock-dialog {\n        width: min(100%, 404px);\n        background: #ffffff;\n        border-radius: 1.7rem;\n        box-shadow: 0 24px 64px rgba(15, 23, 42, 0.18);\n        padding: 2.2rem 2rem 2rem;\n        position: relative;\n        text-align: center;\n    }\n\n    #product-list-allnew-app .ggs-unlock-close {\n        position: absolute;\n        top: 1.15rem;\n        right: 1.15rem;\n        width: 1.9rem !important;\n        height: 1.9rem !important;\n        border: 0 !important;\n        background: transparent !important;\n        color: #94a3b8 !important;\n        box-shadow: none !important;\n    }\n\n    #product-list-allnew-app .ggs-unlock-close:hover,\n    #product-list-allnew-app .ggs-unlock-close:focus {\n        background: transparent !important;\n        color: #64748b !important;\n    }\n\n    #product-list-allnew-app .ggs-unlock-icon {\n        width: 70px;\n        height: 70px;\n        margin: 0 auto 1.35rem;\n        border-radius: 999px;\n        background: #eaf2ff;\n        color: #2563eb;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        box-shadow: none;\n    }\n\n    #product-list-allnew-app .ggs-unlock-icon .ggs-module-icon {\n        width: 29px;\n        height: 29px;\n    }\n\n    #product-list-allnew-app .ggs-unlock-title {\n        margin: 0;\n        color: #0f172a;\n        font-size: 1.25rem;\n        font-weight: 800;\n        line-height: 1.14;\n    }\n\n    #product-list-allnew-app .ggs-unlock-copy {\n        max-width: 18rem;\n        margin: 1rem auto 1.55rem;\n        color: #64748b;\n        font-size: 0.875rem;\n        line-height: 1.7;\n        font-weight: 500;\n    }\n\n    #product-list-allnew-app .ggs-unlock-actions {\n        display: flex;\n        flex-direction: column;\n        gap: 0.9rem;\n    }\n\n    #product-list-allnew-app .ggs-unlock-primary {\n        margin-top: 0 !important;\n        min-height: 3.2rem !important;\n        border-radius: 1rem !important;\n        background: #2563eb !important;\n        color: #ffffff !important;\n        font-size: 1rem !important;\n        font-weight: 800 !important;\n        box-shadow: 0 12px 28px rgba(37, 99, 235, 0.28) !important;\n    }\n\n    #product-list-allnew-app .ggs-unlock-primary:hover,\n    #product-list-allnew-app .ggs-unlock-primary:focus {\n        background: #1d4ed8 !important;\n        color: #ffffff !important;\n    }\n\n    #product-list-allnew-app .ggs-unlock-secondary {\n        border: 0 !important;\n        min-height: 3.15rem !important;\n        border-radius: 1rem !important;\n        background: #f8fafc !important;\n        color: #475569 !important;\n        font-size: 1rem !important;\n        font-weight: 700 !important;\n        padding: 0.95rem 1.25rem !important;\n        line-height: 1.2 !important;\n        cursor: pointer;\n        transition: background-color 0.2s ease, color 0.2s ease;\n    }\n\n    #product-list-allnew-app .ggs-unlock-secondary:hover,\n    #product-list-allnew-app .ggs-unlock-secondary:focus {\n        background: #f1f5f9 !important;\n        color: #1e293b !important;\n        outline: none !important;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-step-copy {\n        max-width: 200px;\n        color: #6b7280;\n        font-size: 14px;\n        line-height: 1.625;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-detail {\n        position: relative;\n        z-index: 1;\n        max-width: 48rem;\n        margin: 0 auto;\n        background: rgba(239, 246, 255, 0.8);\n        border: 1px solid rgba(219, 234, 254, 0.5);\n        border-radius: 1rem;\n        padding: 1.5rem 1.5rem;\n        min-height: 11rem;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        text-align: center;\n        box-shadow: inset 0 2px 4px rgba(15, 23, 42, 0.04);\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-detail-title {\n        color: #0f172a;\n        font-size: 1.125rem;\n        font-weight: 800;\n        margin: 0 0 0.75rem;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-detail-copy {\n        margin: 0;\n        color: #374151;\n        font-size: 1rem;\n        line-height: 1.55;\n        font-weight: 500;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-footer {\n        position: relative;\n        z-index: 1;\n        margin-top: 0.875rem;\n        text-align: center;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-link {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 8px;\n        padding: 0.625rem 1.25rem;\n        border-radius: 999px;\n        border: 1px solid transparent;\n        color: #2563eb;\n        font-size: 14px;\n        font-weight: 800;\n        transition: all 0.2s ease;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-link:hover {\n        background: #eff6ff;\n        border-color: #dbeafe;\n        color: #1d4ed8;\n    }\n\n    #product-list-allnew-app .ggs-waiver-guide-link-arrow {\n        width: 16px;\n        height: 16px;\n        flex-shrink: 0;\n    }\n\n    #product-list-allnew-app .ggs-faq-shell {\n        max-width: 56rem;\n    }\n\n    #product-list-allnew-app .ggs-faq-title {\n        font-size: 1.875rem;\n        margin-bottom: 1rem;\n    }\n\n    #product-list-allnew-app .ggs-faq-description {\n        margin-bottom: 0;\n    }\n\n    #product-list-allnew-app .ggs-faq-list {\n        gap: 1rem;\n    }\n\n    #product-list-allnew-app .ggs-faq-item {\n        border: 1px solid #f3f4f6;\n        border-radius: 1rem;\n        box-shadow: none;\n        overflow: hidden;\n    }\n\n    #product-list-allnew-app .ggs-faq-item--open {\n        border-color: #f3f4f6;\n        box-shadow: none;\n    }\n\n    #product-list-allnew-app .ggs-faq-item--closed {\n        box-shadow: none;\n    }\n\n    #product-list-allnew-app .ggs-faq-trigger {\n        padding: 1.25rem 1.5rem;\n        background: #fff;\n    }\n\n    #product-list-allnew-app .ggs-faq-question {\n        color: #0f172a;\n        font-size: 1rem;\n        font-weight: 800;\n    }\n\n    #product-list-allnew-app .ggs-faq-icon {\n        width: 2rem;\n        height: 2rem;\n        border-radius: 999px;\n        background: #f9fafb;\n        color: #9ca3af;\n        padding: 6px;\n    }\n\n    #product-list-allnew-app .ggs-faq-trigger[aria-expanded='true'] .ggs-faq-icon {\n        background: #eff6ff;\n        color: #2563eb;\n    }\n\n    #product-list-allnew-app .ggs-faq-answer {\n        padding: 1rem 1.5rem 1.5rem;\n        border-top: 1px solid #f9fafb;\n        color: #4b5563;\n        font-size: 1rem;\n        line-height: 1.75rem;\n    }\n\n    @media (min-width: 768px) {\n        #product-list-allnew-app .ggs-equity-highlights {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n        }\n\n        #product-list-allnew-app .ggs-requirements-checklist {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n\n        #product-list-allnew-app .ggs-waiver-guide-steps {\n            grid-template-columns: repeat(4, minmax(0, 1fr));\n            gap: 16px;\n            margin-bottom: 40px;\n        }\n\n        #product-list-allnew-app .ggs-waiver-guide-line {\n            display: block;\n            position: absolute;\n            top: 40px;\n            left: 12%;\n            right: 12%;\n            height: 2px;\n            background: linear-gradient(to right, #bfdbfe, #e5e7eb, #e5e7eb);\n            z-index: -1;\n        }\n    }\n\n    @media (max-width: 767px) {\n        html,\n        body,\n        .site-content,\n        .entry-content {\n            max-width: 100vw;\n            overflow-x: hidden;\n        }\n\n        #product-list-allnew-app,\n        #product-list-allnew-app * {\n            min-width: 0;\n            box-sizing: border-box;\n        }\n\n        #product-list-allnew-app {\n            width: 100%;\n            max-width: 100vw;\n            overflow-x: hidden;\n            padding-left: 0;\n            padding-right: 0;\n        }\n\n        #product-list-allnew-app > main {\n            width: 100%;\n            max-width: 100%;\n            padding-left: 0.5rem !important;\n            padding-right: 0.5rem !important;\n            overflow-x: hidden;\n        }\n\n        #product-list-allnew-app .ggs-hero-section {\n            width: 100%;\n            max-width: 100%;\n            margin-bottom: 1.5rem !important;\n            gap: 1rem !important;\n            overflow: hidden;\n        }\n\n        #product-list-allnew-app .ggs-hero-copy,\n        #product-list-allnew-app .ggs-hero-actions,\n        #product-list-allnew-app .ggs-refund-panel {\n            width: 100% !important;\n            max-width: 100% !important;\n            align-items: stretch !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-title {\n            width: 100%;\n            max-width: 100%;\n            font-size: clamp(2.25rem, 11.5vw, 3.35rem) !important;\n            line-height: 0.98 !important;\n            overflow-wrap: anywhere !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-title-wrap,\n        #product-list-allnew-app .ggs-hero-title-text {\n            max-width: 100% !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta,\n        #product-list-allnew-app .ggs-hero-refund {\n            width: 100% !important;\n            max-width: 100% !important;\n            justify-content: center !important;\n            text-align: center !important;\n            white-space: normal !important;\n            transform: none !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta {\n            flex-wrap: wrap !important;\n            gap: 0.45rem !important;\n            padding: 0.85rem 1rem !important;\n            border-radius: 1.4rem !important;\n            font-size: clamp(0.95rem, 4vw, 1rem) !important;\n            line-height: 1.35rem !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-cta-label,\n        #product-list-allnew-app .ggs-hero-cta-savings,\n        #product-list-allnew-app .ggs-hero-cta-amount {\n            flex: 0 1 auto !important;\n            max-width: 100% !important;\n            font-size: inherit !important;\n            line-height: inherit !important;\n            white-space: nowrap !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-refund {\n            gap: 0.5rem !important;\n            padding: 0.75rem 0.95rem !important;\n            border-radius: 1.2rem !important;\n            font-size: clamp(0.9rem, 3.8vw, 0.98rem) !important;\n            line-height: 1.35rem !important;\n        }\n\n        #product-list-allnew-app .ggs-hero-refund strong {\n            white-space: normal !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-card {\n            width: 100% !important;\n            max-width: 100% !important;\n            margin-left: 0 !important;\n            margin-right: 0 !important;\n            margin-bottom: 1rem !important;\n            padding: 1.15rem 0.9rem 1rem 1rem !important;\n            border-radius: 1.2rem !important;\n            overflow: hidden !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-card .flex.items-center.gap-4 {\n            align-items: flex-start !important;\n            gap: 0.8rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-icon-shell {\n            flex: 0 0 auto !important;\n            width: 3rem !important;\n            height: 3rem !important;\n            padding: 0.75rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-title {\n            font-size: clamp(1.35rem, 6vw, 1.75rem) !important;\n            line-height: 1.15 !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-subtitle {\n            font-size: 0.95rem !important;\n            line-height: 1.35rem !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-meta-value {\n            width: 100% !important;\n            max-width: 100% !important;\n            white-space: normal !important;\n            overflow-wrap: anywhere !important;\n            justify-content: flex-start !important;\n        }\n\n        #product-list-allnew-app .ggs-equity-highlights,\n        #product-list-allnew-app .ggs-equity-panel,\n        #product-list-allnew-app .ggs-requirements-shell,\n        #product-list-allnew-app .ggs-requirements-trigger,\n        #product-list-allnew-app .ggs-requirements-body,\n        #product-list-allnew-app .ggs-waiver-guide-shell {\n            max-width: 100%;\n            overflow-x: hidden;\n        }\n\n        #product-list-allnew-app .ggs-plan-layout,\n        #product-list-allnew-app .ggs-cards-wrap,\n        #product-list-allnew-app .ggs-cards-grid {\n            max-width: 100%;\n            overflow: visible !important;\n        }\n\n        #product-list-allnew-app .ggs-cards-grid {\n            padding-top: 1.25rem !important;\n        }\n\n        #product-list-allnew-app .ggs-price-card {\n            overflow: visible !important;\n        }\n\n        #product-list-allnew-app .ggs-refund-popover {\n            right: auto;\n            left: 50%;\n            width: min(100%, calc(100vw - 1.5rem));\n            max-width: calc(100vw - 1.5rem);\n            transform: translateX(-50%);\n        }\n\n        #product-list-allnew-app .ggs-refund-popover-arrow {\n            right: 50%;\n            transform: translateX(50%) rotate(45deg);\n        }\n\n        #product-list-allnew-app .ggs-requirements-trigger,\n        #product-list-allnew-app .ggs-requirements-body,\n        #product-list-allnew-app .ggs-waiver-guide-shell {\n            padding-left: 18px;\n            padding-right: 18px;\n        }\n\n        #product-list-allnew-app .ggs-requirements-title,\n        #product-list-allnew-app .ggs-waiver-guide-title {\n            font-size: 1.5rem;\n        }\n\n        #product-list-allnew-app .ggs-unlock-dialog {\n            width: min(100%, 360px);\n            padding: 1.95rem 1.35rem 1.45rem;\n            border-radius: 1.4rem;\n        }\n\n        #product-list-allnew-app .ggs-unlock-title {\n            font-size: 1.62rem;\n        }\n\n        #product-list-allnew-app .ggs-unlock-copy {\n            max-width: 17rem;\n            font-size: 0.95rem;\n            margin-bottom: 1.35rem;\n        }\n\n        #product-list-allnew-app .ggs-requirements-title {\n            font-size: 1rem;\n        }\n\n        #product-list-allnew-app .ggs-faq-title {\n            font-size: 2rem;\n        }\n    }\n<\/style>\n\n<div id=\"product-list-allnew-app\" v-cloak class=\"ggs-sans min-h-screen pb-24\" :class=\"lang === 'zh' ? 'ggs-lang-zh' : 'ggs-lang-en'\">\n    <div\n            class=\"ggs-top-banner\"\n            :class=\"bannerMessage ? 'ggs-top-banner--visible' : ''\"\n    >\n        <div class=\"ggs-top-banner-inner\">\n            <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <path d=\"m3 11 14-5v12L3 13v-2Z\"><\/path>\n                <path d=\"M11.6 16.8a3 3 0 1 1-5.8 1.4\"><\/path>\n                <path d=\"M19 8a3 3 0 0 1 0 8\"><\/path>\n            <\/svg>\n            <span>{{ bannerMessage }}<\/span>\n        <\/div>\n    <\/div>\n\n    <div\n            v-if=\"notice.message\"\n            class=\"fixed bottom-6 left-1\/2 z-[130] -translate-x-1\/2 rounded-full px-5 py-3 text-sm font-semibold shadow-2xl\"\n            :class=\"notice.type === 'error' ? 'bg-slate-900 text-white' : 'bg-white text-slate-700'\"\n    >\n        {{ notice.message }}\n    <\/div>\n\n    <main class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-5 pb-10\">\n        <h1 class=\"sr-only\">{{ heroSeoTitle }}<\/h1>\n\n        <section aria-label=\"Hero Banner\" class=\"ggs-hero-section flex flex-col lg:flex-row justify-between items-start lg:items-center mb-8 gap-5\">\n            <div class=\"ggs-hero-copy\">\n                <p class=\"ggs-hero-title-wrap ggs-hero-title text-4xl md:text-5xl font-extrabold text-gray-900 tracking-tight relative inline-block\">\n                    <span class=\"ggs-hero-title-text\">{{ heroTitle }}<\/span>\n                    <span class=\"ggs-highlight\"><\/span>\n                <\/p>\n            <\/div>\n\n            <div class=\"ggs-hero-actions flex flex-col items-end gap-3\">\n                <a\n                        href=\"#product-compare\"\n                        class=\"ggs-force-link ggs-hero-cta bg-blue-600 text-white px-6 py-3 rounded-full font-bold text-lg shadow-lg flex items-center gap-2 transform hover:scale-105 transition-transform cursor-pointer\"\n                        @click.prevent=\"scrollToPlans\"\n                >\n                    <span class=\"ggs-hero-cta-label\">{{ copy.waiveAndSave }}<\/span>\n                    <span class=\"ggs-hero-cta-savings\">\n                        <span class=\"ggs-hero-cta-wave\" aria-hidden=\"true\">\ud83d\udc4d<\/span>\n                        <span :class=\"heroSavings > 0 ? 'ggs-din ggs-hero-cta-amount' : 'ggs-hero-cta-amount'\">{{ heroSavingsText }}<\/span>\n                    <\/span>\n                <\/a>\n                <div\n                        v-if=\"waiverNoticeText\"\n                        class=\"ggs-refund-panel relative\"\n                        @mouseenter=\"noticePanelOpen = true\"\n                        @mouseleave=\"noticePanelOpen = false\"\n                >\n                    <button\n                            type=\"button\"\n                            class=\"ggs-hero-refund flex items-center gap-2 bg-green-50 px-5 py-2.5 rounded-full shadow-sm border border-green-200 text-green-700\"\n                            @click.prevent=\"noticePanelOpen = !noticePanelOpen\"\n                    >\n                        <svg viewbox=\"0 0 24 24\" class=\"ggs-hero-refund-icon w-5 h-5 text-green-600\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                            <path d=\"M12 2 5 5v6c0 5 3.5 9 7 11 3.5-2 7-6 7-11V5l-7-3Z\"><\/path>\n                            <path d=\"m9 12 2 2 4-4\"><\/path>\n                        <\/svg>\n                        <span class=\"font-bold text-sm\">{{ waiverNoticeText }}<\/span>\n                    <\/button>\n\n                    <div v-if=\"noticePanelItems.length && noticePanelOpen\" class=\"ggs-refund-popover\">\n                        <div class=\"ggs-refund-popover-arrow\"><\/div>\n                        <h4 class=\"ggs-refund-popover-title\">\n                            <span class=\"ggs-module-icon ggs-module-icon--sm text-green-600\" v-html=\"getModuleIconSvg('shield')\"><\/span>\n                            <span>{{ noticePanelTitle }}<\/span>\n                        <\/h4>\n                        <div class=\"ggs-refund-popover-list\">\n                            <div v-for=\"item in noticePanelItems\" :key=\"item.key\" class=\"ggs-refund-popover-item\">\n                                <span class=\"ggs-module-icon ggs-module-icon--sm\" :class=\"`ggs-module-icon--${item.icon}`\" v-html=\"getModuleIconSvg(item.icon)\"><\/span>\n                                <div class=\"ggs-refund-popover-copy\">\n                                    <strong v-if=\"item.title\">{{ item.title }}:&nbsp;<\/strong>\n                                    <span v-if=\"item.content\" class=\"ggs-refund-popover-text\">{{ item.content }}<\/span>\n                                    <span v-else-if=\"item.text\" class=\"ggs-refund-popover-text\">{{ item.text }}<\/span>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section aria-label=\"Equity Information\">\n            <div class=\"ggs-equity-card bg-white rounded-2xl shadow-sm border border-blue-100 p-6 mb-10 flex flex-col relative overflow-hidden\">\n                <div class=\"absolute top-0 left-0 w-1.5 h-full bg-blue-500\"><\/div>\n\n                <div class=\"ggs-equity-header flex flex-col lg:flex-row items-start lg:items-center justify-between gap-6\">\n                    <div class=\"ggs-equity-heading flex items-center gap-4\">\n                        <div class=\"ggs-equity-icon-shell bg-blue-50 p-3 rounded-xl text-blue-600\">\n                            <svg viewbox=\"0 0 24 24\" class=\"ggs-equity-icon w-6 h-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\n                                <path d=\"M12 16v-4\"><\/path>\n                                <path d=\"M12 8h.01\"><\/path>\n                            <\/svg>\n                        <\/div>\n                        <div class=\"ggs-equity-copy\">\n                            <h2 class=\"ggs-equity-title font-bold text-gray-900 text-lg\">{{ equityInfoTitle }}<\/h2>\n                            <p v-if=\"equityInfoSubtitle\" class=\"ggs-equity-subtitle text-sm text-gray-500\">{{ equityInfoSubtitle }}<\/p>\n                        <\/div>\n                    <\/div>\n\n                    <div v-if=\"hasCoveragePeriod || hasWaiveDeadline\" class=\"ggs-equity-meta-group flex flex-wrap gap-8 lg:justify-end\">\n                        <div\n                                v-if=\"hasCoveragePeriod\"\n                                class=\"ggs-equity-meta-item flex flex-col cursor-help\"\n                                @mouseenter=\"bannerMessage = copy.coveragePeriodBanner\"\n                                @mouseleave=\"bannerMessage = ''\"\n                        >\n                            <span class=\"ggs-equity-meta-label text-[11px] text-gray-400 uppercase font-bold tracking-wider mb-1.5\">{{ copy.schoolRequiredPeriod }}<\/span>\n                            <div class=\"ggs-equity-meta-value flex items-center gap-2 text-gray-800 font-semibold bg-gray-50 px-3 py-1.5 rounded-lg\">\n                                <svg viewbox=\"0 0 24 24\" class=\"w-4 h-4 text-blue-500\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                    <path d=\"M8 2v4\"><\/path>\n                                    <path d=\"M16 2v4\"><\/path>\n                                    <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"><\/rect>\n                                    <path d=\"M3 10h18\"><\/path>\n                                <\/svg>\n                                {{ coveragePeriodText }}\n                            <\/div>\n                        <\/div>\n\n                        <div v-if=\"hasCoveragePeriod && hasWaiveDeadline\" class=\"ggs-equity-divider w-px h-12 bg-gray-100 hidden md:block\"><\/div>\n\n                        <div\n                                v-if=\"hasWaiveDeadline\"\n                                class=\"ggs-equity-meta-item flex flex-col cursor-help\"\n                                @mouseenter=\"bannerMessage = copy.deadlineBanner\"\n                                @mouseleave=\"bannerMessage = ''\"\n                        >\n                            <span class=\"ggs-equity-meta-label text-[11px] text-gray-400 uppercase font-bold tracking-wider mb-1.5\">{{ copy.waiveDeadline }}<\/span>\n                            <div class=\"ggs-equity-meta-value flex items-center gap-2 text-gray-900 font-bold bg-yellow-100 px-4 py-1.5 rounded-lg\">\n                                <svg viewbox=\"0 0 24 24\" class=\"w-4 h-4 text-yellow-600\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                    <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\n                                    <path d=\"M12 6v6l4 2\"><\/path>\n                                <\/svg>\n                                {{ schoolWaive.waive_deadline }}\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div v-if=\"equityHighlights.length || equityCards.length\" class=\"mt-6 pt-5 border-t border-gray-100\">\n                    <ul v-if=\"equityHighlights.length\" class=\"ggs-equity-highlights\">\n                        <li v-for=\"item in equityHighlights\" :key=\"item.key\" class=\"ggs-equity-highlight\">\n                            <span class=\"ggs-module-icon ggs-module-icon--sm\" :class=\"`ggs-module-icon--${item.icon}`\" v-html=\"getModuleIconSvg(item.icon)\"><\/span>\n                            <span>{{ item.text }}<\/span>\n                        <\/li>\n                    <\/ul>\n\n                    <div v-if=\"equityCards.length\" class=\"grid grid-cols-1 gap-4\" :class=\"equityCardGridClass\">\n                        <div v-for=\"panel in equityCards\" :key=\"panel.key\" class=\"ggs-equity-panel flex items-start gap-3 bg-blue-50\/50 p-4 rounded-xl border border-blue-100\/50\">\n                            <span class=\"ggs-module-icon text-blue-500 shrink-0 mt-0.5\" :class=\"`ggs-module-icon--${panel.icon}`\" v-html=\"getModuleIconSvg(panel.icon)\"><\/span>\n                            <p class=\"ggs-equity-panel-copy text-sm text-gray-600 leading-relaxed\">\n                                <b v-if=\"panel.title\" class=\"ggs-equity-panel-title text-gray-900 font-semibold block mb-1\">{{ panel.title }}<\/b>\n                                <span v-if=\"panel.content\">{{ panel.content }}<\/span>\n                                <span v-else-if=\"panel.text\">{{ panel.text }}<\/span>\n                            <\/p>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section v-if=\"showWaiverRequirements\" aria-label=\"Waiver Requirements\" class=\"ggs-waiver-requirements\">\n            <div class=\"ggs-requirements-shell\" :class=\"waiverRequirementsOpen ? 'ggs-requirements-shell--open' : ''\">\n                <div\n                        role=\"button\"\n                        tabindex=\"0\"\n                        class=\"ggs-requirements-trigger\"\n                        :aria-expanded=\"waiverRequirementsOpen ? 'true' : 'false'\"\n                        @click=\"toggleWaiverRequirements\"\n                        @keydown.enter.prevent=\"toggleWaiverRequirements\"\n                        @keydown.space.prevent=\"toggleWaiverRequirements\"\n                >\n                    <div class=\"ggs-requirements-trigger-main\">\n                        <div class=\"ggs-requirements-trigger-icon\">\n                            <span class=\"ggs-module-icon text-green-700\" v-html=\"getModuleIconSvg('check')\"><\/span>\n                        <\/div>\n                        <div>\n                            <h2 class=\"ggs-requirements-title\">{{ waiverRequirementsTitle }}<\/h2>\n                            <p v-if=\"waiverRequirementsSubtitle\" class=\"ggs-requirements-subtitle\">{{ waiverRequirementsSubtitle }}<\/p>\n                        <\/div>\n                    <\/div>\n                    <svg viewbox=\"0 0 24 24\" class=\"ggs-requirements-chevron\" :class=\"waiverRequirementsOpen ? 'ggs-requirements-chevron--open' : ''\" aria-hidden=\"true\">\n                        <path fill=\"currentColor\" d=\"M12 15.5303L5.46967 9L6.53033 7.93934L12 13.409L17.4697 7.93934L18.5303 9L12 15.5303Z\"><\/path>\n                    <\/svg>\n                <\/div>\n\n                <div v-if=\"waiverRequirementsOpen\" class=\"ggs-requirements-body\">\n                    <h3 v-if=\"waiverRequirementsIntroHtml\" class=\"ggs-requirements-intro\" v-html=\"waiverRequirementsIntroHtml\"><\/h3>\n                    <p v-if=\"waiverRequirementsDescription\" class=\"ggs-requirements-description\">{{ waiverRequirementsDescription }}<\/p>\n                    <div v-if=\"waiverRequirementsChecklist.length\" class=\"ggs-requirements-checklist\">\n                        <div v-for=\"item in waiverRequirementsChecklist\" :key=\"item.key\" class=\"ggs-requirements-check\">\n                            <span class=\"ggs-module-icon ggs-module-icon--sm text-green-500\" v-html=\"getModuleIconSvg(item.icon || 'check')\"><\/span>\n                            <span>{{ item.text || item.content }}<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section id=\"product-compare\" class=\"mt-10\">\n            <div class=\"ggs-plan-mobile-controls\">\n                <div class=\"ggs-billing-switch ggs-billing-switch--mobile\">\n                    <span class=\"ggs-billing-label\" :class=\"billingCycle === 'monthly' ? 'text-gray-900' : 'text-gray-400'\">{{ copy.monthly }}<\/span>\n                    <button\n                            type=\"button\"\n                            class=\"ggs-toggle-track ggs-billing-toggle w-14 h-8 bg-blue-600 rounded-full relative transition-colors cursor-pointer\"\n                            @click=\"toggleBillingCycle\"\n                            :aria-label=\"copy.toggleBilling\"\n                    >\n                        <span\n                                class=\"ggs-toggle-thumb absolute top-1 w-6 h-6 bg-yellow-400 rounded-full transition-all duration-300 shadow-sm\"\n                                :class=\"billingCycle === 'monthly' ? 'left-1' : 'left-7'\"\n                        ><\/span>\n                    <\/button>\n                    <span class=\"ggs-billing-label ggs-billing-label--secondary\" :class=\"billingCycle === 'yearly' ? 'text-gray-900' : 'text-gray-400'\">{{ billingToggleSecondaryLabel }}<\/span>\n                <\/div>\n\n                <div class=\"flex items-center gap-3\">\n                    <span class=\"font-bold text-gray-900 w-[68px]\">{{ copy.dob }}<\/span>\n                    <div\n                            class=\"relative ggs-dob-field\"\n                            role=\"button\"\n                            tabindex=\"0\"\n                            @click=\"openDatePicker('mobile')\"\n                            @keydown.enter.prevent=\"openDatePicker('mobile')\"\n                            @keydown.space.prevent=\"openDatePicker('mobile')\"\n                    >\n                        <input\n                                ref=\"mobileDateInput\"\n                                :value=\"nativeDateOfBirth\"\n                                type=\"text\"\n                                class=\"ggs-dob-native\"\n                                readonly\n aria-hidden=\"true\"\n                                tabindex=\"-1\"\n                        >\n                        <input\n                                :value=\"dateOfBirth\"\n                                type=\"text\"\n                                :placeholder=\"copy.datePlaceholder\"\n                                readonly\n class=\"ggs-dob-input pl-4 pr-10 py-2.5 bg-blue-50 border-none rounded-xl text-sm font-medium focus:ring-2 focus:ring-blue-500 outline-none w-48\"\n                        >\n                        <svg viewbox=\"0 0 24 24\" class=\"w-5 h-5 text-blue-600 absolute right-3 top-1\/2 -translate-y-1\/2 fill-current\" aria-hidden=\"true\">\n                            <path d=\"M6.75 2.25C7.16421 2.25 7.5 2.58579 7.5 3V4.5H16.5V3C16.5 2.58579 16.8358 2.25 17.25 2.25C17.6642 2.25 18 2.58579 18 3V4.5H18.75C19.9926 4.5 21 5.50736 21 6.75V18.75C21 19.9926 19.9926 21 18.75 21H5.25C4.00736 21 3 19.9926 3 18.75V6.75C3 5.50736 4.00736 4.5 5.25 4.5H6V3C6 2.58579 6.33579 2.25 6.75 2.25ZM19.5 9H4.5V18.75C4.5 19.1642 4.83579 19.5 5.25 19.5H18.75C19.1642 19.5 19.5 19.1642 19.5 18.75V9Z\"><\/path>\n                        <\/svg>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"ggs-plan-layout\">\n                <div class=\"ggs-feature-labels ggs-desktop-feature-column ggs-plan-sidebar\">\n                    <div>\n                        <div class=\"ggs-sidebar-head h-[280px] flex flex-col pt-4 gap-6\">\n                            <div class=\"ggs-billing-switch ggs-billing-switch--desktop\">\n                                <span class=\"ggs-billing-label\" :class=\"billingCycle === 'monthly' ? 'text-gray-900' : 'text-gray-400'\">{{ copy.monthly }}<\/span>\n                                <button\n                                        type=\"button\"\n                                        class=\"ggs-toggle-track ggs-billing-toggle w-14 h-8 bg-blue-600 rounded-full relative transition-colors cursor-pointer\"\n                                        @click=\"toggleBillingCycle\"\n                                        :aria-label=\"copy.toggleBilling\"\n                                >\n                                    <span\n                                            class=\"ggs-toggle-thumb absolute top-1 w-6 h-6 bg-yellow-400 rounded-full transition-all duration-300 shadow-sm\"\n                                            :class=\"billingCycle === 'monthly' ? 'left-1' : 'left-7'\"\n                                    ><\/span>\n                                <\/button>\n                                <span class=\"ggs-billing-label ggs-billing-label--secondary\" :class=\"billingCycle === 'yearly' ? 'text-gray-900' : 'text-gray-400'\">{{ billingToggleSecondaryLabel }}<\/span>\n                            <\/div>\n\n                            <div class=\"flex items-center gap-3 pr-4\">\n                                <span class=\"font-bold text-gray-900 w-[60px]\">{{ copy.dob }}<\/span>\n                                <div\n                                        class=\"relative flex-1 ggs-dob-field\"\n                                        role=\"button\"\n                                        tabindex=\"0\"\n                                        @click=\"openDatePicker('desktop')\"\n                                        @keydown.enter.prevent=\"openDatePicker('desktop')\"\n                                        @keydown.space.prevent=\"openDatePicker('desktop')\"\n                                >\n                                    <input\n                                            ref=\"desktopDateInput\"\n                                            :value=\"nativeDateOfBirth\"\n                                            type=\"text\"\n                                            class=\"ggs-dob-native\"\n                                            readonly\n aria-hidden=\"true\"\n                                            tabindex=\"-1\"\n                                    >\n                                    <input\n                                            :value=\"dateOfBirth\"\n                                            type=\"text\"\n                                            :placeholder=\"copy.datePlaceholder\"\n                                            readonly\n class=\"ggs-dob-input w-full pl-4 pr-10 py-2.5 bg-blue-50 border-none rounded-xl text-sm font-medium focus:ring-2 focus:ring-blue-500 outline-none\"\n                                    >\n                                    <svg viewbox=\"0 0 24 24\" class=\"w-5 h-5 text-blue-600 absolute right-3 top-1\/2 -translate-y-1\/2 fill-current\" aria-hidden=\"true\">\n                                        <path d=\"M6.75 2.25C7.16421 2.25 7.5 2.58579 7.5 3V4.5H16.5V3C16.5 2.58579 16.8358 2.25 17.25 2.25C17.6642 2.25 18 2.58579 18 3V4.5H18.75C19.9926 4.5 21 5.50736 21 6.75V18.75C21 19.9926 19.9926 21 18.75 21H5.25C4.00736 21 3 19.9926 3 18.75V6.75C3 5.50736 4.00736 4.5 5.25 4.5H6V3C6 2.58579 6.33579 2.25 6.75 2.25ZM19.5 9H4.5V18.75C4.5 19.1642 4.83579 19.5 5.25 19.5H18.75C19.1642 19.5 19.5 19.1642 19.5 18.75V9Z\"><\/path>\n                                    <\/svg>\n                                <\/div>\n                            <\/div>\n\n                            <div v-if=\"selectedCompareProducts.length\" class=\"ggs-compare-sidebar-wrap\">\n                                <button\n                                        type=\"button\"\n                                        class=\"ggs-compare-fab ggs-compare-fab--sidebar ggs-fade-up inline-flex items-center gap-3 rounded-full bg-slate-950 py-4 text-sm font-bold text-white shadow-2xl transition-all duration-200 hover:-translate-y-0.5 hover:bg-slate-800\"\n                                        @click=\"showCompareModal = true\"\n                                >\n                                    <span class=\"ggs-compare-fab-count flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs text-white\">{{ selectedCompareProducts.length }}<\/span>\n                                    <span class=\"ggs-compare-fab-label\">{{ copy.compareSelected }}<\/span>\n                                    <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 fill-current\" aria-hidden=\"true\">\n                                        <path d=\"M12.9697 5.46967L11.909 6.53033L16.6287 11.25H4.5V12.75H16.6287L11.909 17.4697L12.9697 18.5303L19.5 12L12.9697 5.46967Z\"><\/path>\n                                    <\/svg>\n                                <\/button>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"ggs-feature-label-list\">\n                            <div\n                                    v-for=\"feature in visibleFeatures\"\n                                    :key=\"feature.key\"\n                                    class=\"relative group h-16 flex items-center text-sm font-medium text-blue-600 border-b border-transparent hover:bg-blue-50\/50 px-4 rounded-lg transition-colors cursor-help\"\n                            >\n                                <span>{{ feature.label }}<\/span>\n                                <div v-if=\"feature.tooltip\" class=\"absolute left-full ml-2 top-1\/2 -translate-y-1\/2 w-72 p-3 bg-blue-500 text-white text-xs leading-relaxed rounded-lg shadow-xl opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50 pointer-events-none\">\n                                    <div class=\"absolute top-1\/2 -translate-y-1\/2 -left-1.5 border-y-4 border-y-transparent border-r-4 border-r-blue-500\"><\/div>\n                                    {{ feature.tooltip }}\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ggs-cards-wrap ggs-plan-grid-wrap\">\n                    <div v-if=\"loading\" class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\n                        <div v-for=\"n in 3\" :key=\"'skeleton-' + n\" class=\"overflow-hidden rounded-[28px] border border-white\/70 bg-white\/80 shadow-lg\">\n                            <div class=\"animate-pulse p-8\">\n                                <div class=\"mx-auto h-6 w-40 rounded-full bg-slate-200\"><\/div>\n                                <div class=\"mx-auto mt-6 h-10 w-32 rounded-full bg-slate-200\"><\/div>\n                                <div class=\"mt-8 h-12 rounded-2xl bg-slate-200\"><\/div>\n                                <div class=\"mt-6 space-y-4\">\n                                    <div v-for=\"row in 5\" :key=\"'row-' + row\" class=\"h-10 rounded-xl bg-slate-100\"><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div v-else-if=\"errorMessage\" class=\"rounded-[28px] border border-red-100 bg-white p-8 shadow-lg\">\n                        <h3 class=\"ggs-state-title text-lg font-bold text-slate-950\">{{ copy.fetchErrorTitle }}<\/h3>\n                        <p class=\"mt-3 text-sm leading-6 text-slate-600\">{{ errorMessage }}<\/p>\n                    <\/div>\n\n                    <div v-else-if=\"!filteredProducts.length\" class=\"rounded-[28px] border border-slate-200 bg-white p-8 shadow-lg\">\n                        <h3 class=\"ggs-state-title text-lg font-bold text-slate-950\">{{ copy.noProductsTitle }}<\/h3>\n                        <p class=\"mt-3 whitespace-pre-line text-sm leading-6 text-slate-600\">{{ noPlanDisplayMessage }}<\/p>\n                    <\/div>\n\n                    <div\n                            v-else\n class=\"ggs-cards-grid\"\n                            :class=\"{                                'ggs-cards-grid--single': planCards.length === 1,                                'ggs-cards-grid--two': planCards.length === 2                            }\"\n                    >\n                        <article\n                                v-for=\"plan in planCards\"\n                                :key=\"plan.seriesKey || plan.compareId\"\n                                class=\"ggs-price-card relative bg-white rounded-3xl transition-all duration-300 flex flex-col\"\n                                :class=\"plan.isPopular ? 'shadow-[0_8px_30px_rgb(59,130,246,0.15)] border-2 border-blue-500 hover:scale-105 hover:z-20 z-10' : 'shadow-lg border border-gray-100 hover:shadow-xl hover:scale-105 hover:z-20'\"\n                        >\n                            <div\n                                    v-if=\"plan.isPopular\"\n                                    class=\"absolute -top-4 left-1\/2 -translate-x-1\/2 bg-gradient-to-r from-yellow-400 to-yellow-500 text-yellow-900 text-xs font-bold px-4 py-1 rounded-full shadow-md flex items-center gap-1\"\n                            >\n                                \ud83d\udc51 {{ copy.mostPopular }}\n                            <\/div>\n\n                            <div class=\"ggs-card-head p-8 border-b border-gray-50\">\n                                <h3 class=\"ggs-card-title text-xl font-extrabold text-gray-900\">GGS {{ normalizePlanName(plan.compareName || plan.name) }}<\/h3>\n\n                                <div class=\"ggs-card-price text-4xl font-black text-red-600 flex items-baseline justify-center\">\n                                    <span class=\"ggs-card-price-stage\">\n                                        <transition name=\"ggs-value-fade\">\n                                            <span :key=\"getPlanPriceTransitionKey(plan)\" class=\"ggs-transition-item ggs-card-price-group\">\n                                                <span class=\"ggs-din text-2xl ggs-card-price-currency\">$<\/span>\n                                                <span class=\"ggs-din ggs-card-price-value\">{{ formatPrice(displayPrice(plan)) }}<\/span>\n                                                <span v-if=\"billingPriceUnitLabel\" class=\"ggs-card-price-unit text-sm font-medium text-gray-500 whitespace-nowrap\">\/{{ billingPriceUnitLabel }}<\/span>\n                                            <\/span>\n                                        <\/transition>\n                                    <\/span>\n                                <\/div>\n\n                                <button\n                                        type=\"button\"\n                                        class=\"ggs-card-select w-full py-3.5 rounded-xl font-bold text-base transition-all cursor-pointer\"\n                                        :class=\"plan.isPopular ? 'ggs-select-primary bg-blue-600 text-white hover:bg-blue-700 shadow-md hover:shadow-lg' : 'ggs-select-secondary bg-blue-50 text-blue-700 hover:bg-blue-100'\"\n                                        @click=\"selectProduct(plan)\"\n                                >\n                                    {{ copy.select }}\n                                <\/button>\n\n                                <button\n                                        type=\"button\"\n                                        class=\"ggs-compare-toggle group\"\n                                        :aria-pressed=\"selectedForCompare.includes(String(plan.compareId)) ? 'true' : 'false'\"\n                                        @click=\"toggleCompare(plan)\"\n                                >\n                                    <span\n                                            class=\"ggs-compare-box transition-colors\"\n                                            :class=\"selectedForCompare.includes(String(plan.compareId)) ? 'ggs-compare-box--active bg-blue-600 text-white' : 'ggs-compare-box--inactive border-2 border-gray-300 group-hover:border-blue-400'\"\n                                    >\n                                        <svg v-if=\"selectedForCompare.includes(String(plan.compareId))\" viewbox=\"0 0 24 24\" class=\"w-3.5 h-3.5 fill-current\" aria-hidden=\"true\">\n                                            <path d=\"M20.285 6.70997L9.75 17.245L3.71497 11.21L4.77563 10.1493L9.75 15.1237L19.2243 5.64931L20.285 6.70997Z\"><\/path>\n                                        <\/svg>\n                                    <\/span>\n                                    <span class=\"text-sm font-medium text-gray-600 group-hover:text-gray-900 transition-colors\">{{ copy.compare }}<\/span>\n                                <\/button>\n\n                                <div\n                                        class=\"ggs-deductible-row\"\n                                        :class=\"plan.hasOptionTabs ? '' : 'ggs-deductible-row--empty'\"\n                                >\n                                    <div v-if=\"plan.hasOptionTabs\" class=\"ggs-deductible-wrap w-full bg-gray-100 p-1 rounded-xl flex\">\n                                        <button\n                                                v-for=\"option in plan.optionTabs\"\n                                                :key=\"(plan.seriesKey || plan.compareId) + '-option-' + option\"\n                                                type=\"button\"\n                                                class=\"ggs-deductible-tab flex-1 text-sm font-bold rounded-lg transition-all cursor-pointer\"\n                                                :class=\"plan.selectedOption === option ? 'ggs-deductible-active bg-yellow-400 text-gray-900 shadow-sm' : 'ggs-deductible-inactive text-gray-500 hover:text-gray-700'\"\n                                                @click=\"setSeriesOption(plan.seriesKey, option)\"\n                                        >\n                                            {{ getSeriesOptionLabel(option) }}\n                                        <\/button>\n                                    <\/div>\n                                    <div v-else class=\"w-full\"><\/div>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"ggs-card-features px-6 pb-8 flex-1\">\n                                <div\n                                        v-for=\"feature in visibleFeatures\"\n                                        :key=\"(plan.seriesKey || plan.compareId) + '-' + feature.key\"\n                                        class=\"ggs-card-feature-row h-16 flex flex-col items-center justify-center border-b border-gray-50 last:border-0\"\n                                >\n                                    <div class=\"ggs-mobile-feature-label flex items-center gap-1 mb-1 relative group\">\n                                        <span class=\"text-xs text-gray-400 font-medium\">{{ feature.label }}<\/span>\n                                        <svg v-if=\"feature.tooltip\" viewbox=\"0 0 24 24\" class=\"w-3 h-3 text-gray-400 fill-current\" aria-hidden=\"true\">\n                                            <path d=\"M12 2.25C6.61522 2.25 2.25 6.61522 2.25 12C2.25 17.3848 6.61522 21.75 12 21.75C17.3848 21.75 21.75 17.3848 21.75 12C21.75 6.61522 17.3848 2.25 12 2.25ZM12 7.5C12.6213 7.5 13.125 8.00368 13.125 8.625C13.125 9.24632 12.6213 9.75 12 9.75C11.3787 9.75 10.875 9.24632 10.875 8.625C10.875 8.00368 11.3787 7.5 12 7.5ZM13.5 16.5H10.5V15H11.25V11.25H10.5V9.75H12.75V15H13.5V16.5Z\"><\/path>\n                                        <\/svg>\n                                        <div v-if=\"feature.tooltip\" class=\"absolute bottom-full left-1\/2 -translate-x-1\/2 mb-2 w-64 p-3 bg-gray-800 text-white text-xs leading-relaxed rounded-lg shadow-xl opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50 pointer-events-none\">\n                                            <div class=\"absolute -bottom-1.5 left-1\/2 -translate-x-1\/2 border-x-4 border-x-transparent border-t-4 border-t-gray-800\"><\/div>\n                                            {{ feature.tooltip }}\n                                        <\/div>\n                                    <\/div>\n\n                                    <div class=\"ggs-card-feature-value-wrap\">\n                                        <transition name=\"ggs-value-fade\" mode=\"out-in\">\n                                            <a\n                                                    v-if=\"feature.key === 'network' && hasProviderNetworkLink(getFeatureDisplay(plan, feature.key))\"\n                                                    :key=\"'network-link-' + getFeatureTransitionKey(plan, feature.key)\"\n                                                    :href=\"getProviderNetworkLink(getFeatureDisplay(plan, feature.key))\"\n                                                    target=\"_blank\"\n                                                    rel=\"noopener noreferrer\"\n                                                    class=\"ggs-transition-item ggs-card-feature-value text-sm font-bold w-full text-center text-blue-600 underline decoration-blue-200 underline-offset-4 hover:text-blue-700\"\n                                            >\n                                                {{ getFeatureDisplay(plan, feature.key) }}\n                                            <\/a>\n                                            <span\n                                                    v-else\n :key=\"'feature-text-' + getFeatureTransitionKey(plan, feature.key)\"\n                                                    class=\"ggs-transition-item ggs-card-feature-value text-sm font-bold w-full text-center\"\n                                                    :class=\"feature.key === 'network' ? 'text-blue-600 underline decoration-blue-200 underline-offset-4' : 'text-gray-800'\"\n                                            >\n                                                {{ getFeatureDisplay(plan, feature.key) }}\n                                            <\/span>\n                                        <\/transition>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n\n                            <div class=\"p-6 bg-gray-50\/50 rounded-b-3xl border-t border-gray-50 flex flex-wrap justify-center gap-4\">\n                                <a\n                                        v-if=\"hasBrochureLink(plan)\"\n                                        href=\"#brochure\"\n                                        class=\"ggs-force-link ggs-footer-link text-sm font-semibold text-blue-600 flex items-center gap-1.5 hover:text-blue-800\"\n                                        @click.prevent=\"openBrochure(plan)\"\n                                >\n                                    <svg viewbox=\"0 0 24 24\" class=\"ggs-footer-icon w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                        <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"><\/path>\n                                        <path d=\"M14 2v6h6\"><\/path>\n                                        <path d=\"M16 13H8\"><\/path>\n                                        <path d=\"M16 17H8\"><\/path>\n                                        <path d=\"M10 9H8\"><\/path>\n                                    <\/svg>\n                                    {{ copy.brochure }}\n                                <\/a>\n                                <a\n                                        v-if=\"hasMedicationGuideLink(plan)\"\n                                        href=\"#medication-guide\"\n                                        class=\"ggs-force-link ggs-footer-link text-sm font-semibold text-blue-600 flex items-center gap-1.5 hover:text-blue-800\"\n                                        @click.prevent=\"openMedicationGuide(plan)\"\n                                >\n                                    <svg viewbox=\"0 0 24 24\" class=\"ggs-footer-icon w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                        <path d=\"m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z\"><\/path>\n                                        <path d=\"m8.5 8.5 7 7\"><\/path>\n                                    <\/svg>\n                                    {{ copy.medicationGuide }}\n                                <\/a>\n                                <a\n                                        v-if=\"hasPolicyLink(plan)\"\n                                        href=\"#policy\"\n                                        class=\"ggs-force-link ggs-footer-link text-sm font-semibold text-blue-600 flex items-center gap-1.5 hover:text-blue-800\"\n                                        @click.prevent=\"openPolicy(plan)\"\n                                >\n                                    <svg viewbox=\"0 0 24 24\" class=\"ggs-footer-icon w-4 h-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                        <path d=\"M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V6l8-3 8 3z\"><\/path>\n                                    <\/svg>\n                                    {{ copy.policy }}\n                                <\/a>\n                            <\/div>\n                        <\/article>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <div v-if=\"filteredProducts.length\" class=\"mt-10 flex justify-center\">\n            <button\n                    type=\"button\"\n                    class=\"ggs-view-more-btn inline-flex items-center gap-2 rounded-full bg-blue-50 px-6 py-3 text-sm font-bold text-blue-700 transition-colors hover:bg-blue-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\"\n                    @click=\"handleViewMoreToggle\"\n            >\n                <span>{{ viewMore ? copy.viewLess : copy.viewMore }}<\/span>\n                <svg v-if=\"viewMore\" viewbox=\"0 0 24 24\" class=\"h-4 w-4 fill-current\" aria-hidden=\"true\">\n                    <path d=\"M12 8.46967L18.5303 15L17.4697 16.0607L12 10.591L6.53033 16.0607L5.46967 15L12 8.46967Z\"><\/path>\n                <\/svg>\n                <svg v-else viewbox=\"0 0 24 24\" class=\"h-4 w-4 fill-current\" aria-hidden=\"true\">\n                    <path d=\"M12 15.5303L5.46967 9L6.53033 7.93934L12 13.409L17.4697 7.93934L18.5303 9L12 15.5303Z\"><\/path>\n                <\/svg>\n            <\/button>\n        <\/div>\n\n        <section v-if=\"showWaiverGuide\" class=\"ggs-waiver-guide-section\" aria-label=\"Waiver Step Guide\">\n            <div class=\"ggs-waiver-guide-shell\">\n                <div class=\"ggs-waiver-guide-glow\" aria-hidden=\"true\"><\/div>\n                <div class=\"ggs-waiver-guide-heading\">\n                    <h2 class=\"ggs-waiver-guide-title\">\n                        <span>{{ waiverGuideTitle }}<\/span>\n                        <span v-if=\"waiverGuideHighlightText\" class=\"ggs-waiver-guide-highlight\">{{ waiverGuideHighlightText }}<\/span>\n                    <\/h2>\n                    <p v-if=\"waiverGuideSubtitle\" class=\"ggs-waiver-guide-subtitle\">{{ waiverGuideSubtitle }}<\/p>\n                <\/div>\n\n                <div class=\"ggs-waiver-guide-steps\">\n                    <div class=\"ggs-waiver-guide-line\" aria-hidden=\"true\"><\/div>\n                    <button\n                            v-for=\"(step, index) in waiverGuideSteps\"\n                            :key=\"step.key\"\n                            type=\"button\"\n                            class=\"ggs-waiver-guide-step\"\n                            :class=\"isWaiverGuideStepLocked(index) ? 'ggs-waiver-guide-step--locked' : ''\"\n                            @click=\"setActiveWaiverGuideStep(index)\"\n                    >\n                        <span\n                                class=\"ggs-waiver-guide-step-number\"\n                                :class=\"[                                    index === activeWaiverGuideStepIndex ? 'ggs-waiver-guide-step-number--active' : '',                                    isWaiverGuideStepLocked(index) ? 'ggs-waiver-guide-step-number--locked' : ''                                ]\"\n                        >\n                            <svg v-if=\"isWaiverGuideStepLocked(index)\" viewbox=\"0 0 24 24\" class=\"ggs-waiver-guide-step-lock\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                <rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"><\/rect>\n                                <path d=\"M8 11V8a4 4 0 1 1 8 0v3\"><\/path>\n                            <\/svg>\n                            {{ step.step }}\n                        <\/span>\n                        <span class=\"ggs-waiver-guide-step-title\" :class=\"index === activeWaiverGuideStepIndex ? 'ggs-waiver-guide-step-title--active' : ''\">{{ step.title }}<\/span>\n                        <span v-if=\"step.subtitle || step.content\" class=\"ggs-waiver-guide-step-copy\">\n                            <template v-if=\"step.subtitle\">{{ step.subtitle }}<\/template>\n                            <template v-else>{{ step.content }}<\/template>\n                        <\/span>\n                    <\/button>\n                <\/div>\n\n                <div v-if=\"activeWaiverGuideStep\" class=\"ggs-waiver-guide-detail\">\n                    <h3 class=\"ggs-waiver-guide-detail-title\">Step {{ activeWaiverGuideStep.step }}: {{ activeWaiverGuideStep.title }}<\/h3>\n                    <p class=\"ggs-waiver-guide-detail-copy\">{{ activeWaiverGuideStep.content || activeWaiverGuideStep.subtitle }}<\/p>\n                <\/div>\n\n                <div v-if=\"waiverGuideLink.text && waiverGuideLink.url\" class=\"ggs-waiver-guide-footer\">\n                    <a :href=\"waiverGuideLink.url\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"ggs-waiver-guide-link\">\n                        <span class=\"ggs-module-icon ggs-module-icon--sm text-blue-600\" v-html=\"getModuleIconSvg('document')\"><\/span>\n                        <span>{{ waiverGuideLink.text }}<\/span>\n                        <svg viewbox=\"0 0 24 24\" class=\"ggs-waiver-guide-link-arrow\" aria-hidden=\"true\">\n                            <path fill=\"currentColor\" d=\"M13.4697 5.46967L12.409 6.53033L17.1287 11.25H4.5V12.75H17.1287L12.409 17.4697L13.4697 18.5303L20 12L13.4697 5.46967Z\"><\/path>\n                        <\/svg>\n                    <\/a>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section v-if=\"faqItems.length\" class=\"ggs-faq-section\">\n            <div class=\"ggs-faq-shell\">\n                <h2 class=\"ggs-faq-title\">{{ copy.faqTitle }}<\/h2>\n                <p class=\"ggs-faq-description\">{{ copy.faqDescription }}<\/p>\n\n                <div class=\"ggs-faq-list\">\n                    <article\n                            v-for=\"(item, index) in faqItems\"\n                            :key=\"'faq-' + index\"\n                            class=\"ggs-faq-item\"\n                            :class=\"openedFaqIndexes.includes(index) ? 'ggs-faq-item--open' : 'ggs-faq-item--closed'\"\n                    >\n                        <button\n                                type=\"button\"\n                                class=\"ggs-faq-trigger\"\n                                :aria-expanded=\"openedFaqIndexes.includes(index) ? 'true' : 'false'\"\n                                @click=\"toggleFaq(index)\"\n                        >\n                            <div class=\"flex items-center gap-3 min-w-0\">\n                                <h3 class=\"ggs-faq-question\">{{ item.title }}<\/h3>\n                            <\/div>\n                            <svg viewbox=\"0 0 24 24\" class=\"ggs-faq-icon\" :class=\"openedFaqIndexes.includes(index) ? 'ggs-faq-icon--open' : ''\" aria-hidden=\"true\">\n                                <path fill=\"currentColor\" d=\"M12 15.5303L5.46967 9L6.53033 7.93934L12 13.409L17.4697 7.93934L18.5303 9L12 15.5303Z\"><\/path>\n                            <\/svg>\n                        <\/button>\n                        <div v-if=\"openedFaqIndexes.includes(index)\" class=\"ggs-faq-answer\" v-html=\"item.content\"><\/div>\n                    <\/article>\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/main>\n\n    <div v-if=\"showWaiverGuideUnlockModal\" class=\"ggs-login-overlay\" @click.self=\"closeWaiverGuideUnlockModal\">\n        <div class=\"ggs-unlock-dialog\">\n            <button type=\"button\" class=\"ggs-login-close ggs-unlock-close\" @click=\"closeWaiverGuideUnlockModal\" :aria-label=\"copy.close\">\n                <svg viewbox=\"0 0 24 24\" aria-hidden=\"true\">\n                    <path fill=\"currentColor\" d=\"M6.4 5.34 12 10.94l5.6-5.6 1.06 1.06-5.6 5.6 5.6 5.6-1.06 1.06-5.6-5.6-5.6 5.6-1.06-1.06 5.6-5.6-5.6-5.6Z\"><\/path>\n                <\/svg>\n            <\/button>\n\n            <div class=\"ggs-unlock-icon\">\n                <span class=\"ggs-module-icon\" v-html=\"getModuleIconSvg('lock')\"><\/span>\n            <\/div>\n            <h2 class=\"ggs-unlock-title\">{{ copy.unlockNextStepsTitle }}<\/h2>\n            <p class=\"ggs-unlock-copy\">{{ copy.unlockNextStepsDescription }}<\/p>\n\n            <div class=\"ggs-unlock-actions\">\n                <button type=\"button\" class=\"ggs-login-submit ggs-unlock-primary\" :disabled=\"waiverGuideUnlockLoading\" @click=\"handleWaiverGuidePurchasedConfirm\">\n                    {{ waiverGuideUnlockLoading ? copy.unlockNextStepsChecking : copy.unlockNextStepsConfirm }}\n                <\/button>\n                <button type=\"button\" class=\"ggs-unlock-secondary\" @click=\"handleWaiverGuideViewPlans\">\n                    {{ copy.unlockNextStepsLater }}\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div v-if=\"selectedCompareProducts.length\" class=\"ggs-compare-fab-wrap ggs-compare-fab-wrap--floating fixed bottom-8 right-4 z-[110] sm:right-8\">\n        <button\n                type=\"button\"\n                class=\"ggs-compare-fab ggs-fade-up inline-flex items-center gap-3 rounded-full bg-slate-950 px-6 py-4 text-sm font-bold text-white shadow-2xl transition-all duration-200 hover:-translate-y-0.5 hover:bg-slate-800\"\n                @click=\"showCompareModal = true\"\n        >\n            <span class=\"ggs-compare-fab-count flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs text-white\">{{ selectedCompareProducts.length }}<\/span>\n            <span class=\"ggs-compare-fab-label\">{{ copy.compareSelected }}<\/span>\n            <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 fill-current\" aria-hidden=\"true\">\n                <path d=\"M12.9697 5.46967L11.909 6.53033L16.6287 11.25H4.5V12.75H16.6287L11.909 17.4697L12.9697 18.5303L19.5 12L12.9697 5.46967Z\"><\/path>\n            <\/svg>\n        <\/button>\n    <\/div>\n\n    <div v-if=\"showCompareModal\" class=\"fixed inset-0 z-[140] flex items-center justify-center p-4 sm:p-6\">\n        <div class=\"absolute inset-0 bg-gray-900\/60 backdrop-blur-sm transition-opacity\" @click=\"showCompareModal = false\"><\/div>\n        <div class=\"relative flex max-h-[90vh] w-full max-w-5xl flex-col overflow-hidden rounded-2xl bg-white shadow-2xl\" @click=\"clearCompareTooltip\">\n            <div class=\"flex flex-col gap-4 border-b border-gray-100 bg-white px-6 py-5 sm:flex-row sm:items-center sm:justify-between\">\n                <div>\n                    <h2 class=\"ggs-modal-title text-xl font-bold text-gray-900\">{{ copy.comparePlans }}<\/h2>\n                    <p class=\"mt-1 text-sm text-gray-500\">{{ copy.compareDescription }}<\/p>\n                <\/div>\n                <button\n                        type=\"button\"\n                        class=\"ggs-compare-close transition-colors\"\n                        @click=\"showCompareModal = false\"\n                        :aria-label=\"copy.close\"\n                >\n                    <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 fill-current\" aria-hidden=\"true\">\n                        <path d=\"M6.53033 5.46967L5.46967 6.53033L10.9393 12L5.46967 17.4697L6.53033 18.5303L12 13.0607L17.4697 18.5303L18.5303 17.4697L13.0607 12L18.5303 6.53033L17.4697 5.46967L12 10.9393L6.53033 5.46967Z\"><\/path>\n                    <\/svg>\n                <\/button>\n            <\/div>\n\n            <div class=\"ggs-compare-table flex-1 overflow-auto bg-white\">\n                <div class=\"ggs-compare-grid\">\n                    <div class=\"ggs-compare-grid-row ggs-compare-grid-row--head\">\n                        <div class=\"ggs-compare-grid-cell ggs-compare-feature-head border-b border-gray-200 bg-gray-50\/80 p-4 text-xs font-bold uppercase tracking-[0.18em] text-gray-500\">\n                            {{ copy.features }}\n                        <\/div>\n                        <div\n                                v-for=\"(product, index) in compareSlots\"\n                                :key=\"'compare-head-' + index\"\n                                class=\"ggs-compare-grid-cell ggs-compare-head-cell border-b border-gray-200 p-4 text-center\"\n                                :class=\"product ? 'bg-white\/95' : 'bg-gray-50\/30'\"\n                        >\n                            <div v-if=\"product\" class=\"ggs-compare-head-inner\">\n                                <h3 class=\"ggs-compare-head-title mb-1 text-base font-bold text-gray-900\">{{ normalizePlanName(product.compareName || product.name) }}<\/h3>\n                                <div class=\"mb-3 text-xl font-extrabold text-red-600\">\n                                    <span class=\"ggs-din\">${{ formatPrice(displayPrice(product)) }}<\/span>\n                                    <span v-if=\"billingPriceUnitShortLabel\" class=\"text-xs font-medium text-gray-500 whitespace-nowrap\">\/{{ billingPriceUnitShortLabel }}<\/span>\n                                <\/div>\n                                <button\n                                        type=\"button\"\n                                        class=\"ggs-compare-select ggs-select-primary rounded-lg bg-blue-600 px-4 py-2 text-sm font-semibold text-white transition-colors hover:bg-blue-700\"\n                                        @click=\"selectProduct(product)\"\n                                >\n                                    {{ copy.select }}\n                                <\/button>\n                            <\/div>\n                            <div v-else class=\"ggs-compare-head-inner\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div\n                            v-for=\"feature in compareFeatures\"\n                            :key=\"'compare-row-' + feature.key\"\n                            class=\"ggs-compare-grid-row transition-colors hover:bg-gray-50\/80\"\n                            :class=\"isFeatureDifferent(feature.key) ? 'bg-yellow-100\/50' : 'bg-white'\"\n                    >\n                        <div class=\"ggs-compare-grid-cell border-r border-gray-50 p-4 text-sm font-medium text-gray-700\">\n                            <div\n                                    class=\"ggs-compare-feature-label-wrap\"\n                                    @mouseenter=\"setHoveredCompareTooltip(feature.key)\"\n                                    @mouseleave=\"clearHoveredCompareTooltip(feature.key)\"\n                            >\n                                <span>{{ feature.label }}<\/span>\n                                <button\n                                        v-if=\"feature.tooltip\"\n                                        type=\"button\"\n                                        class=\"ggs-compare-tooltip-trigger\"\n                                        :aria-expanded=\"isCompareTooltipVisible(feature.key) ? 'true' : 'false'\"\n                                        :aria-label=\"lang === 'zh' ? `${feature.label} \u8bf4\u660e` : `More info about ${feature.label}`\"\n                                        @click.stop=\"toggleCompareTooltip(feature.key)\"\n                                >\n                                    ?\n                                <\/button>\n                                <div v-if=\"feature.tooltip && isCompareTooltipVisible(feature.key)\" class=\"ggs-compare-tooltip-panel\" @click.stop>\n                                    <span class=\"ggs-compare-tooltip-arrow\" aria-hidden=\"true\"><\/span>\n                                    {{ feature.tooltip }}\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                        <div\n                                v-for=\"(product, index) in compareSlots\"\n                                :key=\"'compare-cell-' + feature.key + '-' + index\"\n                                class=\"ggs-compare-grid-cell border-r border-gray-50 p-4 text-center text-sm last:border-r-0\"\n                                :class=\"product ? (isFeatureDifferent(feature.key) ? 'font-semibold text-gray-900' : 'text-gray-600') : 'bg-gray-50\/30'\"\n                        >\n                            <template v-if=\"product\">\n                                <a\n                                        v-if=\"feature.key === 'network' && hasProviderNetworkLink(getFeatureDisplay(product, feature.key))\"\n                                        :href=\"getProviderNetworkLink(getFeatureDisplay(product, feature.key))\"\n                                        target=\"_blank\"\n                                        rel=\"noopener noreferrer\"\n                                        class=\"text-blue-600 underline decoration-blue-200 underline-offset-4 hover:text-blue-700\"\n                                >\n                                    {{ getFeatureDisplay(product, feature.key) }}\n                                <\/a>\n                                <template v-else>\n                                    {{ getFeatureDisplay(product, feature.key) }}\n                                <\/template>\n                            <\/template>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div v-if=\"showPurchaseModal\" class=\"ggs-login-overlay\" @click.self=\"closePurchaseModal\">\n        <div class=\"ggs-login-dialog\">\n            <button type=\"button\" class=\"ggs-login-close\" @click=\"closePurchaseModal\" :aria-label=\"copy.close\">\n                <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 fill-current\" aria-hidden=\"true\">\n                    <path d=\"M6.53033 5.46967L5.46967 6.53033L10.9393 12L5.46967 17.4697L6.53033 18.5303L12 13.0607L17.4697 18.5303L18.5303 17.4697L13.0607 12L18.5303 6.53033L17.4697 5.46967L12 10.9393L6.53033 5.46967Z\"><\/path>\n                <\/svg>\n            <\/button>\n\n            <p class=\"ggs-login-eyebrow\">{{ copy.purchaseInfoTitle }}<\/p>\n            <div class=\"ggs-login-accent\" aria-hidden=\"true\"><\/div>\n            <h2 class=\"ggs-login-title\">{{ normalizePlanName(purchaseModalPlanName) }}<\/h2>\n\n            <div class=\"ggs-purchase-note\">\n                <p class=\"ggs-purchase-note-item\">{{ copy.purchaseInfoLineOne }}<\/p>\n                <p class=\"ggs-purchase-note-item\">{{ copy.purchaseInfoLineTwo }}<\/p>\n            <\/div>\n\n            <div v-if=\"schoolWaive.coverage_start_date\" class=\"ggs-purchase-date\">\n                <span class=\"text-sm font-semibold text-slate-500\">{{ copy.purchaseCoverageStart }}<\/span>\n                <span class=\"text-base font-bold text-slate-900\">{{ schoolWaive.coverage_start_date }}<\/span>\n            <\/div>\n\n            <button type=\"button\" class=\"ggs-force-link ggs-purchase-referral-toggle\" @click=\"showReferralFields = !showReferralFields\">\n                {{ copy.purchaseAddReferral }}\n            <\/button>\n\n            <div v-if=\"showReferralFields\" class=\"ggs-purchase-referral\">\n                <input\n                        v-model.trim=\"referralForm.email\"\n                        type=\"email\"\n                        class=\"ggs-login-input\"\n                        :placeholder=\"copy.purchaseEmail\"\n                        :style=\"referralForm.email ? (isReferralEmailValid ? { borderColor: '#60a5fa' } : { borderColor: '#f87171' }) : null\"\n                >\n                <input\n                        v-model.trim=\"referralForm.code\"\n                        type=\"text\"\n                        class=\"ggs-login-input\"\n                        :placeholder=\"copy.purchaseReferralCode\"\n                        :disabled=\"referralForm.email && !isReferralEmailValid\"\n                >\n                <p\n                        v-if=\"referralMessage\"\n                        class=\"ggs-referral-message\"\n                        :class=\"referralMessageType === 'success' ? 'ggs-referral-message--success' : 'ggs-referral-message--error'\"\n                >\n                    {{ referralMessage }}\n                <\/p>\n            <\/div>\n\n            <button type=\"button\" class=\"ggs-login-submit\" :disabled=\"purchaseSubmitting\" @click=\"submitPurchaseFlow\">\n                {{ purchaseSubmitting ? copy.purchaseSubmitting : copy.purchaseNext }}\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <div v-if=\"showLoginModal\" class=\"ggs-login-overlay\" @click.self=\"closeLoginModal\">\n        <div class=\"ggs-login-dialog\">\n            <button type=\"button\" class=\"ggs-login-close\" @click=\"closeLoginModal\" :aria-label=\"copy.close\">\n                <svg viewbox=\"0 0 24 24\" class=\"h-5 w-5 fill-current\" aria-hidden=\"true\">\n                    <path d=\"M6.53033 5.46967L5.46967 6.53033L10.9393 12L5.46967 17.4697L6.53033 18.5303L12 13.0607L17.4697 18.5303L18.5303 17.4697L13.0607 12L18.5303 6.53033L17.4697 5.46967L12 10.9393L6.53033 5.46967Z\"><\/path>\n                <\/svg>\n            <\/button>\n\n            <form @submit.prevent=\"handleLoginSubmit\" action=\"\">\n                <p class=\"ggs-login-eyebrow\">{{ mfa.active ? copy.loginMfaEyebrow : copy.loginReadyTitle }}<\/p>\n                <div class=\"ggs-login-accent\" aria-hidden=\"true\"><\/div>\n                <h2 class=\"ggs-login-title\">{{ mfa.active ? copy.loginMfaTitle : copy.loginEmailPrompt }}<\/h2>\n                <p v-if=\"mfa.active\" class=\"ggs-login-error\" style=\"color:#64748b;\">{{ copy.loginMfaDescription }}<\/p>\n\n                <div v-if=\"!mfa.active\" class=\"ggs-login-fields\">\n                    <input\n                            v-model.trim=\"loginForm.email\"\n                            type=\"email\"\n                            name=\"email\"\n                            autocomplete=\"email\"\n                            class=\"ggs-login-input\"\n                            :placeholder=\"copy.loginEmailPlaceholder\"\n                            @input=\"validateLoginEmail\"\n                    >\n\n                    <p v-if=\"loginErrors.emailMessage\" class=\"ggs-login-error\">{{ loginErrors.emailMessage }}<\/p>\n                    <p v-if=\"loginErrors.errorMessage\" class=\"ggs-login-error\">{{ loginErrors.errorMessage }}<\/p>\n\n                    <input\n                            v-if=\"emailSubmitted\"\n                            v-model=\"loginForm.password\"\n                            type=\"password\"\n                            name=\"password\"\n                            autocomplete=\"current-password\"\n                            class=\"ggs-login-input\"\n                            :placeholder=\"copy.loginPasswordPlaceholder\"\n                    >\n                <\/div>\n                <div v-else class=\"ggs-login-fields\">\n                    <input\n                            v-if=\"!mfa.useRecovery\"\n                            v-model.trim=\"mfa.code\"\n                            type=\"text\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"one-time-code\"\n                            maxlength=\"8\"\n                            class=\"ggs-login-input\"\n                            :placeholder=\"copy.loginMfaCodePlaceholder\"\n                    >\n                    <input\n                            v-else\n v-model.trim=\"mfa.recoveryCode\"\n                            type=\"text\"\n                            autocomplete=\"one-time-code\"\n                            class=\"ggs-login-input\"\n                            :placeholder=\"copy.loginMfaRecoveryPlaceholder\"\n                    >\n                    <p v-if=\"mfa.error\" class=\"ggs-login-error\">{{ mfa.error }}<\/p>\n                <\/div>\n\n                <a v-if=\"emailSubmitted && !mfa.active\" href=\"\/zh\/forget-password\/\" class=\"ggs-force-link ggs-login-forgot\">\n                    {{ copy.loginForgotPassword }}\n                <\/a>\n                <a v-if=\"mfa.active\" href=\"#\" class=\"ggs-force-link ggs-login-forgot\" @click.prevent=\"mfa.useRecovery = !mfa.useRecovery; mfa.error = ''\">\n                    {{ mfa.useRecovery ? copy.loginMfaUseCode : copy.loginMfaUseRecovery }}\n                <\/a>\n                <a v-if=\"mfa.active\" href=\"#\" class=\"ggs-force-link ggs-login-forgot\" style=\"margin-left:12px;\" @click.prevent=\"cancelMfa\">\n                    {{ copy.loginMfaBack }}\n                <\/a>\n\n                <button type=\"submit\" class=\"ggs-login-submit\" :disabled=\"loginLoading || mfa.submitting\">\n                    {{ mfa.active ? (mfa.submitting ? copy.loginMfaVerifying : copy.loginMfaSubmit) : (loginLoading ? (emailSubmitted ? copy.loginLoggingIn : copy.loginCheckingEmail) : (emailSubmitted ? copy.loginSignIn : copy.loginGetStarted)) }}\n                <\/button>\n            <input type=\"hidden\" name=\"trp-form-language\" value=\"zh\"\/><\/form>\n        <\/div>\n    <\/div>\n\n<\/div>\n\n<script>\n    const { createApp, ref, computed, onMounted, reactive, watch, watchEffect, nextTick } = Vue;\n\n    createApp({\n        setup() {\n            const apiUrl = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/insurance\/baoxian\/';\n            const apiStudentEmailExist = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/student\/email\/email_exist';\n            const apiStudentLogin = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/student\/user\/login';\n            const apiStudentMfaVerify = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/auth\/mfa\/verify';\n            const apiStudentUserInfo = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/student\/user\/userinfo';\n            const quoteApiUrl = 'https:\/\/agent.goglobalsafe.com\/api\/v1\/Enrollment\/quote';\n            const fallbackHttpClient = axios.create({\n                headers: {\n                    'X-Authentication-Key': ' HSxZK8nHniLzZtv0Qtfk87wvNvXpJZ5K',\n                    'Accept': 'application\/json'\n                }\n            });\n            fallbackHttpClient.interceptors.request.use((config) => {\n                const token = localStorage.getItem('student_token');\n                if (token) {\n                    config.headers.Authorization = `Bearer ${token}`;\n                }\n                return config;\n            });\n            const enrollmentPath = '\/us-enrollment\/';\n            const searchParams = new URLSearchParams(window.location.search);\n            const initialSchoolSlug = (window.us_config && window.us_config.school_slug) || searchParams.get('school_slug') || '';\n            const initialSchoolId = searchParams.get('school_id') ? searchParams.get('school_id').split('\/')[0] : null;\n            const lang = window.location.pathname.includes('\/zh') ? 'zh' : 'en';\n            const yisihuiReviewCode = 'S25CNYSH-backend';\n            const yisihuiSourceLabel = '\u6613\u601d\u6c47';\n            const blogTrackingSource = 'blog';\n            const getBlogTrackingId = () => {\n                const explicitBlogId = String(searchParams.get('blog_id') || '').trim();\n                if (\/^\\d+$\/.test(explicitBlogId)) {\n                    return explicitBlogId;\n                }\n                const storedBlogId = String(localStorage.getItem('blog_id') || '').trim();\n                if (\/^\\d+$\/.test(storedBlogId)) {\n                    return storedBlogId;\n                }\n                return '';\n            };\n            const isUscSchoolFlow = computed(() => {\n                const currentSchoolId = String(schoolId.value || initialSchoolId || '').split('\/')[0].trim();\n                if (currentSchoolId === '1725') {\n                    return true;\n                }\n                const currentSchoolName = String(localStorage.getItem('school_id') || schoolName.value || '').toLowerCase();\n                return currentSchoolName.includes('university of southern california');\n            });\n            const isYisihuiReviewMode = () => {\n                if (isUscSchoolFlow.value) {\n                    return false;\n                }\n                if (String(searchParams.get('source') || '').trim() === blogTrackingSource || String(localStorage.getItem('blog_source') || '').trim() === blogTrackingSource) {\n                    return false;\n                }\n                return String(localStorage.getItem('yisihui') || '').trim() === yisihuiReviewCode\n                    || String(searchParams.get('yisihui') || '').trim() === yisihuiReviewCode;\n            };\n            const syncYisihuiSource = () => {\n                const yisihuiValue = String(searchParams.get('yisihui') || '').trim();\n                if (yisihuiValue === yisihuiReviewCode) {\n                    localStorage.setItem('yisihui', yisihuiReviewCode);\n                    localStorage.setItem('yisihui_source', yisihuiSourceLabel);\n                    return;\n                }\n                if (yisihuiValue === 'S25CNYSH') {\n                    localStorage.removeItem('yisihui');\n                    localStorage.setItem('yisihui_source', yisihuiSourceLabel);\n                    return;\n                }\n                localStorage.removeItem('yisihui');\n                localStorage.removeItem('yisihui_source');\n            };\n            syncYisihuiSource();\n            const syncBlogTracking = () => {\n                const blogId = getBlogTrackingId();\n                const blogSource = String(searchParams.get('source') || '').trim();\n                if (blogId) {\n                    localStorage.setItem('blog_id', blogId);\n                }\n                if (blogSource === blogTrackingSource || blogId) {\n                    localStorage.setItem('blog_source', blogTrackingSource);\n                }\n            };\n            syncBlogTracking();\n\n            const directPayProductIds = [20, 22, 23, 24, 27];\n            const ageRange = { min: 17, max: 45 };\n            const maxComparePlans = 3;\n\n            const translations = {\n                zh: {\n                    heroBadge: '\u5b66\u6821\u4fdd\u9669\u65b9\u6848\u5bf9\u6bd4',\n                    heroTitleSuffix: ' \u4fdd\u9669\u65b9\u6848',\n                    waiveAndSave: 'Waive \u5e76\u8282\u7701',\n                    refundGuarantee: 'Waive \u5931\u8d25\u53ef 100% \u9000\u6b3e',\n                    refundPolicyDetails: '\u9000\u6b3e\u653f\u7b56\u8be6\u60c5',\n                    startingAt: '\u6700\u4f4e\u6708\u4ed8',\n                    startingAtDescription: '\u4ef7\u683c\u6765\u81ea quote \u63a5\u53e3\uff0c\u4f1a\u968f\u7740 DOB \u548c\u5b66\u6821\u8981\u6c42\u5468\u671f\u81ea\u52a8\u66f4\u65b0\u3002',\n                    schoolPlanPrice: '\u5b66\u6821\u5b98\u65b9\u4ef7\u683c',\n                    syncingSchoolRules: '\u5b66\u6821\u89c4\u5219\u4e0e\u4fdd\u8d39\u4fe1\u606f\u5df2\u540c\u6b65\u5230\u5f53\u524d\u65b0\u6837\u5f0f\u9875\u9762\u3002',\n                    saveUpTo: '\u6700\u591a\u53ef\u8282\u7ea6',\n                    saveALot: '\u80fd\u7701\u5f88\u591a',\n                    importantInfo: '\u6743\u76ca\u4fe1\u606f',\n                    importantInfoSubtitle: '\u4ece\u539f\u6709\u4ea7\u54c1\u63a5\u53e3\u540c\u6b65\u7684\u5173\u952e\u6295\u4fdd\u4e0e waive \u4fe1\u606f',\n                    schoolRequiredPeriod: '\u5b66\u6821\u8981\u6c42\u7684\u8986\u76d6\u671f\u9650',\n                    waiveDeadline: '\u63d0\u4ea4\u5b66\u6821 waive \u622a\u6b62\u65e5\u671f',\n                    waiverFormDelivery: '\u6295\u4fdd\u540e\u8d44\u6599\u4ea4\u4ed8',\n                    waiverFormDescription: '\u8d2d\u4e70\u5b8c\u6210\u540e\uff0c\u76f8\u5173\u4fdd\u5355\u6587\u4ef6\u548c\u540e\u7eed\u9700\u8981\u7684 waive \u6750\u6599\u4f1a\u6309\u7167\u65e2\u6709\u6d41\u7a0b\u7ee7\u7eed\u5904\u7406\u3002',\n                    dynamicPricing: 'Quote \u5b9e\u65f6\u62a5\u4ef7',\n                    dynamicPricingDescription: '\u5f53\u524d\u9875\u9762\u4f7f\u7528\u548c\u8d2d\u4e70\u9875\u4e00\u81f4\u7684 quote \u63a5\u53e3\u8fd4\u56de\u4ef7\u683c\uff0c\u4e0d\u518d\u4f7f\u7528\u524d\u7aef age_ranges \u8ba1\u7b97\u3002',\n                    coveragePeriodBanner: '\u5b66\u6821\u8981\u6c42\u7684\u4fdd\u9669\u751f\u6548\u533a\u95f4\u4f1a\u5f71\u54cd\u5b9e\u9645\u5c55\u793a\u4ef7\u683c\uff0c\u8bf7\u5728\u8d2d\u4e70\u524d\u786e\u8ba4\u8be5\u65f6\u95f4\u6bb5\u3002',\n                    deadlineBanner: '\u8bf7\u5728\u5b66\u6821\u89c4\u5b9a\u7684 waive deadline \u524d\u5b8c\u6210\u8d2d\u4e70\u5e76\u63d0\u4ea4\u6240\u9700\u6750\u6599\u3002',\n                    deliveryBanner: '\u5f53\u524d\u65b0\u9875\u9762\u53ea\u6362\u4e86\u524d\u7aef\u6837\u5f0f\uff0c\u4fdd\u5355\u8d44\u6599\u4ea4\u4ed8\u548c\u540e\u7eed\u5904\u7406\u4ecd\u6cbf\u7528\u73b0\u6709\u6d41\u7a0b\u3002',\n                    ageBanner: '\u586b\u5199\u6216\u4fee\u6539 DOB \u540e\uff0c\u4ea7\u54c1\u4ef7\u683c\u4f1a\u91cd\u65b0\u8bf7\u6c42 quote \u63a5\u53e3\u3002',\n                    monthly: '\u6309\u6708',\n                    yearly: '\u6309\u5e74',\n                    schoolPrice: '\u8986\u76d6\u671f\u4ef7\u683c',\n                    toggleBilling: '\u5207\u6362\u6309\u6708\u4e0e\u6309\u5e74\u4ef7\u683c',\n                    age: '\u5e74\u9f84',\n                    dob: '\u51fa\u751f\u65e5\u671f',\n                    datePlaceholder: 'YYYY\/MM\/DD',\n                    pricingHint: '\u4ef7\u683c\u5b9e\u65f6\u66f4\u65b0',\n                    month: '\u6708',\n                    year: '\u5e74',\n                    monthShort: '\u6708',\n                    yearShort: '\u5e74',\n                    select: '\u9009\u62e9\u65b9\u6848',\n                    compare: '\u52a0\u5165\u5bf9\u6bd4',\n                    brochure: '\u7b80\u4ecb',\n                    policy: '\u6761\u6b3e',\n                    medicationGuide: '\u7528\u836f\u6307\u5357',\n                    mostPopular: '\u63a8\u8350',\n                    fallGraduates: '\u79cb\u5b63\u6bd5\u4e1a\u751f',\n                    viewMore: '\u67e5\u770b\u66f4\u591a\u4fdd\u969c',\n                    viewLess: '\u6536\u8d77\u4fdd\u969c',\n                    compareSelected: '\u5bf9\u6bd4\u5df2\u9009\u65b9\u6848',\n                    comparePlans: '\u65b9\u6848\u5bf9\u6bd4',\n                    compareDescription: '\u8be6\u7ec6\u5e76\u6392\u5bf9\u6bd4',\n                    close: '\u5173\u95ed',\n                    faqTitle: '\u5e38\u89c1\u95ee\u9898\u89e3\u7b54',\n                    faqDescription: '\u4ee5\u4e0b\u95ee\u7b54\u5185\u5bb9\u6765\u81ea\u539f\u63a5\u53e3\u8fd4\u56de\u7684 FAQ \u6570\u636e\u3002',\n                    purchaseInfoTitle: '\u91cd\u8981\u63d0\u793a',\n                    purchaseInfoLineOne: '1. \u82e5\u4f60\u8fd8\u6ca1\u6709\u7f8e\u56fd\u7535\u8bdd\uff0c\u53ef\u4ee5\u5148\u968f\u673a\u586b\u5199\uff0c\u4e0d\u5f71\u54cd\u4fdd\u5355\u548c waive\uff0c\u4e4b\u540e\u5230\u7f8e\u56fd\u518d\u4fee\u6539\u5373\u53ef\u3002',\n                    purchaseInfoLineTwo: '2. \u7f8e\u56fd\u5730\u5740\u53ef\u4ee5\u586b\u5199\u5b66\u6821\u5730\u5740\u6216\u4f60\u81ea\u5df1\u7684\u4f4f\u5740\u3002',\n                    purchaseCoverageStart: '\u8981\u6c42\u7684 coverage start date \u4e3a',\n                    purchaseNext: '\u4e0b\u4e00\u6b65',\n                    purchaseEmail: '\u4f60\u7684\u90ae\u7bb1',\n                    purchaseReferralCode: '\u63a8\u8350\u7801',\n                    purchaseAddReferral: '\u6211\u6709\u63a8\u8350\u7801',\n                    purchaseSubmitting: '\u63d0\u4ea4\u4e2d...',\n                    referralCodeInvalid: '\u63a8\u8350\u7801\u6821\u9a8c\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u540e\u91cd\u8bd5\u3002',\n                    quotePriceUnavailable: '\u62a5\u4ef7\u6682\u65f6\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002',\n                    loginReadyTitle: '\u51c6\u5907\u597d\u4e70\u4fdd\u9669\u4e86\u5417\uff1f',\n                    loginEmailPrompt: '\u8bf7\u8f93\u5165\u4f60\u7684\u7535\u5b50\u90ae\u7bb1',\n                    loginEmailPlaceholder: '\u90ae\u7bb1\u5730\u5740',\n                    loginPasswordPlaceholder: '\u5bc6\u7801',\n                    loginForgotPassword: '\u5fd8\u8bb0\u5bc6\u7801\uff1f',\n                    loginGetStarted: '\u5f00\u59cb\u4f7f\u7528',\n                    loginSignIn: '\u767b\u5f55',\n                    loginCheckingEmail: '\u9a8c\u8bc1\u90ae\u7bb1\u4e2d...',\n                    loginLoggingIn: '\u767b\u5f55\u4e2d...',\n                    emailInvalid: '\u8bf7\u8f93\u5165\u6709\u6548\u7684\u90ae\u7bb1\u5730\u5740\u3002',\n                    loginFailedDefault: '\u767b\u5f55\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002',\n                    loginMfaEyebrow: '\u5b89\u5168\u9a8c\u8bc1',\n                    loginMfaTitle: '\u4e24\u6b65\u9a8c\u8bc1',\n                    loginMfaDescription: '\u8bf7\u8f93\u5165 Authenticator App \u4e2d\u7684\u52a8\u6001\u9a8c\u8bc1\u7801\u5b8c\u6210\u767b\u5f55\u3002',\n                    loginMfaCodePlaceholder: '\u8bf7\u8f93\u5165 6 \u4f4d\u9a8c\u8bc1\u7801',\n                    loginMfaRecoveryPlaceholder: '\u6062\u590d\u7801\uff0c\u4f8b\u5982 ABCD-EFGH-JKLM',\n                    loginMfaSubmit: '\u9a8c\u8bc1\u5e76\u767b\u5f55',\n                    loginMfaVerifying: '\u9a8c\u8bc1\u4e2d...',\n                    loginMfaUseRecovery: '\u4f7f\u7528\u6062\u590d\u7801',\n                    loginMfaUseCode: '\u4f7f\u7528 Authenticator \u9a8c\u8bc1\u7801',\n                    loginMfaBack: '\u8fd4\u56de',\n                    loginMfaCodeRequired: '\u8bf7\u8f93\u5165 Authenticator \u9a8c\u8bc1\u7801\u3002',\n                    loginMfaRecoveryRequired: '\u8bf7\u8f93\u5165\u6062\u590d\u7801\u3002',\n                    loginMissingToken: '\u767b\u5f55\u54cd\u5e94\u7f3a\u5c11 token\u3002',\n                    loginMfaFailedDefault: '\u9a8c\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\u3002',\n                    unlockNextStepsTitle: '\u89e3\u9501\u540e\u7eed\u6b65\u9aa4',\n                    unlockNextStepsDescription: '\u8be6\u7ec6\u6307\u5f15\u548c waiver \u8868\u5355\u4ec5\u5bf9\u5df2\u8d2d\u4e70\u4f1a\u5458\u5f00\u653e\u3002\u4f60\u662f\u5426\u5df2\u7ecf\u8d2d\u4e70\u4e86\u5f53\u524d\u5b66\u6821\u7684\u8ba1\u5212\uff1f',\n                    unlockNextStepsConfirm: '\u662f\u7684\uff0c\u6211\u5df2\u8d2d\u4e70',\n                    unlockNextStepsChecking: '\u6821\u9a8c\u4e2d...',\n                    unlockNextStepsLater: '\u8fd8\u6ca1\u6709\uff0c\u5148\u770b\u65b9\u6848',\n                    unlockPurchaseFirst: '\u8bf7\u5148\u8d2d\u4e70\u5f53\u524d\u5b66\u6821\u7684\u8ba1\u5212\u3002',\n                    features: '\u4fdd\u969c\u9879',\n                    fetchErrorTitle: '\u4ea7\u54c1\u6570\u636e\u52a0\u8f7d\u5931\u8d25',\n                    noProductsTitle: '\u6682\u65e0\u53ef\u5c55\u793a\u65b9\u6848',\n                    noProductsDescription: '\u63a5\u53e3\u5f53\u524d\u6ca1\u6709\u8fd4\u56de\u7b26\u5408\u5e74\u9f84\u6761\u4ef6\u7684\u4ea7\u54c1\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\u6216\u5207\u6362\u5b66\u6821\u53c2\u6570\u3002',\n                    notAvailable: '\u6682\u65e0',\n                    availableSoon: '\u8be5\u5185\u5bb9\u6682\u672a\u5f00\u653e',\n                    fetchErrorDefault: '\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u63a5\u53e3\u72b6\u6001\u540e\u91cd\u8bd5\u3002',\n                    defaultSchoolName: '\u7559\u5b66\u751f',\n                    compareLimitNotice: '\u5df2\u8fbe\u5230\u6700\u591a 3 \u4e2a\u65b9\u6848\u7684\u5bf9\u6bd4\u4e0a\u9650\u3002',\n                    featureLabels: {\n                        annual_maxiumn: '\u6700\u9ad8\u4fdd\u9669\u989d\u5ea6',\n                        deductible_in: '\u514d\u8d54\u989d\uff08\u7f51\u7edc\u5185\uff09',\n                        coinsurance_in: '\u5171\u540c\u4fdd\u9669\uff08\u7f51\u7edc\u5185\uff09',\n                        coinsurance_of: '\u5171\u540c\u4fdd\u9669\uff08\u7f51\u7edc\u5916\uff09',\n                        co_payment_shc: '\u5171\u4ed8\u989d\uff08SHC\uff09',\n                        deductible_in_student_health_center: '\u5b66\u751f\u5065\u5eb7\u4e2d\u5fc3\u514d\u8d54\u989d',\n                        out_of_pocket_maximum_in_network: '\u6700\u9ad8\u81ea\u4ed8\u9650\u989d\uff08\u7f51\u7edc\u5185\uff09',\n                        prescription: '\u5904\u65b9\u836f\uff08\u5171\u4ed8\u989d\uff09',\n                        pre_existing_watiting_period: '\u65e2\u5f80\u75c5\u75c7\u7b49\u5f85\u671f',\n                        preventive_care_in_shc: '\u9884\u9632\u62a4\u7406\uff08\u7f51\u7edc\u5185\/SHC\uff09',\n                        telehealth: '\u8fdc\u7a0b\u533b\u7597',\n                        emergency_medical_evacuation: '\u7d27\u6025\u533b\u7597\u64a4\u79bb',\n                        accidental_death: '\u610f\u5916\u6b7b\u4ea1',\n                        repatriation_of_mortal_remains: '\u9057\u4f53\u9063\u8fd4',\n                        coverage: '\u4fdd\u969c\u8303\u56f4',\n                        network: '\u533b\u7597\u7f51\u7edc',\n                        immunization_vaccines_and_test: '\u75ab\u82d7\u4e0e\u68c0\u6d4b',\n                        copay_primary_care: '\u521d\u7ea7\u4fdd\u5065\u95e8\u8bca',\n                        copay_specialist: '\u4e13\u79d1\u95e8\u8bca',\n                        copay_urgent_care: 'Urgent Care',\n                        copay_emergency_room: '\u6025\u8bca\u5ba4',\n                        copay_lab_and_xray: '\u5316\u9a8c\u4e0e X \u5149',\n                        copay_physical_therapy: '\u7269\u7406\u6cbb\u7597',\n                        allergy_testing_treatment: '\u8fc7\u654f\u68c0\u6d4b\u4e0e\u6cbb\u7597',\n                        rx_generic: '\u5904\u65b9\u836f Generic',\n                        rx_brand: '\u5904\u65b9\u836f Brand',\n                        rx_non_preferred: '\u5904\u65b9\u836f Non-Preferred',\n                        rx_specialty: 'Specialty Drug',\n                        hospitalization_inpatient: '\u4f4f\u9662\u6cbb\u7597',\n                        copay_outpatient_surgery: '\u95e8\u8bca\u624b\u672f',\n                        ambulance_coverage: '\u6551\u62a4\u8f66',\n                        mental_health_outpatient: '\u95e8\u8bca\u5fc3\u7406\u5065\u5eb7',\n                        mental_health_inpatient: '\u4f4f\u9662\u5fc3\u7406\u5065\u5eb7',\n                        alternative_medicine_limit: '\u66ff\u4ee3\u7597\u6cd5',\n                        chiropractic_limit: '\u810a\u690e\u6cbb\u7597',\n                        maternity_prenatal_care: '\u4ea7\u524d\u62a4\u7406',\n                        maternity_labor_delivery: '\u5206\u5a29\u4e0e\u4f4f\u9662',\n                        oncology_treatment: '\u80bf\u7624\u6cbb\u7597',\n                        organ_transplant: '\u5668\u5b98\u79fb\u690d',\n                        durable_medical_equipment: '\u8010\u7528\u533b\u7597\u8bbe\u5907',\n                        post_op_care: '\u672f\u540e\u62a4\u7406',\n                        dialysis: '\u900f\u6790',\n                        emergency_dental_injury: '\u7259\u79d1\u6025\u75c7',\n                        prior_authorization_required: '\u9700\u9884\u6388\u6743',\n                        waiver_denial_refund_days: 'Waive \u62d2\u6279\u9000\u6b3e\u671f',\n                        cancellation_admin_fee: '\u53d6\u6d88\u884c\u653f\u8d39',\n                        refund_blocker_claims: '\u7406\u8d54\u540e\u662f\u5426\u53ef\u9000\u6b3e'\n                    }\n                },\n                en: {\n                    heroBadge: 'Student Insurance Comparison',\n                    heroTitleSuffix: ' Plans',\n                    waiveAndSave: 'Waive and Save',\n                    refundGuarantee: '100% Refund Guarantee if Waive Fails',\n                    refundPolicyDetails: 'Refund Policy Details',\n                    startingAt: 'Starting at',\n                    startingAtDescription: 'Prices come from the quote API and update with DOB and school coverage dates.',\n                    schoolPlanPrice: 'School Plan Price',\n                    syncingSchoolRules: 'Current school rules and pricing are synced into this new front-end layout.',\n                    saveUpTo: 'Save up to',\n                    saveALot: 'Save a lot',\n                    importantInfo: 'Equity Information',\n                    importantInfoSubtitle: 'Key waiver data synced from the existing product interface',\n                    schoolRequiredPeriod: 'School Required Period',\n                    waiveDeadline: 'School Waive Deadline',\n                    waiverFormDelivery: 'Waiver Form Delivery',\n                    waiverFormDescription: 'After purchase, policy files and follow-up waiver materials continue through the existing workflow.',\n                    dynamicPricing: 'Live quote pricing',\n                    dynamicPricingDescription: 'This page now uses the same quote API as checkout and no longer calculates prices from age_ranges on the front end.',\n                    coveragePeriodBanner: 'The required school coverage period can affect the displayed plan price.',\n                    deadlineBanner: 'Complete your purchase and submit required materials before your school waiver deadline.',\n                    deliveryBanner: 'Only the front-end layout changed. Existing policy delivery and follow-up processes remain the same.',\n                    ageBanner: 'Plan pricing refreshes from the quote API when DOB changes.',\n                    monthly: 'Monthly',\n                    yearly: 'Yearly',\n                    schoolPrice: 'Coverage Price',\n                    toggleBilling: 'Toggle monthly and yearly pricing',\n                    age: 'Age',\n                    dob: 'DOB',\n                    datePlaceholder: 'YYYY\/MM\/DD',\n                    pricingHint: 'Live pricing',\n                    month: 'month',\n                    year: 'year',\n                    monthShort: 'mo',\n                    yearShort: 'yr',\n                    select: 'Select',\n                    compare: 'Compare',\n                    brochure: 'Brochure',\n                    policy: 'Policy',\n                    medicationGuide: 'Medication Guide',\n                    mostPopular: 'Most Popular',\n                    fallGraduates: 'Fall Graduates',\n                    viewMore: 'View more features',\n                    viewLess: 'View less',\n                    compareSelected: 'Compare Selected Plans',\n                    comparePlans: 'Compare Plans',\n                    compareDescription: 'Detailed side-by-side comparison',\n                    close: 'Close',\n                    faqTitle: 'Frequently Asked Questions',\n                    faqDescription: 'The answers below are pulled from the original FAQ data returned by the API.',\n                    purchaseInfoTitle: 'Important info',\n                    purchaseInfoLineOne: '1. If you do not have a U.S. phone number yet, you can fill it out randomly. It will not affect the policy or waiver, and you can update it after arriving in the U.S.',\n                    purchaseInfoLineTwo: '2. For the U.S. address, you can use your school address or your own address.',\n                    purchaseCoverageStart: 'The required coverage start date is',\n                    purchaseNext: 'Next',\n                    purchaseEmail: 'Your Email',\n                    purchaseReferralCode: 'Referral Code',\n                    purchaseAddReferral: 'I have a referral code',\n                    purchaseSubmitting: 'Submitting...',\n                    referralCodeInvalid: 'Referral code validation failed. Please try again.',\n                    quotePriceUnavailable: 'Quote is temporarily unavailable. Please try again.',\n                    loginReadyTitle: 'Ready to buy insurance?',\n                    loginEmailPrompt: 'Please enter your email',\n                    loginEmailPlaceholder: 'Email',\n                    loginPasswordPlaceholder: 'Password',\n                    loginForgotPassword: 'Forget the password?',\n                    loginGetStarted: 'Get started',\n                    loginSignIn: 'Login',\n                    loginCheckingEmail: 'Checking email...',\n                    loginLoggingIn: 'Logging in...',\n                    emailInvalid: 'Please enter a valid email address.',\n                    loginFailedDefault: 'Login failed. Please try again later.',\n                    loginMfaEyebrow: 'Secure login',\n                    loginMfaTitle: 'Two-step verification',\n                    loginMfaDescription: 'Enter the code from your Authenticator App to finish signing in.',\n                    loginMfaCodePlaceholder: 'Enter 6-digit code',\n                    loginMfaRecoveryPlaceholder: 'Recovery code, e.g. ABCD-EFGH-JKLM',\n                    loginMfaSubmit: 'Verify and Login',\n                    loginMfaVerifying: 'Verifying...',\n                    loginMfaUseRecovery: 'Use recovery code',\n                    loginMfaUseCode: 'Use Authenticator code',\n                    loginMfaBack: 'Back',\n                    loginMfaCodeRequired: 'Please enter your Authenticator code.',\n                    loginMfaRecoveryRequired: 'Please enter your recovery code.',\n                    loginMissingToken: 'Login response is missing token.',\n                    loginMfaFailedDefault: 'Verification failed. Please try again.',\n                    unlockNextStepsTitle: 'Unlock Next Steps',\n                    unlockNextStepsDescription: 'The detailed guide and waiver forms are exclusive to our members. Have you purchased a plan for this school yet?',\n                    unlockNextStepsConfirm: 'Yes, I\u2019ve purchased',\n                    unlockNextStepsChecking: 'Checking...',\n                    unlockNextStepsLater: 'Not yet, view plans',\n                    unlockPurchaseFirst: 'Please purchase a plan for this school first.',\n                    features: 'Features',\n                    fetchErrorTitle: 'Failed to load plans',\n                    noProductsTitle: 'No plans available',\n                    noProductsDescription: 'The API did not return any plans for the current age or school context.',\n                    notAvailable: 'N\/A',\n                    availableSoon: 'Available soon',\n                    fetchErrorDefault: 'Network error. Please try again later.',\n                    defaultSchoolName: 'Student',\n                    compareLimitNotice: 'You have reached the 3-plan comparison limit.',\n                    featureLabels: {\n                        annual_maxiumn: 'Annual Maximum',\n                        deductible_in: 'Deductible (in-network)',\n                        coinsurance_in: 'Coinsurance (in-network)',\n                        coinsurance_of: 'Coinsurance (out-of-network)',\n                        co_payment_shc: 'Co-payment (SHC)',\n                        deductible_in_student_health_center: 'Deductible in student health center',\n                        out_of_pocket_maximum_in_network: 'Out of pocker maximum in-network',\n                        prescription: 'Prescription (Co-pay)',\n                        pre_existing_watiting_period: 'pre-existing waiting period',\n                        preventive_care_in_shc: 'Prevention care (in-network\/SHC)',\n                        telehealth: 'Telehealth',\n                        emergency_medical_evacuation: 'Emergency medical evacuation',\n                        accidental_death: 'Accidental death',\n                        repatriation_of_mortal_remains: 'Repartriation of mortal remains',\n                        coverage: 'Coverage Area',\n                        network: 'Network',\n                        immunization_vaccines_and_test: 'Immunization, Vaccines & Tests',\n                        copay_primary_care: 'Primary Care',\n                        copay_specialist: 'Specialist',\n                        copay_urgent_care: 'Urgent Care',\n                        copay_emergency_room: 'Emergency Room',\n                        copay_lab_and_xray: 'Lab & X-Ray',\n                        copay_physical_therapy: 'Physical Therapy',\n                        allergy_testing_treatment: 'Allergy Testing & Treatment',\n                        rx_generic: 'Rx Generic',\n                        rx_brand: 'Rx Brand',\n                        rx_non_preferred: 'Rx Non-Preferred',\n                        rx_specialty: 'Rx Specialty',\n                        hospitalization_inpatient: 'Inpatient Hospitalization',\n                        copay_outpatient_surgery: 'Outpatient Surgery',\n                        ambulance_coverage: 'Ambulance',\n                        mental_health_outpatient: 'Mental Health Outpatient',\n                        mental_health_inpatient: 'Mental Health Inpatient',\n                        alternative_medicine_limit: 'Alternative Medicine',\n                        chiropractic_limit: 'Chiropractic',\n                        maternity_prenatal_care: 'Maternity Prenatal Care',\n                        maternity_labor_delivery: 'Maternity Labor & Delivery',\n                        oncology_treatment: 'Oncology Treatment',\n                        organ_transplant: 'Organ Transplant',\n                        durable_medical_equipment: 'Durable Medical Equipment',\n                        post_op_care: 'Post-op Care',\n                        dialysis: 'Dialysis',\n                        emergency_dental_injury: 'Emergency Dental Injury',\n                        prior_authorization_required: 'Prior Authorization Required',\n                        waiver_denial_refund_days: 'Waiver Denial Refund Window',\n                        cancellation_admin_fee: 'Cancellation Admin Fee',\n                        refund_blocker_claims: 'Refund Blocker Claims'\n                    }\n                }\n            };\n\n            const tooltips = {\n                zh: {\n                    annual_maxiumn: '\u5e74\u5ea6\u6700\u9ad8\u8d54\u4ed8\u989d\uff1a\u8fd9\u662f\u4fdd\u9669\u8ba1\u5212\u5728\u4e00\u4e2a\u4fdd\u5355\u5e74\u5ea6\u5185\uff0c\u5bf9\u4f60\u7b26\u5408\u4fdd\u969c\u8303\u56f4\u7684\u533b\u7597\u670d\u52a1\u6700\u591a\u53ef\u8d54\u4ed8\u7684\u603b\u91d1\u989d\u3002',\n                    deductible_in: '\u7f51\u7edc\u5185\u514d\u8d54\u989d\uff1a\u5728\u4fdd\u9669\u5f00\u59cb\u4e3a\u7f51\u7edc\u5185\u533b\u7597\u670d\u52a1\u7406\u8d54\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u5148\u81ea\u884c\u627f\u62c5\u7684\u91d1\u989d\u3002',\n                    coinsurance_in: '\u7f51\u7edc\u5185\u5171\u540c\u4fdd\u9669\uff1a\u8fbe\u5230\u514d\u8d54\u989d\u540e\uff0c\u4f60\u4ecd\u9700\u6309\u6bd4\u4f8b\u627f\u62c5\u7f51\u7edc\u5185\u533b\u7597\u8d39\u7528\u3002\u4f8b\u5982\u4fdd\u9669\u627f\u62c5 80%\uff0c\u5219\u4f60\u627f\u62c5 20%\u3002',\n                    coinsurance_of: '\u7f51\u7edc\u5916\u5171\u540c\u4fdd\u9669\uff1a\u5728\u7f51\u7edc\u5916\u5c31\u533b\u65f6\uff0c\u4f60\u9700\u8981\u627f\u62c5\u7684\u8d39\u7528\u6bd4\u4f8b\uff0c\u901a\u5e38\u4f1a\u9ad8\u4e8e\u7f51\u7edc\u5185\u3002',\n                    co_payment_shc: '\u5b66\u751f\u5065\u5eb7\u4e2d\u5fc3\u5171\u4ed8\u989d\uff1a\u5728 Student Health Center \u5c31\u8bca\u65f6\uff0c\u6bcf\u6b21\u9700\u8981\u652f\u4ed8\u7684\u56fa\u5b9a\u91d1\u989d\u3002',\n                    deductible_in_student_health_center: '\u5b66\u751f\u5065\u5eb7\u4e2d\u5fc3\u514d\u8d54\u989d\uff1a\u5728 Student Health Center \u573a\u666f\u4e0b\uff0c\u4fdd\u9669\u5f00\u59cb\u8d54\u4ed8\u524d\u9700\u8981\u5148\u81ea\u884c\u627f\u62c5\u7684\u91d1\u989d\u3002',\n                    out_of_pocket_maximum_in_network: '\u7f51\u7edc\u5185\u6700\u9ad8\u81ea\u4ed8\u9650\u989d\uff1a\u5728\u4e00\u4e2a\u4fdd\u5355\u5e74\u5ea6\u5185\uff0c\u4f60\u5728\u7f51\u7edc\u5185\u533b\u7597\u670d\u52a1\u4e0a\u6700\u591a\u9700\u8981\u81ea\u884c\u627f\u62c5\u7684\u603b\u8d39\u7528\u4e0a\u9650\u3002',\n                    prescription: '\u5904\u65b9\u836f\u5171\u4ed8\u989d\uff1a\u7531\u533b\u751f\u5f00\u5177\u5e76\u88ab\u4fdd\u9669\u8ba1\u5212\u627f\u4fdd\u7684\u836f\u54c1\uff0c\u5728\u4e0d\u540c\u836f\u54c1\u5c42\u7ea7\u4e0b\u5bf9\u5e94\u7684\u81ea\u4ed8\u91d1\u989d\u3002',\n                    pre_existing_watiting_period: '\u65e2\u5f80\u75c5\u75c7\u7b49\u5f85\u671f\uff1a\u5bf9\u4e8e\u4fdd\u5355\u751f\u6548\u524d\u5df2\u5b58\u5728\u7684\u75be\u75c5\uff0c\u4fdd\u9669\u8ba1\u5212\u5728\u7b49\u5f85\u671f\u5185\u901a\u5e38\u4e0d\u4f1a\u7406\u8d54\uff0c\u5177\u4f53\u65f6\u957f\u56e0\u65b9\u6848\u800c\u5f02\u3002',\n                    preventive_care_in_shc: '\u9884\u9632\u62a4\u7406\uff1a\u5305\u62ec\u5b9a\u671f\u4f53\u68c0\u3001\u5987\u79d1\u68c0\u67e5\u3001\u75ab\u82d7\u63a5\u79cd\uff0c\u4ee5\u53ca PSA\u3001\u4e73\u817a X \u5149\u3001\u5bab\u9888\u6d82\u7247\u548c\u7ed3\u80a0\u955c\u7b49\u7b5b\u67e5\u670d\u52a1\u3002',\n                    telehealth: '\u8fdc\u7a0b\u533b\u7597\uff1a\u901a\u8fc7\u7535\u8bdd\u6216\u89c6\u9891\u7b49\u901a\u4fe1\u65b9\u5f0f\u63d0\u4f9b\u7684\u533b\u7597\u670d\u52a1\u3002',\n                    emergency_medical_evacuation: '\u7d27\u6025\u533b\u7597\u64a4\u79bb\uff1a\u5f53\u672c\u5730\u65e0\u6cd5\u63d0\u4f9b\u5fc5\u8981\u6cbb\u7597\uff0c\u6216\u7d27\u6025\u60c5\u51b5\u4e0b\u65e0\u6cd5\u83b7\u5f97\u5408\u89c4\u8840\u6db2\u65f6\uff0c\u63d0\u4f9b\u8f6c\u8fd0\u81f3\u5408\u9002\u533b\u7597\u673a\u6784\u7684\u4fdd\u969c\u3002',\n                    accidental_death: '\u610f\u5916\u6b7b\u4ea1\uff1a\u56e0\u610f\u5916\u4e8b\u6545\u5bfc\u81f4\u8eab\u6545\u65f6\u5bf9\u5e94\u7684\u4fdd\u969c\u91d1\u989d\u3002',\n                    repatriation_of_mortal_remains: '\u9057\u4f53\u9063\u8fd4\uff1a\u5f53\u88ab\u4fdd\u4eba\u8eab\u6545\u65f6\uff0c\u4fdd\u969c\u5c06\u9057\u4f53\u8fd0\u9001\u56de\u5176\u6bcd\u56fd\u6216\u539f\u7c4d\u56fd\u6240\u9700\u7684\u8d39\u7528\u3002',\n                    coverage: '\u4fdd\u969c\u8303\u56f4\uff1a\u6307\u4fdd\u9669\u8ba1\u5212\u8986\u76d6\u7684\u533b\u7597\u670d\u52a1\u6216\u5730\u57df\u8303\u56f4\u3002',\n                    network: '\u533b\u7597\u7f51\u7edc\uff1a\u7531\u4e0e\u4fdd\u9669\u516c\u53f8\u7b7e\u7ea6\u3001\u4e3a\u4f1a\u5458\u63d0\u4f9b\u4f18\u60e0\u4ef7\u683c\u7684\u533b\u751f\u3001\u533b\u9662\u53ca\u5176\u4ed6\u533b\u7597\u673a\u6784\u7ec4\u6210\u7684\u7f51\u7edc\u3002',\n                    immunization_vaccines_and_test: '\u75ab\u82d7\u63a5\u79cd\u3001\u514d\u75ab\u548c\u76f8\u5173\u68c0\u6d4b\u9879\u76ee\u7684\u4fdd\u969c\u6bd4\u4f8b\u6216\u652f\u4ed8\u65b9\u5f0f\u3002',\n                    copay_primary_care: '\u770b\u666e\u901a\u5bb6\u5ead\u533b\u751f\u6216\u521d\u7ea7\u4fdd\u5065\u95e8\u8bca\u65f6\uff0c\u9700\u8981\u652f\u4ed8\u7684\u56fa\u5b9a\u91d1\u989d\u6216\u627f\u62c5\u65b9\u5f0f\u3002',\n                    copay_specialist: '\u770b\u4e13\u79d1\u533b\u751f\u65f6\u7684\u56fa\u5b9a\u81ea\u4ed8\u989d\u6216\u8d54\u4ed8\u6bd4\u4f8b\u3002',\n                    copay_urgent_care: '\u524d\u5f80 Urgent Care \u5c31\u8bca\u65f6\u7684\u56fa\u5b9a\u81ea\u4ed8\u989d\u6216\u627f\u62c5\u65b9\u5f0f\u3002',\n                    copay_emergency_room: '\u524d\u5f80\u6025\u8bca\u5ba4\u5c31\u8bca\u65f6\u7684\u56fa\u5b9a\u81ea\u4ed8\u989d\uff1b\u90e8\u5206\u65b9\u6848\u5728\u4f4f\u9662\u540e\u53ef\u51cf\u514d\u3002',\n                    copay_lab_and_xray: '\u5316\u9a8c\u3001\u5f71\u50cf\u548c X \u5149\u68c0\u67e5\u7684\u81ea\u4ed8\u989d\u6216\u8d54\u4ed8\u6bd4\u4f8b\u3002',\n                    copay_physical_therapy: '\u7269\u7406\u6cbb\u7597\u6216\u5eb7\u590d\u6cbb\u7597\u6bcf\u6b21\u5c31\u8bca\u7684\u81ea\u4ed8\u989d\u6216\u4fdd\u969c\u65b9\u5f0f\u3002',\n                    allergy_testing_treatment: '\u8fc7\u654f\u539f\u68c0\u6d4b\u53ca\u76f8\u5173\u6cbb\u7597\u7684\u81ea\u4ed8\u989d\u6216\u8d54\u4ed8\u65b9\u5f0f\u3002',\n                    rx_generic: 'Generic \u4eff\u5236\u836f\u7684\u5904\u65b9\u836f\u81ea\u4ed8\u989d\u3002',\n                    rx_brand: 'Brand \u54c1\u724c\u836f\u7684\u5904\u65b9\u836f\u81ea\u4ed8\u989d\u3002',\n                    rx_non_preferred: 'Non-Preferred \u975e\u4f18\u9009\u836f\u54c1\u7684\u5904\u65b9\u836f\u81ea\u4ed8\u989d\u3002',\n                    rx_specialty: 'Specialty \u9ad8\u4ef7\u7279\u836f\u7684\u5904\u65b9\u836f\u81ea\u4ed8\u989d\u3002',\n                    hospitalization_inpatient: '\u4f4f\u9662\u6cbb\u7597\u76f8\u5173\u8d39\u7528\u7684\u8d54\u4ed8\u6bd4\u4f8b\u6216\u627f\u62c5\u65b9\u5f0f\u3002',\n                    copay_outpatient_surgery: '\u95e8\u8bca\u624b\u672f\u7684\u81ea\u4ed8\u989d\u6216\u8d54\u4ed8\u6bd4\u4f8b\u3002',\n                    ambulance_coverage: '\u6551\u62a4\u8f66\u8f6c\u8fd0\u670d\u52a1\u7684\u8d54\u4ed8\u6bd4\u4f8b\u6216\u4fdd\u969c\u65b9\u5f0f\u3002',\n                    mental_health_outpatient: '\u95e8\u8bca\u5fc3\u7406\u5065\u5eb7\u6216\u7cbe\u795e\u79d1\u6cbb\u7597\u7684\u4fdd\u969c\u6bd4\u4f8b\u6216\u652f\u4ed8\u65b9\u5f0f\u3002',\n                    mental_health_inpatient: '\u4f4f\u9662\u5fc3\u7406\u5065\u5eb7\u6216\u7cbe\u795e\u79d1\u6cbb\u7597\u7684\u4fdd\u969c\u6bd4\u4f8b\u6216\u652f\u4ed8\u65b9\u5f0f\u3002',\n                    alternative_medicine_limit: '\u66ff\u4ee3\u7597\u6cd5\u7684\u81ea\u4ed8\u989d\u3001\u8d54\u4ed8\u6bd4\u4f8b\uff0c\u53ca\u53ef\u80fd\u5b58\u5728\u7684\u91d1\u989d\u6216\u6b21\u6570\u4e0a\u9650\u3002',\n                    chiropractic_limit: '\u6574\u810a\u6216\u810a\u690e\u63a8\u62ff\u6cbb\u7597\u7684\u81ea\u4ed8\u989d\u3001\u8d54\u4ed8\u6bd4\u4f8b\u6216\u6b21\u6570\u4e0a\u9650\u3002',\n                    maternity_prenatal_care: '\u5b55\u671f\u4ea7\u524d\u68c0\u67e5\u548c\u62a4\u7406\u670d\u52a1\u7684\u4fdd\u969c\u6bd4\u4f8b\u6216\u652f\u4ed8\u65b9\u5f0f\u3002',\n                    maternity_labor_delivery: '\u5206\u5a29\u3001\u4f4f\u9662\u548c\u76f8\u5173\u4ea7\u79d1\u670d\u52a1\u7684\u8d54\u4ed8\u65b9\u5f0f\u3002',\n                    oncology_treatment: '\u80bf\u7624\u6216\u764c\u75c7\u6cbb\u7597\u7684\u8d54\u4ed8\u6bd4\u4f8b\u6216\u4fdd\u969c\u65b9\u5f0f\u3002',\n                    organ_transplant: '\u5668\u5b98\u79fb\u690d\u76f8\u5173\u6cbb\u7597\u7684\u4fdd\u969c\u65b9\u5f0f\u548c\u8d54\u4ed8\u8303\u56f4\u3002',\n                    durable_medical_equipment: '\u8f6e\u6905\u3001\u62d0\u6756\u7b49\u8010\u7528\u533b\u7597\u8bbe\u5907\u7684\u4fdd\u969c\u6bd4\u4f8b\u6216\u9650\u5236\u3002',\n                    post_op_care: '\u672f\u540e\u590d\u8bca\u3001\u62a4\u7406\u548c\u6062\u590d\u6cbb\u7597\u7684\u4fdd\u969c\u65b9\u5f0f\u3002',\n                    dialysis: '\u900f\u6790\u6cbb\u7597\u7684\u8d54\u4ed8\u6bd4\u4f8b\u6216\u4fdd\u969c\u65b9\u5f0f\u3002',\n                    emergency_dental_injury: '\u7259\u9f7f\u56e0\u610f\u5916\u53d7\u4f24\u540e\u7684\u6025\u8bca\u7259\u79d1\u6cbb\u7597\u4fdd\u969c\u3002',\n                    prior_authorization_required: '\u662f\u5426\u9700\u8981\u5728\u7279\u5b9a\u6cbb\u7597\u524d\u63d0\u524d\u83b7\u5f97\u4fdd\u9669\u516c\u53f8\u6279\u51c6\u3002',\n                    waiver_denial_refund_days: '\u5982\u679c\u5b66\u6821 waive \u88ab\u62d2\uff0c\u7533\u8bf7\u9000\u6b3e\u7684\u53ef\u7528\u65f6\u95f4\u7a97\u53e3\u3002',\n                    cancellation_admin_fee: '\u53d6\u6d88\u4fdd\u5355\u6216\u9000\u6b3e\u65f6\u53ef\u80fd\u6536\u53d6\u7684\u884c\u653f\u624b\u7eed\u8d39\u3002',\n                    refund_blocker_claims: '\u662f\u5426\u56e0\u4e3a\u5df2\u7ecf\u53d1\u751f\u7406\u8d54\u800c\u65e0\u6cd5\u9000\u6b3e\u3002'\n                },\n                en: {\n                    annual_maxiumn: 'The Annual Maximum is the highest amount your insurance plan will pay for covered services in a plan year.',\n                    deductible_in: 'The Deductible(In-Network) is the amount you must pay for covered healthcare services before your insurance plan starts to pay. This applies only to services received from healthcare providers within the plan\\'s network.',\n                    coinsurance_in: 'Coinsurance(In-Network) is the percentage of costs you pay for covered healthcare services after you have met your deductible. For example, if your coinsurance is 80%, you pay 20% of the costs of yourcare, and your insurance pays the remaining 80%',\n                    coinsurance_of: 'Coinsurance(Out-of-Network) is the percentage of costs you pay for covered healthcare services received from providers outside the plan\\'s network, This percentage is typically higher than in-network coinsurance.',\n                    co_payment_shc: 'A Co-payment(SHC) ,or copay, is a fixed amount you pay for a covered healthcare service, usually when you receive the service. This term specifically refers to services at the Student Health Center(SHC).',\n                    deductible_in_student_health_center: 'The Deductible at SHC(Student health Center): This amount represents the amount that needs to be paid by oneself before the insurance company starts paying.',\n                    out_of_pocket_maximum_in_network: 'The Out of Pocket Maximum(In-Network)is the most you have to pay for covered services in a plan year. After you spend this amount on deductibles, copayments, and coinsurance, your health plan pays 100% of the costs of covered benefits.',\n                    prescription: 'Prescription refers to medications that are prescribed by a doctor and covered by your health insurance plan.',\n                    pre_existing_watiting_period: 'The Pre-Existing Waiting Period is the time period during which your insurance plan does not cover treatment for conditions that existed before the start of the policy. This period varies depending on the plan.',\n                    preventive_care_in_shc: 'Periodic routine health exams, routine gynecological exams, immunizations and related preventive services such as prostate specific antigen(PSA), routine mammograms, pap smears and colonoscopies for colorectal cancer screenings.',\n                    telehealth: 'Telehealth refers to healthcare services provided remotely via telecommunications technology.',\n                    emergency_medical_evacuation: 'Medical Evacuation applies where the necessary treatment for which the Covered Person is covered is not available locally or if adequately screened blood is unavailable in the event of an emergency.',\n                    accidental_death: 'Accidental death',\n                    repatriation_of_mortal_remains: 'Repatriation of Mortal Remains covers the cost of returning a deceased person\\'s body to their home country. This benefit is crucial for international travelers or students studing abroad.',\n                    coverage: 'Coverage refers to the range of healthcare services your insurance plan pays for.',\n                    network: 'A Network is a group of doctors,hospitals,and other healthcare providers that have agreed to provide medical services at reduced rates for plan members. Receiving care within the network typically results in lower out-of-pocket costs for you.',\n                    immunization_vaccines_and_test: 'Shows how the plan covers immunizations, vaccines, and related testing services.',\n                    copay_primary_care: 'The fixed amount or cost-sharing you pay when visiting a primary care provider.',\n                    copay_specialist: 'The fixed amount or cost-sharing you pay when visiting a specialist.',\n                    copay_urgent_care: 'The fixed amount or cost-sharing you pay for an Urgent Care visit.',\n                    copay_emergency_room: 'The fixed amount you pay for an emergency room visit; some plans waive it if you are admitted.',\n                    copay_lab_and_xray: 'Shows your cost-sharing for lab work, diagnostic testing, and X-ray services.',\n                    copay_physical_therapy: 'The amount or coverage method applied to physical therapy or rehabilitation visits.',\n                    allergy_testing_treatment: 'Shows how allergy testing and related treatment are covered under the plan.',\n                    rx_generic: 'The prescription copay for generic medications.',\n                    rx_brand: 'The prescription copay for brand-name medications.',\n                    rx_non_preferred: 'The prescription copay for non-preferred medications.',\n                    rx_specialty: 'The prescription copay for specialty or high-cost medications.',\n                    hospitalization_inpatient: 'Shows the cost-sharing or coverage level for inpatient hospitalization services.',\n                    copay_outpatient_surgery: 'The cost-sharing or coverage level for outpatient surgery.',\n                    ambulance_coverage: 'Shows how ambulance transportation is covered under the plan.',\n                    mental_health_outpatient: 'The coverage level for outpatient mental health or behavioral health treatment.',\n                    mental_health_inpatient: 'The coverage level for inpatient mental health or behavioral health treatment.',\n                    alternative_medicine_limit: 'Shows the coverage, visit limit, or dollar cap for alternative medicine services.',\n                    chiropractic_limit: 'Shows the coverage, visit limit, or dollar cap for chiropractic treatment.',\n                    maternity_prenatal_care: 'The coverage level for maternity prenatal care and routine pregnancy visits.',\n                    maternity_labor_delivery: 'Shows how labor, delivery, and related maternity hospitalization are covered.',\n                    oncology_treatment: 'The coverage level for cancer or oncology treatment services.',\n                    organ_transplant: 'Shows whether organ transplant-related treatment is covered and to what extent.',\n                    durable_medical_equipment: 'The coverage level for durable medical equipment such as wheelchairs or crutches.',\n                    post_op_care: 'Shows how post-operative follow-up care and recovery treatment are covered.',\n                    dialysis: 'The coverage level for dialysis treatment services.',\n                    emergency_dental_injury: 'Shows the benefit for emergency dental treatment caused by an accidental injury.',\n                    prior_authorization_required: 'Indicates whether approval from the insurer is required before certain treatments.',\n                    waiver_denial_refund_days: 'The time window available to request a refund if your school waiver is denied.',\n                    cancellation_admin_fee: 'The administrative fee that may apply if the policy is cancelled or refunded.',\n                    refund_blocker_claims: 'Indicates whether prior claims activity prevents the policy from being refunded.'\n                }\n            };\n\n            const featureDefinition = [\n                { key: 'annual_maxiumn', advanced: false },\n                { key: 'deductible_in', advanced: false },\n                { key: 'coinsurance_in', advanced: false },\n                { key: 'coinsurance_of', advanced: false },\n                { key: 'co_payment_shc', advanced: true },\n                { key: 'deductible_in_student_health_center', advanced: true },\n                { key: 'out_of_pocket_maximum_in_network', advanced: true },\n                { key: 'prescription', advanced: true },\n                { key: 'pre_existing_watiting_period', advanced: true },\n                { key: 'preventive_care_in_shc', advanced: true },\n                { key: 'telehealth', advanced: true },\n                { key: 'emergency_medical_evacuation', advanced: true },\n                { key: 'accidental_death', advanced: true },\n                { key: 'repatriation_of_mortal_remains', advanced: true },\n                { key: 'coverage', advanced: true },\n                { key: 'network', advanced: true }\n            ];\n\n            const compareOnlyFeatureDefinition = [\n                { key: 'immunization_vaccines_and_test' },\n                { key: 'copay_primary_care' },\n                { key: 'copay_specialist' },\n                { key: 'copay_urgent_care' },\n                { key: 'copay_emergency_room' },\n                { key: 'copay_lab_and_xray' },\n                { key: 'copay_physical_therapy' },\n                { key: 'allergy_testing_treatment' },\n                { key: 'rx_generic' },\n                { key: 'rx_brand' },\n                { key: 'rx_non_preferred' },\n                { key: 'rx_specialty' },\n                { key: 'hospitalization_inpatient' },\n                { key: 'copay_outpatient_surgery' },\n                { key: 'ambulance_coverage' },\n                { key: 'mental_health_outpatient' },\n                { key: 'mental_health_inpatient' },\n                { key: 'alternative_medicine_limit' },\n                { key: 'chiropractic_limit' },\n                { key: 'maternity_prenatal_care' },\n                { key: 'maternity_labor_delivery' },\n                { key: 'oncology_treatment' },\n                { key: 'organ_transplant' },\n                { key: 'durable_medical_equipment' },\n                { key: 'post_op_care' },\n                { key: 'dialysis' },\n                { key: 'emergency_dental_injury' },\n                { key: 'prior_authorization_required' },\n                { key: 'waiver_denial_refund_days' },\n                { key: 'cancellation_admin_fee' },\n                { key: 'refund_blocker_claims' }\n            ];\n\n            const schoolSlug = ref(initialSchoolSlug);\n            const schoolId = ref(initialSchoolId);\n            const schoolName = ref('');\n            const schoolWaive = ref({});\n            const products = ref([]);\n            const noPlanMessage = ref('');\n            const productQuoteMap = reactive({});\n            const productQuoteLoadingMap = reactive({});\n            const faqItems = ref([]);\n            const loading = ref(true);\n            const errorMessage = ref('');\n            const selectedAge = ref(ageRange.min);\n            const dateOfBirth = ref('');\n            const nativeDateOfBirth = ref('');\n            const billingCycle = ref('yearly');\n            const viewMore = ref(false);\n            const selectedForCompare = ref([]);\n            const showCompareModal = ref(false);\n            const showLoginModal = ref(false);\n            const showPurchaseModal = ref(false);\n            const bannerMessage = ref('');\n            const notice = ref({ message: '', type: 'info' });\n            const noticePanelOpen = ref(false);\n            const selectedSeriesOptions = ref({});\n            const hoveredCompareTooltipKey = ref('');\n            const pinnedCompareTooltipKey = ref('');\n            const openedFaqIndexes = ref([0]);\n            const waiverRequirementsOpen = ref(false);\n            const activeWaiverGuideStepIndex = ref(0);\n            const waiverGuideUserUnlocked = ref(false);\n            const showWaiverGuideUnlockModal = ref(false);\n            const waiverGuideUnlockLoading = ref(false);\n            const pendingWaiverGuideStepIndex = ref(1);\n            const emailSubmitted = ref(false);\n            const loginLoading = ref(false);\n            const loginModalIntent = ref('enrollment');\n            const loginForm = reactive({\n                email: '',\n                password: ''\n            });\n            const mfa = reactive({\n                active: false,\n                challengeToken: '',\n                expiresAt: '',\n                code: '',\n                recoveryCode: '',\n                useRecovery: false,\n                submitting: false,\n                error: ''\n            });\n            const loginErrors = reactive({\n                emailMessage: '',\n                errorMessage: ''\n            });\n            const purchaseSubmitting = ref(false);\n            const showReferralFields = ref(false);\n            const purchaseModalPlan = ref(null);\n            const mobileDateInput = ref(null);\n            const desktopDateInput = ref(null);\n            let mobileDatePickerInstance = null;\n            let desktopDatePickerInstance = null;\n            let isSyncingDatePickers = false;\n            let quoteRequestTimer = null;\n            let quoteRequestSeq = 0;\n            const referralForm = reactive({\n                email: '',\n                code: ''\n            });\n            const referralMessage = ref('');\n            const referralMessageType = ref('success');\n            let noticeTimer = null;\n            const copy = computed(() => translations[lang] || translations.en);\n\n            const allFeatures = computed(() => {\n                return featureDefinition.map((feature) => ({\n                    ...feature,\n                    label: copy.value.featureLabels[feature.key],\n                    tooltip: (tooltips[lang] && tooltips[lang][feature.key]) || ''\n                }));\n            });\n\n            const visibleFeatures = computed(() => {\n                return allFeatures.value.filter((feature) => viewMore.value || !feature.advanced);\n            });\n\n            const ageProgress = computed(() => {\n                return ((selectedAge.value - ageRange.min) \/ (ageRange.max - ageRange.min)) * 100;\n            });\n\n            const getSchoolNameParts = (value) => {\n                const safeName = String(value || '').replace(\/\\s+\/g, ' ').trim();\n                const matchedAbbreviation = safeName.match(\/[\\(\uff08]\\s*([^()\uff08\uff09]+?)\\s*[\\)\uff09]\/);\n                const rawAbbreviation = matchedAbbreviation && matchedAbbreviation[1]\n                    ? matchedAbbreviation[1].trim()\n                    : '';\n                const abbreviation = rawAbbreviation && rawAbbreviation.length <= 12\n                    ? rawAbbreviation\n                    : '';\n                const baseName = safeName\n                    .replace(\/\\s*[\\(\uff08][^()\uff08\uff09]+[\\)\uff09]\\s*\/g, ' ')\n                    .replace(\/\\s+\/g, ' ')\n                    .trim();\n\n                return {\n                    baseName: baseName || safeName,\n                    abbreviation,\n                    seoName: safeName || baseName\n                };\n            };\n\n            const schoolNameParts = computed(() => getSchoolNameParts(schoolName.value || copy.value.defaultSchoolName));\n\n            const schoolDisplayName = computed(() => (\n                schoolNameParts.value.baseName || copy.value.defaultSchoolName\n            ));\n\n            const heroTitle = computed(() => `${schoolNameParts.value.seoName || schoolDisplayName.value}${copy.value.heroTitleSuffix}`);\n\n            const heroSeoTitle = computed(() => `${schoolNameParts.value.seoName || schoolDisplayName.value}${copy.value.heroTitleSuffix}`);\n\n            const hasMeaningfulText = (value) => {\n                const text = String(value || '').trim();\n                return Boolean(text) && !\/^(n\\\/a|na|null|undefined|none)$\/i.test(text);\n            };\n\n            const getNoPlanMessage = (payload = {}, responseData = {}) => {\n                const candidates = [\n                    payload.no_plan_message,\n                    payload.schools?.no_plan_message,\n                    payload.school?.no_plan_message,\n                    payload.school_waive?.no_plan_message,\n                    responseData.message\n                ];\n\n                const message = candidates\n                    .map((value) => (hasMeaningfulText(value) ? String(value).trim() : ''))\n                    .find((value) => value && !\/^(success|ok)$\/i.test(value));\n\n                return message || '';\n            };\n\n            const getSchoolWaiveText = (field) => (\n                hasMeaningfulText(schoolWaive.value[field])\n                    ? String(schoolWaive.value[field]).trim()\n                    : ''\n            );\n\n            const getEquityPanelIcon = (title, content, fallbackIcon = 'info') => {\n                const sourceText = `${title || ''} ${content || ''}`.toLowerCase();\n                if (!sourceText) {\n                    return fallbackIcon;\n                }\n\n                if (\/(waiver|delivery|deliver|email|mail|form|document|submit|notification|notice|\u8c41\u514d|\u8868\u5355|\u90ae\u4ef6|\u90ae\u7bb1|\u53d1\u9001)\/i.test(sourceText)) {\n                    return 'mail';\n                }\n\n                if (\/(graduate|graduation|student|semester|campus|school|\u5b66\u4f4d|\u6bd5\u4e1a|\u5b66\u751f|\u5b66\u671f|\u5b66\u6821)\/i.test(sourceText)) {\n                    return 'graduation';\n                }\n\n                if (\/(deadline|date|period|schedule|timeline|term|start|end|time|\u65e5\u671f|\u622a\u6b62|\u65f6\u95f4|\u5468\u671f)\/i.test(sourceText)) {\n                    return 'calendar';\n                }\n\n                if (\/(coverage|benefit|policy|plan|insurance|refund|protection|\u4fdd\u969c|\u4fdd\u9669|\u8ba1\u5212|\u653f\u7b56|\u9000\u6b3e)\/i.test(sourceText)) {\n                    return 'shield';\n                }\n\n                return fallbackIcon;\n            };\n\n            const schoolPageModules = computed(() => {\n                const modules = schoolWaive.value && typeof schoolWaive.value.school_page_modules === 'object'\n                    ? schoolWaive.value.school_page_modules\n                    : {};\n                return modules || {};\n            });\n\n            const normalizeModuleIcon = (icon, fallbackIcon = 'info') => {\n                const normalizedIcon = String(icon || '').trim().toLowerCase();\n                if (!normalizedIcon) {\n                    return fallbackIcon;\n                }\n\n                if (normalizedIcon === 'graduation-cap' || normalizedIcon === 'graduationcap' || normalizedIcon === 'graduation') {\n                    return 'graduation-cap';\n                }\n                if (normalizedIcon === 'file-text' || normalizedIcon === 'document' || normalizedIcon === 'file') {\n                    return 'document';\n                }\n                if (normalizedIcon === 'x' || normalizedIcon === 'times') {\n                    return 'close';\n                }\n                if (normalizedIcon === 'tick') {\n                    return 'check';\n                }\n                return normalizedIcon;\n            };\n\n            const normalizeModuleListItem = (item, index, fallbackIcon = 'info') => {\n                if (!item || typeof item !== 'object') {\n                    return null;\n                }\n\n                const title = hasMeaningfulText(item.title) ? String(item.title).trim() : '';\n                const content = hasMeaningfulText(item.content) ? String(item.content).trim() : '';\n                const text = hasMeaningfulText(item.text) ? String(item.text).trim() : '';\n                const subtitle = hasMeaningfulText(item.subtitle) ? String(item.subtitle).trim() : '';\n                const step = hasMeaningfulText(item.step) ? String(item.step).trim() : '';\n\n                if (!title && !content && !text && !subtitle && !step) {\n                    return null;\n                }\n\n                return {\n                    key: item.key || item.id || `${fallbackIcon}-${index}`,\n                    icon: normalizeModuleIcon(item.icon, fallbackIcon),\n                    title,\n                    content,\n                    text,\n                    subtitle,\n                    step\n                };\n            };\n\n            const getNormalizedModuleItems = (items, fallbackIcon = 'info') => (\n                Array.isArray(items)\n                    ? items.map((item, index) => normalizeModuleListItem(item, index, fallbackIcon)).filter(Boolean)\n                    : []\n            );\n\n            const schoolNoticePanel = computed(() => {\n                const module = schoolPageModules.value.notice_panel || schoolPageModules.value.refund_guarantee;\n                return module && typeof module === 'object' ? module : {};\n            });\n\n            const refundBadgeText = computed(() => (\n                hasMeaningfulText(schoolNoticePanel.value.badge_text)\n                    ? String(schoolNoticePanel.value.badge_text).trim()\n                    : (\n                        hasMeaningfulText(schoolWaive.value.waiver_notice_text)\n                            ? String(schoolWaive.value.waiver_notice_text).trim()\n                            : ''\n                    )\n            ));\n\n            const noticePanelTitle = computed(() => (\n                hasMeaningfulText(schoolNoticePanel.value.panel_title)\n                    ? String(schoolNoticePanel.value.panel_title).trim()\n                    : (\n                        hasMeaningfulText(schoolWaive.value.refund_panel_title)\n                            ? String(schoolWaive.value.refund_panel_title).trim()\n                            : copy.value.refundPolicyDetails\n                    )\n            ));\n\n            const noticePanelItems = computed(() => {\n                const moduleItems = getNormalizedModuleItems(schoolNoticePanel.value.items, 'info');\n                if (moduleItems.length) {\n                    return moduleItems;\n                }\n\n                const legacyItems = [\n                    {\n                        icon: 'check',\n                        title: getSchoolWaiveText('refund_success_title'),\n                        content: getSchoolWaiveText('refund_success_content')\n                    },\n                    {\n                        icon: 'close',\n                        title: getSchoolWaiveText('refund_claim_title'),\n                        content: getSchoolWaiveText('refund_claim_content')\n                    },\n                    {\n                        icon: 'info',\n                        title: getSchoolWaiveText('refund_other_title'),\n                        content: getSchoolWaiveText('refund_other_content')\n                    }\n                ];\n\n                return legacyItems\n                    .map((item, index) => normalizeModuleListItem(item, index, item.icon))\n                    .filter(Boolean);\n            });\n\n            const equityInformationModule = computed(() => {\n                const module = schoolPageModules.value.equity_information;\n                return module && typeof module === 'object' ? module : {};\n            });\n\n            const waiverNoticeText = computed(() => refundBadgeText.value);\n\n            const equityInfoTitle = computed(() => (\n                hasMeaningfulText(equityInformationModule.value.title)\n                    ? String(equityInformationModule.value.title).trim()\n                    : (\n                        hasMeaningfulText(schoolWaive.value.equity_info_title)\n                            ? String(schoolWaive.value.equity_info_title).trim()\n                            : copy.value.importantInfo\n                    )\n            ));\n\n            const equityInfoSubtitle = computed(() => (\n                hasMeaningfulText(equityInformationModule.value.subtitle)\n                    ? String(equityInformationModule.value.subtitle).trim()\n                    : (\n                        hasMeaningfulText(schoolWaive.value.equity_info_subtitle)\n                            ? String(schoolWaive.value.equity_info_subtitle).trim()\n                            : ''\n                    )\n            ));\n\n            const equityHighlights = computed(() => {\n                const moduleItems = getNormalizedModuleItems(equityInformationModule.value.highlights, 'check');\n                if (moduleItems.length) {\n                    return moduleItems;\n                }\n\n                const legacyHighlights = [\n                    getSchoolWaiveText('equity_highlight_item_1'),\n                    getSchoolWaiveText('equity_highlight_item_2'),\n                    getSchoolWaiveText('equity_highlight_item_3'),\n                    getSchoolWaiveText('equity_highlight_item_4')\n                ].filter(Boolean);\n\n                return legacyHighlights.map((text, index) => ({\n                    key: `legacy-equity-highlight-${index}`,\n                    icon: 'check',\n                    text\n                }));\n            });\n\n            const equityCards = computed(() => {\n                const moduleCards = getNormalizedModuleItems(equityInformationModule.value.cards, 'info');\n                if (moduleCards.length) {\n                    return moduleCards;\n                }\n\n                const panelDefinitions = [\n                    {\n                        key: 'left',\n                        titleField: 'waiver_item_left_title',\n                        contentField: 'waiver_item_left_content',\n                        fallbackIcon: 'mail'\n                    },\n                    {\n                        key: 'right',\n                        titleField: 'waiver_item_right_title',\n                        contentField: 'waiver_item_right_content',\n                        fallbackIcon: 'graduation-cap'\n                    },\n                    {\n                        key: 'third',\n                        titleField: 'waiver_item_third_title',\n                        contentField: 'waiver_item_third_content',\n                        fallbackIcon: 'calendar'\n                    },\n                    {\n                        key: 'fourth',\n                        titleField: 'waiver_item_fourth_title',\n                        contentField: 'waiver_item_fourth_content',\n                        fallbackIcon: 'shield'\n                    }\n                ];\n\n                return panelDefinitions.reduce((items, panel) => {\n                    const title = getSchoolWaiveText(panel.titleField);\n                    const content = getSchoolWaiveText(panel.contentField);\n                    if (!title && !content) {\n                        return items;\n                    }\n\n                    items.push({\n                        key: panel.key,\n                        icon: getEquityPanelIcon(title, content, panel.fallbackIcon),\n                        title,\n                        content\n                    });\n\n                    return items;\n                }, []);\n            });\n\n            const equityCardGridClass = computed(() => {\n                const panelCount = equityCards.value.length;\n                if (panelCount >= 4) {\n                    return 'md:grid-cols-2 xl:grid-cols-2';\n                }\n                if (panelCount === 3) {\n                    return 'md:grid-cols-2 xl:grid-cols-3';\n                }\n                if (panelCount === 2) {\n                    return 'md:grid-cols-2';\n                }\n                return 'md:grid-cols-1';\n            });\n\n            const waiverRequirementsModule = computed(() => {\n                const module = schoolPageModules.value.waiver_requirements;\n                return module && typeof module === 'object' ? module : {};\n            });\n\n            const escapeHtml = (value) => String(value || '')\n                .replace(\/&\/g, '&amp;')\n                .replace(\/<\/g, '&lt;')\n                .replace(\/>\/g, '&gt;')\n                .replace(\/\"\/g, '&quot;')\n                .replace(\/'\/g, '&#39;');\n\n            const escapeAttribute = (value) => escapeHtml(value).replace(\/`\/g, '&#96;');\n\n            const buildInlineLinkHtml = (text, link) => {\n                const sourceText = hasMeaningfulText(text) ? String(text).trim() : '';\n                if (!sourceText) {\n                    return '';\n                }\n\n                const linkText = link && hasMeaningfulText(link.text) ? String(link.text).trim() : '';\n                const linkUrl = link && hasMeaningfulText(link.url) ? String(link.url).trim() : '';\n                if (!linkText || !linkUrl) {\n                    return escapeHtml(sourceText);\n                }\n\n                const safeLink = `<a href=\"${escapeAttribute(linkUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"ggs-requirements-inline-link\">${escapeHtml(linkText)}<\/a>`;\n                const matchedIndex = sourceText.indexOf(linkText);\n\n                if (matchedIndex === -1) {\n                    return `${escapeHtml(sourceText)} ${safeLink}`;\n                }\n\n                const before = escapeHtml(sourceText.slice(0, matchedIndex));\n                const after = escapeHtml(sourceText.slice(matchedIndex + linkText.length));\n                return `${before}${safeLink}${after}`;\n            };\n\n            const waiverRequirementsTitle = computed(() => (\n                hasMeaningfulText(waiverRequirementsModule.value.title)\n                    ? String(waiverRequirementsModule.value.title).trim()\n                    : getSchoolWaiveText('compliance_module_title')\n            ));\n\n            const waiverRequirementsSubtitle = computed(() => (\n                hasMeaningfulText(waiverRequirementsModule.value.subtitle)\n                    ? String(waiverRequirementsModule.value.subtitle).trim()\n                    : getSchoolWaiveText('compliance_module_subtitle')\n            ));\n\n            const waiverRequirementsIntroHtml = computed(() => buildInlineLinkHtml(\n                hasMeaningfulText(waiverRequirementsModule.value.intro)\n                    ? waiverRequirementsModule.value.intro\n                    : getSchoolWaiveText('compliance_intro'),\n                waiverRequirementsModule.value.intro_link || {\n                    text: getSchoolWaiveText('compliance_intro_link_text'),\n                    url: getSchoolWaiveText('compliance_intro_link_url')\n                }\n            ));\n\n            const waiverRequirementsDescription = computed(() => (\n                hasMeaningfulText(waiverRequirementsModule.value.description)\n                    ? String(waiverRequirementsModule.value.description).trim()\n                    : getSchoolWaiveText('compliance_description')\n            ));\n\n            const waiverRequirementsChecklist = computed(() => {\n                const moduleItems = getNormalizedModuleItems(waiverRequirementsModule.value.checklist, 'check');\n                if (moduleItems.length) {\n                    return moduleItems;\n                }\n\n                return [\n                    getSchoolWaiveText('compliance_item_1'),\n                    getSchoolWaiveText('compliance_item_2'),\n                    getSchoolWaiveText('compliance_item_3'),\n                    getSchoolWaiveText('compliance_item_4'),\n                    getSchoolWaiveText('compliance_item_5')\n                ].filter(Boolean).map((text, index) => ({\n                    key: `legacy-compliance-item-${index}`,\n                    icon: 'check',\n                    text\n                }));\n            });\n\n            const showWaiverRequirements = computed(() => (\n                !!waiverRequirementsTitle.value ||\n                !!waiverRequirementsSubtitle.value ||\n                !!waiverRequirementsIntroHtml.value ||\n                !!waiverRequirementsDescription.value ||\n                waiverRequirementsChecklist.value.length > 0\n            ));\n\n            const waiverStepGuideModule = computed(() => {\n                const module = schoolPageModules.value.waiver_step_guide;\n                return module && typeof module === 'object' ? module : {};\n            });\n\n            const waiverGuideTitle = computed(() => (\n                hasMeaningfulText(waiverStepGuideModule.value.title)\n                    ? String(waiverStepGuideModule.value.title).trim()\n                    : getSchoolWaiveText('waiver_guide_title')\n            ));\n\n            const waiverGuideHighlightText = computed(() => (\n                hasMeaningfulText(waiverStepGuideModule.value.highlight_text)\n                    ? String(waiverStepGuideModule.value.highlight_text).trim()\n                    : getSchoolWaiveText('waiver_guide_highlight_text')\n            ));\n\n            const waiverGuideSubtitle = computed(() => (\n                hasMeaningfulText(waiverStepGuideModule.value.subtitle)\n                    ? String(waiverStepGuideModule.value.subtitle).trim()\n                    : getSchoolWaiveText('waiver_guide_subtitle')\n            ));\n\n            const waiverGuideSteps = computed(() => getNormalizedModuleItems(waiverStepGuideModule.value.steps, 'step').map((item, index) => ({\n                key: item.key || `waiver-step-${index}`,\n                step: item.step || String(index + 1),\n                icon: item.icon || 'step',\n                title: item.title,\n                subtitle: item.subtitle,\n                content: item.content\n            })));\n\n            const waiverGuideLink = computed(() => {\n                const moduleGuideLink = waiverStepGuideModule.value.guide_link && typeof waiverStepGuideModule.value.guide_link === 'object'\n                    ? waiverStepGuideModule.value.guide_link\n                    : {};\n\n                return {\n                    text: hasMeaningfulText(moduleGuideLink.text)\n                        ? String(moduleGuideLink.text).trim()\n                        : getSchoolWaiveText('waiver_guide_link_text'),\n                    url: hasMeaningfulText(moduleGuideLink.url)\n                        ? String(moduleGuideLink.url).trim()\n                        : getSchoolWaiveText('waiver_guide_link_url')\n                };\n            });\n\n            const parseBooleanLike = (value) => {\n                if (typeof value === 'boolean') {\n                    return value;\n                }\n\n                if (typeof value === 'number') {\n                    return value === 1;\n                }\n\n                const normalized = String(value || '').trim().toLowerCase();\n                if (!normalized) {\n                    return false;\n                }\n\n                if (['1', 'true', 'yes', 'y', 'paid', 'purchased', 'complete', 'completed', 'success', 'unlocked'].includes(normalized)) {\n                    return true;\n                }\n\n                if (['0', 'false', 'no', 'n', 'unpaid', 'pending', 'locked'].includes(normalized)) {\n                    return false;\n                }\n\n                return false;\n            };\n\n            const waiverGuidePurchased = computed(() => {\n                const candidates = [\n                    waiverStepGuideModule.value.is_purchased,\n                    waiverStepGuideModule.value.has_purchased,\n                    waiverStepGuideModule.value.purchased,\n                    waiverStepGuideModule.value.isPurchased,\n                    waiverStepGuideModule.value.hasPurchased,\n                    waiverStepGuideModule.value.purchase_unlocked,\n                    waiverStepGuideModule.value.is_unlocked,\n                    schoolWaive.value.waiver_guide_purchased,\n                    schoolWaive.value.is_purchased,\n                    schoolWaive.value.has_purchased,\n                    schoolWaive.value.purchased,\n                    schoolWaive.value.isPurchased,\n                    schoolWaive.value.hasPurchased\n                ];\n\n                return candidates.some(parseBooleanLike);\n            });\n\n            const waiverGuideAccessGranted = computed(() => waiverGuidePurchased.value || waiverGuideUserUnlocked.value);\n            const showWaiverGuide = computed(() => waiverGuideSteps.value.length > 0);\n            const isWaiverGuideStepLocked = (index) => index > 0 && !waiverGuideAccessGranted.value;\n            const activeWaiverGuideStep = computed(() => {\n                if (!waiverGuideSteps.value.length) {\n                    return null;\n                }\n                const nextIndex = Math.min(Math.max(activeWaiverGuideStepIndex.value, 0), waiverGuideSteps.value.length - 1);\n                return waiverGuideSteps.value[nextIndex] || null;\n            });\n\n            watch(waiverGuideSteps, (steps) => {\n                if (!steps.length) {\n                    activeWaiverGuideStepIndex.value = 0;\n                    return;\n                }\n\n                if (activeWaiverGuideStepIndex.value >= steps.length || isWaiverGuideStepLocked(activeWaiverGuideStepIndex.value)) {\n                    activeWaiverGuideStepIndex.value = 0;\n                }\n            }, { immediate: true });\n\n            watch(waiverGuideAccessGranted, (granted) => {\n                if (!granted && activeWaiverGuideStepIndex.value > 0) {\n                    activeWaiverGuideStepIndex.value = 0;\n                }\n            });\n\n            const getModuleIconSvg = (icon) => {\n                switch (normalizeModuleIcon(icon)) {\n                    case 'check':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m5 12 4 4L19 6\"><\/path><\/svg>';\n                    case 'close':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"><\/path><path d=\"m6 6 12 12\"><\/path><\/svg>';\n                    case 'shield':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 2 5 5v6c0 5 3.5 9 7 11 3.5-2 7-6 7-11V5l-7-3Z\"><\/path><path d=\"m9 12 2 2 4-4\"><\/path><\/svg>';\n                    case 'mail':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"14\" x=\"3\" y=\"5\" rx=\"2\"><\/rect><path d=\"m3 7 9 6 9-6\"><\/path><\/svg>';\n                    case 'calendar':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 2v4\"><\/path><path d=\"M16 2v4\"><\/path><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"><\/rect><path d=\"M3 10h18\"><\/path><\/svg>';\n                    case 'clock':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M12 6v6l4 2\"><\/path><\/svg>';\n                    case 'lock':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"><\/rect><path d=\"M8 11V8a4 4 0 1 1 8 0v3\"><\/path><\/svg>';\n                    case 'graduation-cap':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m22 10-10-5-10 5 10 5 10-5Z\"><\/path><path d=\"M6 12v5c3 2 9 2 12 0v-5\"><\/path><path d=\"M22 10v6\"><\/path><\/svg>';\n                    case 'document':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"><\/path><path d=\"M14 2v6h6\"><\/path><path d=\"M16 13H8\"><\/path><path d=\"M16 17H8\"><\/path><path d=\"M10 9H8\"><\/path><\/svg>';\n                    case 'star':\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m12 3.5 2.8 5.67 6.26.91-4.53 4.42 1.07 6.25L12 17.8 6.4 20.75l1.07-6.25-4.53-4.42 6.26-.91L12 3.5Z\"><\/path><\/svg>';\n                    case 'info':\n                    default:\n                        return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M12 16v-4\"><\/path><path d=\"M12 8h.01\"><\/path><\/svg>';\n                }\n            };\n\n            const hasCoveragePeriod = computed(() => {\n                return hasMeaningfulText(schoolWaive.value.coverage_start_date) || hasMeaningfulText(schoolWaive.value.coverage_end_date);\n            });\n\n            const coveragePeriodText = computed(() => {\n                const start = hasMeaningfulText(schoolWaive.value.coverage_start_date) ? String(schoolWaive.value.coverage_start_date).trim() : '';\n                const end = hasMeaningfulText(schoolWaive.value.coverage_end_date) ? String(schoolWaive.value.coverage_end_date).trim() : '';\n                if (!start && !end) {\n                    return '';\n                }\n                if (start && end) {\n                    return `${start} - ${end}`;\n                }\n                return start || end;\n            });\n\n            const hasWaiveDeadline = computed(() => hasMeaningfulText(schoolWaive.value.waive_deadline));\n\n            const parseCoverageDate = (value) => {\n                if (!value) {\n                    return null;\n                }\n\n                const text = String(value).trim();\n                const matched = text.match(\/^(\\d{4})[\\\/-](\\d{1,2})[\\\/-](\\d{1,2})$\/);\n                if (matched) {\n                    const year = Number(matched[1]);\n                    const month = Number(matched[2]);\n                    const day = Number(matched[3]);\n                    const parsed = new Date(year, month - 1, day);\n                    return Number.isNaN(parsed.getTime()) ? null : parsed;\n                }\n\n                const fallback = new Date(text);\n                if (Number.isNaN(fallback.getTime())) {\n                    return null;\n                }\n\n                return new Date(fallback.getFullYear(), fallback.getMonth(), fallback.getDate());\n            };\n\n            const todayIso = computed(() => {\n                const today = new Date();\n                const year = today.getFullYear();\n                const month = String(today.getMonth() + 1).padStart(2, '0');\n                const day = String(today.getDate()).padStart(2, '0');\n                return `${year}-${month}-${day}`;\n            });\n\n            const useSchoolRequiredPricing = computed(() => {\n                const coverageStart = parseCoverageDate(schoolWaive.value.coverage_start_date);\n                const coverageEnd = parseCoverageDate(schoolWaive.value.coverage_end_date);\n\n                if (!coverageStart || !coverageEnd || coverageEnd < coverageStart) {\n                    return false;\n                }\n\n                const currentYear = new Date().getFullYear();\n                const currentYearStart = new Date(currentYear, 0, 1);\n                const currentYearEnd = new Date(currentYear, 11, 31);\n\n                return coverageStart <= currentYearEnd && coverageEnd >= currentYearStart;\n            });\n\n            const billingToggleSecondaryLabel = computed(() => (\n                useSchoolRequiredPricing.value ? copy.value.schoolPrice : copy.value.yearly\n            ));\n\n            const billingPriceUnitLabel = computed(() => {\n                if (billingCycle.value === 'monthly') {\n                    return copy.value.month;\n                }\n\n                if (useSchoolRequiredPricing.value) {\n                    return '';\n                }\n\n                return copy.value.year;\n            });\n\n            const billingPriceUnitShortLabel = computed(() => {\n                if (billingCycle.value === 'monthly') {\n                    return copy.value.monthShort;\n                }\n\n                if (useSchoolRequiredPricing.value) {\n                    return '';\n                }\n\n                return copy.value.yearShort;\n            });\n\n            const filteredProducts = computed(() => {\n                return products.value\n                    .map((product) => ({\n                        ...product,\n                        quotePremiums: getProductQuoteEntry(product),\n                        currentPrice: getQuotePrimaryPrice(product)\n                    }));\n            });\n\n            const noPlanDisplayMessage = computed(() => (\n                hasMeaningfulText(noPlanMessage.value)\n                    ? String(noPlanMessage.value).trim()\n                    : copy.value.noProductsDescription\n            ));\n\n            const compareablePlans = computed(() => {\n                const entries = [];\n                const seriesGroups = collectSeriesGroups(filteredProducts.value);\n\n                filteredProducts.value.forEach((product) => {\n                    const seriesKey = getSeriesKey(product.name);\n                    const optionValue = getSeriesOptionValue(product.name);\n\n                    if (seriesKey && optionValue !== null) {\n                        const group = seriesGroups.get(seriesKey);\n                        if (group) {\n                            entries.push({\n                                ...product,\n                                name: group.baseName,\n                                compareName: getSeriesCompareName(group.baseName, optionValue),\n                                compareId: `${seriesKey}-${optionValue}`,\n                                rawProduct: product,\n                                hasOptionTabs: true,\n                                optionTabs: group.options,\n                                selectedOption: optionValue,\n                                seriesKey: seriesKey || '',\n                                isPopular: false\n                            });\n                            return;\n                        }\n                    }\n\n                    entries.push({\n                        ...product,\n                        compareName: normalizePlanName(product.name),\n                        compareId: String(product.id),\n                        rawProduct: product,\n                        hasOptionTabs: false,\n                        optionTabs: [],\n                        selectedOption: null,\n                        seriesKey: '',\n                        isPopular: false\n                    });\n                });\n\n                return entries;\n            });\n\n            const selectedCompareProducts = computed(() => {\n                const productMap = new Map(compareablePlans.value.map((product) => [String(product.compareId), product]));\n                return selectedForCompare.value\n                    .slice(0, maxComparePlans)\n                    .map((id) => productMap.get(id))\n                    .filter(Boolean);\n            });\n\n            const compareSlots = computed(() => {\n                const slots = [...selectedCompareProducts.value];\n                while (slots.length < maxComparePlans) {\n                    slots.push(null);\n                }\n                return slots.slice(0, maxComparePlans);\n            });\n\n            const hasMeaningfulFeatureValue = (value) => {\n                return hasMeaningfulText(value) && value !== '-';\n            };\n\n            const compareFeatures = computed(() => {\n                const sourceProducts = selectedCompareProducts.value.length\n                    ? selectedCompareProducts.value\n                    : compareablePlans.value;\n\n                return [\n                    ...allFeatures.value,\n                    ...compareOnlyFeatureDefinition.map((feature) => ({\n                        ...feature,\n                        label: copy.value.featureLabels[feature.key] || feature.key,\n                        tooltip: (tooltips[lang] && tooltips[lang][feature.key]) || ''\n                    }))\n                ].filter((feature) => (\n                    sourceProducts.some((product) => hasMeaningfulFeatureValue(getFeatureDisplay(product, feature.key)))\n                ));\n            });\n\n            const setHoveredCompareTooltip = (featureKey) => {\n                hoveredCompareTooltipKey.value = featureKey;\n            };\n\n            const clearHoveredCompareTooltip = (featureKey) => {\n                if (hoveredCompareTooltipKey.value === featureKey) {\n                    hoveredCompareTooltipKey.value = '';\n                }\n            };\n\n            const toggleCompareTooltip = (featureKey) => {\n                pinnedCompareTooltipKey.value = pinnedCompareTooltipKey.value === featureKey ? '' : featureKey;\n                hoveredCompareTooltipKey.value = featureKey;\n            };\n\n            const clearCompareTooltip = () => {\n                hoveredCompareTooltipKey.value = '';\n                pinnedCompareTooltipKey.value = '';\n            };\n\n            const isCompareTooltipVisible = (featureKey) => {\n                return hoveredCompareTooltipKey.value === featureKey || pinnedCompareTooltipKey.value === featureKey;\n            };\n\n            const startingMonthlyPrice = computed(() => {\n                const prices = filteredProducts.value\n                    .map((product) => Number(getDisplayPrice(product, false) || 0))\n                    .filter((price) => price > 0);\n                if (!prices.length) {\n                    return 0;\n                }\n                return Math.min(...prices);\n            });\n\n            const startingYearlyPrice = computed(() => {\n                const prices = filteredProducts.value\n                    .map((product) => Number(getDisplayPrice(product, true) || 0))\n                    .filter((price) => price > 0);\n                if (!prices.length) {\n                    return 0;\n                }\n                return Math.min(...prices);\n            });\n\n            const schoolPlanPrice = computed(() => {\n                const price = Number(schoolWaive.value.price || 0);\n                return Number.isFinite(price) ? price : 0;\n            });\n\n            const potentialSavings = computed(() => {\n                const value = schoolPlanPrice.value - startingYearlyPrice.value;\n                return value > 0 ? value : 0;\n            });\n\n            const heroSavings = computed(() => {\n                return potentialSavings.value > 0 ? potentialSavings.value : schoolPlanPrice.value;\n            });\n\n            const heroSavingsDisplay = computed(() => {\n                return Math.round(Number(heroSavings.value || 0)).toLocaleString('en-US');\n            });\n\n            const heroSavingsText = computed(() => {\n                if (heroSavings.value > 0) {\n                    return `$${heroSavingsDisplay.value}`;\n                }\n                return copy.value.saveALot;\n            });\n\n            const heroDescription = computed(() => {\n                if (lang === 'zh') {\n                    return `\u8fd9\u91cc\u4f7f\u7528\u5168\u65b0\u7684\u5361\u7247\u5f0f\u754c\u9762\u5c55\u793a ${schoolDisplayName.value} \u7684\u4fdd\u9669\u65b9\u6848\uff0c\u540c\u65f6\u7ee7\u7eed\u6cbf\u7528\u65e7\u7248\u63a5\u53e3\u4e2d\u7684 school_waive\u3001\u5e74\u9f84\u4ef7\u683c\u533a\u95f4\u3001\u8be6\u60c5\u94fe\u63a5\u548c\u8d2d\u4e70\u8df3\u8f6c\u903b\u8f91\u3002`;\n                }\n                return `This refreshed card-based layout for ${schoolDisplayName.value} keeps the original API-driven school_waive data, age-based pricing, brochure links, and purchase flow intact.`;\n            });\n\n            const purchaseModalPlanName = computed(() => {\n                if (!purchaseModalPlan.value) {\n                    return schoolDisplayName.value;\n                }\n                return purchaseModalPlan.value.compareName || purchaseModalPlan.value.name || schoolDisplayName.value;\n            });\n\n            const isReferralEmailValid = computed(() => {\n                if (!referralForm.email) {\n                    return false;\n                }\n                return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(String(referralForm.email).trim());\n            });\n\n            const showNotice = (message, type = 'info') => {\n                notice.value = { message, type };\n                if (noticeTimer) {\n                    clearTimeout(noticeTimer);\n                }\n                noticeTimer = setTimeout(() => {\n                    notice.value = { message: '', type: 'info' };\n                }, 2400);\n            };\n\n            const getHttpClient = () => {\n                if (window.apiClient && typeof window.apiClient.post === 'function' && typeof window.apiClient.get === 'function') {\n                    return window.apiClient;\n                }\n                return fallbackHttpClient;\n            };\n\n            const getClientId = () => {\n                const gaCookie = document.cookie.split(';').find((cookie) => cookie.trim().startsWith('_ga='));\n                if (!gaCookie) {\n                    return null;\n                }\n                const parts = gaCookie.split('.');\n                return parts.length >= 4 ? `${parts[2]}.${parts[3]}` : null;\n            };\n\n            const getSource = () => {\n                if (String(localStorage.getItem('blog_source') || '').trim() === blogTrackingSource) {\n                    return blogTrackingSource;\n                }\n                if (String(searchParams.get('source') || '').trim() === blogTrackingSource) {\n                    return blogTrackingSource;\n                }\n                if (localStorage.getItem('yisihui_source')) {\n                    return '\u6613\u601d\u6c47';\n                }\n                if (localStorage.getItem('yisihui')) {\n                    return '\u6613\u601d\u6c47';\n                }\n                if (localStorage.getItem('tripalink')) {\n                    return 'TripAlink';\n                }\n                if (localStorage.getItem('indigo')) {\n                    return 'Indigo';\n                }\n                if (localStorage.getItem('ggs')) {\n                    return `\u5e02\u573a\u90e8${localStorage.getItem('ggs')}`;\n                }\n                if (localStorage.getItem('yshlulu')) {\n                    return '\u6613\u601d\u6c47lulu';\n                }\n                return 'GGS';\n            };\n\n            const sanitizeHtmlToText = (value) => {\n                return String(value || '')\n                    .replace(\/<[^>]*>\/g, ' ')\n                    .replace(\/&nbsp;\/gi, ' ')\n                    .replace(\/\\s+\/g, ' ')\n                    .trim();\n            };\n\n            const toggleWaiverRequirements = () => {\n                waiverRequirementsOpen.value = !waiverRequirementsOpen.value;\n            };\n\n            const normalizeSchoolCompareValue = (value) => {\n                return String(value || '')\n                    .toLowerCase()\n                    .replace(\/&\/g, ' and ')\n                    .replace(\/\\([^)]*\\)\/g, ' ')\n                    .replace(\/[^a-z0-9]+\/g, ' ')\n                    .replace(\/\\s+\/g, ' ')\n                    .trim();\n            };\n\n            const schoolValuesMatch = (left, right) => {\n                const normalizedLeft = normalizeSchoolCompareValue(left);\n                const normalizedRight = normalizeSchoolCompareValue(right);\n                if (!normalizedLeft || !normalizedRight) {\n                    return false;\n                }\n                return normalizedLeft === normalizedRight\n                    || normalizedLeft.includes(normalizedRight)\n                    || normalizedRight.includes(normalizedLeft);\n            };\n\n            const readCachedCurrentUserInfo = () => {\n                const cachedValue = localStorage.getItem('user_info');\n                if (!cachedValue) {\n                    return null;\n                }\n                try {\n                    return JSON.parse(cachedValue);\n                } catch (error) {\n                    return null;\n                }\n            };\n\n            const storeCurrentUserInfo = (userInfo) => {\n                if (!userInfo || typeof userInfo !== 'object') {\n                    return null;\n                }\n                localStorage.setItem('user_info', JSON.stringify(userInfo));\n                return userInfo;\n            };\n\n            const getCurrentSchoolCandidateIds = () => {\n                return [\n                    schoolId.value,\n                    schoolWaive.value.school_id,\n                    schoolWaive.value.schoolId\n                ].map((value) => String(value || '').trim()).filter(Boolean);\n            };\n\n            const getCurrentSchoolCandidateNames = () => {\n                return [\n                    schoolName.value,\n                    schoolDisplayName.value,\n                    schoolWaive.value.schoole_name,\n                    schoolWaive.value.school_name,\n                    schoolWaive.value.schoolName\n                ].map((value) => String(value || '').trim()).filter(Boolean);\n            };\n\n            const getPurchasedSchoolCandidateIds = (userInfo) => {\n                const usaOrder = userInfo && userInfo.usa_order ? userInfo.usa_order : {};\n                return [\n                    usaOrder.school_id,\n                    usaOrder.schoolId,\n                    usaOrder.schoole_id,\n                    usaOrder.school && usaOrder.school.id,\n                    userInfo && userInfo.school_id,\n                    userInfo && userInfo.schoolId\n                ].map((value) => String(value || '').trim()).filter(Boolean);\n            };\n\n            const getPurchasedSchoolCandidateNames = (userInfo) => {\n                const usaOrder = userInfo && userInfo.usa_order ? userInfo.usa_order : {};\n                const contactSchoolName = Array.isArray(usaOrder.members)\n                    ? usaOrder.members?.[0]?.contacts?.[2]?.value\n                    : '';\n\n                return [\n                    usaOrder.schoole_name,\n                    usaOrder.school_name,\n                    usaOrder.schoolName,\n                    usaOrder.school && usaOrder.school.name,\n                    contactSchoolName,\n                    userInfo && userInfo.school_name,\n                    userInfo && userInfo.schoole_name,\n                    userInfo && userInfo.schoolName\n                ].map((value) => String(value || '').trim()).filter(Boolean);\n            };\n\n            const doesPurchasedSchoolMatchCurrentSchool = (userInfo) => {\n                const currentIds = getCurrentSchoolCandidateIds();\n                const purchasedIds = getPurchasedSchoolCandidateIds(userInfo);\n                if (currentIds.length && purchasedIds.length) {\n                    return purchasedIds.some((id) => currentIds.includes(id));\n                }\n\n                const currentNames = getCurrentSchoolCandidateNames();\n                const purchasedNames = getPurchasedSchoolCandidateNames(userInfo);\n                if (!currentNames.length || !purchasedNames.length) {\n                    return false;\n                }\n\n                return purchasedNames.some((purchasedName) => (\n                    currentNames.some((currentName) => schoolValuesMatch(purchasedName, currentName))\n                ));\n            };\n\n            const hasPurchasedCurrentSchoolPlan = (userInfo) => {\n                if (!userInfo || typeof userInfo !== 'object') {\n                    return false;\n                }\n\n                const usaOrder = userInfo.usa_order || null;\n                const hasPaidFlag = parseBooleanLike(userInfo.pay_status_usa)\n                    || parseBooleanLike(usaOrder && usaOrder.pay_status)\n                    || Boolean(usaOrder && typeof usaOrder === 'object');\n\n                return hasPaidFlag && doesPurchasedSchoolMatchCurrentSchool(userInfo);\n            };\n\n            const fetchCurrentUserInfo = async (forceRefresh = false) => {\n                if (!isLoggedIn()) {\n                    return null;\n                }\n\n                if (!forceRefresh) {\n                    const cachedUserInfo = readCachedCurrentUserInfo();\n                    if (cachedUserInfo) {\n                        return cachedUserInfo;\n                    }\n                }\n\n                const response = await getHttpClient().get(apiStudentUserInfo, {\n                    headers: {\n                        Authorization: `Bearer ${localStorage.getItem('student_token') || ''}`\n                    }\n                });\n                return storeCurrentUserInfo(response && response.data ? response.data.data : null);\n            };\n\n            const closeWaiverGuideUnlockModal = () => {\n                showWaiverGuideUnlockModal.value = false;\n                waiverGuideUnlockLoading.value = false;\n            };\n\n            const openWaiverGuideUnlockModal = (index) => {\n                pendingWaiverGuideStepIndex.value = Number(index) > 0 ? Number(index) : 1;\n                showWaiverGuideUnlockModal.value = true;\n            };\n\n            const scrollToPageTop = () => {\n                window.scrollTo({\n                    top: 0,\n                    behavior: 'smooth'\n                });\n            };\n\n            const resolveWaiverGuideUnlockFromAccount = async (forceRefresh = true) => {\n                try {\n                    const userInfo = await fetchCurrentUserInfo(forceRefresh);\n                    if (!hasPurchasedCurrentSchoolPlan(userInfo)) {\n                        return false;\n                    }\n                    waiverGuideUserUnlocked.value = true;\n                    return true;\n                } catch (error) {\n                    const status = error && error.response ? error.response.status : null;\n                    if (status === 401 || status === 403) {\n                        localStorage.removeItem('student_token');\n                        localStorage.removeItem('user_info');\n                    }\n                    return false;\n                }\n            };\n\n            const syncWaiverGuideAccessFromLogin = async () => {\n                if (!isLoggedIn()) {\n                    waiverGuideUserUnlocked.value = false;\n                    return;\n                }\n\n                const unlocked = await resolveWaiverGuideUnlockFromAccount(false);\n                if (!unlocked) {\n                    waiverGuideUserUnlocked.value = false;\n                }\n            };\n\n            const handleWaiverGuideViewPlans = () => {\n                closeWaiverGuideUnlockModal();\n                scrollToPageTop();\n            };\n\n            const handleWaiverGuidePurchasedConfirm = async () => {\n                if (!isLoggedIn()) {\n                    closeWaiverGuideUnlockModal();\n                    openLoginModal('waiver-unlock');\n                    return;\n                }\n\n                waiverGuideUnlockLoading.value = true;\n                const unlocked = await resolveWaiverGuideUnlockFromAccount(true);\n                closeWaiverGuideUnlockModal();\n\n                if (!unlocked) {\n                    if (!isLoggedIn()) {\n                        openLoginModal('waiver-unlock');\n                        return;\n                    }\n                    showNotice(copy.value.unlockPurchaseFirst, 'error');\n                    return;\n                }\n\n                const maxUnlockedIndex = Math.max(waiverGuideSteps.value.length - 1, 0);\n                activeWaiverGuideStepIndex.value = Math.min(\n                    Math.max(pendingWaiverGuideStepIndex.value, 1),\n                    maxUnlockedIndex\n                );\n            };\n\n            const setActiveWaiverGuideStep = (index) => {\n                if (isWaiverGuideStepLocked(index)) {\n                    openWaiverGuideUnlockModal(index);\n                    return;\n                }\n                activeWaiverGuideStepIndex.value = index;\n            };\n\n            const toggleFaq = (index) => {\n                if (openedFaqIndexes.value.includes(index)) {\n                    openedFaqIndexes.value = [];\n                    return;\n                }\n                openedFaqIndexes.value = [index];\n            };\n\n            const closePurchaseModal = () => {\n                showPurchaseModal.value = false;\n                purchaseSubmitting.value = false;\n                purchaseModalPlan.value = null;\n                showReferralFields.value = false;\n                referralForm.email = '';\n                referralForm.code = '';\n                referralMessage.value = '';\n                referralMessageType.value = 'success';\n            };\n\n            const openPurchaseModal = (product) => {\n                purchaseModalPlan.value = product;\n                showPurchaseModal.value = true;\n                purchaseSubmitting.value = false;\n                showReferralFields.value = false;\n                referralForm.email = '';\n                referralForm.code = '';\n                referralMessage.value = '';\n                referralMessageType.value = 'success';\n            };\n\n            const isLoggedIn = () => {\n                return Boolean(localStorage.getItem('student_token'));\n            };\n\n            const resetMfaState = () => {\n                mfa.active = false;\n                mfa.challengeToken = '';\n                mfa.expiresAt = '';\n                mfa.code = '';\n                mfa.recoveryCode = '';\n                mfa.useRecovery = false;\n                mfa.submitting = false;\n                mfa.error = '';\n            };\n\n            const resetLoginState = () => {\n                emailSubmitted.value = false;\n                loginLoading.value = false;\n                loginForm.email = '';\n                loginForm.password = '';\n                loginErrors.emailMessage = '';\n                loginErrors.errorMessage = '';\n                resetMfaState();\n            };\n\n            const closeLoginModal = () => {\n                showLoginModal.value = false;\n                loginModalIntent.value = 'enrollment';\n                resetLoginState();\n            };\n\n            const openLoginModal = (intent = 'enrollment') => {\n                loginModalIntent.value = intent;\n                showLoginModal.value = true;\n                loginLoading.value = false;\n                loginErrors.emailMessage = '';\n                loginErrors.errorMessage = '';\n                resetMfaState();\n            };\n\n            const validateLoginEmail = () => {\n                const emailPattern = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n                if (!emailPattern.test(String(loginForm.email || '').trim())) {\n                    loginErrors.emailMessage = copy.value.emailInvalid;\n                    return false;\n                }\n                loginErrors.emailMessage = '';\n                return true;\n            };\n\n            watch(\n                () => referralForm.code,\n                async (newCode) => {\n                    const nextCode = String(newCode || '').trim();\n                    referralMessage.value = '';\n                    if (!nextCode) {\n                        return;\n                    }\n                    if (!isReferralEmailValid.value) {\n                        referralMessageType.value = 'error';\n                        referralMessage.value = copy.value.emailInvalid;\n                        return;\n                    }\n                    try {\n                        const response = await getHttpClient().post(`${apiUrl}us\/referras\/code\/verify`, {\n                            code: nextCode\n                        });\n                        referralMessageType.value = 'success';\n                        referralMessage.value = response && response.data && response.data.message\n                            ? response.data.message\n                            : '';\n                    } catch (error) {\n                        referralMessageType.value = 'error';\n                        referralMessage.value = (error && error.response && error.response.data && error.response.data.message)\n                            ? error.response.data.message\n                            : copy.value.referralCodeInvalid;\n                    }\n                }\n            );\n\n            const navigateToEnrollment = (email = '') => {\n                const targetUrl = new URL(enrollmentPath, window.location.origin);\n                const nextEmail = String(email || '').trim();\n                const currentBlogId = getBlogTrackingId();\n                if (nextEmail) {\n                    targetUrl.searchParams.set('email', nextEmail);\n                }\n                if (!isUscSchoolFlow.value && isYisihuiReviewMode()) {\n                    targetUrl.searchParams.set('yisihui', yisihuiReviewCode);\n                } else if (!isUscSchoolFlow.value && localStorage.getItem('yisihui_source')) {\n                    targetUrl.searchParams.set('yisihui', 'S25CNYSH');\n                }\n                if (currentBlogId) {\n                    targetUrl.searchParams.set('source', blogTrackingSource);\n                    targetUrl.searchParams.set('blog_id', currentBlogId);\n                }\n                applyEnrollmentQueryParams(targetUrl);\n                window.location.href = targetUrl.toString();\n            };\n\n            const getAuthPayload = (response) => {\n                return response && response.data && response.data.data ? response.data.data : {};\n            };\n\n            const getAuthErrorMessage = (error, fallbackMessage) => {\n                return error?.response?.data?.message\n                    || error?.response?.data?.errors?.code?.[0]\n                    || error?.response?.data?.errors?.recovery_code?.[0]\n                    || fallbackMessage;\n            };\n\n            const getResponsePayload = (response) => {\n                return response && response.data && response.data.data ? response.data.data : {};\n            };\n            const continueAfterLogin = async (email, intent) => {\n                if (intent === 'waiver-unlock') {\n                    const unlocked = await resolveWaiverGuideUnlockFromAccount(true);\n                    if (!unlocked) {\n                        showNotice(copy.value.unlockPurchaseFirst, 'error');\n                        return false;\n                    }\n                    const maxUnlockedIndex = Math.max(waiverGuideSteps.value.length - 1, 0);\n                    activeWaiverGuideStepIndex.value = Math.min(\n                        Math.max(pendingWaiverGuideStepIndex.value, 1),\n                        maxUnlockedIndex\n                    );\n                    return true;\n                }\n                navigateToEnrollment(email);\n                return true;\n            };\n            const completeLoginWithPayload = async (payload, email) => {\n                const token = payload && payload.token ? payload.token : '';\n                if (!token) {\n                    const message = copy.value.loginMissingToken;\n                    if (mfa.active) {\n                        mfa.error = message;\n                    } else {\n                        loginErrors.errorMessage = message;\n                    }\n                    return false;\n                }\n                localStorage.setItem('student_token', token);\n                localStorage.setItem('student_email', email);\n                if (payload.user) {\n                    localStorage.setItem('user_info', JSON.stringify(payload.user));\n                }\n                const currentLoginIntent = loginModalIntent.value;\n                closeLoginModal();\n                return continueAfterLogin(email, currentLoginIntent);\n            };\n\n            const openMfaChallenge = (payload) => {\n                mfa.active = true;\n                mfa.challengeToken = payload?.challenge_token || payload?.challengeToken || payload?.mfa_challenge_token || '';\n                mfa.expiresAt = payload?.expires_at || payload?.expiresAt || '';\n                mfa.code = '';\n                mfa.recoveryCode = '';\n                mfa.useRecovery = false;\n                mfa.submitting = false;\n                mfa.error = '';\n                loginErrors.errorMessage = '';\n            };\n\n            const cancelMfa = () => {\n                resetMfaState();\n                loginErrors.errorMessage = '';\n            };\n\n            const verifyMfaLogin = async () => {\n                const payload = {\n                    challenge_token: mfa.challengeToken\n                };\n                if (mfa.useRecovery) {\n                    payload.recovery_code = String(mfa.recoveryCode || '').trim();\n                    if (!payload.recovery_code) {\n                        mfa.error = copy.value.loginMfaRecoveryRequired;\n                        return;\n                    }\n                } else {\n                    payload.code = String(mfa.code || '').trim();\n                    if (!payload.code) {\n                        mfa.error = copy.value.loginMfaCodeRequired;\n                        return;\n                    }\n                }\n                mfa.submitting = true;\n                mfa.error = '';\n                try {\n                    const response = await getHttpClient().post(apiStudentMfaVerify, payload);\n                    await completeLoginWithPayload(getAuthPayload(response), String(loginForm.email || '').trim());\n                } catch (error) {\n                    mfa.error = getAuthErrorMessage(error, copy.value.loginMfaFailedDefault);\n                } finally {\n                    mfa.submitting = false;\n                }\n            };\n\n            const handleLoginSubmit = async () => {\n                if (mfa.active) {\n                    await verifyMfaLogin();\n                    return;\n                }\n                const email = String(loginForm.email || '').trim();\n                loginForm.email = email;\n                loginErrors.errorMessage = '';\n\n                if (!validateLoginEmail()) {\n                    return;\n                }\n\n                loginLoading.value = true;\n\n                if (!emailSubmitted.value) {\n                    try {\n                        const response = await getHttpClient().post(apiStudentEmailExist, { email });\n                        const payload = getResponsePayload(response);\n                        const existsValue = payload.exists;\n                        const emailMissing = existsValue === false\n                            || existsValue === 0\n                            || String(existsValue).trim().toLowerCase() === 'false'\n                            || String(existsValue).trim() === '0';\n                        if (emailMissing) {\n                            localStorage.setItem('student_email', email);\n                            closeLoginModal();\n                            navigateToEnrollment(email);\n                            return;\n                        }\n                        emailSubmitted.value = true;\n                    } catch (error) {\n                        const status = error && error.response ? error.response.status : null;\n                        if (status === 404) {\n                            localStorage.setItem('student_email', email);\n                            closeLoginModal();\n                            navigateToEnrollment(email);\n                            return;\n                        }\n                        loginErrors.errorMessage = (error && error.response && error.response.data && error.response.data.message)\n                            ? error.response.data.message\n                            : copy.value.loginFailedDefault;\n                    } finally {\n                        loginLoading.value = false;\n                    }\n                    return;\n                }\n\n                try {\n                    const response = await getHttpClient().post(apiStudentLogin, {\n                        email,\n                        password: loginForm.password\n                    });\n\n                    const payload = getAuthPayload(response);\n                    if (payload.mfa_required) {\n                        openMfaChallenge(payload);\n                        return;\n                    }\n                    if (response && response.data && response.data.status === 200 && payload.token) {\n                        await completeLoginWithPayload(payload, email);\n                        return;\n                    }\n\n                    loginErrors.errorMessage = response && response.data && response.data.data && response.data.data.message\n                        ? response.data.data.message\n                        : copy.value.loginFailedDefault;\n                } catch (error) {\n                    loginErrors.errorMessage = (error && error.response && error.response.data && error.response.data.message)\n                        ? error.response.data.message\n                        : copy.value.loginFailedDefault;\n                } finally {\n                    loginLoading.value = false;\n                }\n            };\n\n            const submitPurchaseFlow = async () => {\n                const targetProduct = purchaseModalPlan.value && (purchaseModalPlan.value.rawProduct || purchaseModalPlan.value);\n                if (!targetProduct || !targetProduct.pay_link) {\n                    showNotice(copy.value.availableSoon, 'error');\n                    closePurchaseModal();\n                    return;\n                }\n\n                purchaseSubmitting.value = true;\n\n                try {\n                    if (showReferralFields.value && referralForm.code && referralForm.email && isReferralEmailValid.value) {\n                        await getHttpClient().post(`${apiUrl}us\/referras`, {\n                            email: String(referralForm.email).trim(),\n                            code: String(referralForm.code).trim(),\n                            schoole_name: schoolName.value\n                        });\n                        localStorage.setItem('us_order_code', String(referralForm.code).trim());\n                    }\n\n                    window.location.href = appendTrackingCode(targetProduct.pay_link);\n                    return;\n                } catch (error) {\n                    console.error(error);\n                    window.location.href = appendTrackingCode(targetProduct.pay_link);\n                    return;\n                } finally {\n                    closePurchaseModal();\n                }\n            };\n\n            const normalizeQuoteValue = (value) => String(value || '').trim();\n\n            const isUsableQuoteValue = (value) => {\n                const text = normalizeQuoteValue(value).toLowerCase();\n                return text && text !== 'undefined' && text !== 'null';\n            };\n\n            const normalizeQuotePlanText = (value) => normalizeQuoteValue(value).toLowerCase();\n\n            const quotePlanCodeMap = [\n                { name1: \"WellAway Royal 100\", name2: \"Royal 100\", code: \"WR100\" },\n                { name1: \"WellAway Royal 1500\", name2: \"Royal 1500\", code: \"WR1500\" },\n                { name1: \"WellAway Royal 500\", name2: \"Royal 500\", code: \"WR500\" },\n                { name1: \"WellAway Royal Plus\", name2: \"Royal Plus\", code: \"WRPLUS\" },\n                { name1: \"WellAway World Elite 250\", name2: \"World Elite 250\", code: \"WWE250\" },\n                { name1: \"WellAway World Elite 450\", name2: \"World Elite 450\", code: \"WWE450\" },\n                { name1: \"WellAway World Elite 800\", name2: \"World Elite 800\", code: \"WWE800\" },\n                { name1: \"WellAway World Elite Plus\", name2: \"World Elite Plus\", code: \"WWE0PLUS\" },\n                { name1: \"USC Scholar 100\", name2: \"USC Scholar 100\", code: \"USCS100\" },\n                { name1: \"USC Scholar 500\", name2: \"USC Scholar 500\", code: \"USCS500\" },\n                { name1: \"OPT choice\", name2: \"OPT\", code: \"WAOPT\" },\n            ];\n\n            const getPlanCodeFromInsuranceName = (product) => {\n                const rawInsuranceName = normalizeQuoteValue(\n                    product?.rawProduct?.name\n                    || product?.name\n                    || localStorage.getItem('InsuranceName')\n                    || ''\n                );\n                if (!rawInsuranceName) {\n                    return '';\n                }\n\n                const exactPlan = quotePlanCodeMap.find((plan) => (\n                    normalizeQuoteValue(plan.name2) === rawInsuranceName\n                    || normalizeQuoteValue(plan.name1) === rawInsuranceName\n                ));\n                if (exactPlan) {\n                    return exactPlan.code;\n                }\n\n                const normalizedInsuranceName = normalizeQuotePlanText(rawInsuranceName);\n                const matchedPlan = quotePlanCodeMap.find((plan) => (\n                    normalizeQuotePlanText(plan.name2) === normalizedInsuranceName\n                    || normalizeQuotePlanText(plan.name1) === normalizedInsuranceName\n                ));\n                return matchedPlan?.code || '';\n            };\n\n            const getProductQuoteKey = (product) => {\n                const targetProduct = product?.rawProduct || product || {};\n                return String(\n                    targetProduct.id\n                    || targetProduct.plan_code\n                    || targetProduct.planCode\n                    || targetProduct.name\n                    || ''\n                ).trim();\n            };\n\n            const getProductQuoteEntry = (product) => {\n                const key = getProductQuoteKey(product);\n                if (!key || !productQuoteMap[key]) {\n                    return null;\n                }\n                return productQuoteMap[key].quote_signature === getQuoteSignature()\n                    ? productQuoteMap[key]\n                    : null;\n            };\n\n            const toMoneyNumber = (value) => {\n                const amount = Number(value);\n                return Number.isFinite(amount) && amount > 0 ? Math.round(amount * 100) \/ 100 : null;\n            };\n\n            const getQuotePrimaryPrice = (product) => {\n                const entry = product?.quotePremiums || getProductQuoteEntry(product);\n                return toMoneyNumber(\n                    entry?.primary_price\n                    ?? entry?.primaryPrice\n                    ?? entry?.primary\n                    ?? entry?.total_price\n                    ?? entry?.totalPrice\n                );\n            };\n\n            const getProductMonthlyPrice = (product) => {\n                const targetProduct = product?.rawProduct || product || {};\n                return toMoneyNumber(\n                    targetProduct.monthly_price\n                    ?? targetProduct.monthlyPrice\n                    ?? targetProduct.monthly\n                    ?? targetProduct.price_per_month\n                    ?? targetProduct.pricePerMonth\n                );\n            };\n\n            const getProductYearlyPrice = (product) => {\n                const monthlyPrice = getProductMonthlyPrice(product);\n                return Number.isFinite(monthlyPrice) && monthlyPrice > 0\n                    ? Math.round(monthlyPrice * 12 * 100) \/ 100\n                    : null;\n            };\n\n            const formatQuoteDate = (value) => {\n                const parsed = parseCoverageDate(value);\n                if (!parsed) {\n                    return '';\n                }\n                const year = parsed.getFullYear();\n                const month = String(parsed.getMonth() + 1).padStart(2, '0');\n                const day = String(parsed.getDate()).padStart(2, '0');\n                return `${year}-${month}-${day}`;\n            };\n\n            const addMonthsToDate = (date, months) => {\n                const next = new Date(date.getTime());\n                const currentDate = next.getDate();\n                next.setMonth(next.getMonth() + months);\n                if (next.getDate() !== currentDate) {\n                    next.setDate(0);\n                }\n                return next;\n            };\n\n            const getFallbackQuoteCoverageDates = () => {\n                const start = new Date();\n                start.setHours(0, 0, 0, 0);\n                start.setDate(start.getDate() + 1);\n                let end;\n                if (billingCycle.value === 'monthly') {\n                    end = new Date(start.getTime());\n                    end.setDate(end.getDate() + 30);\n                    end.setDate(end.getDate() - 1);\n                } else {\n                    end = addMonthsToDate(start, 12);\n                    end.setDate(end.getDate() - 1);\n                }\n                return {\n                    start: formatQuoteDate(start),\n                    end: formatQuoteDate(end)\n                };\n            };\n\n            const getQuoteCoverageDates = () => {\n                const schoolStart = formatQuoteDate(schoolWaive.value.coverage_start_date);\n                const schoolEnd = formatQuoteDate(schoolWaive.value.coverage_end_date);\n                if (schoolStart && schoolEnd) {\n                    return {\n                        start: schoolStart,\n                        end: schoolEnd,\n                        isFallback: false\n                    };\n                }\n\n                const fallback = getFallbackQuoteCoverageDates();\n                return {\n                    ...fallback,\n                    isFallback: true\n                };\n            };\n\n            const getCoverageDayCount = () => {\n                const coverageDates = getQuoteCoverageDates();\n                const start = parseCoverageDate(coverageDates.start);\n                const end = parseCoverageDate(coverageDates.end);\n                if (!start || !end || end < start) {\n                    return 0;\n                }\n                return Math.round((end - start) \/ 86400000) + 1;\n            };\n\n            const getQuotePlanPayload = (product) => {\n                const targetProduct = product?.rawProduct || product || {};\n                const planId = normalizeQuoteValue(\n                    targetProduct.id\n                    || targetProduct.product_id\n                    || targetProduct.productId\n                    || targetProduct.plan_id\n                    || targetProduct.planId\n                    || targetProduct.quote_plan_id\n                    || targetProduct.quotePlanId\n                );\n                const planCode = normalizeQuoteValue(\n                    targetProduct.plan_code\n                    || targetProduct.planCode\n                    || targetProduct.code\n                    || targetProduct.product_code\n                    || targetProduct.productCode\n                    || targetProduct.quote_plan_code\n                    || targetProduct.quotePlanCode\n                    || getPlanCodeFromInsuranceName(targetProduct)\n                );\n                if (isUsableQuoteValue(planId)) {\n                    return { plan_id: Number(planId) || planId };\n                }\n                if (isUsableQuoteValue(planCode)) {\n                    return { plan_code: planCode };\n                }\n                return null;\n            };\n\n            const getQuoteSignature = () => [\n                getQuoteCoverageDates().start,\n                getQuoteCoverageDates().end,\n                billingCycle.value,\n                nativeDateOfBirth.value || ''\n            ].join('|');\n\n            const getQuoteRequestProducts = () => {\n                const quoteProducts = [\n                    ...planCards.value.map((plan) => plan.rawProduct || plan),\n                    ...selectedCompareProducts.value.map((plan) => plan.rawProduct || plan)\n                ];\n                const seen = new Set();\n                return quoteProducts.filter((product) => {\n                    const key = getProductQuoteKey(product);\n                    if (!key || seen.has(key)) {\n                        return false;\n                    }\n                    seen.add(key);\n                    return true;\n                });\n            };\n\n            const requestSingleProductQuote = async (product, requestSignature) => {\n                const targetProduct = product?.rawProduct || product || {};\n                const quoteKey = getProductQuoteKey(targetProduct);\n                const planPayload = getQuotePlanPayload(targetProduct);\n                const coverageDates = getQuoteCoverageDates();\n                const coverageStartDate = coverageDates.start;\n                const coverageEndDate = coverageDates.end;\n                if (!quoteKey || !planPayload || !coverageStartDate || !coverageEndDate) {\n                    if (quoteKey) {\n                        delete productQuoteMap[quoteKey];\n                    }\n                    return null;\n                }\n\n                productQuoteLoadingMap[quoteKey] = true;\n                try {\n                    const response = await getHttpClient().post(quoteApiUrl, {\n                        ...planPayload,\n                        coverageStartDate,\n                        coverageEndDate,\n                        dob: nativeDateOfBirth.value || '',\n                        spouse: false,\n                        dependents: 0\n                    }, {\n                        headers: {\n                            Accept: 'application\/json',\n                            'X-Authentication-Key': 'HSxZK8nHniLzZtv0Qtfk87wvNvXpJZ5K'\n                        }\n                    });\n                    const quoteData = response?.data?.data || {};\n                    const premiums = quoteData.application_premiums || {};\n                    if (!response?.data?.success || !premiums) {\n                        throw new Error(response?.data?.message || 'Quote failed.');\n                    }\n                    productQuoteMap[quoteKey] = {\n                        ...premiums,\n                        product_id: quoteData.product_id ?? targetProduct.id,\n                        plan_code: quoteData.plan_code ?? targetProduct.plan_code,\n                        product_name: quoteData.product_name ?? targetProduct.name,\n                        has_family_price: quoteData.has_family_price,\n                        quote_signature: requestSignature\n                    };\n                    return productQuoteMap[quoteKey];\n                } catch (error) {\n                    delete productQuoteMap[quoteKey];\n                    return null;\n                } finally {\n                    productQuoteLoadingMap[quoteKey] = false;\n                }\n            };\n\n            const runQuoteQueue = async (quoteProducts, currentSeq, requestSignature, concurrency = 3) => {\n                let cursor = 0;\n                const workers = Array.from({ length: Math.min(concurrency, quoteProducts.length) }, async () => {\n                    while (cursor < quoteProducts.length && currentSeq === quoteRequestSeq) {\n                        const product = quoteProducts[cursor];\n                        cursor += 1;\n                        await requestSingleProductQuote(product, requestSignature);\n                    }\n                });\n                await Promise.all(workers);\n            };\n\n            const requestProductQuotes = (options = {}) => {\n                clearTimeout(quoteRequestTimer);\n                const delay = options.immediate ? 0 : 250;\n                quoteRequestTimer = setTimeout(async () => {\n                    const currentSeq = ++quoteRequestSeq;\n                    const requestSignature = getQuoteSignature();\n                    const quoteProducts = getQuoteRequestProducts();\n                    if (!quoteProducts.length) {\n                        Object.keys(productQuoteMap).forEach((key) => delete productQuoteMap[key]);\n                        return;\n                    }\n                    await runQuoteQueue(quoteProducts, currentSeq, requestSignature, 3);\n                    if (currentSeq === quoteRequestSeq) {\n                        updateSeo();\n                    }\n                }, delay);\n            };\n\n            const ensureProductQuote = async (product) => {\n                const targetProduct = product?.rawProduct || product || {};\n                const existingPrice = getQuotePrimaryPrice(targetProduct);\n                if (Number.isFinite(existingPrice) && existingPrice > 0) {\n                    return true;\n                }\n                if (getCoverageDayCount() <= 0 && Number.isFinite(getProductMonthlyPrice(targetProduct))) {\n                    return true;\n                }\n                const quote = await requestSingleProductQuote(targetProduct, getQuoteSignature());\n                const quotedPrice = getQuotePrimaryPrice({\n                    ...targetProduct,\n                    quotePremiums: quote\n                });\n                return Number.isFinite(quotedPrice) && quotedPrice > 0;\n            };\n\n            const getDisplayPrice = (product, yearlyMode) => {\n                const targetProduct = product.rawProduct || product;\n                const quotePrice = getQuotePrimaryPrice(targetProduct);\n                if (!Number.isFinite(quotePrice) || quotePrice <= 0) {\n                    if (getCoverageDayCount() <= 0) {\n                        return yearlyMode ? getProductYearlyPrice(targetProduct) : getProductMonthlyPrice(targetProduct);\n                    }\n                    return null;\n                }\n                if (yearlyMode) {\n                    return quotePrice;\n                }\n                const coverageDays = getCoverageDayCount();\n                if (coverageDays > 0) {\n                    return Math.round(((quotePrice \/ coverageDays) * 30) * 100) \/ 100;\n                }\n                return Math.round((quotePrice \/ 12) * 100) \/ 100;\n            };\n\n            const displayPrice = (product) => {\n                return billingCycle.value === 'yearly' ? getDisplayPrice(product, true) : getDisplayPrice(product, false);\n            };\n\n            const formatPrice = (price) => {\n                if (price === null || price === undefined || price === '') {\n                    return '...';\n                }\n                const numericPrice = Number(price);\n                if (!Number.isFinite(numericPrice)) {\n                    return '...';\n                }\n                return numericPrice.toFixed(2);\n            };\n\n            const normalizePlanName = (name) => {\n                return String(name || '').replace(\/\\s+\/g, ' ').trim();\n            };\n\n            const seriesPlusOption = 'plus';\n\n            const getSeriesOptionValue = (name) => {\n                const normalizedName = normalizePlanName(name);\n                const numberMatch = normalizedName.match(\/^(.*?)(?:\\s+)(\\d+)$\/);\n                if (numberMatch) {\n                    return Number(numberMatch[2]);\n                }\n                const plusMatch = normalizedName.match(\/^(.*?)(?:\\s+)(plus)$\/i);\n                return plusMatch ? seriesPlusOption : null;\n            };\n\n            const getSeriesBaseName = (name) => {\n                const normalizedName = normalizePlanName(name);\n                const numberMatch = normalizedName.match(\/^(.*?)(?:\\s+)(\\d+)$\/);\n                if (numberMatch) {\n                    return normalizePlanName(numberMatch[1]);\n                }\n                const plusMatch = normalizedName.match(\/^(.*?)(?:\\s+)(plus)$\/i);\n                return plusMatch ? normalizePlanName(plusMatch[1]) : null;\n            };\n\n            const getSeriesKey = (name) => {\n                const baseName = getSeriesBaseName(name);\n                if (!baseName) {\n                    return null;\n                }\n                return baseName.toLowerCase().replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '') || null;\n            };\n\n            const isSeriesPlusOption = (option) => String(option || '').toLowerCase() === seriesPlusOption;\n\n            const getSeriesOptionLabel = (option) => (\n                isSeriesPlusOption(option) ? 'Plus' : `$${option}`\n            );\n\n            const getSeriesCompareName = (baseName, option) => (\n                isSeriesPlusOption(option) ? `${baseName} Plus` : `${baseName} ${option}`\n            );\n\n            const formatCurrencyFeatureValue = (value) => {\n                const text = String(value ?? '').trim();\n                if (!text || \/^\\$\/.test(text)) {\n                    return text;\n                }\n                const numericValue = Number(text.replace(\/,\/g, ''));\n                if (!Number.isFinite(numericValue)) {\n                    return text;\n                }\n                return `$${numericValue.toLocaleString('en-US', {\n                    minimumFractionDigits: Number.isInteger(numericValue) ? 0 : 2,\n                    maximumFractionDigits: 2\n                })}`;\n            };\n\n            const percentageLikeFeatureKeys = new Set([\n                'coinsurance_in',\n                'coinsurance_of',\n                'preventive_care_in_shc',\n                'hospitalization_inpatient',\n                'copay_outpatient_surgery',\n                'ambulance_coverage',\n                'mental_health_outpatient',\n                'mental_health_inpatient',\n                'maternity_prenatal_care',\n                'maternity_labor_delivery',\n                'oncology_treatment',\n                'organ_transplant',\n                'durable_medical_equipment',\n                'post_op_care',\n                'dialysis',\n                'emergency_dental_injury'\n            ]);\n\n            const formatPercentageFeatureValue = (value) => {\n                const numericValue = Number(value);\n                if (!Number.isFinite(numericValue)) {\n                    return String(value ?? '').trim();\n                }\n                const percentValue = numericValue <= 1 ? numericValue * 100 : numericValue;\n                return `${String(percentValue).replace(\/\\.0+$\/, '')}%`;\n            };\n\n            const findSeriesOption = (options, value) => {\n                const normalizedValue = String(value ?? '').toLowerCase();\n                return options.find((option) => String(option).toLowerCase() === normalizedValue);\n            };\n\n            const isRoyalSeriesGroup = (group) => (\n                \/\\broyal\\b\/i.test(String(group?.baseName || ''))\n            );\n\n            const getDefaultSeriesOption = (group, options = []) => {\n                if (!Array.isArray(options) || !options.length) {\n                    return null;\n                }\n\n                if (isRoyalSeriesGroup(group)) {\n                    const preferredRoyalOption = findSeriesOption(options, 500);\n                    if (preferredRoyalOption !== undefined) {\n                        return preferredRoyalOption;\n                    }\n                }\n\n                return options[0];\n            };\n\n            const sortSeriesOptions = (a, b) => {\n                if (isSeriesPlusOption(a)) {\n                    return isSeriesPlusOption(b) ? 0 : -1;\n                }\n                if (isSeriesPlusOption(b)) {\n                    return 1;\n                }\n                return Number(a) - Number(b);\n            };\n\n            const collectSeriesGroups = (productList) => {\n                const groups = new Map();\n\n                productList.forEach((product, index) => {\n                    const optionValue = getSeriesOptionValue(product.name);\n                    const baseName = getSeriesBaseName(product.name);\n                    const seriesKey = getSeriesKey(product.name);\n\n                    if (optionValue === null || !baseName || !seriesKey) {\n                        return;\n                    }\n\n                    if (!groups.has(seriesKey)) {\n                        groups.set(seriesKey, {\n                            baseName,\n                            seriesKey,\n                            firstIndex: index,\n                            optionMap: new Map(),\n                            options: [],\n                            hasNumericOption: false\n                        });\n                    }\n\n                    const group = groups.get(seriesKey);\n                    if (!group.optionMap.has(optionValue)) {\n                        group.optionMap.set(optionValue, product);\n                        group.options.push(optionValue);\n                    }\n                    if (!isSeriesPlusOption(optionValue)) {\n                        group.hasNumericOption = true;\n                    }\n                    if (index < group.firstIndex) {\n                        group.firstIndex = index;\n                    }\n                });\n\n                groups.forEach((group, key) => {\n                    if (!group.hasNumericOption) {\n                        groups.delete(key);\n                        return;\n                    }\n                    group.options.sort(sortSeriesOptions);\n                });\n\n                return groups;\n            };\n\n            const getFeatureDisplay = (product, key) => {\n                const values = product.values || null;\n                const sourceProduct = product.rawProduct || product;\n                const rawValue = values && Object.prototype.hasOwnProperty.call(values, key) ? values[key] : sourceProduct[key];\n                if (rawValue === null || rawValue === undefined || rawValue === '') {\n                    return '-';\n                }\n                if (percentageLikeFeatureKeys.has(key) && !Number.isNaN(Number(rawValue))) {\n                    return formatPercentageFeatureValue(rawValue);\n                }\n                if (\/deductible\/i.test(key)) {\n                    return formatCurrencyFeatureValue(rawValue);\n                }\n                return String(rawValue)\n                    .replace(\/(\\d+)%\\.0\\b\/g, '$1%')\n                    .replace(\/(\\d+)\\.0%\/g, '$1%')\n                    .trim();\n            };\n\n            const planCards = computed(() => {\n                const cards = [];\n                const insertedSeries = new Set();\n                const seriesGroups = collectSeriesGroups(filteredProducts.value);\n\n                const pushStandalonePlanCard = (product, compareId = '') => {\n                    cards.push({\n                        ...product,\n                        compareName: normalizePlanName(product.name),\n                        compareId: String(compareId || product.id),\n                        rawProduct: product,\n                        hasOptionTabs: false,\n                        optionTabs: [],\n                        selectedOption: null,\n                        seriesKey: '',\n                        isPopular: false\n                    });\n                };\n\n                const pushSeriesGroupCard = (group, optionList, seriesKey) => {\n                    const availableOptions = optionList.filter((option) => group.optionMap.has(option));\n                    if (!availableOptions.length) {\n                        return;\n                    }\n\n                    if (availableOptions.length === 1) {\n                        const onlyOption = availableOptions[0];\n                        const onlyProduct = group.optionMap.get(onlyOption);\n                        if (onlyProduct) {\n                            pushStandalonePlanCard(onlyProduct, `${seriesKey}-${onlyOption}`);\n                        }\n                        return;\n                    }\n\n                    const defaultOption = getDefaultSeriesOption(group, availableOptions) ?? availableOptions[0];\n                    const selectedOption = findSeriesOption(availableOptions, selectedSeriesOptions.value[seriesKey])\n                        ?? defaultOption;\n                    const selectedVariant = group.optionMap.get(selectedOption) || group.optionMap.get(defaultOption);\n\n                    cards.push({\n                        ...selectedVariant,\n                        name: group.baseName,\n                        compareName: getSeriesCompareName(group.baseName, selectedOption),\n                        compareId: `${seriesKey}-${selectedOption}`,\n                        rawProduct: selectedVariant,\n                        hasOptionTabs: true,\n                        optionTabs: availableOptions,\n                        selectedOption,\n                        seriesKey,\n                        isPopular: false\n                    });\n                };\n\n                const getBasePlanCardCount = () => {\n                    let count = 0;\n                    const countedSeries = new Set();\n\n                    filteredProducts.value.forEach((product) => {\n                        const seriesKey = getSeriesKey(product.name);\n                        const optionValue = getSeriesOptionValue(product.name);\n                        const group = seriesKey && optionValue !== null ? seriesGroups.get(seriesKey) : null;\n\n                        if (group) {\n                            if (countedSeries.has(seriesKey)) {\n                                return;\n                            }\n                            const plusOption = group.options.find((option) => isSeriesPlusOption(option));\n                            const numericOptions = group.options.filter((option) => !isSeriesPlusOption(option));\n                            count += plusOption && numericOptions.length ? 2 : 1;\n                            countedSeries.add(seriesKey);\n                            return;\n                        }\n\n                        count += 1;\n                    });\n\n                    return count;\n                };\n\n                const basePlanCardCount = getBasePlanCardCount();\n\n                filteredProducts.value.forEach((product) => {\n                    const seriesKey = getSeriesKey(product.name);\n                    const optionValue = getSeriesOptionValue(product.name);\n\n                    if (seriesKey && optionValue !== null) {\n                        const group = seriesGroups.get(seriesKey);\n                        if (group && insertedSeries.has(seriesKey)) {\n                            return;\n                        }\n                        if (group && !insertedSeries.has(seriesKey)) {\n                            const plusOption = group.options.find((option) => isSeriesPlusOption(option));\n                            const numericOptions = group.options.filter((option) => !isSeriesPlusOption(option));\n\n                            if (plusOption && numericOptions.length) {\n                                const plusProduct = group.optionMap.get(plusOption);\n                                if (plusProduct) {\n                                    pushStandalonePlanCard(plusProduct, `${seriesKey}-${plusOption}`);\n                                }\n\n                                if (basePlanCardCount === 2 && numericOptions.length > 1) {\n                                    const firstNumericOption = numericOptions[0];\n                                    const firstNumericProduct = group.optionMap.get(firstNumericOption);\n                                    if (firstNumericProduct) {\n                                        pushStandalonePlanCard(firstNumericProduct, `${seriesKey}-${firstNumericOption}`);\n                                    }\n                                    pushSeriesGroupCard(group, numericOptions.slice(1), seriesKey);\n                                } else {\n                                    pushSeriesGroupCard(group, numericOptions, seriesKey);\n                                }\n\n                                insertedSeries.add(seriesKey);\n                                return;\n                            }\n\n                            pushSeriesGroupCard(group, group.options, seriesKey);\n                            insertedSeries.add(seriesKey);\n                            return;\n                        }\n                    }\n\n                    pushStandalonePlanCard(product);\n                });\n\n                if (cards.length) {\n                    cards[0].isPopular = true;\n                }\n\n                return cards;\n            });\n\n            watch(\n                () => [\n                    nativeDateOfBirth.value || '',\n                    String(schoolWaive.value.coverage_start_date || ''),\n                    String(schoolWaive.value.coverage_end_date || ''),\n                    billingCycle.value,\n                    planCards.value.map((plan) => getProductQuoteKey(plan.rawProduct || plan)).join('|'),\n                    selectedCompareProducts.value.map((plan) => getProductQuoteKey(plan.rawProduct || plan)).join('|')\n                ].join('::'),\n                () => requestProductQuotes()\n            );\n\n            const callLiveChatWidget = (action) => {\n                try {\n                    if (window.LiveChatWidget && typeof window.LiveChatWidget.call === 'function') {\n                        window.LiveChatWidget.call(action);\n                    }\n                } catch (error) {\n                    \/\/ The widget loads asynchronously and may reject calls before it is ready.\n                }\n            };\n\n            const syncLiveChatForCompare = () => {\n                const hasCompareButton = selectedCompareProducts.value.length > 0;\n                document.body.classList.toggle('ggs-product-compare-active', hasCompareButton);\n                document.body.classList.toggle('ggs-product-compare-modal-open', showCompareModal.value);\n\n                if (!hasCompareButton) {\n                    return;\n                }\n\n                callLiveChatWidget('minimize');\n            };\n\n            const scheduleLiveChatCompareSync = () => {\n                [0, 250, 1000, 3000, 8000].forEach((delay) => {\n                    window.setTimeout(syncLiveChatForCompare, delay);\n                });\n            };\n\n            watch(\n                () => `${selectedCompareProducts.value.length}-${showCompareModal.value ? 'open' : 'closed'}`,\n                scheduleLiveChatCompareSync,\n                { immediate: true }\n            );\n\n            const isFeatureDifferent = (featureKey) => {\n                if (selectedCompareProducts.value.length <= 1) {\n                    return false;\n                }\n                const values = selectedCompareProducts.value.map((product) => getFeatureDisplay(product, featureKey));\n                return new Set(values).size > 1;\n            };\n\n            const toggleBillingCycle = () => {\n                billingCycle.value = billingCycle.value === 'monthly' ? 'yearly' : 'monthly';\n            };\n\n            const getPlanPriceTransitionKey = (plan) => {\n                return `${plan.seriesKey || plan.compareId}-${billingCycle.value}-${formatPrice(displayPrice(plan))}`;\n            };\n\n            const getFeatureTransitionKey = (plan, featureKey) => {\n                const featureValue = getFeatureDisplay(plan, featureKey);\n                const suffix = featureKey === 'network'\n                    ? getProviderNetworkLink(featureValue)\n                    : '';\n                return `${plan.seriesKey || plan.compareId}-${featureKey}-${featureValue}-${suffix}`;\n            };\n\n            const handleViewMoreToggle = async () => {\n                const isCollapsing = viewMore.value;\n                viewMore.value = !viewMore.value;\n                if (!isCollapsing) {\n                    return;\n                }\n                await nextTick();\n                scrollToPlans();\n            };\n\n            const toggleCompare = (product) => {\n                const compareId = String(product.compareId || product.id);\n                if (selectedForCompare.value.includes(compareId)) {\n                    selectedForCompare.value = selectedForCompare.value.filter((id) => id !== compareId);\n                    return;\n                }\n                if (selectedForCompare.value.length >= maxComparePlans) {\n                    showNotice(copy.value.compareLimitNotice, 'error');\n                    return;\n                }\n                selectedForCompare.value = [...selectedForCompare.value, compareId];\n            };\n\n            const openBrochure = (product) => {\n                const targetProduct = product.rawProduct || product;\n                if (targetProduct.doc_link) {\n                    window.open(targetProduct.doc_link, '_blank', 'noopener');\n                    return;\n                }\n                showNotice(copy.value.availableSoon, 'error');\n            };\n\n            const hasBrochureLink = (product) => {\n                const targetProduct = product.rawProduct || product;\n                return Boolean(targetProduct.doc_link);\n            };\n\n            const openMedicationGuide = (product) => {\n                const targetProduct = product.rawProduct || product;\n                if (targetProduct.medication_guide) {\n                    window.open(targetProduct.medication_guide, '_blank', 'noopener');\n                    return;\n                }\n                showNotice(copy.value.availableSoon, 'error');\n            };\n\n            const hasMedicationGuideLink = (product) => {\n                const targetProduct = product.rawProduct || product;\n                return Boolean(targetProduct.medication_guide);\n            };\n\n            const openPolicy = (product) => {\n                const targetProduct = product.rawProduct || product;\n                if (targetProduct.policy_link) {\n                    window.open(targetProduct.policy_link, '_blank', 'noopener');\n                    return;\n                }\n                showNotice(copy.value.availableSoon, 'error');\n            };\n\n            const hasPolicyLink = (product) => {\n                const targetProduct = product.rawProduct || product;\n                return Boolean(targetProduct.policy_link);\n            };\n\n            const providerNetworkLinkMap = {\n                unitedhealthcare: 'https:\/\/connect.werally.com\/guest\/eyJkZWxzeXMiOiIwMSIsInBsYW5OYW1lIjoiT3B0aW9ucyBQUE8ifQVLFsGPr47EfrRoLy_tUboAapKh8zyHMxof6WugRzNUU',\n                'unitedhealthcare ppo': 'https:\/\/connect.werally.com\/guest\/eyJkZWxzeXMiOiIwMSIsInBsYW5OYW1lIjoiT3B0aW9ucyBQUE8ifQVLFsGPr47EfrRoLy_tUboAapKh8zyHMxof6WugRzNUU',\n                aetna: 'https:\/\/www.aetna.com\/dsepublic\/#\/contentPage?page=providerSearchLanding&site_id=passport'\n            };\n\n            const normalizeProviderNetworkName = (value) => {\n                return String(value || '').replace(\/\\s+\/g, ' ').trim().toLowerCase();\n            };\n\n            const getProviderNetworkLink = (value) => {\n                const normalizedNetworkName = normalizeProviderNetworkName(value);\n                if (!normalizedNetworkName || normalizedNetworkName === '-') {\n                    return '';\n                }\n                if (providerNetworkLinkMap[normalizedNetworkName]) {\n                    return providerNetworkLinkMap[normalizedNetworkName];\n                }\n                if (normalizedNetworkName.includes('unitedhealthcare')) {\n                    return providerNetworkLinkMap.unitedhealthcare;\n                }\n                if (normalizedNetworkName.includes('aetna')) {\n                    return providerNetworkLinkMap.aetna;\n                }\n                return '';\n            };\n\n            const hasProviderNetworkLink = (value) => {\n                return Boolean(getProviderNetworkLink(value));\n            };\n\n            const appendQueryValue = (url, key, value) => {\n                try {\n                    const parsedUrl = new URL(url, window.location.origin);\n                    parsedUrl.searchParams.append(key, value);\n                    return parsedUrl.toString();\n                } catch (error) {\n                    const separator = url.includes('?') ? '&' : '?';\n                    return `${url}${separator}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n                }\n            };\n\n            const setQueryValue = (url, key, value) => {\n                const normalizedValue = String(value || '').trim();\n                if (!normalizedValue) {\n                    return url;\n                }\n                try {\n                    const parsedUrl = new URL(url, window.location.origin);\n                    parsedUrl.searchParams.set(key, normalizedValue);\n                    return parsedUrl.toString();\n                } catch (error) {\n                    const separator = url.includes('?') ? '&' : '?';\n                    return `${url}${separator}${encodeURIComponent(key)}=${encodeURIComponent(normalizedValue)}`;\n                }\n            };\n\n            const applyEnrollmentQueryParams = (targetUrl) => {\n                const currentYsh = String(searchParams.get('ysh') || '').trim();\n                const currentCode = String(searchParams.get('code') || '').trim();\n                const currentSchoolSlug = String(schoolSlug.value || '').trim();\n                const currentBlogId = getBlogTrackingId();\n                const currentSource = getSource();\n                if (currentYsh === '1') {\n                    targetUrl.searchParams.set('ysh', '1');\n                }\n                if (currentCode) {\n                    targetUrl.searchParams.set('code', currentCode);\n                }\n                if (currentSchoolSlug) {\n                    targetUrl.searchParams.set('school_slug', currentSchoolSlug);\n                }\n                if (currentSource === blogTrackingSource || currentBlogId) {\n                    targetUrl.searchParams.set('source', blogTrackingSource);\n                    if (currentBlogId) {\n                        targetUrl.searchParams.set('blog_id', currentBlogId);\n                    }\n                }\n                return targetUrl;\n            };\n\n            const appendTrackingCode = (url) => {\n                let nextUrl = url;\n                if (localStorage.getItem('yisihui')) {\n                    nextUrl = appendQueryValue(nextUrl, 'uservar', 'Affiliate118');\n                    nextUrl = appendQueryValue(nextUrl, 'yisihui', localStorage.getItem('yisihui'));\n                }\n                if (localStorage.getItem('tripalink')) {\n                    nextUrl = appendQueryValue(nextUrl, 'uservar', 'aff25tripalink');\n                }\n                if (localStorage.getItem('indigo')) {\n                    nextUrl = appendQueryValue(nextUrl, 'uservar', 'indigo25ca');\n                }\n                if (localStorage.getItem('ggs')) {\n                    nextUrl = appendQueryValue(nextUrl, 'uservar', localStorage.getItem('ggs'));\n                }\n                if (String(searchParams.get('ysh') || '').trim() === '1') {\n                    nextUrl = setQueryValue(nextUrl, 'ysh', '1');\n                }\n                if (searchParams.get('code')) {\n                    nextUrl = setQueryValue(nextUrl, 'code', searchParams.get('code'));\n                }\n                if (schoolSlug.value) {\n                    nextUrl = setQueryValue(nextUrl, 'school_slug', schoolSlug.value);\n                }\n                return nextUrl;\n            };\n\n            const storeSelectedPlan = (product) => {\n                const targetProduct = product.rawProduct || product;\n                const quotePrice = getQuotePrimaryPrice(targetProduct);\n                const monthlyPrice = quotePrice || getProductMonthlyPrice(targetProduct);\n                localStorage.setItem('age_ranges', JSON.stringify(targetProduct.age_ranges || []));\n                localStorage.setItem('InsuranceName', targetProduct.name || product.name || '');\n                localStorage.setItem('monthly_price', String(monthlyPrice || ''));\n                localStorage.setItem('selected_plan_id', String(targetProduct.id || product.id || ''));\n                const selectedPlanCode = String(targetProduct.plan_code || targetProduct.planCode || product.plan_code || product.planCode || '').trim();\n                if (selectedPlanCode) {\n                    localStorage.setItem('selected_plan_code', selectedPlanCode);\n                } else {\n                    localStorage.removeItem('selected_plan_code');\n                }\n                localStorage.setItem('selected_plan_name', String(targetProduct.name || product.name || ''));\n                localStorage.setItem('school_id', schoolName.value || '');\n                localStorage.setItem('school_slug', String(schoolSlug.value || schoolWaive.value.slug || schoolWaive.value.school_slug || ''));\n                localStorage.setItem('sid', String(schoolId.value || ''));\n                const currentBlogId = getBlogTrackingId();\n                if (currentBlogId) {\n                    localStorage.setItem('blog_id', currentBlogId);\n                    localStorage.setItem('blog_source', blogTrackingSource);\n                }\n                localStorage.setItem('coverage_start_date', schoolWaive.value.coverage_start_date || '');\n                localStorage.setItem('coverage_end_date', schoolWaive.value.coverage_end_date || '');\n                localStorage.setItem('student_age', String(selectedAge.value));\n                if (nativeDateOfBirth.value) {\n                    localStorage.setItem('prefilled_student_dob', nativeDateOfBirth.value);\n                } else {\n                    localStorage.removeItem('prefilled_student_dob');\n                }\n            };\n\n            const setSeriesOption = (seriesKey, value) => {\n                if (!seriesKey) {\n                    return;\n                }\n                const seriesGroups = collectSeriesGroups(filteredProducts.value);\n                const group = seriesGroups.get(seriesKey);\n                if (!group) {\n                    return;\n                }\n\n                const currentSelectedOption = findSeriesOption(group.options, selectedSeriesOptions.value[seriesKey])\n                    ?? getDefaultSeriesOption(group, group.options)\n                    ?? group.options[0];\n                const nextSelectedOption = findSeriesOption(group.options, value)\n                    ?? currentSelectedOption;\n\n                if (String(nextSelectedOption).toLowerCase() === String(currentSelectedOption).toLowerCase()) {\n                    return;\n                }\n\n                selectedSeriesOptions.value = {\n                    ...selectedSeriesOptions.value,\n                    [seriesKey]: nextSelectedOption\n                };\n            };\n\n            const applyDateOfBirthValue = (rawValue) => {\n                const inputValue = String(rawValue || '').trim();\n                if (!inputValue) {\n                    dateOfBirth.value = '';\n                    nativeDateOfBirth.value = '';\n                    return;\n                }\n\n                const normalized = inputValue.replace(\/\\.\/g, '\/').replace(\/-\/g, '\/');\n                const match = normalized.match(\/^(\\d{4})\\\/(\\d{1,2})\\\/(\\d{1,2})$\/);\n                if (!match) {\n                    return;\n                }\n\n                const year = Number(match[1]);\n                const month = Number(match[2]);\n                const day = Number(match[3]);\n                const dob = new Date(year, month - 1, day);\n                if (\n                    dob.getFullYear() !== year ||\n                    dob.getMonth() !== month - 1 ||\n                    dob.getDate() !== day\n                ) {\n                    return;\n                }\n\n                const monthLabel = String(month).padStart(2, '0');\n                const dayLabel = String(day).padStart(2, '0');\n                dateOfBirth.value = dob.toLocaleDateString('en-US', {\n                    month: 'long',\n                    day: 'numeric',\n                    year: 'numeric'\n                });\n                nativeDateOfBirth.value = `${year}-${monthLabel}-${dayLabel}`;\n\n                const today = new Date();\n                let age = today.getFullYear() - year;\n                const monthDiff = today.getMonth() - (month - 1);\n                const dayDiff = today.getDate() - day;\n                if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) {\n                    age -= 1;\n                }\n\n                const clampedAge = Math.min(ageRange.max, Math.max(ageRange.min, age));\n                selectedAge.value = clampedAge;\n                if (typeof requestProductQuotes === 'function') {\n                    requestProductQuotes({ immediate: true });\n                }\n            };\n\n            const syncDatePickerInstances = () => {\n                if (isSyncingDatePickers) {\n                    return;\n                }\n\n                isSyncingDatePickers = true;\n                const dateValue = nativeDateOfBirth.value || null;\n                try {\n                    [mobileDatePickerInstance, desktopDatePickerInstance].forEach((instance) => {\n                        if (!instance) {\n                            return;\n                        }\n\n                        if (!dateValue) {\n                            instance.clear(false);\n                            return;\n                        }\n\n                        if (String(instance.input?.value || '').trim() === dateValue) {\n                            return;\n                        }\n\n                        instance.setDate(dateValue, false, 'Y-m-d');\n                    });\n                } finally {\n                    isSyncingDatePickers = false;\n                }\n            };\n\n            const handleFlatpickrDateChange = (selectedDates) => {\n                if (isSyncingDatePickers) {\n                    return;\n                }\n\n                const selectedDate = selectedDates && selectedDates[0];\n                if (!selectedDate) {\n                    applyDateOfBirthValue('');\n                    syncDatePickerInstances();\n                    return;\n                }\n\n                const year = selectedDate.getFullYear();\n                const month = String(selectedDate.getMonth() + 1).padStart(2, '0');\n                const day = String(selectedDate.getDate()).padStart(2, '0');\n                applyDateOfBirthValue(`${year}-${month}-${day}`);\n                syncDatePickerInstances();\n                if (typeof requestProductQuotes === 'function') {\n                    requestProductQuotes({ immediate: true });\n                }\n            };\n\n            const setDateOfBirth = (event) => {\n                applyDateOfBirthValue(event.target.value);\n                syncDatePickerInstances();\n            };\n\n            const onNativeDateChange = (event) => {\n                applyDateOfBirthValue(event.target.value);\n                syncDatePickerInstances();\n            };\n\n            const createDatePickerInstance = (input) => {\n                if (!input || typeof window.flatpickr !== 'function') {\n                    return null;\n                }\n\n                return window.flatpickr(input, {\n                    allowInput: false,\n                    clickOpens: false,\n                    dateFormat: 'Y-m-d',\n                    defaultDate: nativeDateOfBirth.value || null,\n                    disableMobile: true,\n                    monthSelectorType: 'dropdown',\n                    yearSelectorType: 'input',\n                    maxDate: todayIso.value,\n                    positionElement: input.closest('.ggs-dob-field') || input,\n                    onReady: (_, __, instance) => {\n                        instance.calendarContainer.classList.add('ggs-dob-calendar');\n                    },\n                    onChange: handleFlatpickrDateChange\n                });\n            };\n\n            const initializeDatePickers = () => {\n                mobileDatePickerInstance = createDatePickerInstance(mobileDateInput.value);\n                desktopDatePickerInstance = createDatePickerInstance(desktopDateInput.value);\n                syncDatePickerInstances();\n            };\n\n            const openDatePicker = (target) => {\n                const pickerInstance = target === 'mobile' ? mobileDatePickerInstance : desktopDatePickerInstance;\n                if (pickerInstance) {\n                    pickerInstance.open();\n                    return;\n                }\n\n                const input = target === 'mobile' ? mobileDateInput.value : desktopDateInput.value;\n                if (!input) {\n                    return;\n                }\n\n                input.focus();\n                input.click();\n            };\n\n            const continueLoggedInPurchase = async () => {\n                const email = localStorage.getItem('student_email') || '';\n                navigateToEnrollment(email);\n            };\n\n            const selectProduct = async (product) => {\n                const targetProduct = product.rawProduct || product;\n                if (!targetProduct.pay_link) {\n                    showNotice(copy.value.availableSoon, 'error');\n                    return;\n                }\n\n                if (!await ensureProductQuote(targetProduct)) {\n                    showNotice(copy.value.quotePriceUnavailable, 'error');\n                    return;\n                }\n\n                storeSelectedPlan(targetProduct);\n\n                if (isUscSchoolFlow.value) {\n                    localStorage.removeItem('yisihui');\n                    localStorage.removeItem('yisihui_source');\n                }\n                if (isYisihuiReviewMode()) {\n                    navigateToEnrollment('');\n                    return;\n                }\n\n                if (directPayProductIds.includes(Number(targetProduct.id))) {\n                    openPurchaseModal(targetProduct);\n                    return;\n                }\n\n                if (isLoggedIn()) {\n                    await continueLoggedInPurchase();\n                    return;\n                }\n\n                openLoginModal('enrollment');\n            };\n\n            const scrollToPlans = () => {\n                const target = document.getElementById('product-compare');\n                if (target) {\n                    const topPadding = window.innerWidth >= 1024 ? 92 : 72;\n                    const targetTop = target.getBoundingClientRect().top + window.scrollY - topPadding;\n                    window.scrollTo({\n                        top: Math.max(targetTop, 0),\n                        behavior: 'smooth'\n                    });\n                }\n            };\n\n            const setMetaTag = (selector, attrName, attrValue, content) => {\n                let element = document.querySelector(selector);\n                if (!element) {\n                    element = document.createElement('meta');\n                    element.setAttribute(attrName, attrValue);\n                    document.head.appendChild(element);\n                }\n                element.setAttribute('content', content);\n            };\n\n            watch(showCompareModal, (visible) => {\n                if (!visible) {\n                    hoveredCompareTooltipKey.value = '';\n                    pinnedCompareTooltipKey.value = '';\n                }\n            });\n\n            const getSeoSchoolTitleName = (value) => {\n                return getSchoolNameParts(value).seoName || String(value || '').trim();\n            };\n\n            const productJsonLd = computed(() => {\n                if (!filteredProducts.value.length || !schoolName.value) {\n                    return null;\n                }\n\n                const currentLang = lang || 'en';\n                const isCn = currentLang === 'zh' || currentLang === 'cn';\n                const baseUrl = `${window.location.origin}${window.location.pathname}`;\n                const validMonthlyPrices = filteredProducts.value\n                    .map((product) => Number(getDisplayPrice(product, false) || 0))\n                    .filter((price) => price > 0);\n\n                if (!validMonthlyPrices.length) {\n                    return null;\n                }\n\n                const minPrice = Math.min(...validMonthlyPrices);\n                const maxPrice = Math.max(...validMonthlyPrices);\n\n                const variants = filteredProducts.value.map((product) => {\n                    const monthly = Number(getDisplayPrice(product, false) || 0);\n                    const featureSnippets = [\n                        product.deductible_in ? `${isCn ? '\u81ea\u4ed8\u989d' : 'Deductible'}:${product.deductible_in}` : '',\n                        product.co_payment_shc ? `${isCn ? '\u6821\u533b\u9662' : 'Student Health Center'}:${product.co_payment_shc}` : '',\n                        product.network ? `${isCn ? '\u7f51\u7edc' : 'Network'}:${product.network}` : ''\n                    ].filter(Boolean).join(' | ');\n\n                    return {\n                        '@type': 'FinancialProduct',\n                        name: `${schoolName.value} - ${product.name}`,\n                        description: isCn\n                            ? `\u4e13\u4e3a ${schoolName.value} \u7559\u5b66\u751f\u8bbe\u8ba1\u7684 ${product.name} \u8ba1\u5212\u3002${featureSnippets}\u3002\u7b26\u5408\u5b66\u6821\u8c41\u514d\u8981\u6c42\u3002`\n                            : `${product.name} plan designed for ${schoolName.value} students. ${featureSnippets}. Waiver guaranteed.`,\n                        image: 'https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO3-213x60.png',\n                        sku: `${schoolId.value}-${product.id}`,\n                        offers: {\n                            '@type': 'Offer',\n                            url: `${baseUrl}?school_id=${schoolId.value}&plan_id=${product.id}`,\n                            priceCurrency: 'USD',\n                            price: Number(monthly.toFixed(2)),\n                            priceValidUntil: '2026-12-31',\n                            availability: 'https:\/\/schema.org\/InStock'\n                        }\n                    };\n                });\n\n                const hashSource = String(schoolId.value || schoolName.value || 'ggs');\n                let seed = 0;\n                for (let index = 0; index < hashSource.length; index += 1) {\n                    seed = hashSource.charCodeAt(index) + ((seed << 5) - seed);\n                }\n                seed = Math.abs(seed);\n\n                const dynamicRating = (4.7 + (seed % 4) * 0.1).toFixed(1);\n                const dynamicReviewCount = 600 + (seed % 2400);\n                const today = new Date();\n                const daysAgo = 30 + (seed % 150);\n                const dynamicDate = new Date(today.getTime() - daysAgo * 24 * 60 * 60 * 1000).toISOString().split('T')[0];\n                const reviewAuthors = ['Verified Student', 'J. Smith', 'A. Lee', 'M. Davis', 'International Student', 'S. Chen'];\n                const reviewText = isCn\n                    ? [\n                        `\u4fdd\u9669\u65b9\u6848\u975e\u5e38\u9002\u5408 ${schoolName.value} \u7684\u8981\u6c42\uff0cWaiver \u7533\u8bf7\u5f88\u5feb\u5c31\u901a\u8fc7\u4e86\uff0c\u5ba2\u670d\u4e5f\u5f88\u4e13\u4e1a\u3002`,\n                        `\u4ef7\u683c\u6bd4\u5b66\u6821\u5b98\u65b9\u7684\u4fbf\u5b9c\u5f88\u591a\uff0c\u800c\u4e14 ${schoolName.value} \u7684 waive \u63d0\u4ea4\u975e\u5e38\u987a\u5229\u3002`,\n                        `\u6309\u6d41\u7a0b\u63d0\u4ea4\u7ed9 ${schoolName.value} \u540e\u975e\u5e38\u987a\u5229\uff0c\u6574\u4f53\u4f53\u9a8c\u5f88\u597d\u3002`\n                    ][seed % 3]\n                    : [\n                        `Perfect plan for ${schoolName.value} requirements. The waiver was approved super fast and customer service is great.`,\n                        `Much cheaper than the university plan. The ${schoolName.value} waiver flow was smooth.`,\n                        `Smooth process and saved a lot of money compared to the ${schoolName.value} default insurance.`\n                    ][seed % 3];\n\n                return {\n                    '@context': 'https:\/\/schema.org\/',\n                    '@type': 'ProductGroup',\n                    inLanguage: isCn ? 'zh-CN' : 'en-US',\n                    name: isCn ? `${schoolName.value} \u7559\u5b66\u751f\u533b\u7597\u4fdd\u9669\u8ba1\u5212` : `${schoolName.value} International Student Insurance Plans`,\n                    description: isCn\n                        ? `\u5bf9\u6bd4\u5e76\u8d2d\u4e70 ${schoolName.value} \u7559\u5b66\u751f\u4fdd\u9669\u3002\u6708\u4ef7\u4f4e\u81f3 $${minPrice.toFixed(2)}\u3002100% \u6ee1\u8db3\u5b66\u6821 Waiver \u8981\u6c42\u3002`\n                        : `Compare and buy health insurance plans for ${schoolName.value} students. Starting at $${minPrice.toFixed(2)}\/mo. Waiver guaranteed.`,\n                    brand: { '@type': 'Brand', name: 'GoGlobalSafe' },\n                    productGroupID: `school-group-${schoolId.value}`,\n                    url: window.location.href,\n                    hasVariant: variants,\n                    offers: {\n                        '@type': 'AggregateOffer',\n                        lowPrice: Number(minPrice.toFixed(2)),\n                        highPrice: Number(maxPrice.toFixed(2)),\n                        priceCurrency: 'USD',\n                        offerCount: filteredProducts.value.length\n                    },\n                    aggregateRating: {\n                        '@type': 'AggregateRating',\n                        ratingValue: dynamicRating,\n                        reviewCount: String(dynamicReviewCount),\n                        ratingCount: String(dynamicReviewCount)\n                    },\n                    review: [\n                        {\n                            '@type': 'Review',\n                            author: {\n                                '@type': 'Person',\n                                name: reviewAuthors[seed % reviewAuthors.length]\n                            },\n                            datePublished: dynamicDate,\n                            reviewRating: {\n                                '@type': 'Rating',\n                                ratingValue: '5',\n                                bestRating: '5'\n                            },\n                            reviewBody: reviewText\n                        }\n                    ]\n                };\n            });\n\n            const faqJsonLd = computed(() => {\n                if (!faqItems.value.length) {\n                    return null;\n                }\n                return {\n                    '@context': 'https:\/\/schema.org',\n                    '@type': 'FAQPage',\n                    mainEntity: faqItems.value.map((item) => ({\n                        '@type': 'Question',\n                        name: sanitizeHtmlToText(item.title),\n                        acceptedAnswer: {\n                            '@type': 'Answer',\n                            text: sanitizeHtmlToText(item.content)\n                        }\n                    }))\n                };\n            });\n\n            const seoJsonLdBlocks = computed(() => {\n                return [productJsonLd.value, faqJsonLd.value].filter(Boolean);\n            });\n\n            const updateSeo = () => {\n                if (!schoolName.value) {\n                    return;\n                }\n                const siteName = 'GoGlobalSafe';\n                const seoTitleSchoolName = getSeoSchoolTitleName(schoolName.value);\n                const monthlySeoPrices = filteredProducts.value\n                    .map((product) => Number(getDisplayPrice(product, false) || 0))\n                    .filter((price) => price > 0);\n                const minMonthlyPrice = monthlySeoPrices.length ? Math.min(...monthlySeoPrices) : 0;\n                const title = lang === 'zh'\n                    ? `${seoTitleSchoolName} \u5b66\u751f\u4fdd\u9669 | Waive \u5b66\u6821\u4fdd\u9669\u5e76\u8282\u7701 | ${siteName}`\n                    : `Health Insurance for ${seoTitleSchoolName} Students | Waive School Plan & Save | ${siteName}`;\n                const description = lang === 'zh'\n                    ? `${schoolName.value} \u7559\u5b66\u751f\u4fdd\u9669\u65b9\u6848\uff0c\u652f\u6301\u5e74\u9f84\u52a8\u6001\u62a5\u4ef7\u3001\u5b66\u6821 waive \u65e5\u671f\u5c55\u793a\u4e0e\u65b9\u6848\u5bf9\u6bd4\u3002\u6708\u4ef7\u4f4e\u81f3 $${minMonthlyPrice.toFixed(2)}\u3002`\n                    : `Comprehensive health insurance for ${schoolName.value} students. Meets waiver requirements and starts from $${minMonthlyPrice.toFixed(2)}\/mo.`;\n                const keywords = `${schoolName.value} insurance waiver, ${schoolName.value} international student health insurance, buy insurance for ${schoolName.value}, comprehensive student insurance`;\n                document.title = title;\n                setMetaTag('meta[name=\"description\"]', 'name', 'description', description);\n                setMetaTag('meta[name=\"keywords\"]', 'name', 'keywords', keywords);\n                setMetaTag('meta[property=\"og:title\"]', 'property', 'og:title', title);\n                setMetaTag('meta[property=\"og:description\"]', 'property', 'og:description', description);\n                setMetaTag('meta[property=\"og:url\"]', 'property', 'og:url', window.location.href);\n\n                let canonical = document.querySelector('link[rel=\"canonical\"]');\n                if (!canonical) {\n                    canonical = document.createElement('link');\n                    canonical.rel = 'canonical';\n                    document.head.appendChild(canonical);\n                }\n                canonical.href = `${window.location.origin}${window.location.pathname}`;\n            };\n\n            watchEffect(() => {\n                const scriptId = 'product-list-allnew-jsonld';\n                let scriptTag = document.getElementById(scriptId);\n                const schemaBlocks = seoJsonLdBlocks.value;\n\n                if (!schemaBlocks.length) {\n                    if (scriptTag) {\n                        scriptTag.remove();\n                    }\n                    return;\n                }\n\n                if (!scriptTag) {\n                    scriptTag = document.createElement('script');\n                    scriptTag.id = scriptId;\n                    scriptTag.type = 'application\/ld+json';\n                    document.head.appendChild(scriptTag);\n                }\n\n                scriptTag.textContent = JSON.stringify(schemaBlocks.length === 1 ? schemaBlocks[0] : schemaBlocks, null, 2);\n            });\n\n            const redirectLegacySchoolIdLink = (targetSlug) => {\n                const normalizedSlug = String(targetSlug || '').trim();\n                if (!initialSchoolId || initialSchoolSlug || !normalizedSlug) {\n                    return false;\n                }\n                const targetPath = `\/schools\/${encodeURIComponent(normalizedSlug)}\/`;\n                const currentPath = window.location.pathname.replace(\/\\\/+$\/, '\/');\n                if (currentPath === targetPath) {\n                    return false;\n                }\n                const targetUrl = new URL(targetPath, window.location.origin);\n                const source = String(searchParams.get('source') || '').trim();\n                const blogId = getBlogTrackingId();\n                if (source) {\n                    targetUrl.searchParams.set('source', source);\n                }\n                if (blogId) {\n                    targetUrl.searchParams.set('blog_id', blogId);\n                    targetUrl.searchParams.set('source', blogTrackingSource);\n                }\n                window.location.replace(targetUrl.toString());\n                return true;\n            };\n\n            const fetchProducts = async () => {\n                loading.value = true;\n                errorMessage.value = '';\n                try {\n                    const response = await getHttpClient().post(`${apiUrl}product_all`, {\n                        school_slug: schoolSlug.value,\n                        school_id: schoolId.value,\n                        client_id: getClientId(),\n                        source: getSource(),\n                        blog_id: getBlogTrackingId()\n                    });\n\n                    const payload = response && response.data && response.data.data ? response.data.data : {};\n                    const responseData = response && response.data ? response.data : {};\n                    const rawProducts = Array.isArray(payload.product_all) ? payload.product_all : [];\n                    schoolName.value = payload.schoole_name || '';\n                    schoolWaive.value = payload.school_waive || {};\n                    noPlanMessage.value = rawProducts.length ? '' : getNoPlanMessage(payload, responseData);\n                    products.value = rawProducts.length\n                        ? rawProducts.map((product, index) => ({\n                            ...product,\n                            newProperty: index === 0\n                        }))\n                        : [];\n                    faqItems.value = Array.isArray(payload.faq_categories)\n                        ? payload.faq_categories\n                            .filter((category) => Array.isArray(category.articles) && category.articles.length)\n                            .flatMap((category) => category.articles)\n                        : [];\n                    openedFaqIndexes.value = faqItems.value.length ? [0] : [];\n\n                    if (payload.school_waive && payload.school_waive.school_id) {\n                        schoolId.value = payload.school_waive.school_id;\n                    }\n                    const nextSchoolSlug = payload.school_slug || payload.slug || payload.school_waive?.slug || payload.school_waive?.school_slug || '';\n                    if (redirectLegacySchoolIdLink(nextSchoolSlug)) {\n                        return;\n                    }\n                    if (!schoolSlug.value && nextSchoolSlug) {\n                        schoolSlug.value = String(nextSchoolSlug).trim();\n                    }\n\n                    const nextSelectedSeriesOptions = { ...selectedSeriesOptions.value };\n                    const seriesGroups = collectSeriesGroups(products.value);\n\n                    Object.keys(nextSelectedSeriesOptions).forEach((seriesKey) => {\n                        if (!seriesGroups.has(seriesKey)) {\n                            delete nextSelectedSeriesOptions[seriesKey];\n                        }\n                    });\n\n                    seriesGroups.forEach((group, seriesKey) => {\n                        const savedOption = findSeriesOption(group.options, nextSelectedSeriesOptions[seriesKey]);\n                        if (!savedOption) {\n                            nextSelectedSeriesOptions[seriesKey] = getDefaultSeriesOption(group, group.options)\n                                ?? group.options[0];\n                        }\n                    });\n\n                    selectedSeriesOptions.value = nextSelectedSeriesOptions;\n\n                    selectedForCompare.value = selectedForCompare.value.filter((id) =>\n                        compareablePlans.value.some((product) => String(product.compareId) === id)\n                    ).slice(0, maxComparePlans);\n\n                    updateSeo();\n                    nextTick(() => requestProductQuotes({ immediate: true }));\n                    syncWaiverGuideAccessFromLogin();\n                } catch (error) {\n                    console.error(error);\n                    faqItems.value = [];\n                    openedFaqIndexes.value = [];\n                    errorMessage.value = copy.value.fetchErrorDefault;\n                } finally {\n                    loading.value = false;\n                }\n            };\n\n            onMounted(() => {\n                const urlParams = new URLSearchParams(window.location.search);\n                if (urlParams.has('aff25tripalink') || window.location.search.includes('aff25tripalink')) {\n                    localStorage.setItem('tripalink', 'aff25tripalink');\n                }\n                if (String(urlParams.get('yisihui') || '').trim() === yisihuiReviewCode) {\n                    localStorage.setItem('yisihui', yisihuiReviewCode);\n                }\n                if (urlParams.get('ggs')) {\n                    localStorage.setItem('ggs', urlParams.get('ggs'));\n                }\n                if (urlParams.get('yshlulu')) {\n                    localStorage.setItem('yshlulu', '1');\n                }\n                if (urlParams.get('ref')) {\n                    const agentRef = String(urlParams.get('ref')).trim();\n                    localStorage.setItem('global_agent_ref', agentRef);\n                    if (!urlParams.get('reff') && localStorage.getItem('prefilled_referral_code') === agentRef) {\n                        localStorage.removeItem('prefilled_referral_code');\n                    }\n                }\n                if (urlParams.get('reff')) {\n                    localStorage.setItem('prefilled_referral_code', String(urlParams.get('reff')).trim());\n                }\n                if (urlParams.get('code')) {\n                    localStorage.setItem('us_order_code', String(urlParams.get('code')).trim());\n                }\n                initializeDatePickers();\n                fetchProducts();\n            });\n\n            return {\n                ageProgress,\n                ageRange,\n                allFeatures,\n                bannerMessage,\n                billingCycle,\n                desktopDateInput,\n                copy,\n                compareFeatures,\n                compareSlots,\n                coveragePeriodText,\n                clearCompareTooltip,\n                clearHoveredCompareTooltip,\n                dateOfBirth,\n                displayPrice,\n                equityCards,\n                equityCardGridClass,\n                equityHighlights,\n                equityInfoSubtitle,\n                equityInfoTitle,\n                errorMessage,\n                faqItems,\n                filteredProducts,\n                formatPrice,\n                getFeatureDisplay,\n                getFeatureTransitionKey,\n                getModuleIconSvg,\n                getPlanPriceTransitionKey,\n                getProviderNetworkLink,\n                getSeriesOptionLabel,\n                heroSavings,\n                heroSavingsDisplay,\n                heroSavingsText,\n                heroSeoTitle,\n                heroTitle,\n                heroDescription,\n                hasCoveragePeriod,\n                hasBrochureLink,\n                hasMedicationGuideLink,\n                hasPolicyLink,\n                hasProviderNetworkLink,\n                hasWaiveDeadline,\n                isFeatureDifferent,\n                mobileDateInput,\n                lang,\n                loading,\n                loginErrors,\n                loginForm,\n                loginLoading,\n                mfa,\n                nativeDateOfBirth,\n                noPlanDisplayMessage,\n                notice,\n                noticePanelItems,\n                noticePanelOpen,\n                noticePanelTitle,\n                normalizePlanName,\n                onNativeDateChange,\n                openDatePicker,\n                openedFaqIndexes,\n                openBrochure,\n                openMedicationGuide,\n                openPolicy,\n                planCards,\n                potentialSavings,\n                purchaseModalPlanName,\n                purchaseSubmitting,\n                referralForm,\n                referralMessage,\n                referralMessageType,\n                schoolDisplayName,\n                schoolPlanPrice,\n                schoolWaive,\n                selectedAge,\n                selectedCompareProducts,\n                selectedForCompare,\n                selectedSeriesOptions,\n                selectProduct,\n                showPurchaseModal,\n                showReferralFields,\n                showWaiverGuideUnlockModal,\n                setDateOfBirth,\n                setSeriesOption,\n                cancelMfa,\n                closeLoginModal,\n                closePurchaseModal,\n                closeWaiverGuideUnlockModal,\n                emailSubmitted,\n                handleWaiverGuidePurchasedConfirm,\n                handleWaiverGuideViewPlans,\n                handleLoginSubmit,\n                verifyMfaLogin,\n                isReferralEmailValid,\n                isCompareTooltipVisible,\n                showCompareModal,\n                showLoginModal,\n                startingMonthlyPrice,\n                submitPurchaseFlow,\n                activeWaiverGuideStep,\n                activeWaiverGuideStepIndex,\n                todayIso,\n                toggleCompareTooltip,\n                toggleFaq,\n                toggleBillingCycle,\n                toggleCompare,\n                toggleWaiverRequirements,\n                handleViewMoreToggle,\n                validateLoginEmail,\n                viewMore,\n                visibleFeatures,\n                waiverGuideHighlightText,\n                waiverGuideLink,\n                waiverGuideUnlockLoading,\n                waiverGuidePurchased,\n                waiverGuideSteps,\n                waiverGuideSubtitle,\n                waiverGuideTitle,\n                isWaiverGuideStepLocked,\n                setHoveredCompareTooltip,\n                setActiveWaiverGuideStep,\n                showWaiverGuide,\n                showWaiverRequirements,\n                waiverNoticeText,\n                waiverRequirementsChecklist,\n                waiverRequirementsDescription,\n                waiverRequirementsIntroHtml,\n                waiverRequirementsOpen,\n                waiverRequirementsSubtitle,\n                waiverRequirementsTitle,\n                billingToggleSecondaryLabel,\n                billingPriceUnitLabel,\n                billingPriceUnitShortLabel,\n                scrollToPlans\n            };\n        }\n    }).mount('#product-list-allnew-app');\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"class_list":["post-37790","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.6 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>schools | GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.goglobalsafe.com\/zh\/schools\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"schools\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.goglobalsafe.com\/zh\/schools\/\" \/>\n<meta property=\"og:site_name\" content=\"GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T05:51:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.goglobalsafe.com\/schools\/\",\"url\":\"https:\/\/www.goglobalsafe.com\/schools\/\",\"name\":\"schools | GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848\",\"isPartOf\":{\"@id\":\"https:\/\/www.goglobalsafe.com\/#website\"},\"datePublished\":\"2026-02-05T05:42:05+00:00\",\"dateModified\":\"2026-02-05T05:51:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.goglobalsafe.com\/schools\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.goglobalsafe.com\/schools\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.goglobalsafe.com\/schools\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.goglobalsafe.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"schools\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.goglobalsafe.com\/#website\",\"url\":\"https:\/\/www.goglobalsafe.com\/\",\"name\":\"GoGlobalSafe Student Insurance\",\"description\":\"Your Health, Our Priority\",\"publisher\":{\"@id\":\"https:\/\/www.goglobalsafe.com\/#organization\"},\"alternateName\":\"GoGlobalSafe international student insurance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.goglobalsafe.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.goglobalsafe.com\/#organization\",\"name\":\"Golobal student consulting limited\",\"alternateName\":\"GoGlobalSafe\",\"url\":\"https:\/\/www.goglobalsafe.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.goglobalsafe.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO3.png\",\"contentUrl\":\"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO3.png\",\"width\":500,\"height\":140,\"caption\":\"Golobal student consulting limited\"},\"image\":{\"@id\":\"https:\/\/www.goglobalsafe.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"schools | GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.goglobalsafe.com\/zh\/schools\/","og_locale":"zh_CN","og_type":"article","og_title":"schools","og_url":"https:\/\/www.goglobalsafe.com\/zh\/schools\/","og_site_name":"GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848","article_modified_time":"2026-02-05T05:51:19+00:00","og_image":[{"width":1000,"height":1000,"url":"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO1.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.goglobalsafe.com\/schools\/","url":"https:\/\/www.goglobalsafe.com\/schools\/","name":"schools | GoGlobalsafe-\u7559\u5b66\u751f\u4fdd\u9669\u4e00\u7ad9\u5f0f\u89e3\u51b3\u65b9\u6848","isPartOf":{"@id":"https:\/\/www.goglobalsafe.com\/#website"},"datePublished":"2026-02-05T05:42:05+00:00","dateModified":"2026-02-05T05:51:19+00:00","breadcrumb":{"@id":"https:\/\/www.goglobalsafe.com\/schools\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.goglobalsafe.com\/schools\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.goglobalsafe.com\/schools\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.goglobalsafe.com\/"},{"@type":"ListItem","position":2,"name":"schools"}]},{"@type":"WebSite","@id":"https:\/\/www.goglobalsafe.com\/#website","url":"https:\/\/www.goglobalsafe.com\/","name":"GoGlobalSafe \u5b66\u751f\u4fdd\u9669","description":"\u60a8\u7684\u5065\u5eb7\uff0c\u6211\u4eec\u7684\u9996\u8981\u4efb\u52a1","publisher":{"@id":"https:\/\/www.goglobalsafe.com\/#organization"},"alternateName":"GoGlobalSafe international student insurance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.goglobalsafe.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/www.goglobalsafe.com\/#organization","name":"\u73af\u7403\u5b66\u751f\u54a8\u8be2\u6709\u9650\u516c\u53f8","alternateName":"GoGlobalSafe","url":"https:\/\/www.goglobalsafe.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.goglobalsafe.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO3.png","contentUrl":"https:\/\/www.goglobalsafe.com\/wp-content\/uploads\/2023\/04\/LOGO3.png","width":500,"height":140,"caption":"Golobal student consulting limited"},"image":{"@id":"https:\/\/www.goglobalsafe.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/pages\/37790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/comments?post=37790"}],"version-history":[{"count":9,"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/pages\/37790\/revisions"}],"predecessor-version":[{"id":37811,"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/pages\/37790\/revisions\/37811"}],"wp:attachment":[{"href":"https:\/\/www.goglobalsafe.com\/zh\/wp-json\/wp\/v2\/media?parent=37790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}