{"id":6651,"date":"2025-11-29T11:42:02","date_gmt":"2025-11-29T08:12:02","guid":{"rendered":"https:\/\/anarestan.com\/jayezebazar\/?page_id=6651"},"modified":"2026-07-01T10:05:16","modified_gmt":"2026-07-01T06:35:16","slug":"elementor-6651","status":"publish","type":"page","link":"https:\/\/anarestan.com\/jayezebazar\/?page_id=6651","title":{"rendered":""},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6651\" class=\"elementor elementor-6651\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-456e2de elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"456e2de\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-32d9c87\" data-id=\"32d9c87\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dd69578 elementor-widget elementor-widget-html\" data-id=\"dd69578\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\n\/* ===== RESET & BASE (\u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0648\u06cc\u062c\u062a) ===== *\/\n.anarestan-widget * {\n    box-sizing: border-box;\n}\n\n\/* ===== MAIN CAMPAIGN BOX ===== *\/\n.anarestan-widget .campaign-box {\n    max-width: 760px;\n    margin: 20px auto;\n    padding: 28px;\n    direction: rtl;\n    font-family: IRANYekanX, Tahoma, sans-serif;\n    color: #fff;\n    border-radius: 28px;\n    background:\n        radial-gradient(circle at top right, #ff7070 0%, transparent 35%),\n        radial-gradient(circle at bottom left, #ff3b3b 0%, transparent 35%),\n        linear-gradient(135deg, #8B0000, #B30000, #E60023);\n    box-shadow: 0 20px 50px rgba(170, 0, 0, .35);\n    position: relative;\n    overflow: hidden;\n}\n\n.anarestan-widget .campaign-box:before,\n.anarestan-widget .campaign-box:after {\n    content: \"\";\n    position: absolute;\n    width: 220px;\n    height: 220px;\n    border-radius: 50%;\n    background: rgba(255, 255, 255, .05);\n    filter: blur(10px);\n}\n\n.anarestan-widget .campaign-box:before {\n    top: -90px;\n    left: -90px;\n}\n\n.anarestan-widget .campaign-box:after {\n    bottom: -100px;\n    right: -100px;\n}\n\n.anarestan-widget .campaign-box>* {\n    position: relative;\n    z-index: 2;\n}\n\n.anarestan-widget .campaign-box h2 {\n    margin: 0 0 25px;\n    text-align: center;\n    font-size: 32px;\n    font-weight: 800;\n    line-height: 1.6;\n}\n\n.anarestan-widget .info {\n    background: rgba(255, 255, 255, .12);\n    backdrop-filter: blur(12px);\n    border: 1px solid rgba(255, 255, 255, .15);\n    border-radius: 22px;\n    padding: 22px;\n    line-height: 2.2;\n    font-size: 17px;\n}\n\n.anarestan-widget .info p {\n    margin: 0;\n    white-space: pre-line;\n}\n\n.anarestan-widget .prize {\n    margin-top: 22px;\n    background: linear-gradient(135deg, #FFB300, #FFD54F);\n    color: #8B0000;\n    padding: 20px;\n    border-radius: 20px;\n    box-shadow: 0 10px 25px rgba(0, 0, 0, .15);\n}\n\n.anarestan-widget .code-box {\n    margin-top: 24px;\n    text-align: center;\n}\n\n.anarestan-widget .code-wrapper {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    padding: 10px 20px;\n    border-radius: 16px;\n    background: #fff;\n    box-shadow: 0 8px 20px rgba(0, 0, 0, .18);\n}\n\n.anarestan-widget .code {\n    padding: 4px 0;\n    color: #C00024;\n    font-size: 26px;\n    font-weight: 900;\n    letter-spacing: 2px;\n    user-select: all;\n    direction: ltr;\n}\n\n.anarestan-widget .copy-icon-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: transparent;\n    border: none;\n    padding: 4px;\n    cursor: pointer;\n    border-radius: 8px;\n    transition: background .2s;\n    color: #C00024;\n}\n\n.anarestan-widget .copy-icon-btn:hover {\n    background: rgba(192, 0, 36, .08);\n}\n\n.anarestan-widget .copy-icon-btn:focus-visible,\n.anarestan-widget .option-item:focus-visible,\n.anarestan-widget .btn:focus-visible,\n.anarestan-widget .nav-btn:focus-visible,\n.anarestan-widget .form-input:focus-visible,\n.anarestan-widget .otp-input:focus-visible {\n    outline: 3px solid #FFD700;\n    outline-offset: 2px;\n}\n\n.anarestan-widget .copy-icon-btn svg {\n    display: block;\n    width: 26px;\n    height: 26px;\n    fill: none;\n    stroke: currentColor;\n    stroke-width: 2;\n    stroke-linecap: round;\n    stroke-linejoin: round;\n}\n\n.anarestan-widget .buttons {\n    display: flex;\n    justify-content: center;\n    gap: 14px;\n    flex-wrap: wrap;\n    margin-top: 28px;\n}\n\n.anarestan-widget .btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    text-decoration: none;\n    padding: 15px 24px;\n    border-radius: 50px;\n    font-weight: 700;\n    transition: .25s;\n    min-width: 230px;\n    cursor: pointer;\n    font-family: inherit;\n    font-size: 16px;\n    border: none;\n}\n\n.anarestan-widget .btn:hover:not(:disabled) {\n    transform: translateY(-3px);\n}\n\n.anarestan-widget .btn:disabled {\n    opacity: 0.6;\n    cursor: not-allowed;\n}\n\n.anarestan-widget .btn-book {\n    background: #fff;\n    color: #C00024;\n    box-shadow: 0 10px 25px rgba(255, 255, 255, .2);\n}\n\n.anarestan-widget .btn-enter {\n    background: linear-gradient(135deg, #FFB300, #FFD54F);\n    color: #8B0000;\n    box-shadow: 0 10px 25px rgba(255, 193, 7, .3);\n}\n\n.anarestan-widget .copy-feedback {\n    display: inline-block;\n    font-size: 14px;\n    font-weight: 600;\n    color: #fff;\n    background: rgba(0, 0, 0, .3);\n    padding: 2px 16px;\n    border-radius: 30px;\n    backdrop-filter: blur(4px);\n    opacity: 0;\n    transition: opacity .3s;\n    pointer-events: none;\n}\n\n.anarestan-widget .copy-feedback.show {\n    opacity: 1;\n}\n\n\/* ===== ENTRANCE ANIMATIONS ===== *\/\n.anarestan-widget .anim-item {\n    opacity: 0;\n    transform: translateY(30px);\n    animation: anarestan-fadeInUp 0.7s ease forwards;\n}\n\n.anarestan-widget .anim-item:nth-child(1) { animation-delay: 0.1s; }\n.anarestan-widget .anim-item:nth-child(2) { animation-delay: 0.25s; }\n.anarestan-widget .anim-item:nth-child(3) { animation-delay: 0.4s; }\n.anarestan-widget .anim-item:nth-child(4) { animation-delay: 0.55s; }\n.anarestan-widget .anim-item:nth-child(5) { animation-delay: 0.7s; }\n.anarestan-widget .anim-item:nth-child(6) { animation-delay: 0.85s; }\n.anarestan-widget .anim-item:nth-child(7) { animation-delay: 1.0s; }\n.anarestan-widget .anim-item:nth-child(8) { animation-delay: 1.15s; }\n\n@keyframes anarestan-fadeInUp {\n    0% {\n        opacity: 0;\n        transform: translateY(30px);\n    }\n    100% {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.anarestan-widget .anim-scale {\n    opacity: 0;\n    transform: scale(0.9);\n    animation: anarestan-scaleIn 0.6s ease forwards;\n}\n\n.anarestan-widget .anim-scale:nth-child(1) { animation-delay: 0.2s; }\n.anarestan-widget .anim-scale:nth-child(2) { animation-delay: 0.4s; }\n.anarestan-widget .anim-scale:nth-child(3) { animation-delay: 0.6s; }\n\n@keyframes anarestan-scaleIn {\n    0% {\n        opacity: 0;\n        transform: scale(0.9);\n    }\n    100% {\n        opacity: 1;\n        transform: scale(1);\n    }\n}\n\n\/* respect reduced motion preference *\/\n@media (prefers-reduced-motion: reduce) {\n    .anarestan-widget .anim-item,\n    .anarestan-widget .anim-scale,\n    .anarestan-widget .question-card.question-card-anim,\n    .anarestan-widget .question-text.question-anim,\n    .anarestan-widget .option-item,\n    .anarestan-widget .score-number.score-reveal {\n        animation: none !important;\n        opacity: 1 !important;\n        transform: none !important;\n    }\n}\n\n\/* ===== QUIZ SECTION STYLES ===== *\/\n.anarestan-widget .quiz-container {\n    max-width: 760px;\n    margin: 20px auto;\n    padding: 28px;\n    direction: rtl;\n    font-family: IRANYekanX, Tahoma, sans-serif;\n    color: #fff;\n    border-radius: 28px;\n    background:\n        radial-gradient(circle at top right, #ff7070 0%, transparent 35%),\n        radial-gradient(circle at bottom left, #ff3b3b 0%, transparent 35%),\n        linear-gradient(135deg, #8B0000, #B30000, #E60023);\n    box-shadow: 0 20px 50px rgba(170, 0, 0, .35);\n    position: relative;\n    overflow: hidden;\n    scroll-margin-top: 20px;\n}\n\n.anarestan-widget .quiz-container::before,\n.anarestan-widget .quiz-container::after {\n    content: \"\";\n    position: absolute;\n    width: 220px;\n    height: 220px;\n    border-radius: 50%;\n    background: rgba(255, 255, 255, .05);\n    filter: blur(10px);\n}\n\n.anarestan-widget .quiz-container::before {\n    top: -90px;\n    left: -90px;\n}\n\n.anarestan-widget .quiz-container::after {\n    bottom: -100px;\n    right: -100px;\n}\n\n.anarestan-widget .quiz-container>* {\n    position: relative;\n    z-index: 2;\n}\n\n.anarestan-widget .quiz-header {\n    text-align: center;\n    margin-bottom: 25px;\n}\n\n.anarestan-widget .quiz-header h2 {\n    margin: 0 0 15px;\n    font-size: 28px;\n    font-weight: 800;\n}\n\n.anarestan-widget .back-link {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    background: none;\n    border: none;\n    color: rgba(255,255,255,0.85);\n    font-family: inherit;\n    font-size: 14px;\n    cursor: pointer;\n    margin-bottom: 14px;\n    padding: 4px 8px;\n    border-radius: 8px;\n}\n\n.anarestan-widget .back-link:hover {\n    background: rgba(255,255,255,0.1);\n    color: #fff;\n}\n\n.anarestan-widget .timer-section {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 15px;\n    background: rgba(0, 0, 0, 0.3);\n    backdrop-filter: blur(10px);\n    padding: 15px 25px;\n    border-radius: 50px;\n    margin: 0 auto;\n    width: fit-content;\n    border: 2px solid rgba(255, 255, 255, 0.2);\n}\n\n.anarestan-widget .timer-icon {\n    font-size: 28px;\n}\n\n.anarestan-widget .timer-display {\n    font-size: 36px;\n    font-weight: 900;\n    letter-spacing: 3px;\n    color: #FFD54F;\n    min-width: 80px;\n    font-variant-numeric: tabular-nums;\n}\n\n.anarestan-widget .timer-label {\n    font-size: 14px;\n    color: rgba(255, 255, 255, 0.8);\n}\n\n.anarestan-widget .timer-warning {\n    animation: anarestan-pulse 0.5s ease-in-out infinite;\n    color: #ff4444 !important;\n}\n\n@keyframes anarestan-pulse {\n    0%, 100% { transform: scale(1); }\n    50% { transform: scale(1.1); }\n}\n\n.anarestan-widget .progress-bar {\n    width: 100%;\n    height: 6px;\n    background: rgba(255, 255, 255, 0.2);\n    border-radius: 3px;\n    margin: 20px 0;\n    overflow: hidden;\n}\n\n.anarestan-widget .progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #FFB300, #FFD54F);\n    border-radius: 3px;\n    transition: width 0.3s ease;\n}\n\n.anarestan-widget .question-card {\n    background: rgba(255, 255, 255, 0.12);\n    backdrop-filter: blur(12px);\n    border: 1px solid rgba(255, 255, 255, 0.15);\n    border-radius: 22px;\n    padding: 25px;\n    margin-bottom: 20px;\n}\n\n.anarestan-widget .question-card.question-card-anim {\n    animation: anarestan-cardIn 0.4s cubic-bezier(.22,.61,.36,1);\n}\n\n@keyframes anarestan-cardIn {\n    from { opacity: 0; transform: translateY(14px); }\n    to   { opacity: 1; transform: translateY(0); }\n}\n\n.anarestan-widget .question-book {\n    font-size: 14px;\n    font-weight: 700;\n    color: #FFD54F;\n    background: rgba(255, 255, 255, 0.1);\n    border: 1px solid rgba(255, 215, 0, 0.35);\n    display: inline-block;\n    padding: 6px 14px;\n    border-radius: 30px;\n    margin-bottom: 14px;\n}\n\n.anarestan-widget .question-text {\n    font-size: 20px;\n    font-weight: 700;\n    margin-bottom: 20px;\n    line-height: 1.8;\n    color: #fff;\n}\n\n.anarestan-widget .question-text.question-anim {\n    animation: anarestan-textIn 0.4s cubic-bezier(.22,.61,.36,1);\n}\n\n@keyframes anarestan-textIn {\n    from { opacity: 0; transform: translateY(-8px); }\n    to   { opacity: 1; transform: translateY(0); }\n}\n\n.anarestan-widget .options-grid {\n    display: grid;\n    gap: 12px;\n}\n\n.anarestan-widget .option-item {\n    background: rgba(255, 255, 255, 0.1);\n    border: 2px solid rgba(255, 255, 255, 0.2);\n    border-radius: 14px;\n    padding: 16px 18px;\n    cursor: pointer;\n    transition: background 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    font-size: 17px;\n    color: #fff;\n    animation: anarestan-optionIn 0.35s cubic-bezier(.22,.61,.36,1) both;\n}\n\n.anarestan-widget .option-item:nth-child(1) { animation-delay: 0.04s; }\n.anarestan-widget .option-item:nth-child(2) { animation-delay: 0.1s; }\n.anarestan-widget .option-item:nth-child(3) { animation-delay: 0.16s; }\n.anarestan-widget .option-item:nth-child(4) { animation-delay: 0.22s; }\n\n@keyframes anarestan-optionIn {\n    from { opacity: 0; transform: translateY(12px); }\n    to   { opacity: 1; transform: translateY(0); }\n}\n\n.anarestan-widget .option-item:hover {\n    background: rgba(255, 255, 255, 0.2);\n    border-color: rgba(255, 255, 255, 0.4);\n    transform: translateX(-5px);\n}\n\n.anarestan-widget .option-item.selected {\n    background: rgba(255, 215, 0, 0.2);\n    border-color: #FFD700;\n    box-shadow: 0 0 20px rgba(255, 215, 0, 0.3);\n}\n\n.anarestan-widget .option-radio {\n    width: 22px;\n    height: 22px;\n    border-radius: 50%;\n    border: 2px solid rgba(255, 255, 255, 0.5);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    transition: all 0.3s ease;\n}\n\n.anarestan-widget .option-item.selected .option-radio {\n    border-color: #FFD700;\n    background: #FFD700;\n}\n\n.anarestan-widget .option-radio-inner {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    background: #8B0000;\n    opacity: 0;\n    transition: opacity 0.3s ease;\n}\n\n.anarestan-widget .option-item.selected .option-radio-inner {\n    opacity: 1;\n}\n\n.anarestan-widget .option-text {\n    flex: 1;\n}\n\n.anarestan-widget .navigation-buttons {\n    display: flex;\n    gap: 15px;\n    margin-top: 25px;\n    flex-wrap: wrap;\n}\n\n.anarestan-widget .nav-btn {\n    flex: 1;\n    min-width: 150px;\n    padding: 15px 24px;\n    border-radius: 50px;\n    font-weight: 700;\n    font-size: 16px;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    border: none;\n    font-family: inherit;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n}\n\n.anarestan-widget .nav-btn:hover:not(:disabled) {\n    transform: translateY(-3px);\n}\n\n.anarestan-widget .nav-btn:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    transform: none;\n}\n\n.anarestan-widget .btn-prev {\n    background: rgba(255, 255, 255, 0.2);\n    color: #fff;\n    border: 2px solid rgba(255, 255, 255, 0.3);\n}\n\n.anarestan-widget .btn-next {\n    background: linear-gradient(135deg, #FFB300, #FFD54F);\n    color: #8B0000;\n    box-shadow: 0 10px 25px rgba(255, 193, 7, 0.3);\n}\n\n.anarestan-widget .btn-submit {\n    background: linear-gradient(135deg, #4CAF50, #45a049);\n    color: #fff;\n    box-shadow: 0 10px 25px rgba(76, 175, 80, 0.3);\n}\n\n\/* ===== RESULT PAGE ===== *\/\n.anarestan-widget .result-container {\n    text-align: center;\n}\n\n.anarestan-widget .score-display {\n    background: rgba(255, 255, 255, 0.15);\n    backdrop-filter: blur(12px);\n    border: 2px solid rgba(255, 255, 255, 0.2);\n    border-radius: 22px;\n    padding: 30px;\n    margin: 25px 0;\n}\n\n.anarestan-widget .score-number {\n    font-size: 72px;\n    font-weight: 900;\n    color: #FFD54F;\n    margin: 20px 0;\n    text-shadow: 0 0 30px rgba(255, 215, 0, 0.5);\n    min-height: 84px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.anarestan-widget .score-number .score-spinner {\n    width: 44px;\n    height: 44px;\n    border-width: 4px;\n    margin-left: 0;\n}\n\n.anarestan-widget .score-number.score-reveal {\n    animation: anarestan-scorePop 0.5s cubic-bezier(.34,1.56,.64,1);\n}\n\n@keyframes anarestan-scorePop {\n    0%   { opacity: 0; transform: scale(0.6); }\n    60%  { opacity: 1; transform: scale(1.08); }\n    100% { opacity: 1; transform: scale(1); }\n}\n\n.anarestan-widget .score-label {\n    font-size: 20px;\n    font-weight: 600;\n    margin-bottom: 10px;\n}\n\n.anarestan-widget .score-details {\n    font-size: 16px;\n    color: rgba(255, 255, 255, 0.8);\n    line-height: 2;\n}\n\n.anarestan-widget .registration-intro {\n    font-size: 16px;\n    line-height: 1.9;\n    color: rgba(255,255,255,0.9);\n    background: rgba(255,255,255,0.08);\n    border-radius: 16px;\n    padding: 16px 18px;\n    margin-bottom: 22px;\n    text-align: center;\n}\n\n.anarestan-widget .form-group {\n    margin-bottom: 20px;\n    text-align: right;\n}\n\n.anarestan-widget .form-group label {\n    display: block;\n    font-size: 16px;\n    font-weight: 600;\n    margin-bottom: 8px;\n    text-align: right;\n}\n\n.anarestan-widget .form-input {\n    width: 100%;\n    padding: 14px 18px;\n    border-radius: 14px;\n    border: 2px solid rgba(255, 255, 255, 0.3);\n    background: rgba(255, 255, 255, 0.1);\n    color: #fff;\n    font-size: 16px;\n    font-family: inherit;\n    transition: all 0.3s ease;\n    direction: ltr;\n    text-align: center;\n}\n\n.anarestan-widget .form-input:focus {\n    outline: none;\n    border-color: #FFD700;\n    background: rgba(255, 255, 255, 0.15);\n}\n\n.anarestan-widget .form-input.input-error {\n    border-color: #ff6b6b;\n}\n\n.anarestan-widget .form-input::placeholder {\n    color: rgba(255, 255, 255, 0.5);\n}\n\n.anarestan-widget .field-hint {\n    font-size: 12px;\n    color: rgba(255,255,255,0.6);\n    margin-top: 6px;\n    text-align: right;\n}\n\n.anarestan-widget .btn-register {\n    width: 100%;\n    padding: 16px 24px;\n    border-radius: 50px;\n    background: linear-gradient(135deg, #FFB300, #FFD54F);\n    color: #8B0000;\n    font-size: 18px;\n    font-weight: 800;\n    border: none;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    font-family: inherit;\n    box-shadow: 0 10px 25px rgba(255, 193, 7, 0.3);\n}\n\n.anarestan-widget .btn-register:hover:not(:disabled) {\n    transform: translateY(-3px);\n    box-shadow: 0 15px 35px rgba(255, 193, 7, 0.4);\n}\n\n.anarestan-widget .btn-register:disabled {\n    opacity: 0.6;\n    cursor: not-allowed;\n    transform: none !important;\n}\n\n.anarestan-widget .btn-register.btn-sent {\n    background: linear-gradient(135deg, #4CAF50, #45a049);\n    color: #fff;\n}\n\n.anarestan-widget .error-message {\n    background: rgba(255, 59, 59, 0.18);\n    border: 1px solid rgba(255, 59, 59, 0.35);\n    border-right: 4px solid #ff5252;\n    border-radius: 12px;\n    padding: 12px 14px;\n    margin: 15px 0;\n    color: #fff;\n    font-weight: 600;\n    line-height: 1.8;\n    display: none;\n}\n\n.anarestan-widget .success-message {\n    background: rgba(76, 175, 80, 0.18);\n    border: 1px solid rgba(76, 175, 80, 0.35);\n    border-right: 4px solid #4CAF50;\n    border-radius: 12px;\n    padding: 12px 14px;\n    margin: 15px 0;\n    color: #fff;\n    font-weight: 600;\n    line-height: 1.8;\n    display: none;\n}\n\n.anarestan-widget .otp-section {\n    margin-top: 20px;\n    padding: 20px;\n    background: rgba(0, 0, 0, 0.2);\n    border-radius: 14px;\n    display: none;\n}\n\n.anarestan-widget .otp-section h4 {\n    margin: 0 0 10px;\n    text-align: center;\n    font-size: 18px;\n    font-weight: 700;\n}\n\n.anarestan-widget .otp-timer {\n    text-align: center;\n    font-size: 13px;\n    color: rgba(255,255,255,0.7);\n    margin-bottom: 8px;\n}\n\n\/* \u2b50 \u0645\u0647\u0645: \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 OTP \u0628\u0627\u06cc\u062f LTR \u0628\u0627\u0634\u0647 *\/\n.anarestan-widget .otp-inputs-wrapper {\n    direction: ltr;\n}\n\n.anarestan-widget .otp-inputs {\n    display: flex;\n    gap: 10px;\n    justify-content: center;\n    margin: 15px 0;\n}\n\n.anarestan-widget .otp-input {\n    width: 50px;\n    height: 50px;\n    text-align: center;\n    font-size: 24px;\n    font-weight: 700;\n    border-radius: 10px;\n    border: 2px solid rgba(255, 255, 255, 0.3);\n    background: rgba(255, 255, 255, 0.1);\n    color: #fff;\n    font-family: inherit;\n    direction: ltr;\n    -webkit-appearance: none;\n    -moz-appearance: textfield;\n    appearance: none;\n}\n\n\/* \u062d\u0630\u0641 \u0627\u0633\u067e\u06cc\u0646\u0631 *\/\n.anarestan-widget .otp-input::-webkit-outer-spin-button,\n.anarestan-widget .otp-input::-webkit-inner-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n}\n\n.anarestan-widget .otp-input[type=\"number\"] {\n    -moz-appearance: textfield;\n}\n\n.anarestan-widget .otp-input:focus {\n    outline: none;\n    border-color: #FFD700;\n}\n\n.anarestan-widget .hidden {\n    display: none !important;\n}\n\n.anarestan-widget .loading-spinner {\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    border: 3px solid rgba(255, 255, 255, 0.3);\n    border-radius: 50%;\n    border-top-color: #fff;\n    animation: anarestan-spin 0.6s linear infinite;\n    margin-left: 8px;\n    vertical-align: middle;\n}\n\n@keyframes anarestan-spin {\n    to { transform: rotate(360deg); }\n}\n\n\/* visually-hidden helper for screen-reader text *\/\n.anarestan-widget .sr-only {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    margin: -1px;\n    overflow: hidden;\n    clip: rect(0,0,0,0);\n    white-space: nowrap;\n    border: 0;\n}\n\n\/* ===== RESPONSIVE ===== *\/\n@media (max-width: 768px) {\n    .anarestan-widget .campaign-box,\n    .anarestan-widget .quiz-container {\n        padding: 20px;\n        border-radius: 22px;\n    }\n    .anarestan-widget .campaign-box h2,\n    .anarestan-widget .quiz-header h2 {\n        font-size: 22px;\n    }\n    .anarestan-widget .info {\n        padding: 18px;\n        font-size: 15px;\n    }\n    .anarestan-widget .code-wrapper {\n        width: 100%;\n        justify-content: center;\n        padding: 10px 14px;\n        gap: 10px;\n    }\n    .anarestan-widget .code {\n        font-size: 20px;\n        letter-spacing: 1px;\n    }\n    .anarestan-widget .copy-icon-btn svg {\n        width: 22px;\n        height: 22px;\n    }\n    .anarestan-widget .btn {\n        width: 100%;\n        min-width: unset;\n    }\n    .anarestan-widget .timer-display {\n        font-size: 28px;\n    }\n    .anarestan-widget .question-text {\n        font-size: 17px;\n    }\n    .anarestan-widget .option-item {\n        font-size: 15px;\n        padding: 14px;\n    }\n    .anarestan-widget .nav-btn {\n        padding: 12px 18px;\n        font-size: 14px;\n    }\n    .anarestan-widget .score-number {\n        font-size: 56px;\n    }\n    .anarestan-widget .otp-input {\n        width: 40px;\n        height: 40px;\n        font-size: 20px;\n    }\n}\n<\/style>\n\n<div class=\"anarestan-widget\">\n    <!-- ===== MAIN CAMPAIGN PAGE ===== -->\n    <div class=\"campaign-box\" id=\"campaignPage\">\n        <h2 class=\"anim-item\">\u2728 \u0633\u0641\u0631 \u0628\u0647 \u062f\u0646\u06cc\u0627\u06cc \u06a9\u062a\u0627\u0628 \u0622\u063a\u0627\u0632 \u0634\u062f \u2728<\/h2>\n\n        <div class=\"info anim-item\">\n            <p>\u062f\u0648 \u06a9\u062a\u0627\u0628 \u062c\u0630\u0627\u0628\u060c \u06cc\u06a9 \u0686\u0627\u0644\u0634 \u0647\u06cc\u062c\u0627\u0646\u200c\u0627\u0646\u06af\u06cc\u0632 \u0648 \u06a9\u0644\u06cc \u062c\u0627\u06cc\u0632\u0647 \u062f\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u062a\u0648\u0633\u062a! \ud83c\udf89\n   \ud83d\udcd6 \u06a9\u0645\u06cc\u06a9 \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\" \u0631\u0648 \u0628\u062e\u0648\u0646\n\ud83c\udfa7 \u06a9\u062a\u0627\u0628 \u0635\u0648\u062a\u06cc \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\" \u0631\u0648 \u06af\u0648\u0634 \u06a9\u0646\n\ud83d\udcdd \u062d\u062f\u0627\u0642\u0644 \u0628\u0647 5 \u0633\u0624\u0627\u0644 \u062a\u0633\u062a\u06cc \u0627\u0632 \u06a9\u062a\u0627\u0628 \u0647\u0627 \u062f\u0631\u0633\u062a \u062c\u0648\u0627\u0628 \u0628\u062f\u0647\n\ud83c\udfaf \u0627\u0645\u062a\u06cc\u0627\u0632 \u0628\u06af\u06cc\u0631 \u0648 \u0634\u0627\u0646\u0633 \u0628\u0631\u0646\u062f\u0647 \u0634\u062f\u0646 \u0631\u0627 \u0628\u06cc\u0634\u062a\u0631 \u06a9\u0646!<\/p>\n        <\/div>\n\n        <div class=\"prize anim-item\">\n            <div style=\"font-size:22px;font-weight:800;margin-bottom:18px;text-align:center;\">\n                \ud83c\udf81 \u062c\u0648\u0627\u06cc\u0632\n            <\/div>\n            <div class=\"anim-scale\" style=\"background:rgba(255,255,255,.28);backdrop-filter:blur(8px);padding:16px 18px;border-radius:16px;margin-bottom:14px;line-height:1.9;\">\n                \ud83c\udfc6 <strong>\u06f1\u06f0 \u0628\u0633\u062a\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06cc\u06a9\u200c\u0633\u0627\u0644\u0647 \u06f3\u06f0 \u06af\u06cc\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc \u0627\u0646\u0627\u0631\u0633\u062a\u0627\u0646<\/strong><br>\n                \u0628\u0631\u0627\u06cc <strong>\u06f1\u06f0 \u0628\u0631\u0646\u062f\u0647 \u0646\u0647\u0627\u06cc\u06cc<\/strong>\n            <\/div>\n            <div class=\"anim-scale\" style=\"background:rgba(255,255,255,.28);backdrop-filter:blur(8px);padding:16px 18px;border-radius:16px;margin-bottom:18px;line-height:1.9;\">\n                \ud83c\udf89 <strong>\u06a9\u0644\u06cc \u0628\u0633\u062a\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u06cc\u06a9\u200c\u0645\u0627\u0647\u0647 \u0627\u0646\u0627\u0631\u0633\u062a\u0627\u0646<\/strong><br>\n\u0628\u0647 \u0642\u06cc\u062f \u0642\u0631\u0639\u0647 \u0628\u0647 \u062a\u0645\u0627\u0645\u06cc \u0634\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646\n            <\/div>\n            <div class=\"anim-scale\" style=\"text-align:center;font-size:18px;font-weight:700;\">\n                \ud83d\udcc5 <strong>\u0645\u0647\u0644\u062a \u0634\u0631\u06a9\u062a:<\/strong> \u06f1\u06f0 \u062a\u0627 \u06f2\u06f0 \u062a\u06cc\u0631\n            <\/div>\n        <\/div>\n\n        <div class=\"code-box anim-item\">\n            <div style=\"font-size:17px;font-weight:700;margin-bottom:12px;\">\n                \ud83d\udcda \u062f\u0648 \u06a9\u062a\u0627\u0628 \u0645\u0646\u062a\u062e\u0628 \u0627\u0646\u0627\u0631\u0633\u062a\u0627\u0646 \u0631\u0627 \u0628\u0627 \u06a9\u062f \u0632\u06cc\u0631 \u062f\u0631 \u0641\u06cc\u062f\u06cc\u0628\u0648 \u0631\u0627\u06cc\u06af\u0627\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646:\n            <\/div>\n            <div style=\"display:flex;flex-direction:column;align-items:center;gap:10px;\">\n                <div class=\"code-wrapper\">\n                    <span id=\"discountCode\" class=\"code\">AnarFidibo<\/span>\n                    <button id=\"copyBtn\" class=\"copy-icon-btn\" type=\"button\" aria-label=\"\u06a9\u067e\u06cc \u06a9\u062f \u062a\u062e\u0641\u06cc\u0641\">\n                        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                            <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"><\/rect>\n                            <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                <span id=\"copyFeedback\" class=\"copy-feedback\" role=\"status\">\u2705 \u06a9\u067e\u06cc \u0634\u062f!<\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"buttons\">\n            <a class=\"btn btn-book anim-item\" href=\"https:\/\/fidibo.com\/page\/anarestan?pageTitle=%D8%A7%D9%86%D8%A7%D8%B1%D8%B3%D8%AA%D8%A7%D9%86\" target=\"_blank\" rel=\"noopener\">\n                \ud83d\udcda \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u062a\u0627\u0628 \u0647\u0627\n            <\/a>\n            <button class=\"btn btn-enter anim-item\" type=\"button\" id=\"enterQuizBtn\">\n                \ud83c\udfaf \u0648\u0631\u0648\u062f \u0628\u0647 \u0645\u0633\u0627\u0628\u0642\u0647\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <!-- ===== QUIZ PAGE ===== -->\n    <div class=\"quiz-container hidden\" id=\"quizPage\" tabindex=\"-1\">\n        <div id=\"quizSection\">\n            <button type=\"button\" class=\"back-link\" id=\"backToCampaignBtn\">\u2192 \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc<\/button>\n            <div class=\"quiz-header\">\n                <h2>\ud83d\udcda \u0645\u0633\u0627\u0628\u0642\u0647 \u06a9\u062a\u0627\u0628\u062e\u0648\u0627\u0646\u06cc<\/h2>\n                <div class=\"timer-section\">\n                    <span class=\"timer-icon\">\u23f1\ufe0f<\/span>\n                    <span class=\"timer-display\" id=\"timerDisplay\" role=\"timer\">\u06f0\u06f5:\u06f0\u06f0<\/span>\n                    <span class=\"timer-label\">\u0632\u0645\u0627\u0646 \u0628\u0627\u0642\u06cc\u200c\u0645\u0627\u0646\u062f\u0647<\/span>\n                <\/div>\n            <\/div>\n\n            <div class=\"progress-bar\">\n                <div class=\"progress-fill\" id=\"progressFill\" style=\"width: 0%\"><\/div>\n            <\/div>\n\n            <div class=\"question-card\">\n                <div class=\"question-book\" id=\"questionBook\"><\/div>\n                <div class=\"question-text\" id=\"questionText\"><\/div>\n                <div class=\"options-grid\" id=\"optionsGrid\" role=\"radiogroup\"><\/div>\n            <\/div>\n\n            <div class=\"navigation-buttons\">\n                <button class=\"nav-btn btn-prev\" type=\"button\" id=\"prevBtn\">\u2b05\ufe0f \u0633\u0648\u0627\u0644 \u0642\u0628\u0644\u06cc<\/button>\n                <button class=\"nav-btn btn-next\" type=\"button\" id=\"nextBtn\">\u0633\u0648\u0627\u0644 \u0628\u0639\u062f\u06cc \u27a1\ufe0f<\/button>\n                <button class=\"nav-btn btn-submit hidden\" type=\"button\" id=\"submitBtn\">\u2705 \u067e\u0627\u06cc\u0627\u0646 \u0622\u0632\u0645\u0648\u0646<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- ===== RESULT PAGE ===== -->\n        <div id=\"resultSection\" class=\"hidden\" tabindex=\"-1\">\n            <div class=\"result-container\">\n                <div class=\"quiz-header\">\n                    <h2>\ud83c\udf89 \u0646\u062a\u06cc\u062c\u0647 \u0622\u0632\u0645\u0648\u0646<\/h2>\n                <\/div>\n\n                <div class=\"score-display\">\n                    <div class=\"score-label\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627<\/div>\n                    <div class=\"score-number\" id=\"scoreDisplay\" aria-live=\"polite\">\u06f0<\/div>\n                    <div style=\"font-size: 24px; margin-bottom: 8px;\">\u0627\u0632 \u06f1\u06f0\u06f0<\/div>\n                    <div class=\"score-details\" id=\"scoreDetails\" aria-live=\"polite\"><\/div>\n                <\/div>\n\n                <div id=\"registrationForm\">\n                    <div class=\"registration-intro\">\n                        \u0628\u0631\u0627\u06cc \u0634\u0631\u06a9\u062a \u062f\u0631 \u0642\u0631\u0639\u0647\u200c\u06a9\u0634\u06cc \u062c\u0648\u0627\u06cc\u0632\u060c \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0646\u0627\u0645 \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646 \ud83c\udf81\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label for=\"mobileInput\">\ud83d\udcf1 \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644<\/label>\n                        <input type=\"tel\" class=\"form-input\" id=\"mobileInput\" placeholder=\"\u06f0\u06f9\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\" maxlength=\"11\" inputmode=\"numeric\" autocomplete=\"tel\">\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label for=\"fullNameInput\">\ud83d\udc64 \u0646\u0627\u0645 \u0648 \u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc<\/label>\n                        <input type=\"text\" class=\"form-input\" id=\"fullNameInput\" placeholder=\"\u0646\u0627\u0645 \u0648 \u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f\" autocomplete=\"name\" style=\"text-align:right;\">\n                    <\/div>\n\n                    <div class=\"error-message\" id=\"errorMessage\" role=\"alert\"><\/div>\n                    <div class=\"success-message\" id=\"successMessage\" role=\"status\"><\/div>\n\n                    <button class=\"btn-register\" type=\"button\" id=\"registerBtn\">\ud83d\udcdd \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f<\/button>\n\n                    <div class=\"otp-section\" id=\"otpSection\">\n                        <h4>\u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f \u06f4 \u0631\u0642\u0645\u06cc \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/h4>\n                        <div class=\"otp-timer\" id=\"otpTimerDisplay\"><\/div>\n                        <div class=\"otp-inputs-wrapper\">\n                            <div class=\"otp-inputs\">\n                                <input type=\"text\" class=\"otp-input\" maxlength=\"1\" id=\"otp1\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"one-time-code\" aria-label=\"\u0631\u0642\u0645 \u0627\u0648\u0644 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f\">\n                                <input type=\"text\" class=\"otp-input\" maxlength=\"1\" id=\"otp2\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" aria-label=\"\u0631\u0642\u0645 \u062f\u0648\u0645 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f\">\n                                <input type=\"text\" class=\"otp-input\" maxlength=\"1\" id=\"otp3\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" aria-label=\"\u0631\u0642\u0645 \u0633\u0648\u0645 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f\">\n                                <input type=\"text\" class=\"otp-input\" maxlength=\"1\" id=\"otp4\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" aria-label=\"\u0631\u0642\u0645 \u0686\u0647\u0627\u0631\u0645 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f\">\n                            <\/div>\n                        <\/div>\n                        <button class=\"btn-register\" type=\"button\" id=\"verifyOtpBtn\">\u2705 \u062a\u0627\u06cc\u06cc\u062f \u06a9\u062f<\/button>\n                        <button class=\"nav-btn btn-prev\" type=\"button\" style=\"margin-top: 10px; width: 100%;\" id=\"resendOtpBtn\">\ud83d\udd04 \u0627\u0631\u0633\u0627\u0644 \u0645\u062c\u062f\u062f \u06a9\u062f<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    'use strict';\n\n    \/\/ ===== DOM Cache (prevents repeated queries) =====\n    var DOM = {};\n    function initDom() {\n        if (DOM.campaignPage) return; \/\/ Already initialized\n\n        DOM.campaignPage = document.getElementById('campaignPage');\n        DOM.quizPage = document.getElementById('quizPage');\n        DOM.quizSection = document.getElementById('quizSection');\n        DOM.resultSection = document.getElementById('resultSection');\n        DOM.timerDisplay = document.getElementById('timerDisplay');\n        DOM.progressFill = document.getElementById('progressFill');\n        DOM.questionCard = document.querySelector('#quizPage .question-card');\n        DOM.questionBook = document.getElementById('questionBook');\n        DOM.questionText = document.getElementById('questionText');\n        DOM.optionsGrid = document.getElementById('optionsGrid');\n        DOM.prevBtn = document.getElementById('prevBtn');\n        DOM.nextBtn = document.getElementById('nextBtn');\n        DOM.submitBtn = document.getElementById('submitBtn');\n        DOM.scoreDisplay = document.getElementById('scoreDisplay');\n        DOM.scoreDetails = document.getElementById('scoreDetails');\n        DOM.registrationForm = document.getElementById('registrationForm');\n        DOM.mobileInput = document.getElementById('mobileInput');\n        DOM.fullNameInput = document.getElementById('fullNameInput');\n        DOM.errorMessage = document.getElementById('errorMessage');\n        DOM.successMessage = document.getElementById('successMessage');\n        DOM.registerBtn = document.getElementById('registerBtn');\n        DOM.otpSection = document.getElementById('otpSection');\n        DOM.otpTimerDisplay = document.getElementById('otpTimerDisplay');\n        DOM.verifyOtpBtn = document.getElementById('verifyOtpBtn');\n        DOM.resendOtpBtn = document.getElementById('resendOtpBtn');\n        DOM.copyBtn = document.getElementById('copyBtn');\n        DOM.copyFeedback = document.getElementById('copyFeedback');\n        DOM.discountCode = document.getElementById('discountCode');\n        DOM.enterQuizBtn = document.getElementById('enterQuizBtn');\n        DOM.backToCampaignBtn = document.getElementById('backToCampaignBtn');\n\n        \/\/ OTP inputs\n        DOM.otpInputs = [\n            document.getElementById('otp1'),\n            document.getElementById('otp2'),\n            document.getElementById('otp3'),\n            document.getElementById('otp4')\n        ];\n    }\n\n    \/\/ ===== GET AJAX CONFIG =====\n    function getAjaxConfig() {\n        if (typeof window.anarestanQuizConfig !== 'undefined') {\n            return window.anarestanQuizConfig;\n        }\n        console.error('Anarestan Quiz: Configuration not found');\n        return {\n            ajax_url: '\/wp-admin\/admin-ajax.php',\n            nonce: ''\n        };\n    }\n\n    \/\/ ===== UTILITY: Convert Persian\/Arabic digits to English =====\n    function toEnglishDigits(str) {\n        if (typeof str !== 'string') str = String(str);\n        var map = {\n            '\u06f0': '0', '\u06f1': '1', '\u06f2': '2', '\u06f3': '3', '\u06f4': '4',\n            '\u06f5': '5', '\u06f6': '6', '\u06f7': '7', '\u06f8': '8', '\u06f9': '9',\n            '\u0660': '0', '\u0661': '1', '\u0662': '2', '\u0663': '3', '\u0664': '4',\n            '\u0665': '5', '\u0666': '6', '\u0667': '7', '\u0668': '8', '\u0669': '9'\n        };\n        return str.replace(\/[\u06f0-\u06f9\u0660-\u0669]\/g, function(m) { return map[m]; });\n    }\n\n    \/\/ ===== UTILITY: Convert English digits to Persian (for nicer display) =====\n    function toPersianDigits(num) {\n        var map = ['\u06f0', '\u06f1', '\u06f2', '\u06f3', '\u06f4', '\u06f5', '\u06f6', '\u06f7', '\u06f8', '\u06f9'];\n        return String(num).replace(\/[0-9]\/g, function(d) { return map[d]; });\n    }\n\n    \/\/ ===== QUESTIONS DATA =====\n    var questions = [\n        { id: 1, book: \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\", question: \"\u06f1. \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u067e\u0633 \u0627\u0632 \u063a\u0631\u0642 \u0634\u062f\u0646 \u06a9\u0634\u062a\u06cc\u060c \u062f\u0631 \u06a9\u062c\u0627 \u062a\u0646\u0647\u0627 \u0645\u0627\u0646\u062f\u061f\", options: [\"\u062c\u0646\u06af\u0644\", \"\u062c\u0632\u06cc\u0631\u0647\u200c\u0627\u06cc \u062f\u0648\u0631\u0627\u0641\u062a\u0627\u062f\u0647\", \"\u06a9\u0648\u0647\u0633\u062a\u0627\u0646\", \"\u0628\u06cc\u0627\u0628\u0627\u0646\"] },\n        { id: 2, book: \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\", question: \"\u06f2. \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u0628\u0631\u0627\u06cc \u0632\u0646\u062f\u0647 \u0645\u0627\u0646\u062f\u0646 \u062f\u0631 \u062c\u0632\u06cc\u0631\u0647\u060c \u0627\u0648\u0644\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0647\u0645\u0634 \u0686\u0647 \u0628\u0648\u062f\u061f\", options: [\"\u0633\u0627\u062e\u062a\u0646 \u0642\u0627\u06cc\u0642\", \"\u0633\u0627\u062e\u062a\u0646 \u0633\u0631\u067e\u0646\u0627\u0647\", \"\u0634\u06a9\u0627\u0631 \u062d\u06cc\u0648\u0627\u0646\u0627\u062a\", \"\u06a9\u0627\u0634\u062a \u062f\u0631\u062e\u062a\"] },\n        { id: 3, book: \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\", question: \"\u06f3. \u0646\u0627\u0645 \u0645\u0631\u062f\u06cc \u06a9\u0647 \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u0627\u0648 \u0631\u0627 \u0646\u062c\u0627\u062a \u062f\u0627\u062f \u0686\u0647 \u0628\u0648\u062f\u061f\", options: [\"\u062c\u0627\u0646\", \"\u062c\u0645\u0639\u0647\", \"\u062c\u06a9\", \"\u0648\u06cc\u0644\u06cc\u0627\u0645\"] },\n        { id: 4, book: \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\", question: \"\u06f4. \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0686\u0647 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0627\u06cc \u062a\u0648\u0627\u0646\u0633\u062a \u0628\u0631 \u0633\u062e\u062a\u06cc\u200c\u0647\u0627\u06cc \u062c\u0632\u06cc\u0631\u0647 \u063a\u0644\u0628\u0647 \u06a9\u0646\u062f\u061f\", options: [\"\u0634\u0627\u0646\u0633\", \"\u062b\u0631\u0648\u062a\", \"\u067e\u0634\u062a\u06a9\u0627\u0631 \u0648 \u0627\u0645\u06cc\u062f\", \"\u06a9\u0645\u06a9 \u062f\u06cc\u06af\u0631\u0627\u0646\"] },\n        { id: 5, book: \"\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647\", question: \"\u06f5. \u067e\u0627\u06cc\u0627\u0646 \u062f\u0627\u0633\u062a\u0627\u0646 \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647 \u0686\u06af\u0648\u0646\u0647 \u0628\u0648\u062f\u061f\", options: [\"\u0628\u0631\u0627\u06cc \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u062c\u0632\u06cc\u0631\u0647 \u0645\u0627\u0646\u062f\", \"\u0628\u0647 \u0634\u0647\u0631 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0641\u062a\", \"\u0627\u0632 \u062c\u0632\u06cc\u0631\u0647 \u0646\u062c\u0627\u062a \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f \u0648 \u0628\u0647 \u062e\u0627\u0646\u0647 \u0628\u0627\u0632\u06af\u0634\u062a\", \"\u06a9\u0634\u062a\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0633\u0627\u062e\u062a \u0648 \u062c\u0647\u0627\u0646\u06af\u0631\u062f \u0634\u062f\"] },\n        { id: 6, book: \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\", question: \"\u06f6. \u0634\u062e\u0635\u06cc\u062a\u200c\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u06a9\u062a\u0627\u0628 \u0686\u0647 \u0645\u0648\u062c\u0648\u062f\u0627\u062a\u06cc \u0647\u0633\u062a\u0646\u062f\u061f\", options: [\"\u062d\u06cc\u0648\u0627\u0646\u0627\u062a\", \"\u0622\u062f\u0645\u200c\u0647\u0627\", \"\u0622\u062f\u0645\u06a9\u200c\u0647\u0627\u06cc \u0686\u0648\u0628\u06cc (\u0648\u0645\u06cc\u06a9\u200c\u0647\u0627)\", \"\u0631\u0628\u0627\u062a\u200c\u0647\u0627\"] },\n        { id: 7, book: \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\", question: \"\u06f7. \u0622\u062f\u0645\u06a9\u200c\u0647\u0627 \u0631\u0648\u06cc \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0645\u06cc\u200c\u0686\u0633\u0628\u0627\u0646\u062f\u0646\u062f\u061f\", options: [\"\u0646\u0642\u0627\u0634\u06cc\", \"\u0633\u062a\u0627\u0631\u0647 \u0648 \u0646\u0642\u0637\u0647 \u062e\u0627\u06a9\u0633\u062a\u0631\u06cc\", \"\u0645\u062f\u0627\u0644\", \"\u0628\u0631\u0686\u0633\u0628 \u0642\u06cc\u0645\u062a\"] },\n        { id: 8, book: \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\", question: \"\u06f8. \u0686\u0631\u0627 \u067e\u0627\u0646\u0686\u06cc\u0646\u0644\u0648 \u06a9\u0645\u200c\u06a9\u0645 \u0627\u0632 \u0628\u0631\u0686\u0633\u0628\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u0627\u0646 \u0646\u0627\u0631\u0627\u062d\u062a \u0646\u0628\u0648\u062f\u061f\", options: [\"\u0686\u0648\u0646 \u0642\u0648\u06cc\u200c\u062a\u0631 \u0634\u062f\u0647 \u0628\u0648\u062f\", \"\u0686\u0648\u0646 \u0641\u0647\u0645\u06cc\u062f \u0646\u0638\u0631 \u062f\u06cc\u06af\u0631\u0627\u0646 \u0627\u0631\u0632\u0634 \u0648\u0627\u0642\u0639\u06cc \u0627\u0648 \u0631\u0627 \u062a\u0639\u06cc\u06cc\u0646 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\", \"\u0686\u0648\u0646 \u0627\u0632 \u0634\u0647\u0631 \u0631\u0641\u062a\", \"\u0686\u0648\u0646 \u0647\u0645\u0647 \u0627\u0648 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u06a9\u0631\u062f\u0646\u062f\"] },\n        { id: 9, book: \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\", question: \"\u06f9. \u0646\u0627\u0645 \u0646\u062c\u0627\u0631\u06cc \u06a9\u0647 \u0622\u062f\u0645\u06a9\u200c\u0647\u0627 \u0631\u0627 \u0633\u0627\u062e\u062a\u0647 \u0628\u0648\u062f \u0686\u0647 \u0628\u0648\u062f\u061f\", options: [\"\u0633\u0627\u0645\", \"\u0627\u0644\u06cc\", \"\u062c\u0648\u0632\u0641\", \"\u062f\u06cc\u0648\u06cc\u062f\"] },\n        { id: 10, book: \"\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\", question: \"\u06f1\u06f0. \u067e\u06cc\u0627\u0645 \u0627\u0635\u0644\u06cc \u06a9\u062a\u0627\u0628 \u00ab\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc\u00bb \u0686\u06cc\u0633\u062a\u061f\", options: [\"\u0647\u0645\u06cc\u0634\u0647 \u0628\u0627\u06cc\u062f \u0627\u0632 \u062f\u06cc\u06af\u0631\u0627\u0646 \u0628\u0647\u062a\u0631 \u0628\u0627\u0634\u06cc\u0645\", \"\u0638\u0627\u0647\u0631 \u0645\u0647\u0645\u200c\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0646\u0633\u0627\u0646 \u0627\u0633\u062a\", \"\u0627\u0631\u0632\u0634 \u0647\u0631 \u0641\u0631\u062f \u0628\u0647 \u0646\u0638\u0631 \u062f\u06cc\u06af\u0631\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u06cc\u0633\u062a \u0648 \u0647\u0631 \u0627\u0646\u0633\u0627\u0646 \u0645\u0646\u062d\u0635\u0631\u0628\u0647\u200c\u0641\u0631\u062f \u0627\u0633\u062a\", \"\u0628\u0631\u0627\u06cc \u0645\u0648\u0641\u0642\u06cc\u062a \u0628\u0627\u06cc\u062f \u062b\u0631\u0648\u062a\u0645\u0646\u062f \u0628\u0648\u062f\"] }\n    ];\n\n    \/\/ ===== QUIZ MODULE =====\n    var quiz = {\n        currentQuestion: 0,\n        answers: new Array(10).fill(null),\n        timerInterval: null,\n        timeLeft: 300,\n        quizFinished: false,\n        mobileNumber: null,\n        otpVerified: false,\n        isSubmitting: false,\n        otpResendInterval: null,\n        otpResendSeconds: 0,\n\n        init: function() {\n            initDom();\n            this.currentQuestion = 0;\n            this.answers = new Array(10).fill(null);\n            this.timeLeft = 300;\n            this.quizFinished = false;\n            this.showQuestion(0);\n            this.startTimer();\n            this.setupOTPInputs();\n            this.setupMobileInput();\n            this.setupEnterKeySubmit();\n            this.bindEvents();\n        },\n\n        bindEvents: function() {\n            var self = this;\n\n            \/\/ Remove any existing listeners by cloning (clean approach)\n            var newPrevBtn = DOM.prevBtn.cloneNode(true);\n            var newNextBtn = DOM.nextBtn.cloneNode(true);\n            var newSubmitBtn = DOM.submitBtn.cloneNode(true);\n            var newRegisterBtn = DOM.registerBtn.cloneNode(true);\n            var newVerifyOtpBtn = DOM.verifyOtpBtn.cloneNode(true);\n            var newResendOtpBtn = DOM.resendOtpBtn.cloneNode(true);\n            var newBackBtn = DOM.backToCampaignBtn.cloneNode(true);\n\n            DOM.prevBtn.parentNode.replaceChild(newPrevBtn, DOM.prevBtn);\n            DOM.nextBtn.parentNode.replaceChild(newNextBtn, DOM.nextBtn);\n            DOM.submitBtn.parentNode.replaceChild(newSubmitBtn, DOM.submitBtn);\n            DOM.registerBtn.parentNode.replaceChild(newRegisterBtn, DOM.registerBtn);\n            DOM.verifyOtpBtn.parentNode.replaceChild(newVerifyOtpBtn, DOM.verifyOtpBtn);\n            DOM.resendOtpBtn.parentNode.replaceChild(newResendOtpBtn, DOM.resendOtpBtn);\n            DOM.backToCampaignBtn.parentNode.replaceChild(newBackBtn, DOM.backToCampaignBtn);\n\n            \/\/ Update DOM references\n            DOM.prevBtn = newPrevBtn;\n            DOM.nextBtn = newNextBtn;\n            DOM.submitBtn = newSubmitBtn;\n            DOM.registerBtn = newRegisterBtn;\n            DOM.verifyOtpBtn = newVerifyOtpBtn;\n            DOM.resendOtpBtn = newResendOtpBtn;\n            DOM.backToCampaignBtn = newBackBtn;\n\n            \/\/ Bind events\n            DOM.prevBtn.addEventListener('click', function() { self.previousQuestion(); });\n            DOM.nextBtn.addEventListener('click', function() { self.nextQuestion(); });\n            DOM.submitBtn.addEventListener('click', function() { self.submitQuiz(); });\n            DOM.registerBtn.addEventListener('click', function() { self.registerUser(); });\n            DOM.verifyOtpBtn.addEventListener('click', function() { self.verifyOTP(); });\n            DOM.resendOtpBtn.addEventListener('click', function() { self.resendOTP(); });\n            DOM.backToCampaignBtn.addEventListener('click', function() { self.backToCampaign(); });\n        },\n\n        backToCampaign: function() {\n            clearInterval(this.timerInterval);\n            clearInterval(this.otpResendInterval);\n            DOM.quizPage.classList.add('hidden');\n            DOM.campaignPage.classList.remove('hidden');\n            DOM.campaignPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n        },\n\n        setupEnterKeySubmit: function() {\n            var self = this;\n            DOM.mobileInput.addEventListener('keydown', function(e) {\n                if (e.key === 'Enter') {\n                    e.preventDefault();\n                    DOM.fullNameInput.focus();\n                }\n            });\n            DOM.fullNameInput.addEventListener('keydown', function(e) {\n                if (e.key === 'Enter') {\n                    e.preventDefault();\n                    self.registerUser();\n                }\n            });\n        },\n\n        startTimer: function() {\n            var self = this;\n            this.updateTimerDisplay();\n\n            if (this.timerInterval) {\n                clearInterval(this.timerInterval);\n            }\n\n            this.timerInterval = setInterval(function() {\n                self.timeLeft--;\n                self.updateTimerDisplay();\n\n                if (self.timeLeft <= 30) {\n                    DOM.timerDisplay.classList.add('timer-warning');\n                }\n\n                if (self.timeLeft <= 0) {\n                    clearInterval(self.timerInterval);\n                    self.submitQuiz();\n                }\n            }, 1000);\n        },\n\n        updateTimerDisplay: function() {\n            var minutes = Math.floor(this.timeLeft \/ 60);\n            var seconds = this.timeLeft % 60;\n            var text = String(minutes).padStart(2, '0') + ':' + String(seconds).padStart(2, '0');\n            DOM.timerDisplay.textContent = toPersianDigits(text);\n        },\n\n        showQuestion: function(index) {\n            if (this.quizFinished) return;\n\n            this.currentQuestion = index;\n            var q = questions[index];\n\n            DOM.progressFill.style.width = ((index + 1) \/ 10 * 100) + '%';\n\n            \/\/ Book label above the question: comic for Q1-5, audiobook for Q6-10\n            if (DOM.questionBook) {\n                var bookLabel = (index < 5)\n                    ? '\ud83d\udcd6 \u06a9\u0645\u06cc\u06a9 \"' + q.book + '\"'\n                    : '\ud83c\udfa7 \u06a9\u062a\u0627\u0628 \u0635\u0648\u062a\u06cc \"' + q.book + '\"';\n                DOM.questionBook.textContent = bookLabel;\n            }\n\n            \/\/ Replay the entrance animation on the question text by\n            \/\/ removing the class, forcing a reflow, then re-adding it.\n            DOM.questionText.classList.remove('question-anim');\n            DOM.questionText.textContent = q.question;\n            void DOM.questionText.offsetWidth;\n            DOM.questionText.classList.add('question-anim');\n\n            if (DOM.questionCard) {\n                DOM.questionCard.classList.remove('question-card-anim');\n                void DOM.questionCard.offsetWidth;\n                DOM.questionCard.classList.add('question-card-anim');\n            }\n\n            \/\/ Build options. These are brand-new DOM nodes each time, so\n            \/\/ their entrance animation (defined in CSS) plays automatically.\n            var labels = ['\u0627\u0644\u0641', '\u0628', '\u062c', '\u062f'];\n            var html = '';\n            var self = this;\n\n            q.options.forEach(function(opt, i) {\n                var selected = self.answers[index] === i;\n                html += '<div class=\"option-item' + (selected ? ' selected' : '') + '\" data-index=\"' + i + '\" role=\"radio\" tabindex=\"0\" aria-checked=\"' + selected + '\">' +\n                        '<div class=\"option-radio\"><div class=\"option-radio-inner\"><\/div><\/div>' +\n                        '<span class=\"option-text\">' + labels[i] + ') ' + opt + '<\/span>' +\n                        '<\/div>';\n            });\n\n            DOM.optionsGrid.innerHTML = html;\n\n            \/\/ Add click + keyboard handlers to options\n            var options = DOM.optionsGrid.querySelectorAll('.option-item');\n            options.forEach(function(opt) {\n                opt.addEventListener('click', function() {\n                    var optIdx = parseInt(this.getAttribute('data-index'));\n                    self.selectOption(index, optIdx);\n                });\n                opt.addEventListener('keydown', function(e) {\n                    if (e.key === 'Enter' || e.key === ' ') {\n                        e.preventDefault();\n                        var optIdx = parseInt(this.getAttribute('data-index'));\n                        self.selectOption(index, optIdx);\n                    }\n                });\n            });\n\n            this.updateNavButtons();\n        },\n\n        selectOption: function(qIdx, optIdx) {\n            if (this.quizFinished) return;\n            this.answers[qIdx] = optIdx;\n\n            \/\/ Just toggle the selection state on the existing option\n            \/\/ elements instead of re-rendering - keeps clicks snappy and\n            \/\/ avoids re-triggering the entrance animation on every tap.\n            var options = DOM.optionsGrid.querySelectorAll('.option-item');\n            options.forEach(function(opt) {\n                var idx = parseInt(opt.getAttribute('data-index'));\n                var isSelected = idx === optIdx;\n                opt.classList.toggle('selected', isSelected);\n                opt.setAttribute('aria-checked', isSelected);\n            });\n\n            this.updateNavButtons();\n        },\n\n        \/\/ Forward navigation (next \/ submit) is locked until the CURRENT\n        \/\/ question has an answer selected. Going back is always allowed.\n        updateNavButtons: function() {\n            DOM.prevBtn.disabled = this.currentQuestion === 0;\n\n            var answered = this.answers[this.currentQuestion] !== null;\n\n            if (this.currentQuestion === 9) {\n                DOM.nextBtn.classList.add('hidden');\n                DOM.submitBtn.classList.remove('hidden');\n                DOM.submitBtn.disabled = !answered;\n            } else {\n                DOM.nextBtn.classList.remove('hidden');\n                DOM.submitBtn.classList.add('hidden');\n                DOM.nextBtn.disabled = !answered;\n            }\n        },\n\n        nextQuestion: function() {\n            \/\/ Guard against any programmatic bypass of the disabled button -\n            \/\/ the user must answer the current question before moving on.\n            if (this.answers[this.currentQuestion] === null) {\n                return;\n            }\n            if (this.currentQuestion < 9) {\n                this.showQuestion(this.currentQuestion + 1);\n            }\n        },\n\n        previousQuestion: function() {\n            if (this.currentQuestion > 0) {\n                this.showQuestion(this.currentQuestion - 1);\n            }\n        },\n\n        submitQuiz: function() {\n            if (this.quizFinished) return;\n\n            clearInterval(this.timerInterval);\n            this.quizFinished = true;\n            this.timeUsed = 300 - this.timeLeft;\n\n            DOM.quizSection.classList.add('hidden');\n            DOM.resultSection.classList.remove('hidden');\n            DOM.resultSection.scrollIntoView({ behavior: 'smooth', block: 'start' });\n            DOM.resultSection.focus({ preventScroll: true });\n\n            \/\/ Show score immediately - no need to wait for OTP\/registration.\n            \/\/ A live spinner (instead of a static '...') makes the short wait\n            \/\/ for the server round-trip feel responsive rather than stuck.\n            var answeredCount = this.answers.filter(function(a) { return a !== null; }).length;\n            DOM.scoreDisplay.innerHTML = '<span class=\"loading-spinner score-spinner\" aria-hidden=\"true\"><\/span>';\n            DOM.scoreDisplay.setAttribute('aria-busy', 'true');\n            DOM.scoreDetails.textContent = '\u062f\u0631 \u062d\u0627\u0644 \u0645\u062d\u0627\u0633\u0628\u0647 \u0627\u0645\u062a\u06cc\u0627\u0632...';\n\n            var self = this;\n            this.callAjax('anarestan_calculate_score', { answers: JSON.stringify(this.answers) })\n                .then(function(res) {\n                    DOM.scoreDisplay.removeAttribute('aria-busy');\n                    if (res.success) {\n                        self.lastScore = res.data.score;\n                        self.revealScore(res.data.score);\n                        DOM.scoreDetails.textContent =\n                            toPersianDigits(res.data.correct) + ' \u067e\u0627\u0633\u062e \u0635\u062d\u06cc\u062d \u0627\u0632 \u06f1\u06f0 \u0633\u0624\u0627\u0644 \u2022 ' +\n                            toPersianDigits(answeredCount) + ' \u0633\u0624\u0627\u0644 \u067e\u0627\u0633\u062e \u062f\u0627\u062f\u0647 \u0634\u062f\u0647';\n                    } else {\n                        DOM.scoreDisplay.textContent = '\u2014';\n                        self.showError('\u062e\u0637\u0627 \u062f\u0631 \u0645\u062d\u0627\u0633\u0628\u0647 \u0627\u0645\u062a\u06cc\u0627\u0632. \u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u062d\u0627\u0633\u0628\u0647 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.');\n                    }\n                })\n                .catch(function() {\n                    DOM.scoreDisplay.removeAttribute('aria-busy');\n                    DOM.scoreDisplay.textContent = '\u2014';\n                    self.showError('\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631. \u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0647\u0646\u06af\u0627\u0645 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0645\u062d\u0627\u0633\u0628\u0647 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.');\n                });\n        },\n\n        revealScore: function(score) {\n            DOM.scoreDisplay.textContent = toPersianDigits(score);\n            DOM.scoreDisplay.classList.remove('score-reveal');\n            void DOM.scoreDisplay.offsetWidth;\n            DOM.scoreDisplay.classList.add('score-reveal');\n        },\n\n        setupMobileInput: function() {\n            DOM.mobileInput.addEventListener('input', function() {\n                this.value = toEnglishDigits(this.value).replace(\/[^0-9]\/g, '');\n                this.classList.remove('input-error');\n            });\n            DOM.fullNameInput.addEventListener('input', function() {\n                this.classList.remove('input-error');\n            });\n        },\n\n        setupOTPInputs: function() {\n            var self = this;\n\n            DOM.otpInputs.forEach(function(inp, i) {\n                inp.addEventListener('input', function(e) {\n                    var val = toEnglishDigits(inp.value);\n                    val = val.replace(\/[^0-9]\/g, '');\n                    inp.value = val.charAt(0) || '';\n\n                    if (inp.value.length === 1 && i < 3) {\n                        DOM.otpInputs[i + 1].focus();\n                    }\n\n                    self.maybeAutoSubmitOTP();\n                });\n\n                inp.addEventListener('keydown', function(e) {\n                    if (e.key === 'Backspace' && !this.value && i > 0) {\n                        e.preventDefault();\n                        DOM.otpInputs[i - 1].focus();\n                        DOM.otpInputs[i - 1].value = '';\n                    } else if (e.key === 'ArrowLeft' && i > 0) {\n                        e.preventDefault();\n                        DOM.otpInputs[i - 1].focus();\n                    } else if (e.key === 'ArrowRight' && i < 3) {\n                        e.preventDefault();\n                        DOM.otpInputs[i + 1].focus();\n                    } else if (e.key === 'Enter') {\n                        e.preventDefault();\n                        self.verifyOTP();\n                    }\n                });\n\n                inp.addEventListener('paste', function(e) {\n                    e.preventDefault();\n                    var pasted = (e.clipboardData || window.clipboardData).getData('text');\n                    pasted = toEnglishDigits(pasted);\n                    pasted = pasted.replace(\/[^0-9]\/g, '');\n\n                    if (pasted.length >= 4) {\n                        for (var j = 0; j < 4; j++) {\n                            DOM.otpInputs[j].value = pasted.charAt(j) || '';\n                        }\n                        DOM.otpInputs[3].focus();\n                    } else if (pasted.length > 0) {\n                        for (var j = 0; j < pasted.length && i + j < 4; j++) {\n                            DOM.otpInputs[i + j].value = pasted.charAt(j);\n                        }\n                        var nextIndex = Math.min(i + pasted.length, 3);\n                        DOM.otpInputs[nextIndex].focus();\n                    }\n                    self.maybeAutoSubmitOTP();\n                });\n            });\n        },\n\n        maybeAutoSubmitOTP: function() {\n            var code = DOM.otpInputs.map(function(inp) { return inp.value; }).join('');\n            if (code.length === 4 && !this.isSubmitting) {\n                this.verifyOTP();\n            }\n        },\n\n        \/\/ ===== AJAX HELPER =====\n        callAjax: function(action, params) {\n            var config = getAjaxConfig();\n            var formData = new URLSearchParams();\n            formData.append('action', action);\n            formData.append('nonce', config.nonce);\n\n            Object.keys(params).forEach(function(k) {\n                formData.append(k, params[k]);\n            });\n\n            return fetch(config.ajax_url, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n                body: formData.toString()\n            }).then(function(response) {\n                if (!response.ok) {\n                    throw new Error('HTTP error ' + response.status);\n                }\n                return response.json();\n            });\n        },\n\n        \/\/ ===== REGISTRATION FUNCTIONS =====\n        registerUser: function() {\n            if (this.isSubmitting) return;\n\n            var mobile = toEnglishDigits(DOM.mobileInput.value.trim());\n            DOM.mobileInput.value = mobile;\n            var mobileClean = mobile.replace(\/\\D\/g, '');\n            var fullName = DOM.fullNameInput.value.trim();\n\n            \/\/ Validate with inline field highlighting\n            DOM.mobileInput.classList.remove('input-error');\n            DOM.fullNameInput.classList.remove('input-error');\n\n            if (!mobileClean || !fullName) {\n                if (!mobileClean) DOM.mobileInput.classList.add('input-error');\n                if (!fullName) DOM.fullNameInput.classList.add('input-error');\n                return this.showError('\u0644\u0637\u0641\u0627\u064b \u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0646\u0627\u0645 \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.');\n            }\n            if (!\/^09\\d{9}$\/.test(mobileClean)) {\n                DOM.mobileInput.classList.add('input-error');\n                return this.showError('\u0634\u0645\u0627\u0631\u0647 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0645\u0639\u062a\u0628\u0631 \u0646\u06cc\u0633\u062a. \u0645\u062b\u0627\u0644: \u06f0\u06f9\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9');\n            }\n            if (fullName.length < 3) {\n                DOM.fullNameInput.classList.add('input-error');\n                return this.showError('\u0646\u0627\u0645 \u0648 \u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc \u0628\u0627\u06cc\u062f \u062d\u062f\u0627\u0642\u0644 \u06f3 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0628\u0627\u0634\u062f.');\n            }\n\n            this.mobileNumber = mobileClean;\n            this.hideMessages();\n\n            var self = this;\n            this.setLoading(DOM.registerBtn, true, '\u23f3 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0631\u0633\u0627\u0644 \u06a9\u062f...');\n\n            this.callAjax('anarestan_send_otp', { mobile: mobileClean })\n                .then(function(res) {\n                    self.setLoading(DOM.registerBtn, false);\n\n                    if (res.success) {\n                        DOM.otpSection.style.display = 'block';\n                        DOM.registerBtn.disabled = true;\n                        self.showSuccess('\u2705 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 ' + mobileClean + ' \u0627\u0631\u0633\u0627\u0644 \u0634\u062f.');\n                        DOM.registerBtn.textContent = '\ud83d\udcf1 \u06a9\u062f \u0627\u0631\u0633\u0627\u0644 \u0634\u062f';\n                        DOM.registerBtn.classList.add('btn-sent');\n                        self.startOtpResendCountdown(60);\n\n                        setTimeout(function() {\n                            DOM.otpInputs[0].focus();\n                            DOM.otpSection.scrollIntoView({ behavior: 'smooth', block: 'center' });\n                        }, 100);\n                    } else {\n                        var msg = (res.data && res.data.message) ? res.data.message : '\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f.';\n                        self.showError(msg);\n                        self.setLoading(DOM.registerBtn, false, '\ud83d\udcdd \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f');\n                    }\n                })\n                .catch(function(err) {\n                    self.setLoading(DOM.registerBtn, false, '\ud83d\udcdd \u062b\u0628\u062a \u0646\u0627\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f');\n                    console.error('Anarestan Quiz - Send OTP Error:', err);\n                    self.showError('\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631. \u0644\u0637\u0641\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f.');\n                });\n        },\n\n        startOtpResendCountdown: function(seconds) {\n            var self = this;\n            this.otpResendSeconds = seconds;\n            DOM.resendOtpBtn.disabled = true;\n            this.updateOtpResendLabel();\n\n            clearInterval(this.otpResendInterval);\n            this.otpResendInterval = setInterval(function() {\n                self.otpResendSeconds--;\n                self.updateOtpResendLabel();\n                if (self.otpResendSeconds <= 0) {\n                    clearInterval(self.otpResendInterval);\n                    DOM.resendOtpBtn.disabled = false;\n                    DOM.otpTimerDisplay.textContent = '';\n                }\n            }, 1000);\n        },\n\n        updateOtpResendLabel: function() {\n            if (this.otpResendSeconds > 0) {\n                DOM.otpTimerDisplay.textContent = '\u0627\u0631\u0633\u0627\u0644 \u0645\u062c\u062f\u062f \u062a\u0627 ' + toPersianDigits(this.otpResendSeconds) + ' \u062b\u0627\u0646\u06cc\u0647 \u062f\u06cc\u06af\u0631 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f';\n            }\n        },\n\n        verifyOTP: function() {\n            if (this.isSubmitting) return;\n\n            var self = this;\n            var code = DOM.otpInputs.map(function(inp) {\n                return toEnglishDigits(inp.value || '');\n            }).join('');\n\n            if (code.length !== 4) {\n                return this.showError('\u0644\u0637\u0641\u0627\u064b \u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f \u06f4 \u0631\u0642\u0645\u06cc \u0631\u0627 \u06a9\u0627\u0645\u0644 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.');\n            }\n\n            var fullName = DOM.fullNameInput.value.trim();\n\n            this.setLoading(DOM.verifyOtpBtn, true, '\u23f3 \u062f\u0631 \u062d\u0627\u0644 \u062a\u0627\u06cc\u06cc\u062f \u0648 \u062b\u0628\u062a\u200c\u0646\u0627\u0645...');\n\n            \/\/ Combined endpoint: verifies OTP AND saves the result in a single round-trip\n            this.callAjax('anarestan_verify_and_save', {\n                mobile: this.mobileNumber,\n                otp: code,\n                fullName: fullName,\n                answers: JSON.stringify(this.answers),\n                timeUsed: this.timeUsed\n            }).then(function(res) {\n                self.setLoading(DOM.verifyOtpBtn, false);\n\n                if (res.success) {\n                    self.otpVerified = true;\n                    clearInterval(self.otpResendInterval);\n                    DOM.otpTimerDisplay.textContent = '';\n                    DOM.scoreDisplay.removeAttribute('aria-busy');\n                    self.revealScore(res.data.score);\n                    DOM.scoreDetails.textContent =\n                        toPersianDigits(res.data.correct) + ' \u067e\u0627\u0633\u062e \u0635\u062d\u06cc\u062d \u0627\u0632 ' + toPersianDigits(res.data.total) + ' \u0633\u0624\u0627\u0644';\n                    self.showFinalMessage();\n                } else {\n                    var msg = (res.data && res.data.message) ? res.data.message : '\u06a9\u062f \u062a\u0627\u06cc\u06cc\u062f \u0627\u0634\u062a\u0628\u0627\u0647 \u0627\u0633\u062a.';\n                    self.showError(msg);\n                    self.setLoading(DOM.verifyOtpBtn, false, '\u2705 \u062a\u0627\u06cc\u06cc\u062f \u06a9\u062f');\n\n                    DOM.otpInputs.forEach(function(inp) { inp.value = ''; });\n                    DOM.otpInputs[0].focus();\n                }\n            }).catch(function(err) {\n                self.setLoading(DOM.verifyOtpBtn, false, '\u2705 \u062a\u0627\u06cc\u06cc\u062f \u06a9\u062f');\n                console.error('Anarestan Quiz - Verify\/Save Error:', err);\n                self.showError('\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631. \u0644\u0637\u0641\u0627\u064b \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f.');\n            });\n        },\n\n        resendOTP: function() {\n            if (this.isSubmitting || !this.mobileNumber || DOM.resendOtpBtn.disabled) return;\n\n            var self = this;\n            this.setLoading(DOM.resendOtpBtn, true, '\u23f3 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0631\u0633\u0627\u0644...');\n\n            this.callAjax('anarestan_resend_otp', { mobile: this.mobileNumber })\n                .then(function(res) {\n                    self.setLoading(DOM.resendOtpBtn, false, '\ud83d\udd04 \u0627\u0631\u0633\u0627\u0644 \u0645\u062c\u062f\u062f \u06a9\u062f');\n\n                    if (res.success) {\n                        self.showSuccess('\u2705 \u06a9\u062f \u062c\u062f\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0634\u062f.');\n                        self.startOtpResendCountdown(60);\n                    } else {\n                        var msg = (res.data && res.data.message) ? res.data.message : '\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u062c\u062f\u062f \u06a9\u062f.';\n                        self.showError(msg);\n                        DOM.resendOtpBtn.disabled = false;\n                    }\n                })\n                .catch(function(err) {\n                    self.setLoading(DOM.resendOtpBtn, false, '\ud83d\udd04 \u0627\u0631\u0633\u0627\u0644 \u0645\u062c\u062f\u062f \u06a9\u062f');\n                    console.error('Anarestan Quiz - Resend OTP Error:', err);\n                    self.showError('\u062e\u0637\u0627 \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u0633\u0631\u0648\u0631.');\n                    DOM.resendOtpBtn.disabled = false;\n                });\n\n            DOM.otpInputs.forEach(function(inp) { inp.value = ''; });\n            DOM.otpInputs[0].focus();\n        },\n\n        showFinalMessage: function() {\n            var fullName = DOM.fullNameInput.value.trim();\n\n            DOM.registrationForm.innerHTML =\n                '<div style=\"text-align:center;padding:40px 20px;\">' +\n                '<div style=\"font-size:64px;margin-bottom:20px;\">\ud83c\udf89<\/div>' +\n                '<h3 style=\"font-size:24px;margin-bottom:15px;\">\u062b\u0628\u062a \u0646\u0627\u0645 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f!<\/h3>' +\n                '<p style=\"font-size:16px;color:rgba(255,255,255,0.8);\">' +\n                fullName + ' \u0639\u0632\u06cc\u0632\u060c \u0646\u062a\u06cc\u062c\u0647 \u0634\u0645\u0627 \u062b\u0628\u062a \u0634\u062f.<br>\u0628\u0631\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u06cc\u0627\u0645\u06a9 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f.<\/p><\/div>';\n        },\n\n        \/\/ ===== UI HELPERS =====\n        setLoading: function(button, isLoading, text) {\n            this.isSubmitting = isLoading;\n            button.disabled = isLoading;\n\n            if (text) {\n                if (isLoading) {\n                    button.innerHTML = '<span class=\"loading-spinner\"><\/span>' + text;\n                } else {\n                    button.textContent = text;\n                }\n            }\n        },\n\n        showError: function(msg) {\n            if (DOM.errorMessage) {\n                DOM.errorMessage.textContent = msg;\n                DOM.errorMessage.style.display = 'block';\n                clearTimeout(this._errorTimeout);\n                this._errorTimeout = setTimeout(function() {\n                    DOM.errorMessage.style.display = 'none';\n                }, 6000);\n            }\n            if (DOM.successMessage) {\n                DOM.successMessage.style.display = 'none';\n            }\n        },\n\n        showSuccess: function(msg) {\n            if (DOM.successMessage) {\n                DOM.successMessage.textContent = msg;\n                DOM.successMessage.style.display = 'block';\n                clearTimeout(this._successTimeout);\n                this._successTimeout = setTimeout(function() {\n                    DOM.successMessage.style.display = 'none';\n                }, 6000);\n            }\n            if (DOM.errorMessage) {\n                DOM.errorMessage.style.display = 'none';\n            }\n        },\n\n        hideMessages: function() {\n            if (DOM.errorMessage) DOM.errorMessage.style.display = 'none';\n            if (DOM.successMessage) DOM.successMessage.style.display = 'none';\n        }\n    };\n\n    \/\/ ===== COPY BUTTON =====\n    function initCopyButton() {\n        DOM.copyBtn.addEventListener('click', function() {\n            var code = DOM.discountCode.innerText;\n\n            if (navigator.clipboard && navigator.clipboard.writeText) {\n                navigator.clipboard.writeText(code).then(function() {\n                    showCopyFeedback();\n                }).catch(function() {\n                    fallbackCopy(code);\n                });\n            } else {\n                fallbackCopy(code);\n            }\n        });\n    }\n\n    function fallbackCopy(text) {\n        var input = document.createElement('input');\n        input.value = text;\n        input.style.position = 'fixed';\n        input.style.opacity = '0';\n        document.body.appendChild(input);\n        input.select();\n\n        try {\n            document.execCommand('copy');\n            showCopyFeedback();\n        } catch(e) {\n            console.error('Copy failed:', e);\n        }\n\n        document.body.removeChild(input);\n    }\n\n    function showCopyFeedback() {\n        DOM.copyFeedback.classList.add('show');\n        clearTimeout(window._copyFeedbackTimeout);\n        window._copyFeedbackTimeout = setTimeout(function() {\n            DOM.copyFeedback.classList.remove('show');\n        }, 2000);\n    }\n\n    \/\/ ===== ENTER QUIZ BUTTON =====\n    function initEnterQuizButton() {\n        DOM.enterQuizBtn.addEventListener('click', function() {\n            DOM.campaignPage.classList.add('hidden');\n            DOM.quizPage.classList.remove('hidden');\n            quiz.init();\n            \/\/ Scroll to the top of the quiz so the user sees question 1 immediately\n            DOM.quizPage.scrollIntoView({ behavior: 'smooth', block: 'start' });\n            DOM.quizPage.focus({ preventScroll: true });\n        });\n    }\n\n    \/\/ ===== INITIALIZATION =====\n    function init() {\n        initDom();\n        initCopyButton();\n        initEnterQuizButton();\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u2728 \u0633\u0641\u0631 \u0628\u0647 \u062f\u0646\u06cc\u0627\u06cc \u06a9\u062a\u0627\u0628 \u0622\u063a\u0627\u0632 \u0634\u062f \u2728 \u062f\u0648 \u06a9\u062a\u0627\u0628 \u062c\u0630\u0627\u0628\u060c \u06cc\u06a9 \u0686\u0627\u0644\u0634 \u0647\u06cc\u062c\u0627\u0646\u200c\u0627\u0646\u06af\u06cc\u0632 \u0648 \u06a9\u0644\u06cc \u062c\u0627\u06cc\u0632\u0647 \u062f\u0631 \u0627\u0646\u062a\u0638\u0627\u0631 \u062a\u0648\u0633\u062a! \ud83c\udf89 \ud83d\udcd6 \u06a9\u0645\u06cc\u06a9 &#8220;\u0645\u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0631\u0627\u0628\u06cc\u0646\u0633\u0648\u0646 \u06a9\u0631\u0648\u0632\u0648\u0626\u0647&#8221; \u0631\u0648 \u0628\u062e\u0648\u0646 \ud83c\udfa7 \u06a9\u062a\u0627\u0628 \u0635\u0648\u062a\u06cc &#8220;\u062a\u0648 \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0647\u0633\u062a\u06cc&#8221; \u0631\u0648 \u06af\u0648\u0634 \u06a9\u0646 \ud83d\udcdd \u062d\u062f\u0627\u0642\u0644 \u0628\u0647 5 \u0633\u0624\u0627\u0644 \u062a\u0633\u062a\u06cc \u0627\u0632 \u06a9\u062a\u0627\u0628 \u0647\u0627 \u062f\u0631\u0633\u062a \u062c\u0648\u0627\u0628 \u0628\u062f\u0647 \ud83c\udfaf \u0627\u0645\u062a\u06cc\u0627\u0632 \u0628\u06af\u06cc\u0631 \u0648 \u0634\u0627\u0646\u0633 \u0628\u0631\u0646\u062f\u0647 [&hellip;]<\/p>\n","protected":false},"author":608,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6651","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/pages\/6651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/users\/608"}],"replies":[{"embeddable":true,"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6651"}],"version-history":[{"count":132,"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/pages\/6651\/revisions"}],"predecessor-version":[{"id":6830,"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=\/wp\/v2\/pages\/6651\/revisions\/6830"}],"wp:attachment":[{"href":"https:\/\/anarestan.com\/jayezebazar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}