{"id":4491,"date":"2025-12-15T06:40:20","date_gmt":"2025-12-14T22:40:20","guid":{"rendered":"https:\/\/maybeits.me\/?page_id=4491"},"modified":"2026-03-19T20:21:28","modified_gmt":"2026-03-19T12:21:28","slug":"mbti-start","status":"publish","type":"page","link":"https:\/\/maybeits.me\/th\/mbti-start\/","title":{"rendered":"&lt;\u0e04\u0e39\u0e48\u0e21\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e15\u0e35\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e25\u0e41\u0e1a\u0e1a\u0e17\u0e14\u0e2a\u0e2d\u0e1a MBTI \u0e14\u0e49\u0e27\u0e22\u0e15\u0e19\u0e40\u0e2d\u0e07 - \u0e40\u0e23\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e17\u0e14\u0e2a\u0e2d\u0e1a&gt;"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"4491\" class=\"elementor elementor-4491\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ad39ce2 e-flex e-con-boxed e-con e-parent\" data-id=\"ad39ce2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a3196e1 elementor-widget elementor-widget-html\" data-id=\"a3196e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"zh-TW\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <title>\n        < MBTI \u81ea\u6211\u89e3\u8b80\u624b\u518a - \u958b\u59cb\u6e2c\u9a57>\n    <\/title>\n    <link\n        href=\"https:\/\/fonts.googleapis.com\/css2?family=Noto+Serif+TC:wght@400;700&family=Noto+Sans+TC:wght@300;400;500;700&display=swap\"\n        rel=\"stylesheet\">\n\n    <style>\n        :root {\n            --bg-light-1: #f5f0eb;\n            --bg-light-2: #ebe4dc;\n            --bg-light-3: #d9d0c5;\n            --txt-dark: #4a4a4a;\n            --txt-medium: #6b6b6b;\n            --txt-light: #8b8b8b;\n            --accent-brown: #8B7355;\n            --accent-gold: #A08060;\n            --card-bg: rgba(255, 255, 255, 0.95);\n            --card-border: rgba(139, 115, 85, 0.35);\n            --font-main: 'Noto Sans TC', sans-serif;\n            --font-serif: 'Noto Serif TC', serif;\n        }\n\n        body,\n        html {\n            margin: 0;\n            padding: 0;\n            width: 100%;\n            height: 100%;\n            font-family: var(--font-main);\n            overflow-x: hidden;\n            background: linear-gradient(180deg, var(--bg-light-1) 0%, var(--bg-light-2) 50%, var(--bg-light-3) 100%);\n        }\n\n        * {\n            box-sizing: border-box;\n            -webkit-tap-highlight-color: transparent;\n        }\n\n        \/* \u80cc\u666f\u5149\u6688\u6548\u679c *\/\n        .bg-glow {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            pointer-events: none;\n            z-index: 0;\n            overflow: hidden;\n        }\n\n        .glow-orb {\n            position: absolute;\n            border-radius: 50%;\n            filter: blur(80px);\n            opacity: 0.4;\n            animation: floatGlow 20s ease-in-out infinite;\n        }\n\n        .glow-orb:nth-child(1) {\n            width: 400px;\n            height: 400px;\n            background: radial-gradient(circle, rgba(160, 128, 96, 0.3) 0%, transparent 70%);\n            top: -100px;\n            right: -100px;\n            animation-delay: 0s;\n        }\n\n        .glow-orb:nth-child(2) {\n            width: 350px;\n            height: 350px;\n            background: radial-gradient(circle, rgba(139, 115, 85, 0.25) 0%, transparent 70%);\n            bottom: 10%;\n            left: -80px;\n            animation-delay: -7s;\n        }\n\n        .glow-orb:nth-child(3) {\n            width: 300px;\n            height: 300px;\n            background: radial-gradient(circle, rgba(180, 150, 120, 0.2) 0%, transparent 70%);\n            top: 40%;\n            right: 10%;\n            animation-delay: -14s;\n        }\n\n        @keyframes floatGlow {\n\n            0%,\n            100% {\n                transform: translate(0, 0) scale(1);\n            }\n\n            25% {\n                transform: translate(30px, -20px) scale(1.1);\n            }\n\n            50% {\n                transform: translate(-20px, 30px) scale(0.95);\n            }\n\n            75% {\n                transform: translate(20px, 20px) scale(1.05);\n            }\n        }\n\n        \/* \u6b65\u9a5f\u5207\u63db\u52d5\u756b *\/\n        @keyframes slideOutLeft {\n            from {\n                opacity: 1;\n                transform: translateX(0);\n            }\n\n            to {\n                opacity: 0;\n                transform: translateX(-50px);\n            }\n        }\n\n        @keyframes slideInRight {\n            from {\n                opacity: 0;\n                transform: translateX(50px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateX(0);\n            }\n        }\n\n        .step-content.slide-out {\n            animation: slideOutLeft 0.3s ease forwards;\n        }\n\n        .step-content.slide-in {\n            animation: slideInRight 0.3s ease forwards;\n        }\n\n        \/* =========================================\n           \u4e3b\u5bb9\u5668\n           ========================================= *\/\n        .form-wrapper {\n            position: relative;\n            min-height: 100vh;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n            z-index: 10;\n        }\n\n        .form-container {\n            width: 100%;\n            max-width: 1000px;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n\n        \/* =========================================\n           \u9032\u5ea6\u689d\n           ========================================= *\/\n        .progress-header {\n            text-align: center;\n            margin-bottom: 25px;\n            width: 100%;\n        }\n\n        .step-indicator {\n            font-size: 16px;\n            color: var(--txt-medium);\n            margin-bottom: 12px;\n            letter-spacing: 1px;\n        }\n\n        \/* \u6b65\u9a5f\u6307\u793a\u5668\u884c\uff08\u8b93 Step X of 3 \u7f6e\u4e2d\uff0c\u5730\u7403\u6309\u9215\u5728\u53f3\u5074\uff09 *\/\n        .step-indicator-row {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            max-width: 500px;\n            margin: 0 auto 12px;\n            position: relative;\n        }\n\n        .step-indicator-row .step-indicator {\n            margin-bottom: 0;\n        }\n\n        .step-indicator-row .globe-btn {\n            position: absolute;\n            right: 0;\n        }\n\n        \/* \u5730\u7403\u6309\u9215\uff08\u6dfa\u8272\u80cc\u666f\u7248\u672c\uff09 *\/\n        .globe-btn {\n            width: 30px;\n            height: 30px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background: rgba(139, 115, 85, 0.1);\n            border: 1.5px solid rgba(139, 115, 85, 0.3);\n            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\n            padding: 0;\n            transition: transform 0.3s ease, background 0.3s ease, border-color 0.3s ease;\n            flex-shrink: 0;\n        }\n\n        .globe-btn span {\n            font-size: 17px;\n            line-height: 1;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .globe-btn:hover {\n            transform: scale(1.1);\n            background: rgba(139, 115, 85, 0.15);\n            border-color: var(--accent-brown);\n        }\n\n        .globe-btn:active {\n            transform: scale(0.95);\n        }\n\n        .progress-track {\n            height: 4px;\n            background: rgba(139, 115, 85, 0.2);\n            border-radius: 10px;\n            overflow: hidden;\n            max-width: 500px;\n            margin: 0 auto;\n        }\n\n        .progress-bar-fill {\n            height: 100%;\n            width: 33.33%;\n            border-radius: 10px;\n            background: linear-gradient(90deg, var(--accent-brown), var(--accent-gold));\n            transition: width 0.5s ease;\n            box-shadow: 0 0 10px rgba(160, 128, 96, 0.5);\n        }\n\n        \/* =========================================\n           \u6a19\u984c\u5340\n           ========================================= *\/\n        .title-area {\n            text-align: center;\n            margin-bottom: 30px;\n        }\n\n        .main-title {\n            font-size: 28px;\n            font-weight: 700;\n            color: var(--txt-dark);\n            font-family: var(--font-serif);\n            margin: 0 0 12px 0;\n        }\n\n        .sub-title {\n            font-size: 15px;\n            color: var(--txt-medium);\n            margin: 0;\n            line-height: 1.6;\n        }\n\n        \/* =========================================\n           \u5167\u5bb9\u5340\n           ========================================= *\/\n        .content-area {\n            width: 100%;\n            display: flex;\n            justify-content: center;\n        }\n\n        .step-content {\n            display: none;\n            width: 100%;\n            justify-content: center;\n            opacity: 0;\n            transform: translateY(20px);\n            transition: opacity 0.4s ease, transform 0.4s ease;\n        }\n\n        .step-content.active {\n            display: flex;\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        \/* =========================================\n           \u6b65\u9a5f 1\uff1a\u6027\u5225\u9078\u64c7\n           ========================================= *\/\n        .gender-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 40px;\n            width: 100%;\n            max-width: 900px;\n            align-items: center;\n            justify-items: center;\n        }\n\n        .gender-option {\n            cursor: pointer;\n            position: relative;\n            width: 100%;\n            max-width: 420px;\n            aspect-ratio: 1 \/ 1;\n            border-radius: 24px;\n            overflow: visible;\n            background: var(--card-bg);\n            border: 3px solid rgba(139, 115, 85, 0.25);\n            box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(255, 255, 255, 0.5) inset;\n            transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s;\n        }\n\n        .gender-option:hover {\n            transform: translateY(-8px);\n            border-color: var(--accent-gold);\n            box-shadow: 0 15px 45px rgba(0, 0, 0, 0.15), 0 0 20px rgba(160, 128, 96, 0.2);\n        }\n\n        .gender-option:active {\n            transform: scale(1.02);\n        }\n\n        .gender-option.selected {\n            border-color: var(--accent-gold);\n            box-shadow: 0 0 0 4px rgba(160, 128, 96, 0.3), 0 15px 45px rgba(0, 0, 0, 0.15);\n        }\n\n        .gender-option img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.5s ease;\n            border-radius: 21px;\n        }\n\n        .gender-option:hover img {\n            transform: scale(1.05);\n        }\n\n        .gender-label {\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            width: 100%;\n            padding: 18px 20px;\n            background: linear-gradient(to top, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 60%, transparent 100%);\n            text-align: center;\n        }\n\n        .gender-label span {\n            color: var(--txt-dark);\n            font-size: 22px;\n            font-weight: 600;\n        }\n\n        \/* =========================================\n           \u6b65\u9a5f 2\uff1a\u89d2\u8272\u9078\u64c7\n           ========================================= *\/\n        .step2-wrapper {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            width: 100%;\n        }\n\n        .role-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 30px;\n            width: 100%;\n            max-width: 950px;\n        }\n\n        .btn-back-step2 {\n            margin-top: 35px;\n            padding: 14px 40px;\n            font-size: 15px;\n            font-weight: 500;\n            background: transparent;\n            color: var(--txt-medium);\n            border: 2px solid rgba(139, 115, 85, 0.3);\n            border-radius: 30px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n        }\n\n        .btn-back-step2:hover {\n            background: rgba(139, 115, 85, 0.1);\n            border-color: var(--accent-brown);\n            color: var(--txt-dark);\n        }\n\n        .role-option {\n            cursor: pointer;\n            position: relative;\n            aspect-ratio: 1 \/ 1;\n            border-radius: 20px;\n            overflow: visible;\n            background: var(--card-bg);\n            border: 3px solid rgba(139, 115, 85, 0.25);\n            box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(255, 255, 255, 0.5) inset;\n            transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s;\n        }\n\n        .role-option:hover {\n            transform: translateY(-5px);\n            border-color: var(--accent-gold);\n            box-shadow: 0 12px 35px rgba(0, 0, 0, 0.12), 0 0 15px rgba(160, 128, 96, 0.15);\n        }\n\n        .role-option:active {\n            transform: scale(1.02);\n        }\n\n        .role-option.selected {\n            border-color: var(--accent-gold);\n            box-shadow: 0 0 0 4px rgba(160, 128, 96, 0.3), 0 12px 35px rgba(0, 0, 0, 0.12);\n        }\n\n        .role-option img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform 0.5s ease;\n            border-radius: 17px;\n        }\n\n        .role-option:hover img {\n            transform: scale(1.02);\n        }\n\n        \/* \u89d2\u8272\u6a19\u7c64\u57fa\u790e\u6a23\u5f0f\uff08\u6703\u88ab\u5f8c\u9762\u7684\u65b0\u6a19\u7c64\u6a23\u5f0f\u8986\u84cb\uff09 *\/\n        .role-label {\n            position: absolute;\n            bottom: 12%;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 66%;\n            padding: 10px 20px;\n            background: rgba(139, 115, 85, 0.7);\n            border-radius: 16px;\n            text-align: center;\n        }\n\n        .role-label span {\n            color: #fff;\n            font-size: 18px;\n            font-weight: 600;\n            line-height: 1.4;\n            display: block;\n            word-break: keep-all;\n            overflow-wrap: break-word;\n        }\n\n        \/* =========================================\n           \u6b65\u9a5f 3\uff1a\u8868\u55ae\u8f38\u5165\n           ========================================= *\/\n        .form-card {\n            background: var(--card-bg);\n            border-radius: 24px;\n            padding: 40px;\n            width: 100%;\n            max-width: 500px;\n            box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(255, 255, 255, 0.5) inset;\n            border: 2px solid rgba(139, 115, 85, 0.2);\n        }\n\n        .form-group {\n            margin-bottom: 24px;\n        }\n\n        .form-group:last-child {\n            margin-bottom: 0;\n        }\n\n        .form-group label {\n            display: block;\n            color: var(--txt-dark);\n            font-size: 15px;\n            margin-bottom: 10px;\n            font-weight: 500;\n        }\n\n        .form-group label .required {\n            color: #e74c3c;\n            margin-left: 3px;\n        }\n\n        .form-group input {\n            width: 100%;\n            padding: 16px 18px;\n            font-size: 16px;\n            font-family: var(--font-main);\n            background: #fff;\n            border: 2px solid rgba(139, 115, 85, 0.3);\n            border-radius: 14px;\n            color: var(--txt-dark);\n            outline: none;\n            transition: border-color 0.3s, box-shadow 0.3s;\n        }\n\n        .form-group input::placeholder {\n            color: var(--txt-light);\n        }\n\n        .form-group input:focus {\n            border-color: var(--accent-brown);\n            box-shadow: 0 0 0 4px rgba(139, 115, 85, 0.15);\n        }\n\n        .form-group input.error {\n            border-color: #e74c3c;\n        }\n\n        .form-error {\n            font-size: 12px;\n            color: #e74c3c;\n            margin-top: 6px;\n            display: none;\n        }\n\n        .form-error.show {\n            display: block;\n        }\n\n        \/* \u8868\u55ae\u8f14\u52a9\u5c0f\u5b57 *\/\n        .form-helper {\n            font-size: 12px;\n            color: var(--txt-light);\n            margin-top: 6px;\n            line-height: 1.5;\n        }\n\n        \/* \u8868\u55ae\u5e95\u90e8\u88dc\u5145\u8aaa\u660e *\/\n        .form-bottom-note {\n            margin-top: 24px;\n            padding-top: 20px;\n            border-top: 1px dashed rgba(139, 115, 85, 0.2);\n            text-align: center;\n        }\n\n        .form-bottom-note p {\n            font-size: 13px;\n            color: var(--txt-medium);\n            line-height: 1.7;\n            margin: 0 0 6px 0;\n        }\n\n        .form-bottom-note p:last-child {\n            margin-bottom: 0;\n        }\n\n        .form-bottom-note .support-note {\n            color: var(--accent-brown);\n            margin-top: 10px;\n        }\n\n        \/* \u9818\u53d6\u78bc checkbox *\/\n        .checkbox-label {\n            display: flex;\n            align-items: center;\n            cursor: pointer;\n            user-select: none;\n            gap: 10px;\n        }\n\n        .checkbox-label input[type=\"checkbox\"] {\n            \/* \u96b1\u85cf\u539f\u751f checkbox *\/\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            \/* \u81ea\u8a02\u6a23\u5f0f *\/\n            box-sizing: border-box;\n            width: 18px;\n            height: 18px;\n            margin: 0;\n            padding: 0;\n            border: 2px solid rgba(139, 115, 85, 0.4);\n            border-radius: 4px;\n            background-color: #fff;\n            cursor: pointer;\n            flex-shrink: 0;\n            vertical-align: middle;\n            \/* \u6253\u52fe\u7b26\u865f\u7528 SVG \u80cc\u666f\u5716 *\/\n            background-repeat: no-repeat;\n            background-position: center;\n            background-size: 10px 10px;\n            transition: all 0.2s ease;\n        }\n\n        .checkbox-label input[type=\"checkbox\"]:checked {\n            background-color: var(--accent-brown);\n            border-color: var(--accent-brown);\n            \/* \u767d\u8272\u6253\u52fe SVG *\/\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C\/polyline%3E%3C\/svg%3E\");\n        }\n\n        .checkbox-text {\n            color: var(--txt-dark);\n            font-size: 15px;\n            font-weight: 500;\n            line-height: 18px;\n        }\n\n        \/* \u689d\u6b3e\u5f48\u7a97 *\/\n        .terms-modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.7);\n            z-index: 2000;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n        }\n\n        .terms-modal.active {\n            display: flex;\n        }\n\n        .terms-modal-card {\n            background: #fff;\n            border-radius: 20px;\n            width: 100%;\n            max-width: 680px;\n            height: 85vh;\n            max-height: 700px;\n            display: flex;\n            flex-direction: column;\n            overflow: hidden;\n            box-shadow: 0 15px 50px rgba(0, 0, 0, 0.25);\n            animation: fadeScaleIn 0.3s ease;\n        }\n\n        @keyframes fadeScaleIn {\n            0% { opacity: 0; transform: scale(0.95); }\n            100% { opacity: 1; transform: scale(1); }\n        }\n\n        .terms-modal-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            padding: 16px 20px;\n            border-bottom: 1px solid rgba(139, 115, 85, 0.15);\n            flex-shrink: 0;\n        }\n\n        .terms-modal-title {\n            font-size: 16px;\n            font-weight: 600;\n            color: var(--txt-dark);\n            font-family: var(--font-main);\n        }\n\n        .terms-modal-close {\n            width: 32px;\n            height: 32px;\n            border: none;\n            background: var(--bg-light-1);\n            border-radius: 50%;\n            font-size: 18px;\n            color: var(--txt-medium);\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: all 0.2s ease;\n            flex-shrink: 0;\n        }\n\n        .terms-modal-close:hover {\n            background: var(--bg-light-2);\n            color: var(--txt-dark);\n        }\n\n        .terms-modal-body {\n            flex: 1;\n            overflow: hidden;\n        }\n\n        .terms-modal-body iframe {\n            width: 100%;\n            height: 100%;\n            border: none;\n        }\n\n        .terms-modal-loading {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            height: 100%;\n            color: var(--txt-light);\n            font-size: 14px;\n        }\n\n        \/* \u540c\u610f\u689d\u6b3e\u5340 *\/\n        .consent-area {\n            margin-top: 20px;\n            padding-top: 18px;\n            border-top: 1px dashed rgba(139, 115, 85, 0.2);\n            display: flex;\n            flex-direction: column;\n            gap: 14px;\n        }\n\n        .consent-label {\n            display: flex;\n            align-items: flex-start;\n            cursor: pointer;\n            user-select: none;\n            gap: 10px;\n        }\n\n        .consent-label input[type=\"checkbox\"] {\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            box-sizing: border-box;\n            width: 18px;\n            height: 18px;\n            min-width: 18px;\n            margin: 2px 0 0 0;\n            padding: 0;\n            border: 2px solid rgba(139, 115, 85, 0.4);\n            border-radius: 4px;\n            background-color: #fff;\n            cursor: pointer;\n            flex-shrink: 0;\n            background-repeat: no-repeat;\n            background-position: center;\n            background-size: 10px 10px;\n            transition: all 0.2s ease;\n        }\n\n        .consent-label input[type=\"checkbox\"]:checked {\n            background-color: var(--accent-brown);\n            border-color: var(--accent-brown);\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C\/polyline%3E%3C\/svg%3E\");\n        }\n\n        .consent-text {\n            color: var(--txt-medium);\n            font-size: 13px;\n            line-height: 1.7;\n        }\n\n        .consent-text a {\n            color: var(--accent-brown);\n            text-decoration: underline;\n            font-weight: 500;\n        }\n\n        .consent-text a:hover {\n            color: var(--accent-gold);\n        }\n\n        .getcode-input-wrapper {\n            display: none;\n            margin-top: 12px;\n        }\n\n        .getcode-input-wrapper.show {\n            display: block;\n        }\n\n        .getcode-input-wrapper input {\n            width: 100%;\n            padding: 16px 18px;\n            font-size: 16px;\n            font-family: var(--font-main);\n            background: #fff;\n            border: 2px solid rgba(139, 115, 85, 0.3);\n            border-radius: 14px;\n            color: var(--txt-dark);\n            outline: none;\n            transition: border-color 0.3s, box-shadow 0.3s;\n        }\n\n        .getcode-input-wrapper input::placeholder {\n            color: var(--txt-light);\n        }\n\n        .getcode-input-wrapper input:focus {\n            border-color: var(--accent-brown);\n            box-shadow: 0 0 0 4px rgba(139, 115, 85, 0.15);\n        }\n\n        \/* =========================================\n           \u9078\u64c7\u5668\u89f8\u767c\u6309\u9215\n           ========================================= *\/\n        .picker-trigger {\n            width: 100%;\n            padding: 16px 18px;\n            font-size: 16px;\n            font-family: var(--font-main);\n            background: #fff;\n            border: 2px solid rgba(139, 115, 85, 0.3);\n            border-radius: 14px;\n            color: var(--txt-dark);\n            cursor: pointer;\n            text-align: left;\n            transition: border-color 0.3s, box-shadow 0.3s, background 0.3s;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            -webkit-tap-highlight-color: transparent;\n        }\n\n        .picker-trigger:hover {\n            border-color: var(--accent-brown);\n            background: #fff;\n            color: var(--txt-dark);\n        }\n\n        .picker-trigger:hover span {\n            color: var(--txt-dark);\n        }\n\n        .picker-trigger:focus,\n        .picker-trigger:focus-visible {\n            border-color: var(--accent-brown);\n            box-shadow: 0 0 0 4px rgba(139, 115, 85, 0.15);\n            outline: none !important;\n            background: #fff !important;\n        }\n\n        .picker-trigger:active {\n            background: #fff;\n        }\n\n        .picker-trigger.placeholder {\n            color: var(--txt-light);\n        }\n\n        .picker-trigger.placeholder:hover {\n            color: var(--txt-light);\n        }\n\n        .picker-trigger span {\n            color: inherit;\n        }\n\n        .picker-trigger.placeholder:hover span {\n            color: var(--txt-light);\n        }\n\n        .picker-trigger.placeholder:focus,\n        .picker-trigger.placeholder:focus-visible {\n            background: #fff !important;\n            color: var(--txt-light);\n        }\n\n        .picker-trigger::after {\n            content: '\u25bc';\n            font-size: 10px;\n            color: var(--txt-light);\n            margin-left: 10px;\n        }\n\n        \/* =========================================\n           \u901a\u7528\u9078\u64c7\u5668\u5f48\u7a97\n           ========================================= *\/\n        .picker-modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.5);\n            z-index: 1000;\n            justify-content: center;\n            align-items: flex-end;\n        }\n\n        .picker-modal.active {\n            display: flex;\n        }\n\n        .picker-container {\n            background: #fff;\n            width: 100%;\n            max-width: 500px;\n            border-radius: 20px 20px 0 0;\n            padding-bottom: env(safe-area-inset-bottom, 20px);\n            animation: slideUp 0.3s ease;\n        }\n\n        @keyframes slideUp {\n            from {\n                transform: translateY(100%);\n            }\n\n            to {\n                transform: translateY(0);\n            }\n        }\n\n        .picker-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            padding: 16px 20px;\n            border-bottom: 1px solid #eee;\n        }\n\n        .picker-header button {\n            background: none;\n            border: none;\n            font-size: 16px;\n            font-family: var(--font-main);\n            cursor: pointer;\n            padding: 8px 16px;\n        }\n\n        .picker-cancel {\n            color: var(--txt-medium);\n        }\n\n        .picker-cancel:hover {\n            color: var(--txt-medium);\n        }\n\n        .picker-confirm {\n            color: var(--accent-brown);\n            font-weight: 600;\n        }\n\n        .picker-confirm:hover {\n            color: var(--accent-brown);\n        }\n\n        .picker-title {\n            font-size: 16px;\n            font-weight: 600;\n            color: var(--txt-dark);\n        }\n\n        \/* \u65e5\u671f\u6efe\u8f2a *\/\n        .picker-wheels {\n            display: flex;\n            height: 280px;\n            overflow: hidden;\n        }\n\n        .wheel-column {\n            flex: 1;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .wheel-column::before,\n        .wheel-column::after {\n            content: '';\n            position: absolute;\n            left: 0;\n            right: 0;\n            height: 118px;\n            pointer-events: none;\n            z-index: 10;\n        }\n\n        .wheel-column::before {\n            top: 0;\n            background: linear-gradient(to bottom, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);\n        }\n\n        .wheel-column::after {\n            bottom: 0;\n            background: linear-gradient(to top, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);\n        }\n\n        .wheel-highlight {\n            position: absolute;\n            top: 50%;\n            left: 10px;\n            right: 10px;\n            height: 44px;\n            transform: translateY(-50%);\n            background: rgba(139, 115, 85, 0.1);\n            border-radius: 10px;\n            pointer-events: none;\n        }\n\n        .wheel-scroll {\n            height: 100%;\n            overflow-y: scroll;\n            scroll-snap-type: y mandatory;\n            -webkit-overflow-scrolling: touch;\n            scrollbar-width: none;\n            -ms-overflow-style: none;\n        }\n\n        .wheel-scroll::-webkit-scrollbar {\n            display: none;\n        }\n\n        .wheel-item {\n            height: 44px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 20px;\n            color: var(--txt-dark);\n            scroll-snap-align: center;\n            cursor: pointer;\n            transition: opacity 0.2s;\n        }\n\n        .wheel-padding {\n            height: 118px;\n        }\n\n        \/* \u5730\u5340\u5217\u8868 *\/\n        .region-list {\n            max-height: 350px;\n            overflow-y: auto;\n            padding: 10px 0;\n        }\n\n        .region-item {\n            padding: 16px 24px;\n            font-size: 17px;\n            color: var(--txt-dark);\n            cursor: pointer;\n            transition: background 0.2s;\n            display: flex;\n            align-items: center;\n            gap: 12px;\n        }\n\n        .region-item:hover {\n            background: rgba(139, 115, 85, 0.08);\n        }\n\n        .region-item.selected {\n            background: rgba(139, 115, 85, 0.15);\n            color: var(--accent-brown);\n            font-weight: 600;\n        }\n\n        .region-item .check {\n            margin-left: auto;\n            color: var(--accent-gold);\n            font-size: 18px;\n            opacity: 0;\n        }\n\n        .region-item.selected .check {\n            opacity: 1;\n        }\n\n        \/* =========================================\n           \u6309\u9215\u5340\n           ========================================= *\/\n        .button-area {\n            display: flex;\n            justify-content: center;\n            gap: 15px;\n            margin-top: 35px;\n            width: 100%;\n            max-width: 500px;\n        }\n\n        .btn {\n            padding: 16px 45px;\n            font-size: 16px;\n            font-weight: 600;\n            border-radius: 30px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            font-family: var(--font-main);\n        }\n\n        .btn-primary {\n            background: linear-gradient(135deg, #6D5E47 0%, #9B8365 50%, #B09070 100%);\n            color: #fff;\n            border: none;\n            box-shadow: 0 6px 25px rgba(109, 94, 71, 0.4);\n        }\n\n        .btn-primary:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 10px 35px rgba(109, 94, 71, 0.5);\n        }\n\n        .btn-secondary {\n            background: #fff;\n            color: var(--txt-dark);\n            border: 2px solid rgba(139, 115, 85, 0.4);\n        }\n\n        .btn-secondary:hover {\n            background: var(--bg-light-1);\n            border-color: var(--accent-brown);\n        }\n\n        .btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n            transform: none !important;\n        }\n\n        \/* \u6b65\u9a5f1\u30012 \u96b1\u85cf\u6309\u9215\u5340 *\/\n        .button-area.hidden {\n            display: none;\n        }\n\n        \/* =========================================\n           \u624b\u6a5f\u7248\u97ff\u61c9\u5f0f\n           ========================================= *\/\n        @media (max-width: 900px) {\n            .form-wrapper {\n                padding: 15px;\n                align-items: flex-start;\n                padding-top: 30px;\n            }\n\n            .main-title {\n                font-size: 24px;\n            }\n\n            .sub-title {\n                font-size: 14px;\n            }\n\n            .gender-grid {\n                grid-template-columns: 1fr;\n                gap: 15px;\n                max-width: 100%;\n                justify-items: center;\n            }\n\n            .gender-option {\n                max-width: 280px;\n                width: 100%;\n                border-radius: 20px;\n                aspect-ratio: 1 \/ 1;\n            }\n\n            .gender-option img {\n                border-radius: 17px;\n            }\n\n            .role-grid {\n                grid-template-columns: repeat(2, 1fr);\n                gap: 8px;\n                max-width: 100%;\n            }\n\n            .role-option {\n                border-radius: 16px;\n                border-width: 2px;\n            }\n\n            .role-label {\n                padding: 8px 14px;\n                border-radius: 12px;\n                width: 70%;\n            }\n\n            .role-label span {\n                font-size: 13px;\n                line-height: 1.4;\n                display: block;\n                word-break: keep-all;\n                overflow-wrap: break-word;\n            }\n\n            .btn-back-step2 {\n                margin-top: 25px;\n                padding: 12px 35px;\n                font-size: 14px;\n            }\n\n            .form-card {\n                padding: 25px 20px;\n                border-radius: 20px;\n            }\n\n            .form-group {\n                margin-bottom: 20px;\n            }\n\n            .form-group input,\n            .picker-trigger {\n                padding: 14px 16px;\n                font-size: 16px;\n            }\n\n            .region-item {\n                font-size: 18px;\n                padding: 18px 24px;\n            }\n\n            .button-area {\n                flex-direction: column;\n                gap: 12px;\n                margin-top: 25px;\n            }\n\n            .btn {\n                width: 100%;\n                padding: 16px 30px;\n            }\n        }\n\n        @media (max-width: 500px) {\n            .gender-option {\n                aspect-ratio: 1 \/ 1;\n            }\n\n            .gender-option img {\n                border-radius: 17px;\n            }\n\n            .role-grid {\n                gap: 6px;\n            }\n\n            .role-option {\n                border-radius: 14px;\n            }\n\n            .role-label {\n                bottom: 8%;\n                padding: 6px 12px;\n                border-radius: 10px;\n                width: 75%;\n            }\n\n            .role-label span {\n                font-size: 12px;\n                line-height: 1.4;\n                display: block;\n                word-break: keep-all;\n                overflow-wrap: break-word;\n            }\n\n            .region-item {\n                font-size: 17px;\n            }\n        }\n\n        \/* =========================================\n           \u65b0\u6a19\u7c64\u6a23\u5f0f\uff08\u6a62\u5713\u5496\u5561\u8272\u6846\uff09\n           ========================================= *\/\n        .gender-label,\n        .role-label {\n            position: absolute;\n            bottom: 12%;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 66%;\n            padding: 6px 24px;\n            background: rgba(139, 115, 85, 0.7);\n            border-radius: 20px;\n            text-align: center;\n            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);\n            border: 1px solid rgba(139, 115, 85, 0.3);\n        }\n\n        \/* \u6027\u5225\u6a19\u7c64\uff1a\u6f38\u5c64\u5e95\u8272\u3001\u7f6e\u4e2d\u58d3\u5728\u4e0b\u908a\u6846 *\/\n        .gender-label {\n            bottom: -27px;\n            padding: 6px 32px;\n            width: auto;\n            border-radius: 30px;\n            background: linear-gradient(135deg, #6D5E47 0%, #9B8365 50%, #B09070 100%);\n            border: 3px solid var(--bg-light-1);\n            box-shadow: none;\n        }\n\n        .gender-label span {\n            color: #fff;\n            font-size: 22px;\n            font-weight: 600;\n            white-space: nowrap;\n            text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n        }\n\n        \/* \u89d2\u8272\u6a19\u7c64\uff1a\u55ae\u8272\u900f\u660e\u3001\u4f4d\u7f6e\u5728\u5716\u7247\u5167 *\/\n        .role-label {\n            bottom: 12%;\n            padding: 10px 20px;\n            border-radius: 16px;\n        }\n\n        .role-label span {\n            color: #fff;\n            font-size: 18px;\n            font-weight: 600;\n            line-height: 1.4;\n            display: block;\n            word-break: keep-all;\n            overflow-wrap: break-word;\n            text-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n        }\n\n        @media (max-width: 900px) {\n            .gender-label {\n                bottom: -19px;\n                padding: 5px 24px;\n                border-width: 2px;\n            }\n\n            .role-label {\n                bottom: 10%;\n                padding: 8px 14px;\n                border-radius: 12px;\n                width: 70%;\n            }\n\n            .gender-label span {\n                font-size: 18px;\n            }\n\n            .role-label span {\n                font-size: 13px;\n                line-height: 1.4;\n                display: block;\n                word-break: keep-all;\n                overflow-wrap: break-word;\n            }\n        }\n\n        \/* =========================================\n           \u89d2\u8272\u61f8\u6d6e\u8a3b\u89e3\uff08\u96fb\u8166\u7248\uff09\n           ========================================= *\/\n        .role-tooltip {\n            display: none;\n            position: absolute;\n            bottom: calc(100% + 15px);\n            left: 50%;\n            transform: translateX(-50%);\n            background: rgba(255, 255, 255, 0.98);\n            padding: 16px 20px;\n            border-radius: 16px;\n            box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);\n            border: 2px solid var(--accent-gold);\n            width: 280px;\n            z-index: 100;\n            text-align: center;\n        }\n\n        .role-tooltip::after {\n            content: '';\n            position: absolute;\n            top: 100%;\n            left: 50%;\n            transform: translateX(-50%);\n            border: 10px solid transparent;\n            border-top-color: var(--accent-gold);\n        }\n\n        .role-tooltip-text {\n            font-size: 14px;\n            color: var(--txt-dark);\n            line-height: 1.6;\n            margin-bottom: 12px;\n        }\n\n        .role-tooltip-btn {\n            padding: 10px 20px;\n            font-size: 14px;\n            font-weight: 600;\n            background: linear-gradient(135deg, #6D5E47 0%, #9B8365 50%, #B09070 100%);\n            color: #fff;\n            border: none;\n            border-radius: 20px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n        }\n\n        .role-tooltip-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 15px rgba(109, 94, 71, 0.4);\n        }\n\n        .role-option.selected .role-tooltip {\n            display: block;\n            animation: fadeInUp 0.3s ease;\n        }\n\n        @keyframes fadeInUp {\n            from {\n                opacity: 0;\n                transform: translateX(-50%) translateY(10px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateX(-50%) translateY(0);\n            }\n        }\n\n        \/* \u624b\u6a5f\u7248\u96b1\u85cf\u61f8\u6d6e\u8a3b\u89e3 *\/\n        @media (max-width: 900px) {\n            .role-tooltip {\n                display: none !important;\n            }\n        }\n\n        \/* =========================================\n           \u89d2\u8272\u8a73\u60c5\u5f48\u7a97\uff08\u624b\u6a5f\u7248\uff09\n           ========================================= *\/\n        .role-detail-modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.6);\n            z-index: 1000;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n        }\n\n        .role-detail-modal.active {\n            display: flex;\n        }\n\n        .role-detail-card {\n            background: #fff;\n            border-radius: 24px;\n            width: 100%;\n            max-width: 350px;\n            overflow: hidden;\n            animation: scaleIn 0.3s ease;\n            position: relative;\n        }\n\n        @keyframes scaleIn {\n            from {\n                opacity: 0;\n                transform: scale(0.9);\n            }\n\n            to {\n                opacity: 1;\n                transform: scale(1);\n            }\n        }\n\n        .role-detail-close {\n            position: absolute;\n            top: 12px;\n            right: 12px;\n            width: 36px;\n            height: 36px;\n            background: rgba(255, 255, 255, 0.9);\n            border: none;\n            border-radius: 50%;\n            font-size: 20px;\n            color: var(--txt-medium);\n            cursor: pointer;\n            z-index: 10;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n        }\n\n        .role-detail-close:hover {\n            background: #fff;\n            color: var(--txt-dark);\n        }\n\n        .role-detail-img {\n            width: 100%;\n            aspect-ratio: 1 \/ 1;\n            object-fit: cover;\n        }\n\n        .role-detail-content {\n            padding: 24px;\n            text-align: center;\n        }\n\n        .role-detail-name {\n            font-size: 20px;\n            font-weight: 700;\n            color: var(--txt-dark);\n            margin-bottom: 12px;\n        }\n\n        .role-detail-desc {\n            font-size: 15px;\n            color: var(--txt-medium);\n            line-height: 1.7;\n            margin-bottom: 20px;\n        }\n\n        .role-detail-btn {\n            width: 100%;\n            padding: 16px 24px;\n            font-size: 16px;\n            font-weight: 600;\n            background: linear-gradient(135deg, #6D5E47 0%, #9B8365 50%, #B09070 100%);\n            color: #fff;\n            border: none;\n            border-radius: 30px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n        }\n\n        .role-detail-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 25px rgba(109, 94, 71, 0.4);\n        }\n\n        \/* =========================================\n           \u9818\u53d6\u6210\u529f\u5f48\u7a97\n           ========================================= *\/\n        .success-modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.7);\n            z-index: 2000;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n        }\n\n        .success-modal.active {\n            display: flex;\n        }\n\n        .success-card {\n            background: linear-gradient(145deg, #fff 0%, #f8f5f0 100%);\n            border-radius: 28px;\n            width: 100%;\n            max-width: 420px;\n            padding: 40px 30px;\n            text-align: center;\n            animation: bounceIn 0.5s ease;\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n            border: 2px solid rgba(160, 128, 96, 0.3);\n        }\n\n        @keyframes bounceIn {\n            0% {\n                opacity: 0;\n                transform: scale(0.8);\n            }\n\n            50% {\n                transform: scale(1.05);\n            }\n\n            100% {\n                opacity: 1;\n                transform: scale(1);\n            }\n        }\n\n        .success-icon {\n            width: 80px;\n            height: 80px;\n            background: linear-gradient(135deg, #6D5E47 0%, #A08060 100%);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 24px;\n            font-size: 40px;\n            color: #fff;\n        }\n\n        .success-title {\n            font-size: 26px;\n            font-weight: 700;\n            color: var(--txt-dark);\n            font-family: var(--font-serif);\n            margin-bottom: 16px;\n        }\n\n        .success-message {\n            font-size: 16px;\n            color: var(--txt-medium);\n            line-height: 1.8;\n            margin-bottom: 24px;\n            min-height: 80px;\n        }\n\n        .success-countdown {\n            font-size: 14px;\n            color: var(--txt-light);\n            margin-bottom: 8px;\n        }\n\n        .success-hint {\n            font-size: 13px;\n            color: var(--txt-light);\n        }\n\n        \/* =========================================\n           \u9818\u53d6\u5931\u6557\u5f48\u7a97\n           ========================================= *\/\n        .error-modal {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.7);\n            z-index: 2000;\n            justify-content: center;\n            align-items: center;\n            padding: 20px;\n        }\n\n        .error-modal.active {\n            display: flex;\n        }\n\n        .error-card {\n            background: #fff;\n            border-radius: 24px;\n            width: 100%;\n            max-width: 400px;\n            padding: 36px 28px;\n            text-align: center;\n            animation: shakeIn 0.5s ease;\n            box-shadow: 0 15px 50px rgba(0, 0, 0, 0.2);\n        }\n\n        @keyframes shakeIn {\n            0% {\n                opacity: 0;\n                transform: translateX(-20px);\n            }\n\n            25% {\n                transform: translateX(15px);\n            }\n\n            50% {\n                transform: translateX(-10px);\n            }\n\n            75% {\n                transform: translateX(5px);\n            }\n\n            100% {\n                opacity: 1;\n                transform: translateX(0);\n            }\n        }\n\n        .error-icon {\n            width: 70px;\n            height: 70px;\n            background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 20px;\n            font-size: 36px;\n            color: #fff;\n        }\n\n        .error-title {\n            font-size: 22px;\n            font-weight: 700;\n            color: var(--txt-dark);\n            margin-bottom: 12px;\n        }\n\n        .error-message {\n            font-size: 15px;\n            color: var(--txt-medium);\n            line-height: 1.7;\n            margin-bottom: 24px;\n        }\n\n        .error-btn {\n            padding: 14px 36px;\n            font-size: 15px;\n            font-weight: 600;\n            background: linear-gradient(135deg, #6D5E47 0%, #9B8365 50%, #B09070 100%);\n            color: #fff;\n            border: none;\n            border-radius: 25px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n        }\n\n        .error-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 20px rgba(109, 94, 71, 0.4);\n        }\n\n        \/* =========================================\n           \u8a9e\u8a00\u5207\u63db\u9078\u55ae\u6a23\u5f0f\n        ========================================= *\/\n        .lang-menu {\n            \/* position \u548c top\/left \u7531 JavaScript \u52d5\u614b\u8a2d\u5b9a *\/\n            background: #fff;\n            border-radius: 12px;\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n            min-width: 160px;\n            z-index: 9999;\n            opacity: 0;\n            visibility: hidden;\n            transform: translateY(-10px);\n            transition: opacity 0.2s, transform 0.2s, visibility 0.2s;\n            overflow: hidden;\n        }\n\n        .lang-menu.active {\n            opacity: 1;\n            visibility: visible;\n            transform: translateY(0);\n        }\n\n        .lang-menu-item {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            padding: 12px 16px;\n            cursor: pointer;\n            transition: background 0.15s;\n            font-size: 14px;\n            color: #333;\n        }\n\n        .lang-menu-item:hover {\n            background: #f5f5f5;\n        }\n\n        .lang-menu-item.active {\n            background: #f0ebe3;\n            font-weight: 600;\n        }\n\n        .lang-menu-item .flag {\n            font-size: 18px;\n        }\n    <\/style>\n<\/head>\n\n<body>\n    <!-- \u80cc\u666f\u5149\u6688 -->\n    <div class=\"bg-glow\">\n        <div class=\"glow-orb\"><\/div>\n        <div class=\"glow-orb\"><\/div>\n        <div class=\"glow-orb\"><\/div>\n    <\/div>\n\n    <!-- \u4e3b\u5bb9\u5668 -->\n    <div class=\"form-wrapper\">\n        <div class=\"form-container\">\n            <!-- \u9032\u5ea6\u689d -->\n            <div class=\"progress-header\">\n                <div class=\"step-indicator-row\">\n                    <div class=\"step-indicator\">\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19 <span id=\"currentStepNum\">1<\/span> \u0e08\u0e32\u0e01 3<\/div>\n                    <div class=\"globe-btn lang-switcher\" id=\"globeBtn\" role=\"button\" tabindex=\"0\"><span>\ud83c\udf0f<\/span><\/div>\n                <\/div>\n                <div class=\"progress-track\">\n                    <div class=\"progress-bar-fill\" id=\"progressBar\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- \u6a19\u984c\u5340 -->\n            <div class=\"title-area\">\n                <h1 class=\"main-title\" id=\"stepTitle\">\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e1e\u0e28\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13<\/h1>\n                <p class=\"sub-title\" id=\"stepSubtitle\">\u0e42\u0e1b\u0e23\u0e14\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14<\/p>\n            <\/div>\n\n            <!-- \u5167\u5bb9\u5340 -->\n            <div class=\"content-area\">\n                <!-- \u6b65\u9a5f 1\uff1a\u6027\u5225\u9078\u64c7 -->\n                <div class=\"step-content active\" id=\"step1\">\n                    <div class=\"gender-grid\">\n                        <div class=\"gender-option\" data-value=\"m\" onclick=\"selectGender('m')\">\n                            <img decoding=\"async\" src=\"https:\/\/pub-692abbec3b20435e888c103b6c121447.r2.dev\/role\/M1-M6.gif\" alt=\"\u0e40\u0e14\u0e47\u0e01\u0e1c\u0e39\u0e49\u0e0a\u0e32\u0e22\">\n                            <div class=\"gender-label\"><span>\u0e40\u0e14\u0e47\u0e01\u0e1c\u0e39\u0e49\u0e0a\u0e32\u0e22<\/span><\/div>\n                        <\/div>\n                        <div class=\"gender-option\" data-value=\"f\" onclick=\"selectGender('f')\">\n                            <img decoding=\"async\" src=\"https:\/\/pub-692abbec3b20435e888c103b6c121447.r2.dev\/role\/F1-F6.gif\" alt=\"\u0e2a\u0e32\u0e27\">\n                            <div class=\"gender-label\"><span>\u0e2a\u0e32\u0e27<\/span><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- \u6b65\u9a5f 2\uff1a\u89d2\u8272\u9078\u64c7 -->\n                <div class=\"step-content\" id=\"step2\">\n                    <div class=\"step2-wrapper\">\n                        <div class=\"role-grid\" id=\"roleGrid\">\n                            <!-- \u52d5\u614b\u751f\u6210 -->\n                        <\/div>\n                        <button class=\"btn btn-back-step2\" onclick=\"goBackToStep1()\">\u2190 \u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32<\/button>\n                    <\/div>\n                <\/div>\n\n                <!-- \u6b65\u9a5f 3\uff1a\u57fa\u672c\u8cc7\u6599 -->\n                <div class=\"step-content\" id=\"step3\">\n                    <div class=\"form-card\">\n                        <div class=\"form-group\">\n                            <label>\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e23\u0e37\u0e2d\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e48\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 <span class=\"required\">*<\/span><\/label>\n                            <input type=\"text\" id=\"inputName\" placeholder=\"\u0e1b\u0e49\u0e2d\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e23\u0e37\u0e2d\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e48\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\">\n                            <div class=\"form-helper\">\u586b\u66b1\u7a31\u4e5f\u53ef\u4ee5 \ud83d\ude0a<\/div>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 <span class=\"required\">*<\/span><\/label>\n                            <input type=\"email\" id=\"inputEmail\" placeholder=\"\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07@\u0e2d\u0e35\u0e40\u0e21\u0e25.com\">\n                            <div class=\"form-error\" id=\"emailError\">\u0e42\u0e1b\u0e23\u0e14\u0e1b\u0e49\u0e2d\u0e19\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07<\/div>\n                            <div class=\"form-helper\">\u6e2c\u9a57\u7d50\u679c\u5099\u4efd + \u5f8c\u7e8c\u5c08\u5c6c\u5167\u5bb9\u5c07\u5bc4\u5230\u6b64\u4fe1\u7bb1 \ud83d\udce9<\/div>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>\u0e27\u0e31\u0e19\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e1b\u0e35\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 <span class=\"required\">*<\/span><\/label>\n                            <button type=\"button\" class=\"picker-trigger placeholder\" id=\"birthdayTrigger\"\n                                onclick=\"openDatePicker()\">\n                                <span>\u0e42\u0e1b\u0e23\u0e14\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e27\u0e31\u0e19\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e1b\u0e35\u0e40\u0e01\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13<\/span>\n                            <\/button>\n                            <input type=\"hidden\" id=\"inputBirthday\">\n                            <div class=\"form-helper\">\u0e01\u0e32\u0e23\u0e15\u0e35\u0e04\u0e27\u0e32\u0e21\u0e1a\u0e38\u0e04\u0e25\u0e34\u0e01\u0e20\u0e32\u0e1e\u0e08\u0e30\u0e41\u0e15\u0e01\u0e15\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19\u0e44\u0e1b\u0e15\u0e32\u0e21\u0e41\u0e15\u0e48\u0e25\u0e30\u0e0a\u0e48\u0e27\u0e07\u0e27\u0e31\u0e22<\/div>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label>\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 <span class=\"required\">*<\/span><\/label>\n                            <button type=\"button\" class=\"picker-trigger placeholder\" id=\"areaTrigger\"\n                                onclick=\"openRegionPicker()\">\n                                <span>\u0e42\u0e1b\u0e23\u0e14\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e20\u0e39\u0e21\u0e34\u0e20\u0e32\u0e04<\/span>\n                            <\/button>\n                            <input type=\"hidden\" id=\"inputArea\">\n                            <div class=\"form-helper\">\u0e43\u0e0a\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e08\u0e31\u0e14\u0e2b\u0e32\u0e20\u0e32\u0e29\u0e32\u0e41\u0e25\u0e30\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e35\u0e48\u0e1b\u0e23\u0e31\u0e1a\u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e01\u0e31\u0e1a\u0e17\u0e49\u0e2d\u0e07\u0e16\u0e34\u0e48\u0e19<\/div>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"checkbox-label\">\n                                <input type=\"checkbox\" id=\"hasGetcode\" onchange=\"toggleGetcodeInput()\">\n                                <span class=\"checkbox-text\" id=\"getcodeLabel\">\u0e09\u0e31\u0e19\u0e21\u0e35\u0e23\u0e2b\u0e31\u0e2a\u0e41\u0e25\u0e01\u0e23\u0e31\u0e1a\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c<\/span>\n                            <\/label>\n                            <div class=\"getcode-input-wrapper\" id=\"getcodeWrapper\">\n                                <input type=\"text\" id=\"inputGetcode\" placeholder=\"\u0e42\u0e1b\u0e23\u0e14\u0e1b\u0e49\u0e2d\u0e19\u0e23\u0e2b\u0e31\u0e2a\u0e41\u0e25\u0e01\u0e23\u0e31\u0e1a\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c\">\n                            <\/div>\n                        <\/div>\n                        <!-- \u5e95\u90e8\u88dc\u5145\u8aaa\u660e -->\n                        <div class=\"form-bottom-note\">\n                            <p>\u6e2c\u9a57\u5b8c\u5168\u514d\u8cbb\uff0c\u7d50\u679c\u7acb\u5373\u986f\u793a \ud83d\ude0a<\/p>\n                            <p>\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e09\u0e1a\u0e31\u0e1a\u0e40\u0e15\u0e47\u0e21\u0e41\u0e25\u0e30\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e1b\u0e47\u0e19\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e41\u0e1a\u0e1a\u0e40\u0e2a\u0e35\u0e22\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e15\u0e31\u0e14\u0e2a\u0e34\u0e19\u0e43\u0e08\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e17\u0e33\u0e01\u0e32\u0e23\u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19\u0e41\u0e25\u0e49\u0e27 \u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e1a\u0e31\u0e07\u0e04\u0e31\u0e1a\u0e43\u0e2b\u0e49\u0e15\u0e49\u0e2d\u0e07\u0e08\u0e48\u0e32\u0e22\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e43\u0e14\u0e46<\/p>\n                            <p class=\"support-note\">\u6709\u4efb\u4f55\u554f\u984c\uff0c\u96a8\u6642\u627e\u53f3\u4e0b\u89d2\u5ba2\u670d \ud83d\udcac<\/p>\n                        <\/div>\n                        <!-- \u540c\u610f\u689d\u6b3e -->\n                        <div class=\"consent-area\">\n                            <label class=\"consent-label\">\n                                <input type=\"checkbox\" id=\"consentTerms\" onchange=\"validateStep3()\">\n                                <span class=\"consent-text\" id=\"consentTermsLabel\">\u6211\u5df2\u95b1\u8b80\u4e26\u540c\u610f<a href=\"#\" onclick=\"openTermsModal('terms-of-service'); return false;\">\u300a\u670d\u52d9\u8207\u4f7f\u7528\u8005\u689d\u6b3e\u300b<\/a>\u8207<a href=\"#\" onclick=\"openTermsModal('privacy-policy'); return false;\">\u300a\u96b1\u79c1\u6b0a\u653f\u7b56\u300b<\/a>\u3002<\/span>\n                            <\/label>\n                            <label class=\"consent-label\">\n                                <input type=\"checkbox\" id=\"consentData\" onchange=\"validateStep3()\">\n                                <span class=\"consent-text\" id=\"consentDataLabel\">\u6211\u540c\u610f\u7cfb\u7d71\u70ba\u751f\u6210\u5ba2\u88fd\u5316\u5831\u544a\uff0c\u8655\u7406\u6211\u7684\u6027\u683c\u5206\u6790\u8cc7\u6599\uff08\u542b\u8de8\u5883\u50b3\u8f38\uff09\u3002<\/span>\n                            <\/label>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- \u6309\u9215\u5340\uff08\u6b65\u9a5f1\u30012 \u96b1\u85cf\uff09 -->\n            <div class=\"button-area hidden\" id=\"buttonArea\">\n                <button class=\"btn btn-secondary\" id=\"btnBack\" onclick=\"prevStep()\">\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32<\/button>\n                <button class=\"btn btn-primary\" id=\"btnNext\" disabled onclick=\"submitForm()\">\u0e40\u0e23\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e17\u0e14\u0e2a\u0e2d\u0e1a<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u65e5\u671f\u9078\u64c7\u5668 -->\n    <div class=\"picker-modal\" id=\"datePickerModal\">\n        <div class=\"picker-container\">\n            <div class=\"picker-header\">\n                <button type=\"button\" class=\"picker-cancel\" onclick=\"closeDatePicker()\">\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01<\/button>\n                <span class=\"picker-title\">\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e27\u0e31\u0e19\u0e40\u0e01\u0e34\u0e14<\/span>\n                <button type=\"button\" class=\"picker-confirm\" onclick=\"confirmDate()\">\u0e41\u0e19\u0e48\u0e19\u0e2d\u0e19<\/button>\n            <\/div>\n            <div class=\"picker-wheels\">\n                <div class=\"wheel-column\">\n                    <div class=\"wheel-highlight\"><\/div>\n                    <div class=\"wheel-scroll\" id=\"yearWheel\"><\/div>\n                <\/div>\n                <div class=\"wheel-column\">\n                    <div class=\"wheel-highlight\"><\/div>\n                    <div class=\"wheel-scroll\" id=\"monthWheel\"><\/div>\n                <\/div>\n                <div class=\"wheel-column\">\n                    <div class=\"wheel-highlight\"><\/div>\n                    <div class=\"wheel-scroll\" id=\"dayWheel\"><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u5730\u5340\u9078\u64c7\u5668 -->\n    <div class=\"picker-modal\" id=\"regionPickerModal\">\n        <div class=\"picker-container\">\n            <div class=\"picker-header\">\n                <button type=\"button\" class=\"picker-cancel\" onclick=\"closeRegionPicker()\">\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01<\/button>\n                <span class=\"picker-title\">\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e20\u0e39\u0e21\u0e34\u0e20\u0e32\u0e04<\/span>\n                <button type=\"button\" class=\"picker-confirm\" onclick=\"confirmRegion()\">\u0e41\u0e19\u0e48\u0e19\u0e2d\u0e19<\/button>\n            <\/div>\n            <div class=\"region-list\" id=\"regionList\">\n                <!-- \u52d5\u614b\u751f\u6210 -->\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u89d2\u8272\u8a73\u60c5\u5f48\u7a97\uff08\u624b\u6a5f\u7248\uff09 -->\n    <div class=\"role-detail-modal\" id=\"roleDetailModal\">\n        <div class=\"role-detail-card\">\n            <button class=\"role-detail-close\" onclick=\"closeRoleDetail()\">\u2715<\/button>\n            <img decoding=\"async\" class=\"role-detail-img\" id=\"roleDetailImg\" src=\"\" alt=\"\">\n            <div class=\"role-detail-content\">\n                <div class=\"role-detail-name\" id=\"roleDetailName\"><\/div>\n                <div class=\"role-detail-desc\" id=\"roleDetailDesc\"><\/div>\n                <button class=\"role-detail-btn\" onclick=\"confirmRoleSelection()\">\u0e09\u0e31\u0e19\u0e0a\u0e2d\u0e1a\u0e15\u0e31\u0e27\u0e25\u0e30\u0e04\u0e23\u0e19\u0e35\u0e49 \u0e07\u0e31\u0e49\u0e19\u0e40\u0e23\u0e32\u0e21\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e01\u0e31\u0e19\u0e40\u0e25\u0e22<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u9818\u53d6\u6210\u529f\u5f48\u7a97 -->\n    <div class=\"success-modal\" id=\"successModal\">\n        <div class=\"success-card\">\n            <div class=\"success-icon\">\u2713<\/div>\n            <div class=\"success-title\">\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e21\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!<\/div>\n            <div class=\"success-message\" id=\"successMessage\"><\/div>\n            <div class=\"success-countdown\" id=\"successCountdown\">\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e43\u0e19 10 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35...<\/div>\n            <div class=\"success-hint\">\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21\u0e43\u0e14\u0e01\u0e47\u0e44\u0e14\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e34\u0e48\u0e21\u0e41\u0e1a\u0e1a\u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e17\u0e31\u0e19\u0e17\u0e35<\/div>\n        <\/div>\n    <\/div>\n\n    <!-- \u9818\u53d6\u5931\u6557\u5f48\u7a97 -->\n    <div class=\"error-modal\" id=\"errorModal\">\n        <div class=\"error-card\">\n            <div class=\"error-icon\">!<\/div>\n            <div class=\"error-title\" id=\"errorTitle\">\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e23\u0e49\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08<\/div>\n            <div class=\"error-message\" id=\"errorMessage\"><\/div>\n            <button class=\"error-btn\" id=\"errorBtn\" onclick=\"closeErrorModal()\">\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e41\u0e25\u0e49\u0e27\u0e40\u0e02\u0e49\u0e32\u0e43\u0e2b\u0e21\u0e48<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- \u689d\u6b3e\u5f48\u7a97 -->\n    <div class=\"terms-modal\" id=\"termsModal\">\n        <div class=\"terms-modal-card\">\n            <div class=\"terms-modal-header\">\n                <span class=\"terms-modal-title\" id=\"termsModalTitle\"><\/span>\n                <button class=\"terms-modal-close\" onclick=\"closeTermsModal()\">\u2715<\/button>\n            <\/div>\n            <div class=\"terms-modal-body\" id=\"termsModalBody\">\n                <div class=\"terms-modal-loading\" id=\"termsModalLoading\">\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14...<\/div>\n                <iframe id=\"termsModalIframe\" style=\"display:none;\" onload=\"onTermsIframeLoad()\"><\/iframe>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ =========================================\n        \/\/ \u591a\u8a9e\u8a00\u7ffb\u8b6f\uff08UI \u6587\u5b57\uff09\n        \/\/ =========================================\n        const uiTranslations = {\n            '': { \/\/ \u7e41\u9ad4\u4e2d\u6587 TW\uff08\u9810\u8a2d\uff09\n\n                \/\/ \u6b65\u9a5f\u6a19\u984c\n                uiStep1Title: '\u9078\u64c7\u4f60\u7684\u6027\u5225',\n                uiStep1Subtitle: '\u8acb\u9078\u64c7\u6700\u7b26\u5408\u7684\u9078\u9805',\n                uiStep2Title: '\u9078\u64c7\u4f60\u7684\u89d2\u8272',\n                uiStep2Subtitle: '\u54ea\u500b\u5f62\u8c61\u6700\u8cbc\u8fd1\u4f60\uff1f',\n                uiStep3Title: '\u586b\u5beb\u57fa\u672c\u8cc7\u6599',\n                uiStep3Subtitle: '\u99ac\u4e0a\u5c31\u80fd\u958b\u59cb\u4e86 \u2728',\n                hasGetcode: '\u6211\u6709\u9818\u53d6\u78bc',\n                hasGetcodeExpanded: '\u6211\u6709\u9818\u53d6\u78bc\uff08\u9650\u6e2c\u9a57\u672c\u4eba\u9818\u53d6\uff0c\u8acb\u52ff\u4ee3\u9818\uff09',\n                getcodePlaceholder: '\u8acb\u8f38\u5165\u9818\u53d6\u78bc',\n                consentTermsHtml: '\u6211\u5df2\u95b1\u8b80\u4e26\u540c\u610f<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u300a\u670d\u52d9\u8207\u4f7f\u7528\u8005\u689d\u6b3e\u300b<\/a>\u8207<a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\u300a\u96b1\u79c1\u6b0a\u653f\u7b56\u300b<\/a>\u3002',\n                consentDataText: '\u6211\u540c\u610f\u7cfb\u7d71\u70ba\u751f\u6210\u5ba2\u88fd\u5316\u5831\u544a\uff0c\u8655\u7406\u6211\u7684\u6027\u683c\u5206\u6790\u8cc7\u6599\uff08\u542b\u8de8\u5883\u50b3\u8f38\uff09\u3002',\n                termsModalTitleTerms: '\u670d\u52d9\u8207\u4f7f\u7528\u8005\u689d\u6b3e',\n                termsModalTitlePrivacy: '\u96b1\u79c1\u6b0a\u653f\u7b56',\n                termsModalLoading: '\u8f09\u5165\u4e2d...'\n            },\n            'zh-hk': { \/\/ \u7e41\u9ad4\u4e2d\u6587 HK\n\n                uiStep1Title: '\u9078\u64c7\u4f60\u7684\u6027\u5225',\n                uiStep1Subtitle: '\u8acb\u9078\u64c7\u6700\u7b26\u5408\u7684\u9078\u9805',\n                uiStep2Title: '\u9078\u64c7\u4f60\u7684\u89d2\u8272',\n                uiStep2Subtitle: '\u908a\u500b\u5f62\u8c61\u6700\u4f3c\u4f60\uff1f',\n                uiStep3Title: '\u586b\u5beb\u57fa\u672c\u8cc7\u6599',\n                uiStep3Subtitle: '\u99ac\u4e0a\u5c31\u53ef\u4ee5\u958b\u59cb\u5587 \u2728',\n                hasGetcode: '\u6211\u6709\u9818\u53d6\u78bc',\n                hasGetcodeExpanded: '\u6211\u6709\u9818\u53d6\u78bc\uff08\u9650\u6e2c\u9a57\u672c\u4eba\u9818\u53d6\uff0c\u8acb\u52ff\u4ee3\u9818\uff09',\n                getcodePlaceholder: '\u8acb\u8f38\u5165\u9818\u53d6\u78bc',\n                consentTermsHtml: '\u6211\u5df2\u95b1\u8b80\u4e26\u540c\u610f<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u300a\u670d\u52d9\u8207\u4f7f\u7528\u8005\u689d\u6b3e\u300b<\/a>\u8207<a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\u300a\u96b1\u79c1\u6b0a\u653f\u7b56\u300b<\/a>\u3002',\n                consentDataText: '\u6211\u540c\u610f\u7cfb\u7d71\u70ba\u751f\u6210\u5ba2\u88fd\u5316\u5831\u544a\uff0c\u8655\u7406\u6211\u7684\u6027\u683c\u5206\u6790\u8cc7\u6599\uff08\u542b\u8de8\u5883\u50b3\u8f38\uff09\u3002',\n                termsModalTitleTerms: '\u670d\u52d9\u8207\u4f7f\u7528\u8005\u689d\u6b3e',\n                termsModalTitlePrivacy: '\u96b1\u79c1\u6b0a\u653f\u7b56',\n                termsModalLoading: '\u8f09\u5165\u4e2d...'\n            },\n            'zh-cn': { \/\/ \u7b80\u4f53\u4e2d\u6587\n\n                uiStep1Title: '\u9009\u62e9\u4f60\u7684\u6027\u522b',\n                uiStep1Subtitle: '\u8bf7\u9009\u62e9\u6700\u7b26\u5408\u7684\u9009\u9879',\n                uiStep2Title: '\u9009\u62e9\u4f60\u7684\u89d2\u8272',\n                uiStep2Subtitle: '\u54ea\u4e2a\u5f62\u8c61\u6700\u8d34\u8fd1\u4f60\uff1f',\n                uiStep3Title: '\u586b\u5199\u57fa\u672c\u8d44\u6599',\n                uiStep3Subtitle: '\u9a6c\u4e0a\u5c31\u80fd\u5f00\u59cb\u4e86 \u2728',\n                hasGetcode: '\u6211\u6709\u9886\u53d6\u7801',\n                hasGetcodeExpanded: '\u6211\u6709\u9886\u53d6\u7801\uff08\u9650\u6d4b\u9a8c\u672c\u4eba\u9886\u53d6\uff0c\u8bf7\u52ff\u4ee3\u9886\uff09',\n                getcodePlaceholder: '\u8bf7\u8f93\u5165\u9886\u53d6\u7801',\n                consentTermsHtml: '\u6211\u5df2\u9605\u8bfb\u5e76\u540c\u610f<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u300a\u670d\u52a1\u4e0e\u7528\u6237\u6761\u6b3e\u300b<\/a>\u4e0e<a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\u300a\u9690\u79c1\u6743\u653f\u7b56\u300b<\/a>\u3002',\n                consentDataText: '\u6211\u540c\u610f\u7cfb\u7edf\u4e3a\u751f\u6210\u5b9a\u5236\u5316\u62a5\u544a\uff0c\u5904\u7406\u6211\u7684\u6027\u683c\u5206\u6790\u8d44\u6599\uff08\u542b\u8de8\u5883\u4f20\u8f93\uff09\u3002',\n                termsModalTitleTerms: '\u670d\u52a1\u4e0e\u7528\u6237\u6761\u6b3e',\n                termsModalTitlePrivacy: '\u9690\u79c1\u6743\u653f\u7b56',\n                termsModalLoading: '\u52a0\u8f7d\u4e2d...'\n            },\n            'en': { \/\/ English\n\n                uiStep1Title: 'Choose your gender',\n                uiStep1Subtitle: 'Select the option that fits you best',\n                uiStep2Title: 'Choose your character',\n                uiStep2Subtitle: 'Which one feels most like you?',\n                uiStep3Title: 'Fill in basic info',\n                uiStep3Subtitle: 'Almost ready to start! \u2728',\n                hasGetcode: 'I have a redemption code',\n                hasGetcodeExpanded: 'I have a redemption code (for personal use only)',\n                getcodePlaceholder: 'Please enter the redemption code',\n                consentTermsHtml: 'I have read and agree to the <a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">Terms of Service<\/a> and <a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">Privacy Policy<\/a>.',\n                consentDataText: 'I consent to the processing of my personality analysis data (including cross-border transfers) for generating customized reports.',\n                termsModalTitleTerms: 'Terms of Service',\n                termsModalTitlePrivacy: 'Privacy Policy',\n                termsModalLoading: 'Loading...'\n            },\n            'kr': { \/\/ \ud55c\uad6d\uc5b4\n\n                uiStep1Title: '\uc131\ubcc4\uc744 \uc120\ud0dd\ud558\uc138\uc694',\n                uiStep1Subtitle: '\uac00\uc7a5 \ub9de\ub294 \uc635\uc158\uc744 \uc120\ud0dd\ud558\uc138\uc694',\n                uiStep2Title: '\uce90\ub9ad\ud130\ub97c \uc120\ud0dd\ud558\uc138\uc694',\n                uiStep2Subtitle: '\uc5b4\ub5a4 \uc774\ubbf8\uc9c0\uac00 \uac00\uc7a5 \uc798 \uc5b4\uc6b8\ub9ac\ub098\uc694?',\n                uiStep3Title: '\uae30\ubcf8 \uc815\ubcf4 \uc785\ub825',\n                uiStep3Subtitle: '\uace7 \uc2dc\uc791\ud560 \uc218 \uc788\uc5b4\uc694! \u2728',\n                hasGetcode: '\ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4',\n                hasGetcodeExpanded: '\ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4 (\ubcf8\uc778\ub9cc \uc0ac\uc6a9 \uac00\ub2a5)',\n                getcodePlaceholder: '\ucf54\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694',\n                consentTermsHtml: '<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\uc11c\ube44\uc2a4 \uc774\uc6a9\uc57d\uad00<\/a> \ubc0f <a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\uac1c\uc778\uc815\ubcf4 \ucc98\ub9ac\ubc29\uce68<\/a>\uc744 \uc77d\uc5c8\uc73c\uba70 \uc774\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4.',\n                consentDataText: '\ub9de\ucda4\ud615 \ubcf4\uace0\uc11c \uc0dd\uc131\uc744 \uc704\ud574 \uc131\uaca9 \ubd84\uc11d \ub370\uc774\ud130\uc758 \ucc98\ub9ac(\uad6d\uc678 \uc774\uc804 \ud3ec\ud568)\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4.',\n                termsModalTitleTerms: '\uc11c\ube44\uc2a4 \uc774\uc6a9\uc57d\uad00',\n                termsModalTitlePrivacy: '\uac1c\uc778\uc815\ubcf4 \ucc98\ub9ac\ubc29\uce68',\n                termsModalLoading: '\ub85c\ub529 \uc911...'\n            },\n            'jp': { \/\/ \u65e5\u672c\u8a9e\n\n                uiStep1Title: '\u6027\u5225\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044',\n                uiStep1Subtitle: '\u6700\u3082\u5f53\u3066\u306f\u307e\u308b\u3082\u306e\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044',\n                uiStep2Title: '\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044',\n                uiStep2Subtitle: '\u3069\u306e\u30a4\u30e1\u30fc\u30b8\u304c\u4e00\u756a\u8fd1\u3044\u3067\u3059\u304b\uff1f',\n                uiStep3Title: '\u57fa\u672c\u60c5\u5831\u3092\u5165\u529b',\n                uiStep3Subtitle: '\u3082\u3046\u3059\u3050\u59cb\u3081\u3089\u308c\u307e\u3059\uff01 \u2728',\n                hasGetcode: '\u5f15\u304d\u63db\u3048\u30b3\u30fc\u30c9\u3092\u6301\u3063\u3066\u3044\u307e\u3059',\n                hasGetcodeExpanded: '\u5f15\u304d\u63db\u3048\u30b3\u30fc\u30c9\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff08\u672c\u4eba\u306e\u307f\u4f7f\u7528\u53ef\u80fd\uff09',\n                getcodePlaceholder: '\u5f15\u304d\u63db\u3048\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n                consentTermsHtml: '<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u5229\u7528\u898f\u7d04<\/a>\u304a\u3088\u3073<a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u30dd\u30ea\u30b7\u30fc<\/a>\u3092\u8aad\u307f\u3001\u540c\u610f\u3057\u307e\u3059\u3002',\n                consentDataText: '\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u306e\u305f\u3081\u3001\u6027\u683c\u5206\u6790\u30c7\u30fc\u30bf\u306e\u51e6\u7406\uff08\u56fd\u5916\u79fb\u8ee2\u3092\u542b\u3080\uff09\u306b\u540c\u610f\u3057\u307e\u3059\u3002',\n                termsModalTitleTerms: '\u5229\u7528\u898f\u7d04',\n                termsModalTitlePrivacy: '\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u30dd\u30ea\u30b7\u30fc',\n                termsModalLoading: '\u8aad\u307f\u8fbc\u307f\u4e2d...'\n            },\n            'th': { \/\/ \u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22\n\n                uiStep1Title: '\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e40\u0e1e\u0e28\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13',\n                uiStep1Subtitle: '\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e15\u0e23\u0e07\u0e01\u0e31\u0e1a\u0e04\u0e38\u0e13\u0e21\u0e32\u0e01\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14',\n                uiStep2Title: '\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e25\u0e30\u0e04\u0e23\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13',\n                uiStep2Subtitle: '\u0e20\u0e32\u0e1e\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e44\u0e2b\u0e19\u0e17\u0e35\u0e48\u0e43\u0e01\u0e25\u0e49\u0e40\u0e04\u0e35\u0e22\u0e07\u0e04\u0e38\u0e13\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14?',\n                uiStep3Title: '\u0e01\u0e23\u0e2d\u0e01\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19',\n                uiStep3Subtitle: '\u0e2d\u0e35\u0e01\u0e19\u0e34\u0e14\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e47\u0e40\u0e23\u0e34\u0e48\u0e21\u0e44\u0e14\u0e49\u0e41\u0e25\u0e49\u0e27 \u2728',\n                hasGetcode: '\u0e09\u0e31\u0e19\u0e21\u0e35\u0e23\u0e2b\u0e31\u0e2a\u0e41\u0e25\u0e01',\n                hasGetcodeExpanded: '\u0e09\u0e31\u0e19\u0e21\u0e35\u0e23\u0e2b\u0e31\u0e2a\u0e41\u0e25\u0e01 (\u0e43\u0e0a\u0e49\u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19)',\n                getcodePlaceholder: '\u0e01\u0e23\u0e38\u0e13\u0e32\u0e01\u0e23\u0e2d\u0e01\u0e23\u0e2b\u0e31\u0e2a\u0e41\u0e25\u0e01',\n                consentTermsHtml: '\u0e09\u0e31\u0e19\u0e44\u0e14\u0e49\u0e2d\u0e48\u0e32\u0e19\u0e41\u0e25\u0e30\u0e22\u0e2d\u0e21\u0e23\u0e31\u0e1a<a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u0e02\u0e49\u0e2d\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23<\/a>\u0e41\u0e25\u0e30<a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">\u0e19\u0e42\u0e22\u0e1a\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27<\/a>',\n                consentDataText: '\u0e09\u0e31\u0e19\u0e22\u0e34\u0e19\u0e22\u0e2d\u0e21\u0e43\u0e2b\u0e49\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e27\u0e34\u0e40\u0e04\u0e23\u0e32\u0e30\u0e2b\u0e4c\u0e1a\u0e38\u0e04\u0e25\u0e34\u0e01\u0e20\u0e32\u0e1e (\u0e23\u0e27\u0e21\u0e16\u0e36\u0e07\u0e01\u0e32\u0e23\u0e42\u0e2d\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e49\u0e32\u0e21\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28) \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e23\u0e32\u0e22\u0e07\u0e32\u0e19\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e1a\u0e38\u0e04\u0e04\u0e25',\n                termsModalTitleTerms: '\u0e02\u0e49\u0e2d\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23',\n                termsModalTitlePrivacy: '\u0e19\u0e42\u0e22\u0e1a\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27',\n                termsModalLoading: '\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14...'\n            },\n            'vi': { \/\/ Ti\u1ebfng Vi\u1ec7t\n\n                uiStep1Title: 'Ch\u1ecdn gi\u1edbi t\u00ednh c\u1ee7a b\u1ea1n',\n                uiStep1Subtitle: 'H\u00e3y ch\u1ecdn l\u1ef1a ch\u1ecdn ph\u00f9 h\u1ee3p nh\u1ea5t',\n                uiStep2Title: 'Ch\u1ecdn nh\u00e2n v\u1eadt c\u1ee7a b\u1ea1n',\n                uiStep2Subtitle: 'H\u00ecnh \u1ea3nh n\u00e0o g\u1ea7n gi\u1ed1ng b\u1ea1n nh\u1ea5t?',\n                uiStep3Title: '\u0110i\u1ec1n th\u00f4ng tin c\u01a1 b\u1ea3n',\n                uiStep3Subtitle: 'S\u1eafp b\u1eaft \u0111\u1ea7u r\u1ed3i! \u2728',\n                hasGetcode: 'T\u00f4i c\u00f3 m\u00e3 nh\u1eadn',\n                hasGetcodeExpanded: 'T\u00f4i c\u00f3 m\u00e3 nh\u1eadn (ch\u1ec9 d\u00e0nh cho c\u00e1 nh\u00e2n s\u1eed d\u1ee5ng)',\n                getcodePlaceholder: 'Vui l\u00f2ng nh\u1eadp m\u00e3 nh\u1eadn',\n                consentTermsHtml: 'T\u00f4i \u0111\u00e3 \u0111\u1ecdc v\u00e0 \u0111\u1ed3ng \u00fd v\u1edbi <a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">\u0110i\u1ec1u kho\u1ea3n d\u1ecbch v\u1ee5<\/a> v\u00e0 <a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt<\/a>.',\n                consentDataText: 'T\u00f4i \u0111\u1ed3ng \u00fd cho h\u1ec7 th\u1ed1ng x\u1eed l\u00fd d\u1eef li\u1ec7u ph\u00e2n t\u00edch t\u00ednh c\u00e1ch c\u1ee7a t\u00f4i (bao g\u1ed3m truy\u1ec1n d\u1eef li\u1ec7u xuy\u00ean bi\u00ean gi\u1edbi) \u0111\u1ec3 t\u1ea1o b\u00e1o c\u00e1o t\u00f9y ch\u1ec9nh.',\n                termsModalTitleTerms: '\u0110i\u1ec1u kho\u1ea3n d\u1ecbch v\u1ee5',\n                termsModalTitlePrivacy: 'Ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt',\n                termsModalLoading: '\u0110ang t\u1ea3i...'\n            },\n            'br': { \/\/ Portugu\u00eas\n\n                uiStep1Title: 'Escolha seu g\u00eanero',\n                uiStep1Subtitle: 'Selecione a op\u00e7\u00e3o mais adequada',\n                uiStep2Title: 'Escolha seu personagem',\n                uiStep2Subtitle: 'Qual imagem mais combina com voc\u00ea?',\n                uiStep3Title: 'Preencha as informa\u00e7\u00f5es b\u00e1sicas',\n                uiStep3Subtitle: 'Quase pronto para come\u00e7ar! \u2728',\n                hasGetcode: 'Tenho um c\u00f3digo de resgate',\n                hasGetcodeExpanded: 'Tenho um c\u00f3digo de resgate (apenas para uso pessoal)',\n                getcodePlaceholder: 'Por favor, insira o c\u00f3digo de resgate',\n                consentTermsHtml: 'Li e concordo com os <a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">Termos de Servi\u00e7o<\/a> e a <a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">Pol\u00edtica de Privacidade<\/a>.',\n                consentDataText: 'Autorizo o processamento dos meus dados de an\u00e1lise de personalidade (incluindo transfer\u00eancia internacional) para a gera\u00e7\u00e3o de relat\u00f3rios personalizados.',\n                termsModalTitleTerms: 'Termos de Servi\u00e7o',\n                termsModalTitlePrivacy: 'Pol\u00edtica de Privacidade',\n                termsModalLoading: 'Carregando...'\n            },\n            'id': { \/\/ Bahasa Indonesia\n\n                uiStep1Title: 'Pilih jenis kelamin',\n                uiStep1Subtitle: 'Pilih opsi yang paling sesuai',\n                uiStep2Title: 'Pilih karakter kamu',\n                uiStep2Subtitle: 'Gambar mana yang paling mirip denganmu?',\n                uiStep3Title: 'Isi data dasar',\n                uiStep3Subtitle: 'Sebentar lagi bisa mulai! \u2728',\n                hasGetcode: 'Saya punya kode penukaran',\n                hasGetcodeExpanded: 'Saya punya kode penukaran (hanya untuk penggunaan pribadi)',\n                getcodePlaceholder: 'Silakan masukkan kode penukaran',\n                consentTermsHtml: 'Saya telah membaca dan menyetujui <a href=\"#\" onclick=\"openTermsModal(&#39;terms-of-service&#39;); return false;\">Ketentuan Layanan<\/a> dan <a href=\"#\" onclick=\"openTermsModal(&#39;privacy-policy&#39;); return false;\">Kebijakan Privasi<\/a>.',\n                consentDataText: 'Saya menyetujui pemrosesan data analisis kepribadian saya (termasuk transfer lintas negara) untuk pembuatan laporan yang disesuaikan.',\n                termsModalTitleTerms: 'Ketentuan Layanan',\n                termsModalTitlePrivacy: 'Kebijakan Privasi',\n                termsModalLoading: 'Memuat...'\n            }\n        };\n\n        \/\/ \u570b\u5bb6\u4ee3\u78bc \u2192 \u5730\u5340\u6620\u5c04\u8868\uff08\u7528\u65bc IP \u5075\u6e2c\u81ea\u52d5\u586b\u5165\uff09\n        const countryToRegion = {\n            'TW': '\ud83c\uddf9\ud83c\uddfc Taiwan - \u7e41\u9ad4\u4e2d\u6587',\n            'CN': '\ud83c\udde8\ud83c\uddf3 China - \u7b80\u4f53\u4e2d\u6587',\n            'HK': '\ud83c\udded\ud83c\uddf0 Hong Kong - \u7e41\u9ad4\u4e2d\u6587',\n            'MO': '\ud83c\uddf2\ud83c\uddf4 Macau - \u7e41\u9ad4\u4e2d\u6587',\n            'SG': '\ud83c\uddf8\ud83c\uddec Singapore - English',      \/\/ \u9810\u8a2d English\n            'MY': '\ud83c\uddf2\ud83c\uddfe Malaysia - English',       \/\/ \u9810\u8a2d English\n            'JP': '\ud83c\uddef\ud83c\uddf5 Japan - \u65e5\u672c\u8a9e',\n            'KR': '\ud83c\uddf0\ud83c\uddf7 South Korea - \ud55c\uad6d\uc5b4',\n            'TH': '\ud83c\uddf9\ud83c\udded Thailand - \u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22',\n            'VN': '\ud83c\uddfb\ud83c\uddf3 Vietnam - Ti\u1ebfng Vi\u1ec7t',\n            'BR': '\ud83c\udde7\ud83c\uddf7 Brazil - Portugu\u00eas',\n            'ID': '\ud83c\uddee\ud83c\udde9 Indonesia - Bahasa Indonesia',\n            'PH': '\ud83c\uddf5\ud83c\udded Philippines - English',\n            'GB': '\ud83c\uddec\ud83c\udde7 United Kingdom - English',\n            'AU': '\ud83c\udde6\ud83c\uddfa Australia - English',\n            \/\/ 27 \u500b\u6b50\u6d32\u570b\u5bb6 \u2192 Europe\n            'AT': '\ud83c\uddea\ud83c\uddfa Europe - English', 'BE': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'BG': '\ud83c\uddea\ud83c\uddfa Europe - English', 'HR': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'CY': '\ud83c\uddea\ud83c\uddfa Europe - English', 'CZ': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'DK': '\ud83c\uddea\ud83c\uddfa Europe - English', 'EE': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'FI': '\ud83c\uddea\ud83c\uddfa Europe - English', 'FR': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'DE': '\ud83c\uddea\ud83c\uddfa Europe - English', 'GR': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'HU': '\ud83c\uddea\ud83c\uddfa Europe - English', 'IE': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'IT': '\ud83c\uddea\ud83c\uddfa Europe - English', 'LV': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'LT': '\ud83c\uddea\ud83c\uddfa Europe - English', 'LU': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'MT': '\ud83c\uddea\ud83c\uddfa Europe - English', 'NL': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'PL': '\ud83c\uddea\ud83c\uddfa Europe - English', 'PT': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'RO': '\ud83c\uddea\ud83c\uddfa Europe - English', 'SK': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'SI': '\ud83c\uddea\ud83c\uddfa Europe - English', 'ES': '\ud83c\uddea\ud83c\uddfa Europe - English',\n            'SE': '\ud83c\uddea\ud83c\uddfa Europe - English'\n        };\n\n        \/\/ \u5075\u6e2c\u7576\u524d\u8a9e\u8a00\n        const langCodes = ['zh-hk', 'zh-cn', 'en', 'kr', 'jp', 'th', 'vi', 'br', 'id'];\n        function getCurrentLang() {\n            \/\/ 1. URL \u53c3\u6578\uff08\u6e2c\u8a66\u7528\uff09\n            const urlParams = new URLSearchParams(window.location.search);\n            const langParam = urlParams.get('lang');\n            if (langParam && langCodes.includes(langParam)) {\n                return langParam;\n            }\n            \/\/ 2. URL \u8def\u5f91\u7b2c\u4e00\u6bb5\uff08TranslatePress \u6b63\u5f0f\u74b0\u5883\uff09\n            const path = window.location.pathname;\n            const firstSegment = path.split('\/').filter(s => s)[0] || '';\n            return langCodes.includes(firstSegment) ? firstSegment : '';\n        }\n\n        \/\/ \u53d6\u5f97\u7ffb\u8b6f\u6587\u5b57\n        function t(key) {\n            const lang = getCurrentLang();\n            const translations = uiTranslations[lang] || uiTranslations[''];\n            return translations[key] || uiTranslations[''][key] || key;\n        }\n\n        \/\/ =========================================\n        \/\/ \u8cc7\u6599\n        \/\/ =========================================\n        const rolesData = {\n            m: [\n                { code: 'M1', name: '\u967d\u5149\u793e\u5718\u5b78\u9577', img: 'https:\/\/p.maybeits.me\/role\/M1%E9%A0%AD%E5%83%8F.png', desc: '\u71b1\u60c5\u958b\u6717\u7684\u9818\u5c0e\u8005\uff0c\u7e3d\u662f\u80fd\u5e36\u52d5\u6c23\u6c1b\uff0c\u8b93\u8eab\u908a\u7684\u4eba\u5145\u6eff\u6d3b\u529b\u8207\u7b11\u5bb9\u3002', color: '#7793ab' },\n                { code: 'M2', name: '\u52d9\u5be6\u65b0\u92b3\u5de5\u7a0b\u5e2b', img: 'https:\/\/p.maybeits.me\/role\/M2%E9%A0%AD%E5%83%8F.png', desc: '\u908f\u8f2f\u6e05\u6670\u3001\u8ffd\u6c42\u6548\u7387\uff0c\u7528\u7406\u6027\u601d\u7dad\u89e3\u6c7a\u554f\u984c\uff0c\u662f\u503c\u5f97\u4fe1\u8cf4\u7684\u5925\u4f34\u3002', color: '#768d79' },\n                { code: 'M3', name: '\u96a8\u6027\u4e2d\u6027\u651d\u5f71\u5e2b', img: 'https:\/\/p.maybeits.me\/role\/M3%E9%A0%AD%E5%83%8F.png', desc: '\u81ea\u7531\u4e0d\u7f88\u7684\u85dd\u8853\u9748\u9b42\uff0c\u7528\u7368\u7279\u8996\u89d2\u6355\u6349\u751f\u6d3b\u4e2d\u7684\u7f8e\u597d\u77ac\u9593\u3002', color: '#c4c5c9' },\n                { code: 'M4', name: '\u5167\u5411\u5b85\u7cfb\u5c11\u5e74', img: 'https:\/\/p.maybeits.me\/role\/M4%E9%A0%AD%E5%83%8F.png', desc: '\u5b89\u975c\u5167\u6582\u537b\u6709\u8457\u8c50\u5bcc\u5167\u5fc3\u4e16\u754c\uff0c\u5728\u81ea\u5df1\u7684\u5c0f\u5b87\u5b99\u88e1\u63a2\u7d22\u7121\u9650\u53ef\u80fd\u3002', color: '#9da79c' },\n                { code: 'M5', name: '\u6210\u719f\u7a69\u91cd\u6696\u7537', img: 'https:\/\/p.maybeits.me\/role\/M5%E9%A0%AD%E5%83%8F.png', desc: '\u6eab\u67d4\u9ad4\u8cbc\u53c8\u53ef\u9760\uff0c\u7528\u6c89\u7a69\u7684\u529b\u91cf\u7d66\u4e88\u8eab\u908a\u7684\u4eba\u5b89\u5168\u611f\u8207\u652f\u6301\u3002', color: '#819490' },\n                { code: 'M6', name: '\u6a02\u5929\u77e5\u547d\u5927\u53d4', img: 'https:\/\/p.maybeits.me\/role\/M6%E9%A0%AD%E5%83%8F.png', desc: '\u770b\u6de1\u4eba\u751f\u98a8\u96e8\u7684\u667a\u8005\uff0c\u7528\u5e7d\u9ed8\u548c\u8c41\u9054\u9762\u5c0d\u4e00\u5207\uff0c\u6563\u767c\u81ea\u5728\u7684\u9b45\u529b\u3002', color: '#847e70' }\n            ],\n            f: [\n                { code: 'F1', name: '\u6eab\u6696\u7642\u7652\u7cfb', img: 'https:\/\/p.maybeits.me\/role\/F1%E9%A0%AD%E5%83%8F.png', desc: '\u5982\u6625\u98a8\u822c\u6eab\u6696\u4eba\u5fc3\uff0c\u7e3d\u80fd\u7528\u5fae\u7b11\u548c\u95dc\u61f7\u6cbb\u7652\u8eab\u908a\u6bcf\u500b\u75b2\u618a\u7684\u9748\u9b42\u3002' },\n                { code: 'F2', name: '\u7cbe\u660e\u90fd\u6703\u5973', img: 'https:\/\/p.maybeits.me\/role\/F2%E9%A0%AD%E5%83%8F.png', desc: '\u7368\u7acb\u81ea\u4fe1\u7684\u73fe\u4ee3\u5973\u6027\uff0c\u5728\u8077\u5834\u8207\u751f\u6d3b\u4e2d\u90fd\u5c55\u73fe\u5c08\u696d\u5e79\u7df4\u7684\u98a8\u91c7\u3002' },\n                { code: 'F3', name: '\u96a8\u8208\u4e2d\u6027\u9177\u5973\u5b69', img: 'https:\/\/p.maybeits.me\/role\/F3%E9%A0%AD%E5%83%8F.png', desc: '\u6253\u7834\u6846\u67b6\u7684\u81ea\u7531\u9748\u9b42\uff0c\u7528\u7387\u6027\u771f\u6211\u8a6e\u91cb\u7368\u4e00\u7121\u4e8c\u7684\u500b\u4eba\u98a8\u683c\u3002' },\n                { code: 'F4', name: '\u5167\u5411\u5b85\u7cfb\u5c11\u5973', img: 'https:\/\/p.maybeits.me\/role\/F4%E9%A0%AD%E5%83%8F.png', desc: '\u5916\u8868\u6587\u975c\u5167\u5fc3\u8c50\u5bcc\uff0c\u6c89\u6d78\u5728\u81ea\u5df1\u7684\u8208\u8da3\u4e16\u754c\u88e1\u627e\u5230\u6700\u7d14\u7cb9\u7684\u5feb\u6a02\u3002' },\n                { code: 'F5', name: '\u89aa\u5207\u77e5\u6027\u719f\u5973', img: 'https:\/\/p.maybeits.me\/role\/F5%E9%A0%AD%E5%83%8F.png', desc: '\u512a\u96c5\u5f9e\u5bb9\u7684\u77e5\u8b58\u5973\u6027\uff0c\u7528\u667a\u6167\u548c\u89aa\u548c\u529b\u8d0f\u5f97\u6240\u6709\u4eba\u7684\u5c0a\u91cd\u8207\u559c\u611b\u3002' },\n                { code: 'F6', name: '\u793e\u7fa4\u6642\u5c1a\u9054\u4eba', img: 'https:\/\/p.maybeits.me\/role\/F6%E9%A0%AD%E5%83%8F.png', desc: '\u8d70\u5728\u6f6e\u6d41\u5c16\u7aef\u7684\u6642\u5c1a\u5148\u92d2\uff0c\u7528\u7368\u5230\u773c\u5149\u5f15\u9818\u98a8\u683c\uff0c\u5275\u9020\u8a71\u984c\u7126\u9ede\u3002' }\n            ]\n        };\n\n        \/\/ \u89d2\u8272\u540d\u7a31\u591a\u8a9e\u8a00\u7ffb\u8b6f\n        const roleNameTranslations = {\n            '': { \/\/ \u7e41\u9ad4\u4e2d\u6587 TW\uff08\u9810\u8a2d\uff09\n                M1: '\u967d\u5149\u793e\u5718\u5b78\u9577', M2: '\u52d9\u5be6\u65b0\u92b3\u5de5\u7a0b\u5e2b', M3: '\u96a8\u6027\u4e2d\u6027\u651d\u5f71\u5e2b',\n                M4: '\u5167\u5411\u5b85\u7cfb\u5c11\u5e74', M5: '\u6210\u719f\u7a69\u91cd\u6696\u7537', M6: '\u6a02\u5929\u77e5\u547d\u5927\u53d4',\n                F1: '\u6eab\u6696\u7642\u7652\u7cfb', F2: '\u7cbe\u660e\u90fd\u6703\u5973', F3: '\u96a8\u8208\u4e2d\u6027\u9177\u5973\u5b69',\n                F4: '\u5167\u5411\u5b85\u7cfb\u5c11\u5973', F5: '\u89aa\u5207\u77e5\u6027\u719f\u5973', F6: '\u793e\u7fa4\u6642\u5c1a\u9054\u4eba'\n            },\n            'zh-hk': { \/\/ \u7e41\u9ad4\u4e2d\u6587 HK\n                M1: '\u967d\u5149\u793e\u5718\u5b78\u9577', M2: '\u52d9\u5be6\u65b0\u92b3\u5de5\u7a0b\u5e2b', M3: '\u96a8\u6027\u4e2d\u6027\u651d\u5f71\u5e2b',\n                M4: '\u5167\u5411\u5b85\u7cfb\u5c11\u5e74', M5: '\u6210\u719f\u7a69\u91cd\u6696\u7537', M6: '\u6a02\u5929\u77e5\u547d\u5927\u53d4',\n                F1: '\u6eab\u6696\u7642\u7652\u7cfb', F2: '\u7cbe\u660e\u90fd\u6703\u5973', F3: '\u96a8\u8208\u4e2d\u6027\u9177\u5973\u5b69',\n                F4: '\u5167\u5411\u5b85\u7cfb\u5c11\u5973', F5: '\u89aa\u5207\u77e5\u6027\u719f\u5973', F6: '\u793e\u7fa4\u6642\u5c1a\u9054\u4eba'\n            },\n            'zh-cn': { \/\/ \u7b80\u4f53\u4e2d\u6587\n                M1: '\u9633\u5149\u793e\u56e2\u5b66\u957f', M2: '\u52a1\u5b9e\u65b0\u9510\u5de5\u7a0b\u5e08', M3: '\u968f\u6027\u4e2d\u6027\u6444\u5f71\u5e08',\n                M4: '\u5185\u5411\u5b85\u7cfb\u5c11\u5e74', M5: '\u6210\u719f\u7a33\u91cd\u6696\u7537', M6: '\u4e50\u5929\u77e5\u547d\u5927\u53d4',\n                F1: '\u6e29\u6696\u7597\u6108\u7cfb', F2: '\u7cbe\u660e\u90fd\u4f1a\u5973', F3: '\u968f\u5174\u4e2d\u6027\u9177\u5973\u5b69',\n                F4: '\u5185\u5411\u5b85\u7cfb\u5c11\u5973', F5: '\u4eb2\u5207\u77e5\u6027\u719f\u5973', F6: '\u793e\u7fa4\u65f6\u5c1a\u8fbe\u4eba'\n            },\n            'en': { \/\/ English\n                M1: 'Sunny club senior', M2: 'Pragmatic engineer', M3: 'Casual androgynous photographer',\n                M4: 'Introverted homebody', M5: 'Mature and warm-hearted man', M6: 'Happy and content uncle',\n                F1: 'Warm and healing', F2: 'Smart city woman', F3: 'Casual androgynous cool girl',\n                F4: 'Introverted homebody girl', F5: 'Friendly intellectual woman', F6: 'Social media fashionista'\n            },\n            'kr': { \/\/ \ud55c\uad6d\uc5b4\n                M1: '\ubc1d\uc740 \ub3d9\uc544\ub9ac \uc120\ubc30', M2: '\uc2e4\uc6a9\uc801\uc778 \uc2e0\uc608 \uc5d4\uc9c0\ub2c8\uc5b4', M3: '\uce90\uc8fc\uc5bc\ud558\uace0 \uc911\uc131\uc801\uc778 \uc0ac\uc9c4\uc791\uac00',\n                M4: '\ub0b4\uc131\uc801\uc778 \uc9d1\uc21c\uc774 \uc18c\ub144', M5: '\uc131\uc219\ud558\uace0 \ub530\ub73b\ud55c \ub9c8\uc74c\uc744 \uac00\uc9c4 \ub0a8\uc790', M6: '\ub099\ucc9c\uc801\uc774\uace0 \ub9cc\uc871\uc2a4\ub7ec\uc6b4 \uc0bc\ucd0c',\n                F1: '\ub530\ub73b\ud558\uace0 \uce58\uc720\uc801\uc778', F2: '\uc138\ub828\ub41c \ub3c4\uc2dc \uc5ec\uc131', F3: '\uce90\uc8fc\uc5bc\ud558\uace0 \uc911\uc131\uc801\uc778 \ucfe8\uac78',\n                F4: '\ub0b4\uc131\uc801\uc778 \uc9d1\uc21c\uc774 \uc18c\ub140', F5: '\uce5c\uc808\ud55c \uc9c0\uc801 \uc5ec\uc131', F6: '\uc18c\uc15c \ubbf8\ub514\uc5b4 \ud328\uc154\ub2c8\uc2a4\ud0c0'\n            },\n            'jp': { \/\/ \u65e5\u672c\u8a9e\n                M1: '\u660e\u308b\u3044\u30b5\u30fc\u30af\u30eb\u306e\u5148\u8f29', M2: '\u5b9f\u7528\u7684\u306a\u65b0\u92ed\u30a8\u30f3\u30b8\u30cb\u30a2', M3: '\u30ab\u30b8\u30e5\u30a2\u30eb\u3067\u4e2d\u6027\u7684\u306a\u30ab\u30e1\u30e9\u30de\u30f3',\n                M4: '\u5185\u5411\u7684\u306a\u30aa\u30bf\u30af\u5c11\u5e74', M5: '\u6210\u719f\u3057\u305f\u512a\u3057\u3044\u7537\u6027', M6: '\u697d\u5929\u7684\u306a\u304a\u3058\u3055\u3093',\n                F1: '\u6e29\u304b\u304f\u7652\u3057\u7cfb', F2: '\u30b9\u30de\u30fc\u30c8\u306a\u90fd\u4f1a\u306e\u5973\u6027', F3: '\u30ab\u30b8\u30e5\u30a2\u30eb\u3067\u4e2d\u6027\u7684\u306a\u30af\u30fc\u30eb\u30ac\u30fc\u30eb',\n                F4: '\u5185\u5411\u7684\u306a\u30aa\u30bf\u30af\u5c11\u5973', F5: '\u89aa\u5207\u306a\u77e5\u7684\u5973\u6027', F6: 'SNS\u30d5\u30a1\u30c3\u30b7\u30e7\u30cb\u30b9\u30bf'\n            },\n            'th': { \/\/ \u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22\n                M1: '\u0e23\u0e38\u0e48\u0e19\u0e1e\u0e35\u0e48\u0e0a\u0e21\u0e23\u0e21\u0e23\u0e48\u0e32\u0e40\u0e23\u0e34\u0e07', M2: '\u0e27\u0e34\u0e28\u0e27\u0e01\u0e23\u0e21\u0e37\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e35\u0e48\u0e1b\u0e0f\u0e34\u0e1a\u0e31\u0e15\u0e34\u0e08\u0e23\u0e34\u0e07', M3: '\u0e0a\u0e48\u0e32\u0e07\u0e20\u0e32\u0e1e\u0e2a\u0e1a\u0e32\u0e22\u0e46 \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14\u0e40\u0e1e\u0e28',\n                M4: '\u0e2b\u0e19\u0e38\u0e48\u0e21\u0e40\u0e19\u0e34\u0e23\u0e4c\u0e14\u0e02\u0e35\u0e49\u0e2d\u0e32\u0e22', M5: '\u0e1c\u0e39\u0e49\u0e0a\u0e32\u0e22\u0e2d\u0e1a\u0e2d\u0e38\u0e48\u0e19\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e0d\u0e48', M6: '\u0e25\u0e38\u0e07\u0e21\u0e2d\u0e07\u0e42\u0e25\u0e01\u0e43\u0e19\u0e41\u0e07\u0e48\u0e14\u0e35',\n                F1: '\u0e2d\u0e1a\u0e2d\u0e38\u0e48\u0e19\u0e41\u0e25\u0e30\u0e40\u0e22\u0e35\u0e22\u0e27\u0e22\u0e32', F2: '\u0e2a\u0e32\u0e27\u0e40\u0e21\u0e37\u0e2d\u0e07\u0e09\u0e25\u0e32\u0e14', F3: '\u0e2a\u0e32\u0e27\u0e04\u0e39\u0e25\u0e2a\u0e1a\u0e32\u0e22\u0e46 \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14\u0e40\u0e1e\u0e28',\n                F4: '\u0e2a\u0e32\u0e27\u0e40\u0e19\u0e34\u0e23\u0e4c\u0e14\u0e02\u0e35\u0e49\u0e2d\u0e32\u0e22', F5: '\u0e1c\u0e39\u0e49\u0e2b\u0e0d\u0e34\u0e07\u0e09\u0e25\u0e32\u0e14\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e34\u0e15\u0e23', F6: '\u0e41\u0e1f\u0e0a\u0e31\u0e48\u0e19\u0e19\u0e34\u0e2a\u0e15\u0e49\u0e32\u0e42\u0e0b\u0e40\u0e0a\u0e35\u0e22\u0e25\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22'\n            },\n            'vi': { \/\/ Ti\u1ebfng Vi\u1ec7t\n                M1: 'Anh l\u1edbn c\u00e2u l\u1ea1c b\u1ed9 vui v\u1ebb', M2: 'K\u1ef9 s\u01b0 m\u1edbi th\u1ef1c t\u1ebf', M3: 'Nhi\u1ebfp \u1ea3nh gia tho\u1ea3i m\u00e1i phi gi\u1edbi t\u00ednh',\n                M4: 'Ch\u00e0ng trai h\u01b0\u1edbng n\u1ed9i \u1edf nh\u00e0', M5: 'Ng\u01b0\u1eddi \u0111\u00e0n \u00f4ng tr\u01b0\u1edfng th\u00e0nh \u1ea5m \u00e1p', M6: 'Ch\u00fa l\u1ea1c quan vui v\u1ebb',\n                F1: '\u1ea4m \u00e1p v\u00e0 ch\u1eefa l\u00e0nh', F2: 'C\u00f4 g\u00e1i th\u00e0nh th\u1ecb th\u00f4ng minh', F3: 'C\u00f4 g\u00e1i cool tho\u1ea3i m\u00e1i phi gi\u1edbi t\u00ednh',\n                F4: 'C\u00f4 g\u00e1i h\u01b0\u1edbng n\u1ed9i \u1edf nh\u00e0', F5: 'Ph\u1ee5 n\u1eef tr\u00ed th\u1ee9c th\u00e2n thi\u1ec7n', F6: 'Fashionista m\u1ea1ng x\u00e3 h\u1ed9i'\n            },\n            'br': { \/\/ Portugu\u00eas\n                M1: 'Veterano alegre do clube', M2: 'Engenheiro novato pr\u00e1tico', M3: 'Fot\u00f3grafo casual andr\u00f3gino',\n                M4: 'Garoto introvertido caseiro', M5: 'Homem maduro e caloroso', M6: 'Tio otimista e contente',\n                F1: 'Calorosa e curadora', F2: 'Mulher urbana inteligente', F3: 'Garota cool casual andr\u00f3gina',\n                F4: 'Garota introvertida caseira', F5: 'Mulher intelectual amig\u00e1vel', F6: 'Fashionista de m\u00eddia social'\n            },\n            'id': { \/\/ Bahasa Indonesia\n                M1: 'Senior klub yang ceria', M2: 'Insinyur baru yang praktis', M3: 'Fotografer kasual androgini',\n                M4: 'Pemuda introvert rumahan', M5: 'Pria dewasa yang hangat', M6: 'Paman yang optimis dan puas',\n                F1: 'Hangat dan menyembuhkan', F2: 'Wanita kota yang cerdas', F3: 'Gadis keren kasual androgini',\n                F4: 'Gadis introvert rumahan', F5: 'Wanita intelektual yang ramah', F6: 'Fashionista media sosial'\n            }\n        };\n\n        \/\/ \u53d6\u5f97\u7ffb\u8b6f\u5f8c\u7684\u89d2\u8272\u540d\u7a31\n        function getRoleName(code) {\n            const lang = getCurrentLang();\n            const translations = roleNameTranslations[lang] || roleNameTranslations[''];\n            return translations[code] || roleNameTranslations[''][code] || code;\n        }\n\n        \/\/ \u6210\u529f\u9818\u53d6\u5f8c\u7684\u96a8\u6a5f\u597d\u8a71\n        const successMessages = {\n            m: [\n                '\u4eca\u5929\u7684\u4f60\uff0c\u6bd4\u6628\u5929\u66f4\u63a5\u8fd1\u7406\u60f3\u7684\u81ea\u5df1\u4e86\u3002',\n                '\u6bcf\u4e00\u6b21\u5617\u8a66\uff0c\u90fd\u662f\u6210\u9577\u7684\u5370\u8a18\u3002\u7e7c\u7e8c\u524d\u9032\u5427\uff01',\n                '\u76f8\u4fe1\u81ea\u5df1\u7684\u9078\u64c7\uff0c\u4f60\u6bd4\u60f3\u50cf\u4e2d\u66f4\u6709\u529b\u91cf\u3002',\n                '\u4eba\u751f\u6c92\u6709\u767d\u8d70\u7684\u8def\uff0c\u6bcf\u4e00\u6b65\u90fd\u7b97\u6578\u3002',\n                '\u4fdd\u6301\u597d\u5947\u5fc3\uff0c\u4e16\u754c\u6703\u56de\u5831\u4f60\u66f4\u591a\u9a5a\u559c\u3002',\n                '\u4f60\u7684\u5805\u6301\u7d42\u5c07\u958b\u82b1\u7d50\u679c\uff0c\u975c\u5f85\u6642\u6a5f\u3002',\n                '\u771f\u6b63\u7684\u5f37\u5927\uff0c\u662f\u6eab\u67d4\u800c\u5805\u5b9a\u5730\u505a\u81ea\u5df1\u3002',\n                '\u4eca\u5929\u4e5f\u662f\u5145\u6eff\u53ef\u80fd\u6027\u7684\u4e00\u5929\uff0c\u597d\u597d\u628a\u63e1\uff01',\n                '\u4f60\u5df2\u7d93\u5f88\u68d2\u4e86\uff0c\u8a18\u5f97\u7d66\u81ea\u5df1\u4e00\u500b\u5fae\u7b11\u3002',\n                '\u672a\u4f86\u6b63\u5728\u5411\u4f60\u62db\u624b\uff0c\u6e96\u5099\u597d\u8fce\u63a5\u4e86\u55ce\uff1f'\n            ],\n            f: [\n                '\u89aa\u611b\u7684\uff0c\u4f60\u503c\u5f97\u4e16\u754c\u4e0a\u6240\u6709\u7f8e\u597d\u7684\u4e8b\u7269\u3002',\n                '\u4eca\u5929\u7684\u4f60\u9583\u9583\u767c\u5149\uff0c\u7e7c\u7e8c\u6563\u767c\u4f60\u7684\u5149\u8292\u5427\uff01',\n                '\u6bcf\u4e00\u500b\u8a8d\u771f\u751f\u6d3b\u7684\u65e5\u5b50\uff0c\u90fd\u662f\u6700\u597d\u7684\u79ae\u7269\u3002',\n                '\u4f60\u7684\u6eab\u67d4\u662f\u529b\u91cf\uff0c\u4f60\u7684\u5805\u5f37\u662f\u98a8\u666f\u3002',\n                '\u76f8\u4fe1\u81ea\u5df1\uff0c\u4f60\u6bd4\u60f3\u50cf\u4e2d\u66f4\u52a0\u51fa\u8272\u3002',\n                '\u9858\u4f60\u88ab\u9019\u4e16\u754c\u6eab\u67d4\u4ee5\u5f85\uff0c\u4e5f\u6eab\u67d4\u5f85\u4eba\u3002',\n                '\u4fdd\u6301\u5fae\u7b11\uff0c\u597d\u904b\u6b63\u5728\u8d95\u4f86\u7684\u8def\u4e0a\u3002',\n                '\u4f60\u7684\u5b58\u5728\u672c\u8eab\uff0c\u5c31\u662f\u4e00\u4ef6\u7f8e\u597d\u7684\u4e8b\u3002',\n                '\u4eca\u5929\u4e5f\u8981\u597d\u597d\u611b\u81ea\u5df1\uff0c\u4f60\u503c\u5f97\u88ab\u73cd\u60dc\u3002',\n                '\u672a\u4f86\u53ef\u671f\uff0c\u800c\u4f60\u6b63\u5728\u5275\u9020\u5c6c\u65bc\u81ea\u5df1\u7684\u7cbe\u5f69\u3002'\n            ]\n        };\n\n        \/\/ \u932f\u8aa4\u8a0a\u606f\n        const errorMessages = {\n            1: {\n                title: '\u9818\u53d6\u5931\u6557',\n                message: '\u5f88\u62b1\u6b49\uff0c\u60a8\u8f38\u5165\u7684\u9818\u53d6\u78bc\u4f3c\u4e4e\u6709\u8aa4\u3002\\n\u8acb\u78ba\u8a8d\u5f8c\u91cd\u65b0\u8f38\u5165\uff0c\u8b1d\u8b1d\u60a8\u7684\u914d\u5408\uff01',\n                btn: '\u8fd4\u56de\u91cd\u65b0\u8f38\u5165'\n            },\n            2: {\n                title: '\u518d\u6b21\u78ba\u8a8d',\n                message: '\u9818\u53d6\u78bc\u9a57\u8b49\u4ecd\u672a\u6210\u529f\u3002\\n\u5efa\u8b70\u60a8\u4ed4\u7d30\u6aa2\u67e5\u662f\u5426\u6709\u7a7a\u683c\u6216\u5927\u5c0f\u5beb\u7684\u5dee\u7570\uff0c\u518d\u8a66\u4e00\u6b21\u770b\u770b\uff01',\n                btn: '\u518d\u8a66\u4e00\u6b21'\n            },\n            3: {\n                title: '\u9700\u8981\u5354\u52a9\u55ce\uff1f',\n                message: '\u60a8\u5df2\u5617\u8a66\u8f38\u5165 3 \u6b21\u4e86\u3002\\n\u5982\u679c\u6301\u7e8c\u9047\u5230\u554f\u984c\uff0c\u5efa\u8b70\u60a8\u806f\u7e6b\u5ba2\u670d\u5354\u52a9\u8655\u7406\uff0c\u6216\u53d6\u6d88\u52fe\u9078\u300c\u6211\u6709\u9818\u53d6\u78bc\u300d\u76f4\u63a5\u958b\u59cb\u6e2c\u9a57\u3002',\n                btn: '\u6211\u77e5\u9053\u4e86'\n            },\n            4: {\n                title: '\u9700\u8981\u5354\u52a9\u55ce\uff1f',\n                message: '\u60a8\u5df2\u5617\u8a66\u8f38\u5165\u591a\u6b21\u4e86\u3002\\n\u5982\u679c\u6301\u7e8c\u9047\u5230\u554f\u984c\uff0c\u5efa\u8b70\u60a8\u806f\u7e6b\u5ba2\u670d\u5354\u52a9\u8655\u7406\uff0c\u6216\u53d6\u6d88\u52fe\u9078\u300c\u6211\u6709\u9818\u53d6\u78bc\u300d\u76f4\u63a5\u958b\u59cb\u6e2c\u9a57\u3002',\n                btn: '\u6211\u77e5\u9053\u4e86'\n            },\n            already: {\n                title: '\u5df2\u9818\u53d6\u904e\u512a\u60e0',\n                message: '\u6b64\u9818\u53d6\u78bc\u5df2\u7d93\u4f7f\u7528\u904e\u56c9\uff01\\n\u6bcf\u500b\u9818\u53d6\u78bc\u53ea\u80fd\u4f7f\u7528\u4e00\u6b21\uff0c\u5982\u679c\u9084\u6c92\u6e2c\u9a57\u7684\u8a71\uff0c\u8acb\u81f3\u4fe1\u7bb1\u6536\u53d6\u6e2c\u9a57\u5c08\u5c6c\u9023\u7d50\u3002',\n                btn: '\u6211\u77e5\u9053\u4e86'\n            }\n        };\n\n        const regions = [\n            { value: '\ud83c\uddf9\ud83c\uddfc Taiwan - \u7e41\u9ad4\u4e2d\u6587', label: '\ud83c\uddf9\ud83c\uddfc Taiwan - \u7e41\u9ad4\u4e2d\u6587' },\n            { value: '\ud83c\udde8\ud83c\uddf3 China - \u7b80\u4f53\u4e2d\u6587', label: '\ud83c\udde8\ud83c\uddf3 China - \u7b80\u4f53\u4e2d\u6587' },\n            { value: '\ud83c\udded\ud83c\uddf0 Hong Kong - \u7e41\u9ad4\u4e2d\u6587', label: '\ud83c\udded\ud83c\uddf0 Hong Kong - \u7e41\u9ad4\u4e2d\u6587' },\n            { value: '\ud83c\uddf2\ud83c\uddf4 Macau - \u7e41\u9ad4\u4e2d\u6587', label: '\ud83c\uddf2\ud83c\uddf4 Macau - \u7e41\u9ad4\u4e2d\u6587' },\n            { value: '\ud83c\udf10 Global \/ Other - English', label: '\ud83c\udf10 Global \/ Other - English' },\n            { value: '\ud83c\uddf8\ud83c\uddec Singapore - \u7b80\u4f53\u4e2d\u6587', label: '\ud83c\uddf8\ud83c\uddec Singapore - \u7b80\u4f53\u4e2d\u6587' },\n            { value: '\ud83c\uddf8\ud83c\uddec Singapore - English', label: '\ud83c\uddf8\ud83c\uddec Singapore - English' },\n            { value: '\ud83c\uddf2\ud83c\uddfe Malaysia - \u7b80\u4f53\u4e2d\u6587', label: '\ud83c\uddf2\ud83c\uddfe Malaysia - \u7b80\u4f53\u4e2d\u6587' },\n            { value: '\ud83c\uddf2\ud83c\uddfe Malaysia - English', label: '\ud83c\uddf2\ud83c\uddfe Malaysia - English' },\n            { value: '\ud83c\uddef\ud83c\uddf5 Japan - \u65e5\u672c\u8a9e', label: '\ud83c\uddef\ud83c\uddf5 Japan - \u65e5\u672c\u8a9e' },\n            { value: '\ud83c\uddf0\ud83c\uddf7 South Korea - \ud55c\uad6d\uc5b4', label: '\ud83c\uddf0\ud83c\uddf7 South Korea - \ud55c\uad6d\uc5b4' },\n            { value: '\ud83c\uddf9\ud83c\udded Thailand - \u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22', label: '\ud83c\uddf9\ud83c\udded Thailand - \u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22' },\n            { value: '\ud83c\uddfb\ud83c\uddf3 Vietnam - Ti\u1ebfng Vi\u1ec7t', label: '\ud83c\uddfb\ud83c\uddf3 Vietnam - Ti\u1ebfng Vi\u1ec7t' },\n            { value: '\ud83c\udde7\ud83c\uddf7 Brazil - Portugu\u00eas', label: '\ud83c\udde7\ud83c\uddf7 Brazil - Portugu\u00eas' },\n            { value: '\ud83c\uddee\ud83c\udde9 Indonesia - Bahasa Indonesia', label: '\ud83c\uddee\ud83c\udde9 Indonesia - Bahasa Indonesia' },\n            { value: '\ud83c\uddf5\ud83c\udded Philippines - English', label: '\ud83c\uddf5\ud83c\udded Philippines - English' },\n            { value: '\ud83c\uddec\ud83c\udde7 United Kingdom - English', label: '\ud83c\uddec\ud83c\udde7 United Kingdom - English' },\n            { value: '\ud83c\uddea\ud83c\uddfa Europe - English', label: '\ud83c\uddea\ud83c\uddfa Europe - English' },\n            { value: '\ud83c\udde6\ud83c\uddfa Australia - English', label: '\ud83c\udde6\ud83c\uddfa Australia - English' }\n        ];\n\n        \/\/ =========================================\n        \/\/ \u72c0\u614b\n        \/\/ =========================================\n        let currentStep = 1;\n        const formData = {\n            id: '',\n            sex: '',\n            role: '',\n            tu_name: '',\n            email: '',\n            birthday: '',\n            area: '',\n            getcode: '',\n            plan: ''\n        };\n\n        let selectedYear = 1990;\n        let selectedMonth = 7;\n        let selectedDay = 1;\n        let tempSelectedRegion = '';\n        let selectedRoleData = null;  \/\/ \u7576\u524d\u9078\u4e2d\u7684\u89d2\u8272\u8cc7\u6599\n        let getcodeErrorCount = 0;    \/\/ \u9818\u53d6\u78bc\u932f\u8aa4\u6b21\u6578\n        let successCountdownTimer = null;  \/\/ \u6210\u529f\u5f48\u7a97\u5012\u6578\u8a08\u6642\u5668\n        let isRedirecting = false;  \/\/ \u9632\u6b62\u91cd\u8907\u8df3\u8f49\u7684\u9396\n\n        \/\/ =========================================\n        \/\/ DOM \u5143\u7d20\n        \/\/ =========================================\n        const dom = {\n            currentStepNum: document.getElementById('currentStepNum'),\n            progressBar: document.getElementById('progressBar'),\n            stepTitle: document.getElementById('stepTitle'),\n            stepSubtitle: document.getElementById('stepSubtitle'),\n            step1: document.getElementById('step1'),\n            step2: document.getElementById('step2'),\n            step3: document.getElementById('step3'),\n            roleGrid: document.getElementById('roleGrid'),\n            buttonArea: document.getElementById('buttonArea'),\n            btnBack: document.getElementById('btnBack'),\n            btnNext: document.getElementById('btnNext'),\n            inputName: document.getElementById('inputName'),\n            inputEmail: document.getElementById('inputEmail'),\n            inputBirthday: document.getElementById('inputBirthday'),\n            inputArea: document.getElementById('inputArea'),\n            birthdayTrigger: document.getElementById('birthdayTrigger'),\n            areaTrigger: document.getElementById('areaTrigger'),\n            emailError: document.getElementById('emailError'),\n            datePickerModal: document.getElementById('datePickerModal'),\n            regionPickerModal: document.getElementById('regionPickerModal'),\n            yearWheel: document.getElementById('yearWheel'),\n            monthWheel: document.getElementById('monthWheel'),\n            dayWheel: document.getElementById('dayWheel'),\n            regionList: document.getElementById('regionList')\n        };\n\n        \/\/ =========================================\n        \/\/ \u521d\u59cb\u5316\n        \/\/ =========================================\n        function init() {\n            const urlParams = new URLSearchParams(window.location.search);\n\n            \/\/ \u8b80\u53d6\u6240\u6709 URL \u53c3\u6578\n            formData.id = urlParams.get('id') || '';\n            formData.plan = urlParams.get('plan') || '';\n            const nameParam = urlParams.get('name') || '';\n            const emailParam = urlParams.get('email') || '';\n            const areaParam = urlParams.get('area') || '';\n            const sexParam = urlParams.get('sex') || '';\n            const roleParam = urlParams.get('role') || '';\n            const getcodeParam = urlParams.get('getcode') || '';\n            const birthdayParam = urlParams.get('birthday') || '';\n\n            \/\/ \u81ea\u52d5\u586b\u5165\u59d3\u540d\n            if (nameParam) {\n                dom.inputName.value = nameParam;\n            }\n\n            \/\/ \u81ea\u52d5\u586b\u5165 Email\n            if (emailParam) {\n                dom.inputEmail.value = emailParam;\n            }\n\n            \/\/ \u81ea\u52d5\u586b\u5165\u5730\u5340\n            if (areaParam) {\n                formData.area = areaParam;\n                dom.inputArea.value = areaParam;\n                const region = regions.find(r => r.value === areaParam);\n                if (region) {\n                    dom.areaTrigger.querySelector('span').textContent = region.label;\n                    dom.areaTrigger.classList.remove('placeholder');\n                }\n            }\n\n            \/\/ \u81ea\u52d5\u586b\u5165\u751f\u65e5\uff08\u683c\u5f0f\uff1aYYYYMMDD\uff09\n            if (birthdayParam && birthdayParam.length === 8) {\n                dom.inputBirthday.value = birthdayParam;\n                const y = birthdayParam.substring(0, 4);\n                const m = birthdayParam.substring(4, 6);\n                const d = birthdayParam.substring(6, 8);\n                selectedYear = parseInt(y);\n                selectedMonth = parseInt(m);\n                selectedDay = parseInt(d);\n                dom.birthdayTrigger.querySelector('span').textContent = `${y}-${m}-${d}`;\n                dom.birthdayTrigger.classList.remove('placeholder');\n            }\n\n            \/\/ \u81ea\u52d5\u586b\u5165\u9818\u53d6\u78bc\n            if (getcodeParam) {\n                document.getElementById('hasGetcode').checked = true;\n                document.getElementById('getcodeWrapper').classList.add('show');\n                document.getElementById('inputGetcode').value = getcodeParam;\n            }\n\n            \/\/ \u81ea\u52d5\u9078\u64c7\u6027\u5225\u4e26\u9032\u5165\u6b65\u9a5f 2\n            if (sexParam && (sexParam === 'm' || sexParam === 'f')) {\n                formData.sex = sexParam;\n                renderRoles(sexParam);\n\n                \/\/ \u6a19\u8a18\u6027\u5225\u9078\u9805\u70ba\u5df2\u9078\n                document.querySelector(`.gender-option[data-value=\"${sexParam}\"]`)?.classList.add('selected');\n\n                \/\/ \u5982\u679c\u4e5f\u6709\u89d2\u8272\u53c3\u6578\uff0c\u81ea\u52d5\u9078\u64c7\u89d2\u8272\u4e26\u9032\u5165\u6b65\u9a5f 3\n                if (roleParam) {\n                    formData.role = roleParam;\n                    currentStep = 3;\n                    updateUI();\n                } else {\n                    currentStep = 2;\n                    updateUI();\n                }\n            }\n\n            \/\/ \u4e8b\u4ef6\u76e3\u807d\u5668\n            dom.inputName.addEventListener('input', validateStep3);\n            dom.inputEmail.addEventListener('input', () => {\n                validateEmail();\n                validateStep3();\n            });\n            dom.inputEmail.addEventListener('blur', validateEmail);\n            document.getElementById('inputGetcode').addEventListener('input', validateStep3);\n\n            initDatePicker();\n            initRegionPicker();\n            initI18n();\n            detectAndFillArea();\n        }\n\n        \/\/ =========================================\n        \/\/ Email \u9a57\u8b49\n        \/\/ =========================================\n        function validateEmail() {\n            const email = dom.inputEmail.value.trim();\n            const emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n\n            if (email.length > 0 && !emailRegex.test(email)) {\n                dom.inputEmail.classList.add('error');\n                dom.emailError.classList.add('show');\n                return false;\n            } else {\n                dom.inputEmail.classList.remove('error');\n                dom.emailError.classList.remove('show');\n                return email.length === 0 || emailRegex.test(email);\n            }\n        }\n\n        \/\/ =========================================\n        \/\/ \u65e5\u671f\u9078\u64c7\u5668\n        \/\/ =========================================\n        function initDatePicker() {\n            const currentYear = new Date().getFullYear();\n\n            let yearHTML = '<div class=\"wheel-padding\"><\/div>';\n            for (let y = currentYear; y >= 1920; y--) {\n                yearHTML += `<div class=\"wheel-item\" data-value=\"${y}\">${y}<\/div>`;\n            }\n            yearHTML += '<div class=\"wheel-padding\"><\/div>';\n            dom.yearWheel.innerHTML = yearHTML;\n\n            let monthHTML = '<div class=\"wheel-padding\"><\/div>';\n            for (let m = 1; m <= 12; m++) {\n                monthHTML += `<div class=\"wheel-item\" data-value=\"${m}\">${String(m).padStart(2, '0')}<\/div>`;\n            }\n            monthHTML += '<div class=\"wheel-padding\"><\/div>';\n            dom.monthWheel.innerHTML = monthHTML;\n\n            updateDays();\n\n            dom.yearWheel.addEventListener('scroll', () => {\n                selectedYear = getSelectedValue(dom.yearWheel);\n                updateDays();\n            });\n            dom.monthWheel.addEventListener('scroll', () => {\n                selectedMonth = getSelectedValue(dom.monthWheel);\n                updateDays();\n            });\n            dom.dayWheel.addEventListener('scroll', () => {\n                selectedDay = getSelectedValue(dom.dayWheel);\n            });\n        }\n\n        function updateDays() {\n            const daysInMonth = new Date(selectedYear, selectedMonth, 0).getDate();\n\n            let dayHTML = '<div class=\"wheel-padding\"><\/div>';\n            for (let d = 1; d <= daysInMonth; d++) {\n                dayHTML += `<div class=\"wheel-item\" data-value=\"${d}\">${String(d).padStart(2, '0')}<\/div>`;\n            }\n            dayHTML += '<div class=\"wheel-padding\"><\/div>';\n            dom.dayWheel.innerHTML = dayHTML;\n\n            if (selectedDay > daysInMonth) {\n                selectedDay = daysInMonth;\n            }\n        }\n\n        function getSelectedValue(wheel) {\n            const scrollTop = wheel.scrollTop;\n            const itemHeight = 44;\n            const index = Math.round(scrollTop \/ itemHeight);\n            const items = wheel.querySelectorAll('.wheel-item');\n            if (items[index]) {\n                return parseInt(items[index].dataset.value);\n            }\n            return 1;\n        }\n\n        function openDatePicker() {\n            \/\/ \u95dc\u9589\u8a9e\u8a00\u9078\u55ae\uff08\u5982\u679c\u6709\u958b\u555f\uff09\n            if (typeof closeLangMenu === 'function') closeLangMenu();\n\n            dom.datePickerModal.classList.add('active');\n            document.body.style.overflow = 'hidden';\n\n            setTimeout(() => {\n                scrollToValue(dom.yearWheel, selectedYear);\n                scrollToValue(dom.monthWheel, selectedMonth);\n                scrollToValue(dom.dayWheel, selectedDay);\n            }, 100);\n        }\n\n        function closeDatePicker() {\n            dom.datePickerModal.classList.remove('active');\n            document.body.style.overflow = '';\n        }\n\n        function scrollToValue(wheel, value) {\n            const items = wheel.querySelectorAll('.wheel-item');\n            let targetIndex = 0;\n            items.forEach((item, index) => {\n                if (parseInt(item.dataset.value) === value) {\n                    targetIndex = index;\n                }\n            });\n            wheel.scrollTop = targetIndex * 44;\n        }\n\n        function confirmDate() {\n            selectedYear = getSelectedValue(dom.yearWheel);\n            selectedMonth = getSelectedValue(dom.monthWheel);\n            selectedDay = getSelectedValue(dom.dayWheel);\n\n            const dateStr = `${selectedYear}${String(selectedMonth).padStart(2, '0')}${String(selectedDay).padStart(2, '0')}`;\n            dom.inputBirthday.value = dateStr;\n\n            \/\/ \u986f\u793a\u683c\u5f0f\uff1a1990-07-29\n            const displayStr = `${selectedYear}-${String(selectedMonth).padStart(2, '0')}-${String(selectedDay).padStart(2, '0')}`;\n            dom.birthdayTrigger.querySelector('span').textContent = displayStr;\n            dom.birthdayTrigger.classList.remove('placeholder');\n\n            closeDatePicker();\n            validateStep3();\n        }\n\n        \/\/ =========================================\n        \/\/ \u5730\u5340\u9078\u64c7\u5668\n        \/\/ =========================================\n        function initRegionPicker() {\n            dom.regionList.innerHTML = regions.map(r => `\n                <div class=\"region-item\" data-value=\"${r.value}\" onclick=\"selectRegionItem('${r.value}')\">\n                    ${r.label}\n                    <span class=\"check\">\u2713<\/span>\n                <\/div>\n            `).join('');\n        }\n\n        function openRegionPicker() {\n            \/\/ \u95dc\u9589\u8a9e\u8a00\u9078\u55ae\uff08\u5982\u679c\u6709\u958b\u555f\uff09\n            if (typeof closeLangMenu === 'function') closeLangMenu();\n\n            tempSelectedRegion = formData.area;\n            updateRegionSelection();\n            dom.regionPickerModal.classList.add('active');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeRegionPicker() {\n            dom.regionPickerModal.classList.remove('active');\n            document.body.style.overflow = '';\n        }\n\n        function selectRegionItem(value) {\n            tempSelectedRegion = value;\n            updateRegionSelection();\n        }\n\n        function updateRegionSelection() {\n            document.querySelectorAll('.region-item').forEach(el => {\n                el.classList.toggle('selected', el.dataset.value === tempSelectedRegion);\n            });\n        }\n\n        function confirmRegion() {\n            if (tempSelectedRegion) {\n                \/\/ \u5148\u5132\u5b58\u8cc7\u6599\n                formData.area = tempSelectedRegion;\n                dom.inputArea.value = tempSelectedRegion;\n\n                \/\/ \u5148\u95dc\u9589\u5f48\u7a97\uff08\u7acb\u5373\u97ff\u61c9\uff09\n                closeRegionPicker();\n\n                \/\/ \u4f7f\u7528 requestAnimationFrame \u78ba\u4fdd UI \u66f4\u65b0\u6d41\u66a2\n                requestAnimationFrame(() => {\n                    const region = regions.find(r => r.value === tempSelectedRegion);\n                    dom.areaTrigger.querySelector('span').textContent = region ? region.label : tempSelectedRegion;\n                    dom.areaTrigger.classList.remove('placeholder');\n                    validateStep3();\n                });\n            } else {\n                closeRegionPicker();\n            }\n        }\n\n        \/\/ =========================================\n        \/\/ \u6b65\u9a5f\u6a19\u984c\n        \/\/ =========================================\n        function getStepTitles() {\n            return {\n                1: { title: t('uiStep1Title'), subtitle: t('uiStep1Subtitle') },\n                2: { title: t('uiStep2Title'), subtitle: t('uiStep2Subtitle') },\n                3: { title: t('uiStep3Title'), subtitle: t('uiStep3Subtitle') }\n            };\n        }\n\n        \/\/ =========================================\n        \/\/ \u66f4\u65b0 UI\n        \/\/ =========================================\n        function updateUI() {\n            dom.currentStepNum.textContent = currentStep;\n            dom.progressBar.style.width = (currentStep \/ 3 * 100) + '%';\n\n            dom.stepTitle.textContent = getStepTitles()[currentStep].title;\n            dom.stepSubtitle.textContent = getStepTitles()[currentStep].subtitle;\n\n            \/\/ \u6b65\u9a5f\u5207\u63db\n            [dom.step1, dom.step2, dom.step3].forEach((step, i) => {\n                step.classList.remove('active', 'slide-in', 'slide-out');\n                if (i + 1 === currentStep) {\n                    step.classList.add('active');\n                }\n            });\n\n            \/\/ \u6b65\u9a5f 3 \u624d\u986f\u793a\u6309\u9215\n            dom.buttonArea.classList.toggle('hidden', currentStep !== 3);\n\n            if (currentStep === 3) {\n                validateStep3();\n            }\n\n            window.scrollTo(0, 0);\n        }\n\n        \/\/ =========================================\n        \/\/ \u5e36\u52d5\u756b\u7684 UI \u66f4\u65b0\n        \/\/ =========================================\n        function updateUIWithAnimation(direction) {\n            const steps = [dom.step1, dom.step2, dom.step3];\n            const prevStep = direction === 'forward' ? currentStep - 1 : currentStep + 1;\n\n            \/\/ \u7576\u524d\u6b65\u9a5f\u6ed1\u51fa\n            if (prevStep >= 1 && prevStep <= 3) {\n                const outStep = steps[prevStep - 1];\n                outStep.classList.add('slide-out');\n            }\n\n            \/\/ \u66f4\u65b0\u9032\u5ea6\u689d\u548c\u6a19\u984c\n            dom.currentStepNum.textContent = currentStep;\n            dom.progressBar.style.width = (currentStep \/ 3 * 100) + '%';\n            dom.stepTitle.textContent = getStepTitles()[currentStep].title;\n            dom.stepSubtitle.textContent = getStepTitles()[currentStep].subtitle;\n\n            \/\/ \u5ef6\u9072\u5f8c\u986f\u793a\u65b0\u6b65\u9a5f\n            setTimeout(() => {\n                steps.forEach((step, i) => {\n                    step.classList.remove('active', 'slide-in', 'slide-out');\n                    if (i + 1 === currentStep) {\n                        step.classList.add('active', 'slide-in');\n                    }\n                });\n\n                \/\/ \u6b65\u9a5f 3 \u624d\u986f\u793a\u6309\u9215\n                dom.buttonArea.classList.toggle('hidden', currentStep !== 3);\n\n                if (currentStep === 3) {\n                    validateStep3();\n                }\n\n                window.scrollTo(0, 0);\n            }, 300);\n        }\n\n        \/\/ =========================================\n        \/\/ \u9078\u64c7\u6027\u5225\uff08\u9ede\u64ca\u76f4\u63a5\u4e0b\u4e00\u6b65\uff09\n        \/\/ =========================================\n        function selectGender(value) {\n            formData.sex = value;\n\n            const selectedEl = document.querySelector(`.gender-option[data-value=\"${value}\"]`);\n\n            \/\/ \u79fb\u9664\u5176\u4ed6\u9078\u4e2d\u72c0\u614b\n            document.querySelectorAll('.gender-option').forEach(el => {\n                el.classList.remove('selected', 'selecting');\n            });\n\n            \/\/ \u52a0\u5165\u9078\u4e2d\u72c0\u614b\uff08\u4e0d\u7b49\u52d5\u756b\uff09\n            selectedEl.classList.add('selected');\n\n            renderRoles(value);\n\n            \/\/ \u5feb\u901f\u9032\u5165\u4e0b\u4e00\u6b65\n            setTimeout(() => {\n                currentStep = 2;\n                updateUIWithAnimation('forward');\n            }, 150);\n        }\n\n        \/\/ =========================================\n        \/\/ \u751f\u6210\u89d2\u8272\u5217\u8868\n        \/\/ =========================================\n        function renderRoles(sex) {\n            const roles = rolesData[sex];\n            \/\/ \u7537\u751f\u6a19\u7c64 #847e70 \u900f\u660e\u5ea6 0.9\uff0c\u5973\u751f\u6a19\u7c64 #a47f6d \u900f\u660e\u5ea6 0.9\n            const labelBgColor = sex === 'm' ? 'rgba(132, 126, 112, 0.9)' : 'rgba(164, 127, 109, 0.9)';\n            dom.roleGrid.innerHTML = roles.map(role => {\n                \/\/ \u4f7f\u7528\u591a\u8a9e\u8a00\u7ffb\u8b6f\u7684\u89d2\u8272\u540d\u7a31\n                const translatedName = getRoleName(role.code);\n                return `\n                <div class=\"role-option\" data-value=\"${role.code}\" onclick=\"selectRole('${role.code}')\" style=\"background: #ece8e5;\">\n                    <img decoding=\"async\" src=\"${role.img}\" alt=\"${translatedName}\">\n                    <div class=\"role-label\" style=\"background: ${labelBgColor};\"><span>${translatedName}<\/span><\/div>\n                    <div class=\"role-tooltip\">\n                        <div class=\"role-tooltip-text\">${role.desc}<\/div>\n                        <button class=\"role-tooltip-btn\" onclick=\"event.stopPropagation(); confirmRoleSelection();\">\u6211\u559c\u6b61\u9019\u500b\u89d2\u8272\uff0c\u7e7c\u7e8c\u4e0b\u4e00\u6b65<\/button>\n                    <\/div>\n                <\/div>\n            `;\n            }).join('');\n        }\n\n        \/\/ =========================================\n        \/\/ \u8fd4\u56de\u6b65\u9a5f 1\n        \/\/ =========================================\n        function goBackToStep1() {\n            currentStep = 1;\n            formData.sex = '';\n            formData.role = '';\n\n            \/\/ \u6e05\u9664\u6027\u5225\u9078\u4e2d\u72c0\u614b\n            document.querySelectorAll('.gender-option').forEach(el => {\n                el.classList.remove('selected', 'selecting');\n            });\n\n            updateUIWithAnimation('back');\n        }\n\n        \/\/ =========================================\n        \/\/ \u9078\u64c7\u89d2\u8272\uff08\u4e0d\u81ea\u52d5\u8df3\u4e0b\u4e00\u6b65\uff0c\u986f\u793a\u4ecb\u7d39\uff09\n        \/\/ =========================================\n        function selectRole(code) {\n            formData.role = code;\n\n            \/\/ \u627e\u5230\u89d2\u8272\u8cc7\u6599\n            const roles = rolesData[formData.sex];\n            selectedRoleData = roles.find(r => r.code === code);\n\n            const selectedEl = document.querySelector(`.role-option[data-value=\"${code}\"]`);\n\n            \/\/ \u5f9e\u5df2\u7ffb\u8b6f\u7684 DOM \u5143\u7d20\u8b80\u53d6\u63cf\u8ff0\uff08\u7531 TranslatePress \u7ffb\u8b6f\uff09\n            \/\/ \u89d2\u8272\u540d\u7a31\u7531\u7a0b\u5f0f\u78bc\u4e2d\u7684 getRoleName() \u8655\u7406\n            const translatedDesc = selectedEl.querySelector('.role-tooltip-text').textContent;\n            selectedRoleData.translatedDesc = translatedDesc;\n\n            \/\/ \u79fb\u9664\u5176\u4ed6\u9078\u4e2d\u72c0\u614b\n            document.querySelectorAll('.role-option').forEach(el => {\n                el.classList.remove('selected', 'selecting');\n            });\n\n            \/\/ \u52a0\u5165\u9078\u4e2d\u72c0\u614b\n            selectedEl.classList.add('selected');\n\n            \/\/ \u5224\u65b7\u662f\u5426\u70ba\u624b\u6a5f\u7248\n            if (window.innerWidth <= 900) {\n                \/\/ \u624b\u6a5f\u7248\uff1a\u986f\u793a\u5f48\u7a97\n                openRoleDetail();\n            }\n            \/\/ \u96fb\u8166\u7248\uff1a\u61f8\u6d6e\u8a3b\u89e3\u6703\u81ea\u52d5\u900f\u904e CSS \u986f\u793a\n        }\n\n        \/\/ =========================================\n        \/\/ \u89d2\u8272\u8a73\u60c5\u5f48\u7a97\uff08\u624b\u6a5f\u7248\uff09\n        \/\/ =========================================\n        function openRoleDetail() {\n            if (!selectedRoleData) return;\n\n            document.getElementById('roleDetailImg').src = selectedRoleData.img;\n            \/\/ \u4f7f\u7528\u7a0b\u5f0f\u78bc\u4e2d\u7684\u591a\u8a9e\u8a00\u7ffb\u8b6f\n            const translatedName = getRoleName(selectedRoleData.code);\n            document.getElementById('roleDetailName').textContent = selectedRoleData.code + ' - ' + translatedName;\n            \/\/ \u63cf\u8ff0\u4ecd\u5f9e DOM \u8b80\u53d6\uff08\u7531 TranslatePress \u7ffb\u8b6f\uff09\n            document.getElementById('roleDetailDesc').textContent = selectedRoleData.translatedDesc || selectedRoleData.desc;\n\n            document.getElementById('roleDetailModal').classList.add('active');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeRoleDetail() {\n            document.getElementById('roleDetailModal').classList.remove('active');\n            document.body.style.overflow = '';\n\n            \/\/ \u53d6\u6d88\u9078\u4e2d\u72c0\u614b\n            document.querySelectorAll('.role-option').forEach(el => {\n                el.classList.remove('selected');\n            });\n            formData.role = '';\n            selectedRoleData = null;\n        }\n\n        \/\/ \u78ba\u8a8d\u89d2\u8272\u9078\u64c7\uff0c\u9032\u5165\u4e0b\u4e00\u6b65\n        function confirmRoleSelection() {\n            \/\/ \u95dc\u9589\u624b\u6a5f\u7248\u5f48\u7a97\uff08\u5982\u679c\u6709\u958b\u555f\uff09\n            document.getElementById('roleDetailModal').classList.remove('active');\n            document.body.style.overflow = '';\n\n            \/\/ \u9032\u5165\u4e0b\u4e00\u6b65\n            currentStep = 3;\n            updateUIWithAnimation('forward');\n        }\n\n        \/\/ =========================================\n        \/\/ \u9a57\u8b49\u6b65\u9a5f 3\n        \/\/ =========================================\n        function validateStep3() {\n            const name = dom.inputName.value.trim();\n            const email = dom.inputEmail.value.trim();\n            const birthday = dom.inputBirthday.value;\n            \/\/ \u512a\u5148\u4f7f\u7528 formData.area\uff08\u7a0b\u5f0f\u72c0\u614b\uff09\uff0c\u907f\u514d\u975e\u540c\u6b65 IP \u5075\u6e2c\u7684 race condition\n            const area = formData.area || dom.inputArea.value;\n            const emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n\n            \/\/ \u57fa\u672c\u5fc5\u586b\u6b04\u4f4d\u9a57\u8b49\n            let isValid = name.length > 0 && emailRegex.test(email) && birthday.length > 0 && area.length > 0;\n\n            \/\/ \u5982\u679c\u52fe\u9078\u4e86\u9818\u53d6\u78bc\uff0c\u5247\u9818\u53d6\u78bc\u4e5f\u5fc5\u586b\n            const hasGetcode = document.getElementById('hasGetcode').checked;\n            if (hasGetcode) {\n                const getcode = document.getElementById('inputGetcode').value.trim();\n                isValid = isValid && getcode.length > 0;\n            }\n\n            \/\/ \u540c\u610f\u689d\u6b3e\u9a57\u8b49\uff08\u5169\u500b\u90fd\u5fc5\u52fe\uff09\n            const consentTerms = document.getElementById('consentTerms').checked;\n            const consentData = document.getElementById('consentData').checked;\n            isValid = isValid && consentTerms && consentData;\n\n            dom.btnNext.disabled = !isValid;\n        }\n\n        \/\/ =========================================\n        \/\/ \u9818\u53d6\u78bc\u8f38\u5165\u6846\u63a7\u5236\n        \/\/ =========================================\n        function toggleGetcodeInput() {\n            const checkbox = document.getElementById('hasGetcode');\n            const wrapper = document.getElementById('getcodeWrapper');\n            const input = document.getElementById('inputGetcode');\n            const label = document.getElementById('getcodeLabel');\n\n            if (checkbox.checked) {\n                wrapper.classList.add('show');\n                label.textContent = t('hasGetcodeExpanded');\n            } else {\n                wrapper.classList.remove('show');\n                input.value = '';\n                label.textContent = t('hasGetcode');\n            }\n            validateStep3();\n        }\n\n        \/\/ \u521d\u59cb\u5316\u591a\u8a9e\u8a00\u6587\u5b57\n        function initI18n() {\n            \/\/ \u8a2d\u7f6e\u9818\u53d6\u78bc\u76f8\u95dc\u6587\u5b57\n            const getcodeLabel = document.getElementById('getcodeLabel');\n            const getcodeInput = document.getElementById('inputGetcode');\n            const hasGetcodeCheckbox = document.getElementById('hasGetcode');\n\n            if (getcodeLabel) {\n                getcodeLabel.textContent = hasGetcodeCheckbox && hasGetcodeCheckbox.checked\n                    ? t('hasGetcodeExpanded')\n                    : t('hasGetcode');\n            }\n            if (getcodeInput) {\n                getcodeInput.placeholder = t('getcodePlaceholder');\n            }\n\n            \/\/ \u8a2d\u7f6e\u540c\u610f\u689d\u6b3e\u6587\u5b57\n            const consentTermsLabel = document.getElementById('consentTermsLabel');\n            const consentDataLabel = document.getElementById('consentDataLabel');\n            if (consentTermsLabel) {\n                consentTermsLabel.innerHTML = t('consentTermsHtml');\n            }\n            if (consentDataLabel) {\n                consentDataLabel.textContent = t('consentDataText');\n            }\n        }\n\n        \/\/ \u4f9d IP \u81ea\u52d5\u5075\u6e2c\u4e26\u586b\u5165\u5730\u5340\n        function detectAndFillArea() {\n            \/\/ \u5982\u679c URL \u5df2\u6307\u5b9a area \u53c3\u6578\uff0c\u8df3\u904e\u5075\u6e2c\n            if (formData.area) return;\n\n            fetch('\/cdn-cgi\/trace')\n                .then(res => res.text())\n                .then(data => {\n                    const match = data.match(\/loc=([A-Z]{2})\/);\n                    const country = match ? match[1] : 'TW';\n                    const regionValue = countryToRegion[country] || '\ud83c\udf10 Global \/ Other - English';\n\n                    \/\/ \u586b\u5165\u5730\u5340\n                    formData.area = regionValue;\n                    dom.inputArea.value = regionValue;\n                    dom.areaTrigger.querySelector('span').textContent = regionValue;\n                    dom.areaTrigger.classList.remove('placeholder');\n                    validateStep3();\n                })\n                .catch(() => {\n                    \/\/ \u5931\u6557\u6642\u9810\u8a2d Global\n                    const defaultRegion = '\ud83c\udf10 Global \/ Other - English';\n                    formData.area = defaultRegion;\n                    dom.inputArea.value = defaultRegion;\n                    dom.areaTrigger.querySelector('span').textContent = defaultRegion;\n                    dom.areaTrigger.classList.remove('placeholder');\n                    validateStep3();\n                });\n        }\n\n        \/\/ =========================================\n        \/\/ \u4e0a\u4e00\u6b65\n        \/\/ =========================================\n        function prevStep() {\n            if (currentStep > 1) {\n                currentStep--;\n                updateUI();\n            }\n        }\n\n        \/\/ =========================================\n        \/\/ \u63d0\u4ea4\u8868\u55ae\n        \/\/ =========================================\n        async function submitForm() {\n            formData.tu_name = dom.inputName.value.trim();\n            formData.email = dom.inputEmail.value.trim();\n            formData.birthday = dom.inputBirthday.value.trim();\n            formData.area = dom.inputArea.value;\n            formData.getcode = document.getElementById('inputGetcode').value.trim();\n            formData.consent_terms = document.getElementById('consentTerms').checked;\n            formData.consent_data = document.getElementById('consentData').checked;\n            formData.consent_at = new Date().toISOString();\n\n            console.log('submitForm \u88ab\u547c\u53eb\uff0cgetcode =', formData.getcode);\n\n            \/\/ \u5982\u679c\u6709\u8f38\u5165\u9818\u53d6\u78bc\uff0c\u5148\u9a57\u8b49\n            if (formData.getcode) {\n                console.log('\u6709\u9818\u53d6\u78bc\uff0c\u958b\u59cb\u9a57\u8b49...');\n                dom.btnNext.disabled = true;\n                dom.btnNext.textContent = '\u9a57\u8b49\u4e2d...';\n\n                try {\n                    const verifyUrl = `https:\/\/app.notpro.cc\/webhook\/c452a7c8-4118-4281-9712-fffdb767e9e9?getcode=${encodeURIComponent(formData.getcode)}${formData.plan ? `&plan=${encodeURIComponent(formData.plan)}` : ''}`;\n                    console.log('\u547c\u53eb webhook:', verifyUrl);\n                    const response = await fetch(verifyUrl);\n                    console.log('webhook \u56de\u61c9\u72c0\u614b:', response.status);\n                    const result = await response.json();\n                    console.log('webhook \u56de\u61c9\u5167\u5bb9:', result);\n\n                    if (result.result === '\u9818\u53d6\u6210\u529f') {\n                        \/\/ \u9a57\u8b49\u6210\u529f\uff0c\u986f\u793a\u6210\u529f\u5f48\u7a97\n                        getcodeErrorCount = 0;  \/\/ \u91cd\u7f6e\u932f\u8aa4\u6b21\u6578\n                        showSuccessModal();\n                    } else if (result.result === '\u9818\u53d6\u5931\u6557\uff0c\u5df2\u9818\u53d6\u512a\u60e0') {\n                        \/\/ \u5df2\u9818\u53d6\u904e\n                        showErrorModal('already');\n                        dom.btnNext.disabled = false;\n                        dom.btnNext.textContent = '\u958b\u59cb\u6e2c\u9a57';\n                    } else {\n                        \/\/ \u9818\u53d6\u78bc\u7121\u6548\n                        getcodeErrorCount++;\n                        showErrorModal(Math.min(getcodeErrorCount, 4));\n                        dom.btnNext.disabled = false;\n                        dom.btnNext.textContent = '\u958b\u59cb\u6e2c\u9a57';\n                    }\n                } catch (error) {\n                    console.error('\u9a57\u8b49\u9818\u53d6\u78bc\u5931\u6557:', error);\n                    console.error('\u932f\u8aa4\u8a73\u60c5:', error.message);\n                    \/\/ \u7db2\u8def\u932f\u8aa4\uff0c\u986f\u793a\u932f\u8aa4\u63d0\u793a\u8b93\u7528\u6236\u91cd\u8a66\n                    alert('\u9818\u53d6\u78bc\u9a57\u8b49\u767c\u751f\u7db2\u8def\u932f\u8aa4\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002');\n                    dom.btnNext.disabled = false;\n                    dom.btnNext.textContent = '\u958b\u59cb\u6e2c\u9a57';\n                }\n            } else {\n                \/\/ \u6c92\u6709\u9818\u53d6\u78bc\uff0c\u76f4\u63a5\u7e7c\u7e8c\n                proceedToQuiz();\n            }\n        }\n\n        \/\/ \u7e7c\u7e8c\u9032\u5165\u6e2c\u9a57\n        function proceedToQuiz() {\n            \/\/ \u9632\u6b62\u91cd\u8907\u89f8\u767c\n            if (isRedirecting) {\n                console.log('\u5df2\u5728\u8df3\u8f49\u4e2d\uff0c\u5ffd\u7565\u91cd\u8907\u547c\u53eb');\n                return;\n            }\n            isRedirecting = true;\n\n            \/\/ \u7981\u7528\u6309\u9215\uff0c\u9632\u6b62\u7528\u6236\u518d\u6b21\u9ede\u64ca\n            dom.btnNext.disabled = true;\n            dom.btnNext.textContent = '\u8df3\u8f49\u4e2d...';\n\n            \/\/ \u2605\u2605\u2605 1. \u5f9e Cookie \u6293\u51fa\u63a8\u85a6\u4eba\u4ee3\u78bc (\u5982\u679c\u6709\u7684\u8a71) \u2605\u2605\u2605\n            const savedRef = getCookie('mbti_ref_code') || '';\n\n            sessionStorage.setItem('quiz_user_id', formData.id);\n            sessionStorage.setItem('quiz_user_data', JSON.stringify(formData));\n\n            const params = new URLSearchParams({\n                id: formData.id,\n                tu_name: formData.tu_name,\n                email: formData.email,\n                area: formData.area,\n                sex: formData.sex,\n                role: formData.role,\n                getcode: formData.getcode,\n                ref_code: savedRef  \/\/ \u2605\u2605\u2605 2. \u9019\u88e1\uff01\u628a\u4ee3\u78bc\u585e\u9032\u53bb\u9001\u7d66 N8N \u2605\u2605\u2605\n            });\n\n            if (formData.birthday) {\n                params.append('birthday', formData.birthday);\n            }\n\n            if (formData.plan) {\n                params.append('plan', formData.plan);\n            }\n\n            const webhookUrl = `https:\/\/app.notpro.cc\/webhook\/51f355fd-b1b2-4089-ada1-8c9ff495bdb1?${params.toString()}`;\n            window.location.href = webhookUrl;\n        }\n\n        \/\/ =========================================\n        \/\/ \u6210\u529f\u5f48\u7a97\n        \/\/ =========================================\n        function showSuccessModal() {\n            \/\/ \u6839\u64da\u6027\u5225\u9078\u64c7\u96a8\u6a5f\u597d\u8a71\n            const messages = successMessages[formData.sex] || successMessages.m;\n            const randomMessage = messages[Math.floor(Math.random() * messages.length)];\n\n            document.getElementById('successMessage').textContent = randomMessage;\n\n            const modal = document.getElementById('successModal');\n            modal.classList.add('active');\n            document.body.style.overflow = 'hidden';\n\n            \/\/ \u958b\u59cb\u5012\u6578\n            let countdown = 10;\n            const countdownEl = document.getElementById('successCountdown');\n            countdownEl.textContent = `${countdown} \u79d2\u5f8c\u81ea\u52d5\u7e7c\u7e8c...`;\n\n            successCountdownTimer = setInterval(() => {\n                countdown--;\n                if (countdown <= 0) {\n                    clearInterval(successCountdownTimer);\n                    closeSuccessModal();\n                    proceedToQuiz();\n                } else {\n                    countdownEl.textContent = `${countdown} \u79d2\u5f8c\u81ea\u52d5\u7e7c\u7e8c...`;\n                }\n            }, 1000);\n\n            \/\/ \u4efb\u610f\u9375\u7e7c\u7e8c\n            const keyHandler = (e) => {\n                clearInterval(successCountdownTimer);\n                document.removeEventListener('keydown', keyHandler);\n                document.removeEventListener('click', clickHandler);\n                closeSuccessModal();\n                proceedToQuiz();\n            };\n\n            const clickHandler = (e) => {\n                \/\/ \u9ede\u64ca\u4efb\u4f55\u5730\u65b9\u90fd\u57f7\u884c\u4e0b\u4e00\u6b65\n                clearInterval(successCountdownTimer);\n                document.removeEventListener('keydown', keyHandler);\n                document.removeEventListener('click', clickHandler);\n                closeSuccessModal();\n                proceedToQuiz();\n            };\n\n            document.addEventListener('keydown', keyHandler);\n            document.addEventListener('click', clickHandler);\n        }\n\n        function closeSuccessModal() {\n            document.getElementById('successModal').classList.remove('active');\n            document.body.style.overflow = '';\n            if (successCountdownTimer) {\n                clearInterval(successCountdownTimer);\n            }\n        }\n\n        \/\/ =========================================\n        \/\/ \u932f\u8aa4\u5f48\u7a97\n        \/\/ =========================================\n        function showErrorModal(errorType) {\n            const errorData = errorMessages[errorType];\n            if (!errorData) return;\n\n            document.getElementById('errorTitle').textContent = errorData.title;\n            document.getElementById('errorMessage').textContent = errorData.message;\n            document.getElementById('errorBtn').textContent = errorData.btn;\n\n            document.getElementById('errorModal').classList.add('active');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeErrorModal() {\n            document.getElementById('errorModal').classList.remove('active');\n            document.body.style.overflow = '';\n\n            \/\/ \u6e05\u7a7a\u9818\u53d6\u78bc\u8f38\u5165\u6846\uff0c\u8b93\u7528\u6236\u91cd\u65b0\u8f38\u5165\n            document.getElementById('inputGetcode').value = '';\n            document.getElementById('inputGetcode').focus();\n        }\n\n        \/\/ =========================================\n        \/\/ \u689d\u6b3e\u5f48\u7a97\n        \/\/ =========================================\n        function getTermsUrl(slug) {\n            \/\/ \u6839\u64da\u76ee\u524d\u8a9e\u8a00\u8def\u5f91\u7d44\u5408\u5b8c\u6574 URL\n            const lang = getCurrentLang();\n            \/\/ \u8a9e\u8a00\u8def\u5f91\u5c0d\u61c9\uff1a'' \u2192 \u7121\u524d\u7db4\uff08TW \u9810\u8a2d\uff09\uff0c\u5176\u9918\u52a0\u524d\u7db4\n            \/\/ zh-hk \u5171\u7528\u7e41\u4e2d\u9810\u8a2d\u8def\u5f91\uff08\u7121\u7368\u7acb\u8def\u5f91\uff09\n            const langPrefix = (lang && lang !== 'zh-hk') ? '\/' + lang : '';\n            return 'https:\/\/maybeits.me' + langPrefix + '\/' + slug + '\/';\n        }\n\n        function openTermsModal(slug) {\n            const modal = document.getElementById('termsModal');\n            const iframe = document.getElementById('termsModalIframe');\n            const loading = document.getElementById('termsModalLoading');\n            const titleEl = document.getElementById('termsModalTitle');\n\n            \/\/ \u8a2d\u5b9a\u5f48\u7a97\u6a19\u984c\n            if (slug === 'terms-of-service') {\n                titleEl.textContent = t('termsModalTitleTerms');\n            } else {\n                titleEl.textContent = t('termsModalTitlePrivacy');\n            }\n\n            \/\/ \u986f\u793a\u8f09\u5165\u4e2d\u3001\u96b1\u85cf iframe\n            loading.textContent = t('termsModalLoading');\n            loading.style.display = 'flex';\n            iframe.style.display = 'none';\n\n            \/\/ \u8a2d\u5b9a iframe src\n            iframe.src = getTermsUrl(slug);\n\n            modal.classList.add('active');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function onTermsIframeLoad() {\n            const iframe = document.getElementById('termsModalIframe');\n            const loading = document.getElementById('termsModalLoading');\n            if (iframe.src && iframe.src !== 'about:blank') {\n                loading.style.display = 'none';\n                iframe.style.display = 'block';\n            }\n        }\n\n        function closeTermsModal() {\n            const modal = document.getElementById('termsModal');\n            const iframe = document.getElementById('termsModalIframe');\n            modal.classList.remove('active');\n            document.body.style.overflow = '';\n            \/\/ \u6e05\u6389 iframe \u907f\u514d\u80cc\u666f\u6301\u7e8c\u8f09\u5165\n            iframe.src = 'about:blank';\n        }\n\n        \/\/ \u9ede\u64ca\u5f48\u7a97\u80cc\u666f\u95dc\u9589\n        dom.datePickerModal.addEventListener('click', (e) => {\n            if (e.target === dom.datePickerModal) closeDatePicker();\n        });\n        dom.regionPickerModal.addEventListener('click', (e) => {\n            if (e.target === dom.regionPickerModal) closeRegionPicker();\n        });\n\n        \/\/ \u89d2\u8272\u8a73\u60c5\u5f48\u7a97\u9ede\u64ca\u80cc\u666f\u95dc\u9589\n        document.getElementById('roleDetailModal').addEventListener('click', (e) => {\n            if (e.target.id === 'roleDetailModal') closeRoleDetail();\n        });\n\n        \/\/ \u689d\u6b3e\u5f48\u7a97\u9ede\u64ca\u80cc\u666f\u95dc\u9589\n        document.getElementById('termsModal').addEventListener('click', (e) => {\n            if (e.target.id === 'termsModal') closeTermsModal();\n        });\n\n        \/\/ =========================================\n        \/\/ \u2605\u2605\u2605 \u65b0\u589e\uff1a\u8b80\u53d6 Cookie \u5de5\u5177 \u2605\u2605\u2605\n        \/\/ =========================================\n        function getCookie(name) {\n            var nameEQ = name + \"=\";\n            var ca = document.cookie.split(';');\n            for (var i = 0; i < ca.length; i++) {\n                var c = ca[i];\n                while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n            }\n            return null;\n        }\n\n        \/\/ =========================================\n        \/\/ \u8a9e\u8a00\u5207\u63db\u5668\uff08\u5e36\u9632\u91cd\u8907\u6a5f\u5236\uff09\n        \/\/ =========================================\n        (function initLanguageSwitcher() {\n            \/\/ \u9632\u6b62\u91cd\u8907\u521d\u59cb\u5316\uff08\u5982\u679c WPCode Snippet \u5df2\u7d93\u5275\u5efa\u4e86\u9078\u55ae\uff09\n            if (document.querySelector('.lang-menu')) {\n                console.log('Language menu already exists, skipping initialization');\n                return;\n            }\n\n            const globeBtn = document.getElementById('globeBtn');\n            if (!globeBtn) return;\n\n            \/\/ \u8a9e\u8a00\u8a2d\u5b9a\n            const languages = [\n                { code: '', flag: '\ud83c\uddf9\ud83c\uddfc', name: '\u7e41\u9ad4\u4e2d\u6587' },\n                { code: 'zh_CN', flag: '\ud83c\udde8\ud83c\uddf3', name: '\u7b80\u4f53\u4e2d\u6587' },\n                { code: 'en', flag: '\ud83c\uddfa\ud83c\uddf8', name: 'English' },\n                { code: 'kr', flag: '\ud83c\uddf0\ud83c\uddf7', name: '\ud55c\uad6d\uc5b4' },\n                { code: 'jp', flag: '\ud83c\uddef\ud83c\uddf5', name: '\u65e5\u672c\u8a9e' },\n                { code: 'th', flag: '\ud83c\uddf9\ud83c\udded', name: '\u0e44\u0e17\u0e22' },\n                { code: 'vi', flag: '\ud83c\uddfb\ud83c\uddf3', name: 'Ti\u1ebfng Vi\u1ec7t' },\n                { code: 'br', flag: '\ud83c\udde7\ud83c\uddf7', name: 'Portugu\u00eas' },\n                { code: 'id', flag: '\ud83c\uddee\ud83c\udde9', name: 'Indonesia' }\n            ];\n\n            \/\/ \u5275\u5efa\u8a9e\u8a00\u9078\u55ae\n            const menu = document.createElement('div');\n            menu.className = 'lang-menu';\n            menu.innerHTML = languages.map(lang =>\n                `<div class=\"lang-menu-item\" data-lang=\"${lang.code}\">\n                    <span class=\"flag\">${lang.flag}<\/span>\n                    <span>${lang.name}<\/span>\n                <\/div>`\n            ).join('');\n\n            \/\/ \u9078\u55ae\u52a0\u5230 body\uff0c\u7528\u7d55\u5c0d\u5b9a\u4f4d\n            document.body.appendChild(menu);\n\n            \/\/ \u5b9a\u4f4d\u9078\u55ae\u5230\u5730\u7403\u6309\u9215\u4e0b\u65b9\n            function positionMenu() {\n                const rect = globeBtn.getBoundingClientRect();\n                menu.style.position = 'fixed';\n                menu.style.top = (rect.bottom + 8) + 'px';\n                menu.style.right = 'auto';\n                menu.style.left = rect.left + 'px';\n\n                \/\/ \u9632\u6b62\u8d85\u51fa\u53f3\u908a\u754c\n                requestAnimationFrame(() => {\n                    const menuRect = menu.getBoundingClientRect();\n                    if (menuRect.right > window.innerWidth - 10) {\n                        menu.style.left = (window.innerWidth - menuRect.width - 10) + 'px';\n                    }\n                });\n            }\n\n            \/\/ \u6a19\u8a18\u7576\u524d\u8a9e\u8a00\n            function updateActiveLanguage() {\n                const currentLang = getCurrentLang();\n                menu.querySelectorAll('.lang-menu-item').forEach(item => {\n                    item.classList.toggle('active', item.dataset.lang === currentLang);\n                });\n            }\n\n            \/\/ \u5207\u63db\u9078\u55ae\u986f\u793a\n            function toggleMenu(e) {\n                e.stopPropagation();\n                const isActive = menu.classList.contains('active');\n                if (!isActive) {\n                    updateActiveLanguage();\n                    positionMenu();  \/\/ \u958b\u555f\u524d\u5148\u5b9a\u4f4d\n                }\n                menu.classList.toggle('active');\n            }\n\n            \/\/ \u8655\u7406\u8a9e\u8a00\u9078\u64c7\n            function handleLanguageSelect(e) {\n                const item = e.target.closest('.lang-menu-item');\n                if (!item) return;\n\n                const langCode = item.dataset.lang;\n                menu.classList.remove('active');\n\n                \/\/ \u69cb\u5efa\u65b0 URL\n                const currentUrl = window.location.href;\n                const urlObj = new URL(currentUrl);\n                let pathname = urlObj.pathname;\n\n                \/\/ \u79fb\u9664\u73fe\u6709\u8a9e\u8a00\u524d\u7db4\n                const langPrefixes = ['\/zh_CN\/', '\/en\/', '\/kr\/', '\/jp\/', '\/th\/', '\/vi\/', '\/br\/', '\/id\/'];\n                langPrefixes.forEach(prefix => {\n                    if (pathname.startsWith(prefix)) {\n                        pathname = pathname.replace(prefix, '\/');\n                    }\n                });\n\n                \/\/ \u6dfb\u52a0\u65b0\u8a9e\u8a00\u524d\u7db4\n                if (langCode && langCode !== '') {\n                    pathname = '\/' + langCode + pathname;\n                }\n\n                urlObj.pathname = pathname;\n                window.location.href = urlObj.toString();\n            }\n\n            \/\/ \u7d81\u5b9a\u4e8b\u4ef6\n            globeBtn.addEventListener('click', toggleMenu);\n            menu.addEventListener('click', handleLanguageSelect);\n\n            \/\/ \u9ede\u64ca\u5916\u90e8\u95dc\u9589\u9078\u55ae\n            document.addEventListener('click', function (e) {\n                if (!globeBtn.contains(e.target)) {\n                    menu.classList.remove('active');\n                }\n            });\n\n            \/\/ \u521d\u59cb\u5316\u6a19\u8a18\u7576\u524d\u8a9e\u8a00\n            updateActiveLanguage();\n        })();\n\n        \/\/ \u521d\u59cb\u5316\n        init();\n    <\/script>\n<\/body>\n\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>< MBTI \u81ea\u6211\u89e3\u8b80\u624b\u518a - \u958b\u59cb\u6e2c\u9a57 [&hellip;]\n<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","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":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-4491","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/pages\/4491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/comments?post=4491"}],"version-history":[{"count":245,"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/pages\/4491\/revisions"}],"predecessor-version":[{"id":9040,"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/pages\/4491\/revisions\/9040"}],"wp:attachment":[{"href":"https:\/\/maybeits.me\/th\/wp-json\/wp\/v2\/media?parent=4491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}