














{"id":459,"date":"2025-09-26T14:21:23","date_gmt":"2025-09-26T14:21:23","guid":{"rendered":"https:\/\/buddyupapi-staging.us35.cdn-alpha.com\/?page_id=459"},"modified":"2025-09-26T14:21:23","modified_gmt":"2025-09-26T14:21:23","slug":"register","status":"publish","type":"page","link":"https:\/\/staging.buddyupgo.com\/register\/","title":{"rendered":"Register"},"content":{"rendered":"<div class=\"buddyUpPjaxContainer\" data-buddyup-pjax-container=\"1\"><style>#accountEditPagesWrapper {\n    position: relative;\n    max-width: 600px;\n    margin: 0 auto;\n}\n\n#buddyUpEditProfileForm {\n    padding: 10px;\n}\n\n#buddyUpEditProfileForm.buddyUpPagesWrapper {\n    overflow: visible;\n    white-space: normal;\n}\n\n#buddyUpEditProfileForm .buddyUpPage:not(.hidden) {\n    display: block;\n    white-space: normal;\n    padding-bottom: calc(var(--buddyup-mobile-nav-height, 70px) + env(safe-area-inset-bottom, 0px) + 24px);\n}\n\n#buddyUpEditProfileForm .buddyUpPage {\n    min-height: 365px;\n}\n\nh2 {\n    font-weight: bold;\n}\n\n.buddyUp form,\n.buddyUp form input[type=\"submit\"] {\n    margin-bottom: 0;\n}\n\n.backButton {\n    border: none !important;\n    margin: 0;\n    transform: translateX(-10px);\n}\n\n\/* Page steps *\/\n#pageSteps {\n    --steps-width: 500px;\n    --steps-count: 3;\n    display: flex;\n    justify-content: space-between;\n    width: var(--steps-width);\n    margin: 0 auto 4rem;\n    user-select: none;\n    font-size: .95rem;\n}\n\n#pageSteps > div {\n    position: relative;\n}\n\n#pageSteps > div > span.stepNumber {\n    display: inline-block;\n    margin-left: -1px;\n    \n    line-height: 0;\n    height: 27px;\n    width: 27px;\n    border-radius: 500px;\n    background: #f1f1f1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    z-index: 3;\n}\n\n#pageSteps .stepName {\n    position: absolute;\n    top: calc(100% + 5px);\n    text-wrap: nowrap;\n    left: 50%;\n    transform: translateX(-50%);\n    opacity: .5;\n}\n\n#pageSteps > div.activePageStep .stepName {\n    opacity: 1;\n    transition: opacity .1s .45s;\n}\n\n#pageSteps > div:not(:first-of-type):before,\n#pageSteps > div:not(:first-of-type):after {\n    content: '';\n    width: calc(var(--steps-width) \/ var(--steps-count));\n    height: 5px;\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n}\n\n#pageSteps > div:not(:first-of-type):after {\n    right: 95%;\n    width: calc(var(--steps-width) \/ var(--steps-count));\n    background: #f1f1f1;\n}\n\n#pageSteps > div:not(:first-of-type):before {\n    --offset: calc(var(--steps-width) \/ var(--steps-count));\n    left: calc(var(--offset) * -1);\n    background: var(--primary-color);\n    width: 0;\n    z-index: 1;\n    transition: width .4s;\n}\n\n#pageSteps > .activePageStep > span.stepNumber {\n    background: var(--primary-color);\n    color: white;\n    font-weight: bold;\n    transition: background .01s .45s, color .01s .45s, font-weight .01s .45s;\n}\n\n#pageSteps > div.activePageStep:before {\n    width: calc(var(--steps-width) \/ var(--steps-count));\n    transition: width .5s;\n}\n\n@media (max-width: 600px){\n    #pageSteps {\n        --steps-width: 400px;\n    }\n}\n\n@media (max-width: 500px){\n    #pageSteps {\n        --steps-width: 300px;\n    }\n\n    #pageSteps .stepName {\n        display: none;\n    }\n}\n\n@media (max-width: 330px){\n    #pageSteps {\n        --steps-width: 250px;\n    }\n}\n\n\/* Page 1 - Welcome *\/\n.buddyUpRegisterStartingMessageHeading {\n    font-size: clamp(2.1rem, 6vw, 3.1rem);\n    line-height: 1.08;\n    font-weight: bold;\n    margin-bottom: .8rem;\n}\n\n.buddyUpRegisterStartingMessage {\n    font-size: clamp(1rem, 2.8vw, 1.2rem);\n}\n\n.buddyUpRegisterIntentOptions {\n    display: flex;\n    flex-wrap: wrap;\n    gap: .45rem;\n    margin-top: .35rem;\n}\n\n.buddyUpRegisterIntentOption {\n    margin-top: 0;\n    padding: .4rem .7rem;\n}\n\n.buddyUpRegisterIntentOption.isSelected {\n    background: var(--primary-color) !important;\n    color: #fff !important;\n    border-color: var(--primary-color) !important;\n}\n\n.buddyUpInputHint {\n    margin: .38rem 0 0;\n    font-size: .82rem;\n    line-height: 1.35;\n    color: #596273;\n}\n\n.buddyUpInputHint.isError {\n    color: #8b2b2b;\n}\n\n.buddyUpInputHint.isSuccess {\n    color: #23623a;\n}\n\n.loginLink {\n    font-weight: bold;\n    color: var(--primary-color);\n}\n\n#registerAgeYears {\n    background: #f6f7f9;\n    color: #596273;\n}\n\n.buddyUpAgeFallbackHint {\n    margin: .45rem 0 0;\n    font-size: .82rem;\n    line-height: 1.35;\n    color: #596273;\n}\n\n.buddyUpRegisterPasswordInputWrapper {\n    position: relative;\n}\n\n.buddyUpRegisterDobInputWrapper {\n    position: relative;\n}\n\n.buddyUpRegisterDobInputWrapper input[type=\"text\"] {\n    padding-right: 3rem;\n}\n\n.buddyUpRegisterPasswordInputWrapper input {\n    padding-right: 3rem;\n}\n\n.buddyUpDateToggleButton,\n.buddyUpPasswordToggleButton {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 44px;\n    min-width: 44px;\n    height: 44px;\n    min-height: 44px;\n    transform: translateY(-50%);\n    border: 0;\n    background: transparent;\n    color: #596273;\n    padding: 0;\n    line-height: 1;\n    cursor: pointer;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.buddyUpDateToggleButton:hover,\n.buddyUpDateToggleButton:focus-visible,\n.buddyUpPasswordToggleButton:hover,\n.buddyUpPasswordToggleButton:focus-visible {\n    color: var(--primary-color);\n}\n\n.buddyUpRegisterDobPickerInput {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    transform: translateY(-50%);\n    width: 44px;\n    height: 44px;\n    opacity: 0;\n    pointer-events: auto;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    cursor: pointer;\n    z-index: 2;\n}\n\n\n\/* Page 3 - Profile Setup *\/\n.buddyUpProfileInputWrapper {\n    margin-bottom: 1.5rem;\n}\n\n.buddyUp .buddyUpProfileInputWrapper #label-profileImage {\n    height: 250px;\n    width: 264px;\n}\n\n.buddyUpStockProfileGallery {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: .55rem;\n    margin-top: .8rem;\n}\n\n.buddyUpStockProfileHeader {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: .8rem;\n    margin-top: .65rem;\n}\n\n.buddyUpStockProfileTitle {\n    font-weight: 700;\n    font-size: .92rem;\n}\n\n.buddyUpStockProfileStatus {\n    margin-top: .5rem;\n    font-size: .86rem;\n    color: #3d3d3d;\n}\n\n.buddyUpStockProfileStatus.isError {\n    color: #8b2b2b;\n}\n\n.buddyUpStockProfileInlinePicker {\n    margin-top: .7rem;\n    display: grid;\n    gap: .45rem;\n    justify-items: start;\n}\n\n.buddyUpStockProfileGallery[data-empty=\"1\"] {\n    min-height: 85px;\n}\n\n.buddyUpStockProfileChoice {\n    appearance: none;\n    border: 2px solid rgba(0, 0, 0, .08);\n    background: #fff;\n    border-radius: 10px;\n    padding: .2rem;\n    margin: 0;\n    cursor: pointer;\n    transition: border-color .12s ease, transform .12s ease;\n}\n\n.buddyUpStockProfileChoice:hover {\n    border-color: var(--primary-color);\n    transform: translateY(-1px);\n}\n\n.buddyUpStockProfileChoice.isSelected {\n    border-color: var(--primary-color);\n    box-shadow: 0 0 0 2px rgba(66, 185, 131, .2);\n}\n\n.buddyUpStockProfileChoice img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 1 \/ 1;\n    object-fit: cover;\n    border-radius: 8px;\n}\n\n.buddyUpStockProfileChoice span {\n    display: block;\n    font-size: .7rem;\n    font-weight: 600;\n    line-height: 1.2;\n    padding: .25rem .1rem .15rem;\n}\n\n.buddyUp .buddyUpProfileInputWrapper #label-profileImage.buddyUpBackgroundUploaded {\n    align-items: end;\n}\n\n#label-profileImage.buddyUpUploadLocked {\n    opacity: .7;\n}\n\n#label-profileImage.buddyUpUploadLocked .buddyUpFileUploadButton,\n#label-profileImage.buddyUpUploadLocked .buddyUpFileUploadCropButton {\n    opacity: .5;\n    pointer-events: none;\n}\n\n#label-profileImage.buddyUpUploadLocked .buddyUpFileUploadButtonsWrapper,\n#label-profileImage.buddyUpUploadLocked .buddyUpFileUploadText {\n    display: none;\n}\n\n.buddyUp label#label-profileImage.buddyUpFileUpload.buddyUpBackgroundUploaded::after {\n    display: none;\n}\n\n.privacyInputWrapper {\n    background: var(--buddyup-background);\n    padding: .8rem 1rem;\n    border-radius: var(--border-radius);\n    padding: 15px 20px;\n}\n\n.buddyUp textarea {\n    margin-bottom: 1rem;\n}\n\n.requiredMessage {\n    font-weight: normal;\n    color: red;\n    font-size: .9rem;\n}\n\n#buddyUpRegisterPage3 #formIncorrectInfo {\n    margin-bottom: .75rem;\n}\n\n@media (max-width: 500px) {\n    .flexCollapseXS {\n        gap: 0;\n    }\n\n    .buddyUpStockProfileGallery {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n}\n\n\/* Email Verify Message - Post Register *\/\n#buddyUpVerifyEmailWrapper {\n    background: var(--buddyup-background);\n    text-align: center;\n    padding: 2rem;\n}\n\n#buddyUpVerifyEmailWrapper i.fa-envelope-open-text {\n    font-size: 4rem;\n    color: var(--primary-color);\n    margin: .5rem 0 .2rem;\n}\n\n#buddyUpVerifyEmailWrapper h1 {\n    font-weight: bold;\n    font-size: 2rem;\n    margin-bottom:1rem;\n}\n\n#buddyUpVerifyEmailWrapper button {\n    margin: .5rem 0;\n}\n\n#buddyUpVerifyEmailWrapper button[disabled=\"disabled\"] {\n    border: 2px solid #c4c4c4 !important;\n    background: #c4c4c4 !important;\n    color: #2E2E2E !important;\n}\n\n#buddyUpVerifyEmailWrapper #buddyUpEmailResendCountdown {\n    font-size: .9rem;\n    font-style: italic;\n}\n\n\/* Registration flow v2 *\/\n.buddyUpRegisterFlowV2 {\n    max-width: 620px;\n    margin: 0 auto;\n    padding: .35rem .25rem;\n}\n\n.buddyUpGoogleAuth {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    width: 100%;\n    margin: .75rem 0 .25rem;\n}\n\n.buddyUpGoogleButton {\n    display: flex;\n    justify-content: center;\n    width: 100%;\n    min-height: 44px;\n}\n\n.buddyUpGoogleStatus {\n    min-height: 1.25rem;\n    margin: .4rem 0 0;\n    color: #9c2f2f;\n    font-size: .9rem;\n    text-align: center;\n}\n\n.buddyUpGoogleStatus.is-success {\n    color: #236b3a;\n}\n\n.buddyUpAuthDivider {\n    display: flex;\n    align-items: center;\n    gap: .75rem;\n    margin: .75rem 0 1rem;\n    color: #666;\n    font-size: .86rem;\n}\n\n.buddyUpAuthDivider::before,\n.buddyUpAuthDivider::after {\n    content: '';\n    flex: 1;\n    height: 1px;\n    background: #d8d8d8;\n}\n\n.buddyUpRegisterProgressWrap {\n    margin: .5rem auto 1.2rem;\n    width: min(560px, calc(100vw - 1.4rem));\n}\n\n.buddyUpRegisterProgressBarTrack {\n    width: 100%;\n    height: 7px;\n    border-radius: 999px;\n    background: rgba(0, 0, 0, .1);\n    overflow: hidden;\n}\n\n.buddyUpRegisterProgressBar {\n    display: block;\n    width: 0;\n    height: 100%;\n    border-radius: inherit;\n    background: linear-gradient(90deg, #2a6f63 0%, #4d9d5b 100%);\n    transition: width .28s ease;\n}\n\n.buddyUpRegisterProgressText {\n    margin: .45rem 0 0;\n    font-size: .86rem;\n    color: #4f5967;\n}\n\n.buddyUpRegisterFlowV2 #buddyUpEditProfileForm {\n    padding: 0 .2rem;\n}\n\n.buddyUpRegisterFlowV2 .buddyUpPage {\n    min-height: 420px;\n}\n\n.buddyUpRegisterStepCard {\n    width: min(560px, calc(100vw - 1.4rem));\n    margin: 0 auto;\n    padding: clamp(1rem, 2.6vw, 1.35rem);\n    border-radius: 20px;\n    background:\n        radial-gradient(circle at top right, rgba(119, 181, 123, .22), transparent 45%),\n        linear-gradient(180deg, rgba(255, 255, 255, .98) 0%, rgba(248, 251, 249, .98) 100%);\n    border: 1px solid rgba(34, 68, 63, .12);\n    box-shadow: 0 14px 36px rgba(24, 51, 44, .12);\n}\n\n.buddyUpRegisterStepCard h2 {\n    margin-bottom: .5rem;\n    font-size: clamp(1.55rem, 4.7vw, 2.1rem);\n    line-height: 1.12;\n}\n\n.buddyUpRegisterKicker {\n    margin: .1rem 0 .4rem;\n    font-size: .82rem;\n    letter-spacing: .07em;\n    text-transform: uppercase;\n    color: #335f57;\n    font-weight: 700;\n}\n\n.buddyUpRegisterStepLead {\n    margin: 0 0 1rem;\n    color: #556174;\n}\n\n.buddyUpRegisterFlowV2 .buddyUpInputWrapper {\n    margin-bottom: .95rem;\n}\n\n.buddyUpRegisterFlowV2 .buddyUpInputWrapper input {\n    border-radius: 14px;\n    border: 1px solid rgba(21, 38, 49, .2);\n    background: #fff;\n}\n\n.buddyUpRegisterFlowV2 .buddyUpInputWrapper textarea {\n    border-radius: 14px;\n    border: 1px solid rgba(21, 38, 49, .2);\n    background: #fff;\n    min-height: 110px;\n}\n\n.buddyUpRegisterFlowV2 .buddyInterestsInputWrapper {\n    margin-top: .35rem;\n}\n\n.buddyUpRegisterStepNav {\n    margin-top: 1rem;\n}\n\n.buddyUpRegisterStepNav .buddyUpButton1,\n.buddyUpRegisterStepNav .buddyUpButton3,\n.buddyUpRegisterStepNav input[type=\"submit\"] {\n    width: 100%;\n    min-height: 44px;\n}\n\n.buddyUpRegisterFootnote {\n    margin-top: .85rem;\n    font-size: .92rem;\n}\n\n.buddyUpRegisterFlowV2 .backButton {\n    margin-bottom: .65rem;\n    transform: none;\n}\n\n.buddyUpRegisterStepIn .buddyUpRegisterStepCard {\n    animation: buddyUpRegisterScreenIn .34s ease-out;\n}\n\n@keyframes buddyUpRegisterScreenIn {\n    0% {\n        opacity: 0;\n        transform: translateY(10px) scale(.985);\n    }\n    100% {\n        opacity: 1;\n        transform: translateY(0) scale(1);\n    }\n}\n\n@media (max-width: 640px) {\n    .buddyUpRegisterFlowV2 {\n        padding: .15rem .1rem;\n    }\n\n    .buddyUpRegisterFlowV2 .buddyUpPage {\n        min-height: 0;\n    }\n\n    .buddyUpRegisterStepCard {\n        border-radius: 16px;\n        box-shadow: 0 10px 22px rgba(24, 51, 44, .1);\n    }\n}\n<\/style>\n<section id=\"accountEditPagesWrapper\" class=\"buddyUp hidden buddyUpRegisterFlowV2\">\n    <div class=\"buddyUpRegisterProgressWrap\" aria-live=\"polite\">\n        <div class=\"buddyUpRegisterProgressBarTrack\">\n            <span id=\"buddyUpRegisterProgressBar\" class=\"buddyUpRegisterProgressBar\"><\/span>\n        <\/div>\n        <p id=\"buddyUpRegisterProgressText\" class=\"buddyUpRegisterProgressText\">Step 1 of 7<\/p>\n    <\/div>\n\n    <form id=\"buddyUpEditProfileForm\" class=\"buddyUpPagesWrapper\" novalidate>\n        <input type=\"hidden\" id=\"registerDestination\" name=\"registerDestination\" value=\"\" \/>\n        <input type=\"hidden\" id=\"registerSourceScreen\" name=\"registerSourceScreen\" value=\"\" \/>\n\n        <div id=\"formIncorrectInfo\" class=\"buddyUpErrorMessage hidden\">There was an error registering your account. Please try again.<\/div>\n\n        <div id=\"buddyUpRegisterPage1\" class=\"buddyUpPage\" data-page=\"1\" data-step-label=\"Birthday\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <p class=\"buddyUpRegisterKicker\">Free account setup<\/p>\n                <h2>When is your birthday?<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">You must be 18+ to join BuddyUpGo.<\/p>\n\n                                    <div class=\"buddyUpGoogleAuth\">\n                        <div id=\"buddyUpGoogleRegisterButton\" class=\"buddyUpGoogleButton\" aria-label=\"Sign up with Google\"><\/div>\n                        <p id=\"buddyUpGoogleRegisterStatus\" class=\"buddyUpGoogleStatus\" aria-live=\"polite\"><\/p>\n                    <\/div>\n                    <div class=\"buddyUpAuthDivider\" role=\"separator\"><span>or continue with email<\/span><\/div>\n                \n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"registerDob\">Date of birth<\/label>\n                    <div class=\"buddyUpRegisterDobInputWrapper\">\n                        <input\n                            type=\"text\"\n                            id=\"registerDob\"\n                            name=\"registerDob\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"bday\"\n                            placeholder=\"MM\/DD\/YYYY\"\n                            aria-describedby=\"registerDobHint\"\n                            min=\"1916-07-30\"\n                            max=\"2008-07-30\"\n                            required\n                        \/>\n                        <button type=\"button\" id=\"registerDobCalendarButton\" class=\"buddyUpDateToggleButton\" aria-label=\"Open date picker\" title=\"Open calendar\">\n                            <i class=\"fa fa-solid fa-calendar-days fa-fw\" aria-hidden=\"true\"><\/i>\n                        <\/button>\n                        <input\n                            type=\"date\"\n                            id=\"registerDobPicker\"\n                            class=\"buddyUpRegisterDobPickerInput\"\n                            tabindex=\"-1\"\n                            aria-hidden=\"true\"\n                            min=\"1916-07-30\"\n                            max=\"2008-07-30\"\n                        \/>\n                    <\/div>\n                    <p id=\"registerDobHint\" class=\"buddyUpInputHint\">Your age is used only for eligibility and profile matching.<\/p>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage2\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n\n                <p class=\"buddyUpRegisterFootnote\">Already have an account? <a href=\"https:\/\/staging.buddyupgo.com\/login\/\" class=\"loginLink\">Go to login<\/a><\/p>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage2\" class=\"buddyUpPage hidden\" data-page=\"2\" data-step-label=\"Email\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage1\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2>What's your email?<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">We will use this to verify and secure your account.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"emailAddress\">Email address<\/label>\n                    <input type=\"email\" id=\"emailAddress\" placeholder=\"you@example.com\" autocomplete=\"email\" required \/>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage3\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage3\" class=\"buddyUpPage hidden\" data-page=\"3\" data-step-label=\"Profile\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage2\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2>Name and username<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">Set how your profile appears to other adventurers.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"fullName\">Full name<\/label>\n                    <input type=\"text\" id=\"fullName\" placeholder=\"First and last name\" autocomplete=\"name\" required \/>\n                <\/div>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"username\">Username<\/label>\n                    <input type=\"text\" id=\"username\" placeholder=\"Choose a username\" autocomplete=\"username\" required \/>\n                    <p id=\"registerUsernameHint\" class=\"buddyUpInputHint\">Lowercase letters, numbers, and underscores only.<\/p>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage4\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage4\" class=\"buddyUpPage hidden\" data-page=\"4\" data-step-label=\"Phone\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage3\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2>Best phone number?<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">Used for account support and optional SMS notifications.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"phoneNumber\">Phone number<\/label>\n                    <input type=\"tel\" id=\"phoneNumber\" placeholder=\"(555) 123-4567\" autocomplete=\"tel\" required \/>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage5\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage5\" class=\"buddyUpPage hidden\" data-page=\"5\" data-step-label=\"Password\">\n            <div id=\"buddyUpRegisterPasswordStep\" class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage4\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2 id=\"buddyUpRegisterPasswordTitle\">Create a password<\/h2>\n                <p id=\"buddyUpRegisterPasswordLead\" class=\"buddyUpRegisterStepLead\">Use at least 8 characters with both letters and numbers.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"password\">Password<\/label>\n                    <div class=\"buddyUpRegisterPasswordInputWrapper\">\n                        <input type=\"password\" id=\"password\" placeholder=\"Create a secure password\" autocomplete=\"new-password\" required \/>\n                        <button type=\"button\" id=\"registerShowPasswordButton\" class=\"buddyUpPasswordToggleButton\" aria-label=\"Show password\" aria-pressed=\"false\"><i class=\"fa fa-solid fa-eye fa-fw\"><\/i><\/button>\n                    <\/div>\n                    <p id=\"registerPasswordHint\" class=\"buddyUpInputHint\">At least 8 characters, with at least one letter and one number.<\/p>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage6\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage6\" class=\"buddyUpPage hidden\" data-page=\"6\" data-step-label=\"Location\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage5\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2>Where are you located?<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">Enter city, state, or zip so we can show nearby buddies and events.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"locationZip\">City, state, or zip<\/label>\n                    <input type=\"text\" id=\"locationZip\" placeholder=\"Denver, CO or 80202\" autocomplete=\"off\" required \/>\n                    <p id=\"registerLocationHint\" class=\"buddyUpInputHint\">Start typing and select a suggested location so we can lock your geocoded area.<\/p>\n                    <input type=\"hidden\" id=\"registerCity\" name=\"registerCity\" \/>\n                    <input type=\"hidden\" id=\"registerState\" name=\"registerState\" \/>\n                    <input type=\"hidden\" id=\"registerPostalCode\" name=\"registerPostalCode\" \/>\n                    <div id=\"registerLocationAutocompleteResults\" class=\"buddyUpAutocompleteResults hidden\"><\/div>\n                <\/div>\n\n                <div class=\"buddyUpRegisterStepNav\">\n                    <button type=\"button\" class=\"buddyUpButton1 buddyUpGoToNextPage\" data-next-page=\"buddyUpRegisterPage7\" disabled=\"disabled\">Next<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"buddyUpRegisterPage7\" class=\"buddyUpPage hidden\" data-page=\"7\" data-step-label=\"About You\">\n            <div class=\"buddyUpRegisterStepCard\">\n                <button type=\"button\" aria-label=\"Back\" data-next-page=\"buddyUpRegisterPage6\" class=\"buddyUpButton3 backButton buddyUpGoToNextPage buddyUpGoBack\"><i class=\"fa fa-solid fa-arrow-left\"><\/i> Back<\/button>\n                <h2>Tell us about your adventures<\/h2>\n                <p class=\"buddyUpRegisterStepLead\">Add a short About Me and your interests to personalize matches.<\/p>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"registerSelfie\">Selfie (required for identity verification)<\/label>\n                    <input type=\"file\" id=\"registerSelfie\" accept=\"image\/jpeg,image\/png,image\/webp,image\/heic,image\/heif\" required \/>\n                    <p id=\"registerSelfieHint\" class=\"buddyUpInputHint\">Take a photo or choose a clear image with your full face visible.<\/p>\n                    <div id=\"registerSelfiePreviewWrap\" class=\"hidden\" style=\"margin-top:.6rem;\">\n                        <img decoding=\"async\" id=\"registerSelfiePreview\" src=\"\" alt=\"Selfie preview\" style=\"width:92px;height:92px;object-fit:cover;border-radius:999px;\" \/>\n                    <\/div>\n                <\/div>\n\n                <div class=\"buddyUpInputWrapper\">\n                    <label for=\"aboutMe\">About Me<\/label>\n                    <textarea id=\"aboutMe\" rows=\"4\" placeholder=\"What do you like to do outdoors?\" required><\/textarea>\n                    <p class=\"buddyUpInputHint\">A couple of sentences is perfect.<\/p>\n                <\/div>\n\n                <div class=\"buddyUpInputWrapper buddyInterestsInputWrapper\">\n                    <label for=\"buddyUpInterestInputWrapper\">Interests<\/label>\n                    <div id=\"buddyUpInterestInputWrapper\"><\/div>\n                <\/div>\n\n                <div class=\"submitButtonWrapper buddyUpRegisterStepNav\">\n                    <input type=\"submit\" disabled=\"disabled\" value=\"Create free account\" role=\"button\" id=\"createBuddyUpAccount\" aria-label=\"Create free account\" class=\"buddyUpButton1\">\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/form>\n<\/section>\n<script>\/***\n * Registration flow (streamlined multi-step)\n *\/\n(function() {\n    const POST_LOGIN_REDIRECT_KEY = 'buddyup_post_login_redirect';\n    const REGISTER_SOURCE_KEY = 'buddyup_register_source';\n    const MIN_PASSWORD_LENGTH = 8;\n\n    const accountWrapper = document.getElementById('accountEditPagesWrapper');\n    const registerForm = document.getElementById('buddyUpEditProfileForm');\n    if (!accountWrapper || !registerForm) return;\n\n    const progressBar = document.getElementById('buddyUpRegisterProgressBar');\n    const progressText = document.getElementById('buddyUpRegisterProgressText');\n    const formError = document.getElementById('formIncorrectInfo');\n    const createAccountButton = document.getElementById('createBuddyUpAccount');\n\n    const fieldDob = document.getElementById('registerDob');\n    const fieldDobPicker = document.getElementById('registerDobPicker');\n    const fieldDobCalendarButton = document.getElementById('registerDobCalendarButton');\n    const fieldEmail = document.getElementById('emailAddress');\n    const fieldFullName = document.getElementById('fullName');\n    const fieldUsername = document.getElementById('username');\n    const fieldPhone = document.getElementById('phoneNumber');\n    const fieldPassword = document.getElementById('password');\n    const fieldLocation = document.getElementById('locationZip');\n    const fieldAboutMe = document.getElementById('aboutMe');\n    const fieldSelfie = document.getElementById('registerSelfie');\n    const fieldSelfieHint = document.getElementById('registerSelfieHint');\n    const fieldSelfiePreviewWrap = document.getElementById('registerSelfiePreviewWrap');\n    const fieldSelfiePreview = document.getElementById('registerSelfiePreview');\n    const fieldCity = document.getElementById('registerCity');\n    const fieldState = document.getElementById('registerState');\n    const fieldPostal = document.getElementById('registerPostalCode');\n    const interestsInputWrapper = document.getElementById('buddyUpInterestInputWrapper');\n\n    const fieldDestination = document.getElementById('registerDestination');\n    const fieldSource = document.getElementById('registerSourceScreen');\n\n    const usernameHint = document.getElementById('registerUsernameHint');\n    const dobHint = document.getElementById('registerDobHint');\n    const passwordHint = document.getElementById('registerPasswordHint');\n    const locationHint = document.getElementById('registerLocationHint');\n    const locationAutocompleteResults = document.getElementById('registerLocationAutocompleteResults');\n\n    const pages = Array.from(registerForm.querySelectorAll('.buddyUpPage'));\n    const totalPages = pages.length;\n\n    let usernameWasEdited = false;\n    let locationDebounce = null;\n    let selfieDataUrl = '';\n    let selfieFaceVerified = false;\n    let googleCredential = '';\n    let googleAuthoritativeEmail = false;\n\n    const resolveDestinationUrl = function(destinationKey) {\n        const key = String(destinationKey || '').trim().toLowerCase();\n        const links = (window.buddyUpVariables && typeof buddyUpVariables === 'object') ? buddyUpVariables : {};\n\n        if (key === 'events') return links.events_link || '';\n        if (key === 'explore') return links.explore_link || '';\n        if (key === 'groups') return links.groups_link || '';\n        if (key === 'people') return links.user_search_link || '';\n        if (key === 'subscriptions') return links.subscriptions_info_link || '';\n        return links.for_me_link || links.home_link || links.account_link || '\/';\n    };\n\n    const normalizeInternalUrl = function(value) {\n        const raw = String(value || '').trim();\n        if (!raw) return '';\n        try {\n            const parsed = new URL(raw, window.location.origin);\n            if (parsed.origin !== window.location.origin) return '';\n            return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n        } catch (e) {\n            return '';\n        }\n    };\n\n    const readStoredDestination = function() {\n        try {\n            const fromSession = sessionStorage.getItem(POST_LOGIN_REDIRECT_KEY);\n            if (fromSession) return normalizeInternalUrl(fromSession);\n        } catch (e) {}\n\n        try {\n            const fromLocal = localStorage.getItem(POST_LOGIN_REDIRECT_KEY);\n            if (fromLocal) return normalizeInternalUrl(fromLocal);\n        } catch (e) {}\n\n        return '';\n    };\n\n    const storeDestination = function(value) {\n        const normalized = normalizeInternalUrl(value);\n        if (!normalized) return;\n        try { sessionStorage.setItem(POST_LOGIN_REDIRECT_KEY, normalized); } catch (e) {}\n        try { localStorage.setItem(POST_LOGIN_REDIRECT_KEY, normalized); } catch (e) {}\n    };\n\n    const storeSource = function(value) {\n        const source = String(value || '').trim();\n        if (!source) return;\n        try { sessionStorage.setItem(REGISTER_SOURCE_KEY, source); } catch (e) {}\n        try { localStorage.setItem(REGISTER_SOURCE_KEY, source); } catch (e) {}\n    };\n\n    const redirectIfAuthenticated = function() {\n        const fallback = buddyUpVariables && buddyUpVariables.for_me_link\n            ? buddyUpVariables.for_me_link\n            : (buddyUpVariables && buddyUpVariables.home_link ? buddyUpVariables.home_link : '\/');\n\n        const target = readStoredDestination() || fallback;\n        if (BUDDYUP.isLoggedIn()) {\n            BUDDYUP.pjaxNavigate(target);\n            return true;\n        }\n        return false;\n    };\n\n    if (redirectIfAuthenticated()) return;\n\n    accountWrapper.classList.remove('hidden');\n\n    document.querySelectorAll('.register-account-nav, .login-account-nav').forEach((el) => {\n        if (el && el.parentNode) {\n            el.parentNode.removeChild(el);\n        }\n    });\n\n    const searchParams = new URLSearchParams(window.location.search || '');\n    const destinationKey = searchParams.get('dest');\n    const destinationQueryUrl = searchParams.get('next');\n    const sourceQuery = searchParams.get('src');\n\n    const resolvedQueryDestination = destinationQueryUrl\n        ? normalizeInternalUrl(destinationQueryUrl)\n        : normalizeInternalUrl(resolveDestinationUrl(destinationKey));\n    const resolvedStoredDestination = readStoredDestination();\n    const activeDestination = resolvedQueryDestination || resolvedStoredDestination || normalizeInternalUrl(resolveDestinationUrl('for-you'));\n\n    if (fieldDestination) fieldDestination.value = activeDestination;\n    if (activeDestination) storeDestination(activeDestination);\n\n    const sourceValue = String(sourceQuery || '').trim();\n    if (fieldSource && sourceValue) fieldSource.value = sourceValue;\n    if (sourceValue) storeSource(sourceValue);\n\n    const formatIsoToUsDate = function(isoDate) {\n        const value = String(isoDate || '').trim();\n        const match = value.match(\/^(\\d{4})-(\\d{2})-(\\d{2})$\/);\n        if (!match) return '';\n        return `${match[2]}\/${match[3]}\/${match[1]}`;\n    };\n\n    const parseDobDate = function(value) {\n        const raw = String(value || '').trim();\n        if (!raw) return null;\n\n        let year = 0;\n        let month = 0;\n        let day = 0;\n\n        const isoMatch = raw.match(\/^(\\d{4})-(\\d{1,2})-(\\d{1,2})$\/);\n        if (isoMatch) {\n            year = Number(isoMatch[1]);\n            month = Number(isoMatch[2]);\n            day = Number(isoMatch[3]);\n        } else {\n            const usMatch = raw.match(\/^(\\d{1,2})[\\\/\\-.](\\d{1,2})[\\\/\\-.](\\d{4})$\/);\n            if (!usMatch) return null;\n            month = Number(usMatch[1]);\n            day = Number(usMatch[2]);\n            year = Number(usMatch[3]);\n        }\n\n        if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return null;\n        if (year < 1900 || year > 2100) return null;\n\n        const parsed = new Date(year, month - 1, day);\n        if (Number.isNaN(parsed.getTime())) return null;\n        if (parsed.getFullYear() !== year || parsed.getMonth() !== month - 1 || parsed.getDate() !== day) return null;\n        return parsed;\n    };\n\n    const toIsoDate = function(dateObj) {\n        if (!(dateObj instanceof Date) || Number.isNaN(dateObj.getTime())) return '';\n        const year = String(dateObj.getFullYear());\n        const month = String(dateObj.getMonth() + 1).padStart(2, '0');\n        const day = String(dateObj.getDate()).padStart(2, '0');\n        return `${year}-${month}-${day}`;\n    };\n\n    const isDobInAllowedRange = function(dateObj) {\n        if (!(dateObj instanceof Date) || Number.isNaN(dateObj.getTime())) return false;\n\n        const minRaw = String(fieldDob ? fieldDob.getAttribute('min') || '' : '').trim();\n        const maxRaw = String(fieldDob ? fieldDob.getAttribute('max') || '' : '').trim();\n\n        const minDate = minRaw ? parseDobDate(minRaw) : null;\n        const maxDate = maxRaw ? parseDobDate(maxRaw) : null;\n\n        if (minDate && dateObj < minDate) return false;\n        if (maxDate && dateObj > maxDate) return false;\n        return true;\n    };\n\n    const toAge = function(dateInput) {\n        const parsed = dateInput instanceof Date ? dateInput : parseDobDate(dateInput);\n        if (!(parsed instanceof Date) || Number.isNaN(parsed.getTime())) return null;\n\n        const now = new Date();\n        let age = now.getFullYear() - parsed.getFullYear();\n        const monthDiff = now.getMonth() - parsed.getMonth();\n        const dayDiff = now.getDate() - parsed.getDate();\n        if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) age -= 1;\n        return age;\n    };\n\n    const deriveUsername = function(email) {\n        const localPart = String(email || '').split('@')[0] || '';\n        let value = localPart\n            .toLowerCase()\n            .replace(\/[^a-z0-9_]+\/g, '_')\n            .replace(\/_+\/g, '_')\n            .replace(\/^_+|_+$\/g, '');\n\n        if (value.length < 3) {\n            const stamp = String(Date.now()).slice(-4);\n            value = `buddy_${stamp}`;\n        }\n\n        return value.slice(0, 24);\n    };\n\n    const passwordStrongEnough = function(password) {\n        const value = String(password || '');\n        return value.length >= MIN_PASSWORD_LENGTH && \/[A-Za-z]\/.test(value) && \/[0-9]\/.test(value);\n    };\n\n    const setHint = function(node, text, state) {\n        if (!node) return;\n        node.textContent = String(text || '');\n        node.classList.remove('isError', 'isSuccess');\n        if (state === 'error') node.classList.add('isError');\n        if (state === 'success') node.classList.add('isSuccess');\n    };\n\n    const parseName = function(fullName) {\n        const cleaned = String(fullName || '').trim().replace(\/\\s+\/g, ' ');\n        if (!cleaned) return { first: '', last: '' };\n        const parts = cleaned.split(' ');\n        const first = parts.shift() || '';\n        const last = parts.join(' ').trim();\n        return { first, last };\n    };\n\n    const sanitizePhone = function(value) {\n        return String(value || '').replace(\/[^0-9]\/g, '');\n    };\n\n    const extractPostalCode = function(value) {\n        const match = String(value || '').match(\/\\b\\d{5}(?:-\\d{4})?\\b\/);\n        return match ? String(match[0]) : '';\n    };\n\n    const selectedInterests = function() {\n        return Array.from(document.querySelectorAll('.buddyInterestsList .singlePill'))\n            .map((el) => String(el.textContent || '').replace(\/\\s*\u00d7\\s*$\/, '').trim())\n            .filter(Boolean);\n    };\n\n    const readFileAsDataUrl = function(file) {\n        return new Promise(function(resolve, reject) {\n            const reader = new FileReader();\n            reader.onload = function() { resolve(String(reader.result || '')); };\n            reader.onerror = reject;\n            reader.readAsDataURL(file);\n        });\n    };\n\n    const prepareSelfieDataUrl = async function(file) {\n        if (!('createImageBitmap' in window)) {\n            return readFileAsDataUrl(file);\n        }\n\n        let bitmap = null;\n        try {\n            bitmap = await createImageBitmap(file, { imageOrientation: 'from-image' });\n            const maxDimension = 1600;\n            const scale = Math.min(1, maxDimension \/ Math.max(bitmap.width, bitmap.height));\n            const width = Math.max(1, Math.round(bitmap.width * scale));\n            const height = Math.max(1, Math.round(bitmap.height * scale));\n            const canvas = document.createElement('canvas');\n            canvas.width = width;\n            canvas.height = height;\n            const context = canvas.getContext('2d');\n            if (!context) throw new Error('Canvas is unavailable');\n            context.drawImage(bitmap, 0, 0, width, height);\n            return canvas.toDataURL('image\/jpeg', 0.86);\n        } catch (e) {\n            return readFileAsDataUrl(file);\n        } finally {\n            if (bitmap && typeof bitmap.close === 'function') bitmap.close();\n        }\n    };\n\n    const selfieFaceCheck = async function(file) {\n        if (!('FaceDetector' in window)) {\n            return { checked: false, hasFace: true };\n        }\n\n        let bitmap = null;\n        try {\n            bitmap = await createImageBitmap(file);\n            const detector = new FaceDetector({ fastMode: true, maxDetectedFaces: 1 });\n            const faces = await detector.detect(bitmap);\n            return { checked: true, hasFace: Array.isArray(faces) && faces.length > 0 };\n        } catch (e) {\n            \/\/ FaceDetector is experimental and can exist while its OS implementation\n            \/\/ is unavailable. A detector failure must not block desktop registration.\n            return { checked: false, hasFace: true };\n        } finally {\n            if (bitmap && typeof bitmap.close === 'function') {\n                bitmap.close();\n            }\n        }\n    };\n\n    const currentPage = function() {\n        return registerForm.querySelector('.buddyUpPage:not(.hidden)');\n    };\n\n    const currentPageIndex = function() {\n        const page = currentPage();\n        if (!page) return 1;\n        const idx = parseInt(page.getAttribute('data-page'), 10);\n        return Number.isFinite(idx) ? idx : 1;\n    };\n\n    const validatePage = function(pageNumber) {\n        const step = Number(pageNumber);\n\n        if (step === 1) {\n            const parsedDob = parseDobDate(fieldDob ? fieldDob.value : '');\n            const age = toAge(parsedDob);\n            const inRange = isDobInAllowedRange(parsedDob);\n            const ok = !!parsedDob && Number.isFinite(age) && age >= 18 && age <= 110 && inRange;\n            setHint(\n                dobHint,\n                ok ? 'Looks good.' : 'Enter a valid date (MM\/DD\/YYYY) and you must be at least 18 years old.',\n                ok ? 'success' : 'error'\n            );\n            return ok;\n        }\n\n        if (step === 2) {\n            return !!(fieldEmail && fieldEmail.checkValidity() && String(fieldEmail.value || '').trim() !== '');\n        }\n\n        if (step === 3) {\n            const name = String(fieldFullName ? fieldFullName.value : '').trim();\n            const username = String(fieldUsername ? fieldUsername.value : '').trim();\n            const usernameOk = \/^[a-z0-9_]{3,24}$\/i.test(username);\n            setHint(usernameHint, usernameOk ? 'Great username choice.' : 'Use 3-24 characters: letters, numbers, or underscores.', usernameOk ? 'success' : 'error');\n            return name.length >= 2 && usernameOk;\n        }\n\n        if (step === 4) {\n            return sanitizePhone(fieldPhone ? fieldPhone.value : '').length >= 10;\n        }\n\n        if (step === 5) {\n            if (googleCredential && googleAuthoritativeEmail && !String(fieldPassword ? fieldPassword.value : '')) return true;\n            const ok = passwordStrongEnough(fieldPassword ? fieldPassword.value : '');\n            setHint(passwordHint, ok ? 'Strong enough.' : 'At least 8 characters with letters and numbers.', ok ? 'success' : 'error');\n            return ok;\n        }\n\n        if (step === 6) {\n            const label = String(fieldLocation ? fieldLocation.value : '').trim();\n            if (!label) {\n                setHint(locationHint, 'Enter a city\/state or ZIP and choose a suggested location.', 'error');\n                return false;\n            }\n\n            let postal = String(fieldPostal ? fieldPostal.value : '').trim();\n            if (!postal) {\n                const parsedPostal = extractPostalCode(label);\n                if (parsedPostal && fieldPostal) {\n                    fieldPostal.value = parsedPostal;\n                    postal = parsedPostal;\n                }\n            }\n\n            if (!postal) {\n                setHint(locationHint, 'Please choose one of the suggested locations so a postal code is captured.', 'error');\n                return false;\n            }\n\n            setHint(locationHint, 'Location captured and ready.', 'success');\n            return true;\n        }\n\n        if (step === 7) {\n            const about = String(fieldAboutMe ? fieldAboutMe.value : '').trim();\n            const interests = selectedInterests();\n            return about.length >= 2 && interests.length > 0 && selfieDataUrl !== '';\n        }\n\n        return false;\n    };\n\n    const refreshNavigationState = function() {\n        const page = currentPage();\n        if (!page) return;\n\n        const pageNumber = parseInt(page.getAttribute('data-page'), 10);\n        const nextButton = page.querySelector('.buddyUpGoToNextPage:not(.buddyUpGoBack)');\n        const canContinue = validatePage(pageNumber);\n\n        if (nextButton) {\n            nextButton.disabled = !canContinue;\n        }\n\n        if (pageNumber === totalPages && createAccountButton) {\n            createAccountButton.disabled = !canContinue;\n        }\n    };\n\n    const updateProgress = function() {\n        const idx = currentPageIndex();\n        if (progressText) progressText.textContent = `Step ${idx} of ${totalPages}`;\n\n        const divisor = Math.max(totalPages - 1, 1);\n        const ratio = Math.max(0, Math.min(1, (idx - 1) \/ divisor));\n        if (progressBar) progressBar.style.width = `${Math.round(ratio * 100)}%`;\n\n        const page = currentPage();\n        if (page) {\n            page.classList.remove('buddyUpRegisterStepIn');\n            void page.offsetWidth;\n            page.classList.add('buddyUpRegisterStepIn');\n        }\n\n        refreshNavigationState();\n    };\n\n    const wireLocationAutocomplete = function() {\n        if (!fieldLocation || !locationAutocompleteResults) return;\n\n        let latestRows = [];\n\n        const clearResults = function() {\n            latestRows = [];\n            locationAutocompleteResults.innerHTML = '';\n            locationAutocompleteResults.classList.add('hidden');\n        };\n\n        const applySelection = function(item) {\n            const parts = [];\n            if (item.city) parts.push(item.city);\n            if (item.state) parts.push(item.state);\n            if (item.postalCode) parts.push(item.postalCode);\n\n            fieldLocation.value = parts.length > 0 ? parts.join(', ') : String(item.label || '');\n            if (fieldCity) fieldCity.value = item.city || '';\n            if (fieldState) fieldState.value = item.state || '';\n            if (fieldPostal) fieldPostal.value = item.postalCode || '';\n\n            clearResults();\n            setHint(locationHint, 'Location captured and ready.', 'success');\n            refreshNavigationState();\n        };\n\n        const renderResults = function(items) {\n            if (!Array.isArray(items) || items.length === 0) {\n                clearResults();\n                return;\n            }\n\n            latestRows = items;\n\n            locationAutocompleteResults.innerHTML = items.map((item, index) => {\n                const id = `registerLocationAuto_${index}`;\n                return `<button type=\"button\" id=\"${id}\" class=\"buddyUpButton3\" style=\"margin:0 0 .35rem 0;text-align:left;width:100%;white-space:normal;\">${BUDDYUP.escapeHtml(item.label)}<\/button>`;\n            }).join('');\n            locationAutocompleteResults.classList.remove('hidden');\n\n            items.forEach((item, index) => {\n                const row = document.getElementById(`registerLocationAuto_${index}`);\n                if (!row) return;\n                row.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    applySelection(item);\n                });\n            });\n        };\n\n        fieldLocation.addEventListener('input', function() {\n            if (locationDebounce) clearTimeout(locationDebounce);\n            if (fieldCity) fieldCity.value = '';\n            if (fieldState) fieldState.value = '';\n            if (fieldPostal) fieldPostal.value = '';\n            setHint(locationHint, 'Start typing and select a suggested location so we can lock your geocoded area.', '');\n\n            const q = String(fieldLocation.value || '').trim();\n            if (q.length < 3) {\n                clearResults();\n                refreshNavigationState();\n                return;\n            }\n\n            locationDebounce = setTimeout(async function() {\n                const rows = await BUDDYUP.locationAutocompleteSearch(q);\n                renderResults(rows);\n                refreshNavigationState();\n            }, 220);\n        });\n\n        fieldLocation.addEventListener('keydown', function(e) {\n            if (e.key !== 'Enter') return;\n            if (!Array.isArray(latestRows) || latestRows.length === 0) return;\n            e.preventDefault();\n            applySelection(latestRows[0]);\n        });\n\n        fieldLocation.addEventListener('blur', function() {\n            setTimeout(async function() {\n                const q = String(fieldLocation.value || '').trim();\n                if (!q) return;\n\n                const existingPostal = String(fieldPostal ? fieldPostal.value : '').trim();\n                if (existingPostal) return;\n\n                const inlinePostal = extractPostalCode(q);\n                if (inlinePostal && fieldPostal) {\n                    fieldPostal.value = inlinePostal;\n                    if (fieldCity && !String(fieldCity.value || '').trim()) fieldCity.value = q;\n                    setHint(locationHint, 'ZIP detected and captured.', 'success');\n                    refreshNavigationState();\n                    return;\n                }\n\n                const rows = (Array.isArray(latestRows) && latestRows.length > 0)\n                    ? latestRows\n                    : await BUDDYUP.locationAutocompleteSearch(q);\n\n                if (Array.isArray(rows) && rows.length === 1) {\n                    applySelection(rows[0]);\n                    return;\n                }\n\n                if (Array.isArray(rows) && rows.length > 1) {\n                    setHint(locationHint, 'Choose one of the suggestions to lock location details.', 'error');\n                }\n                refreshNavigationState();\n            }, 120);\n        });\n\n        document.addEventListener('click', function(e) {\n            if (!locationAutocompleteResults.contains(e.target) && e.target !== fieldLocation) {\n                clearResults();\n            }\n        });\n    };\n\n    const wirePasswordToggle = function() {\n        const button = document.getElementById('registerShowPasswordButton');\n        if (!button || !fieldPassword) return;\n\n        const icon = button.querySelector('i');\n        button.addEventListener('click', function() {\n            const showing = fieldPassword.getAttribute('type') === 'text';\n            fieldPassword.setAttribute('type', showing ? 'password' : 'text');\n            button.setAttribute('aria-pressed', showing ? 'false' : 'true');\n            button.setAttribute('aria-label', showing ? 'Show password' : 'Hide password');\n\n            if (icon) {\n                icon.classList.toggle('fa-eye', showing);\n                icon.classList.toggle('fa-eye-slash', !showing);\n            }\n        });\n    };\n\n    const wireDobCalendar = function() {\n        if (!fieldDob || !fieldDobPicker || !fieldDobCalendarButton) return;\n\n        const syncPickerRange = function() {\n            const minRaw = String(fieldDob.getAttribute('min') || '').trim();\n            const maxRaw = String(fieldDob.getAttribute('max') || '').trim();\n            if (minRaw) fieldDobPicker.min = minRaw;\n            if (maxRaw) fieldDobPicker.max = maxRaw;\n        };\n\n        const syncPickerFromText = function() {\n            const parsed = parseDobDate(fieldDob.value);\n            fieldDobPicker.value = parsed ? toIsoDate(parsed) : '';\n        };\n\n        const openPicker = function() {\n            syncPickerFromText();\n            if (typeof fieldDobPicker.showPicker === 'function') {\n                try {\n                    fieldDobPicker.showPicker();\n                    return;\n                } catch (e) {}\n            }\n\n            try { fieldDobPicker.focus(); } catch (e) {}\n            try { fieldDobPicker.click(); } catch (e) {}\n        };\n\n        fieldDobCalendarButton.addEventListener('click', function(e) {\n            e.preventDefault();\n            openPicker();\n        });\n\n        fieldDobPicker.addEventListener('change', function() {\n            const usFormatted = formatIsoToUsDate(fieldDobPicker.value);\n            if (usFormatted) {\n                fieldDob.value = usFormatted;\n            }\n            refreshNavigationState();\n        });\n\n        fieldDob.addEventListener('blur', function() {\n            const parsed = parseDobDate(fieldDob.value);\n            if (parsed) {\n                const normalized = formatIsoToUsDate(toIsoDate(parsed));\n                if (normalized) fieldDob.value = normalized;\n            }\n            syncPickerFromText();\n            refreshNavigationState();\n        });\n\n        syncPickerRange();\n        syncPickerFromText();\n    };\n\n    const wireInterestsInput = function() {\n        if (!interestsInputWrapper || !BUDDYUP || typeof BUDDYUP.interestsInputSetup !== 'function') return;\n\n        BUDDYUP.interestsInputSetup(interestsInputWrapper, 'buddyInterests', 'interests');\n\n        const refreshSoon = function() {\n            setTimeout(refreshNavigationState, 0);\n        };\n\n        interestsInputWrapper.addEventListener('click', refreshSoon);\n        interestsInputWrapper.addEventListener('keyup', refreshSoon);\n\n        const observer = new MutationObserver(function() {\n            refreshNavigationState();\n        });\n        observer.observe(interestsInputWrapper, { childList: true, subtree: true });\n    };\n\n    const wireSelfieInput = function() {\n        if (!fieldSelfie) return;\n\n        fieldSelfie.addEventListener('change', async function() {\n            selfieDataUrl = '';\n            selfieFaceVerified = false;\n\n            const file = fieldSelfie.files && fieldSelfie.files[0] ? fieldSelfie.files[0] : null;\n            if (!file) {\n                if (fieldSelfiePreviewWrap) fieldSelfiePreviewWrap.classList.add('hidden');\n                setHint(fieldSelfieHint, 'Upload a clear selfie with your full face visible.', '');\n                refreshNavigationState();\n                return;\n            }\n\n            const looksLikeImage = \/^image\\\/\/i.test(String(file.type || ''))\n                || \/\\.(jpe?g|png|webp|heic|heif)$\/i.test(String(file.name || ''));\n            if (!looksLikeImage) {\n                setHint(fieldSelfieHint, 'Please choose an image file for your selfie.', 'error');\n                refreshNavigationState();\n                return;\n            }\n\n            if (Number(file.size || 0) > 20 * 1024 * 1024) {\n                setHint(fieldSelfieHint, 'That image is larger than 20 MB. Please choose a smaller photo.', 'error');\n                refreshNavigationState();\n                return;\n            }\n\n            try {\n                setHint(fieldSelfieHint, 'Preparing your photo\u2026', '');\n                const dataUrl = await prepareSelfieDataUrl(file);\n                if (!dataUrl || dataUrl.indexOf('data:image\/') !== 0) {\n                    setHint(fieldSelfieHint, 'Unable to read selfie image. Please try another file.', 'error');\n                    refreshNavigationState();\n                    return;\n                }\n\n                const faceResult = await selfieFaceCheck(file);\n\n                selfieDataUrl = dataUrl;\n                selfieFaceVerified = true;\n                if (fieldSelfiePreview) fieldSelfiePreview.src = dataUrl;\n                if (fieldSelfiePreviewWrap) fieldSelfiePreviewWrap.classList.remove('hidden');\n                setHint(\n                    fieldSelfieHint,\n                    faceResult.checked && !faceResult.hasFace\n                        ? 'Photo selected. Please make sure your full face is clearly visible.'\n                        : 'Selfie uploaded and ready.',\n                    faceResult.checked && !faceResult.hasFace ? '' : 'success'\n                );\n            } catch (e) {\n                setHint(fieldSelfieHint, 'Unable to process selfie. Please try again.', 'error');\n            }\n\n            refreshNavigationState();\n        });\n    };\n\n    const registerInputListeners = function() {\n        const watched = [fieldDob, fieldEmail, fieldFullName, fieldUsername, fieldPhone, fieldPassword, fieldLocation, fieldAboutMe];\n        watched.forEach((input) => {\n            if (!input) return;\n            input.addEventListener('input', refreshNavigationState);\n            input.addEventListener('blur', refreshNavigationState);\n        });\n\n        if (fieldEmail && fieldUsername) {\n            fieldEmail.addEventListener('input', function() {\n                if (!usernameWasEdited) {\n                    fieldUsername.value = deriveUsername(fieldEmail.value);\n                    refreshNavigationState();\n                }\n            });\n\n            fieldUsername.addEventListener('input', function() {\n                usernameWasEdited = true;\n            });\n        }\n    };\n\n    const wireResendEmailButton = function(emailAddress) {\n        const resendButton = document.getElementById('buddyUpResendEmailButton');\n        const resendCountdown = document.getElementById('buddyUpEmailResendCountdown');\n        if (!resendButton || !resendCountdown) return;\n\n        let resendTimer = null;\n\n        const startResendCooldown = function() {\n            let remaining = 30;\n            resendButton.setAttribute('disabled', 'disabled');\n            resendCountdown.classList.remove('hidden');\n            resendCountdown.textContent = `(Please wait ${remaining} seconds to resend the email)`;\n\n            if (resendTimer) clearInterval(resendTimer);\n            resendTimer = setInterval(function() {\n                remaining -= 1;\n                if (remaining <= 0) {\n                    clearInterval(resendTimer);\n                    resendTimer = null;\n                    resendButton.removeAttribute('disabled');\n                    resendCountdown.textContent = '';\n                    resendCountdown.classList.add('hidden');\n                    return;\n                }\n                resendCountdown.textContent = `(Please wait ${remaining} second${remaining === 1 ? '' : 's'} to resend the email)`;\n            }, 1000);\n        };\n\n        const sendResendRequest = async function() {\n            resendButton.setAttribute('disabled', 'disabled');\n            const emailResendResponse = await BUDDYUP.apiRequest('resend-verification-email', { email: emailAddress });\n\n            if (emailResendResponse && emailResendResponse.status === 'success') {\n                BUDDYUP.openModal('<p style=\"max-width:400px;margin:0 auto;\">Please check your email, including the <strong>spam folder<\/strong>, for the verification message.<\/p><button id=\"buddyUpCloseModal\" class=\"buddyUpButton1\" style=\"margin:0;\">Okay<\/button>', 'A new email has been sent!', 'resendSuccessModal');\n                const closeButton = document.getElementById('buddyUpCloseModal');\n                if (closeButton) {\n                    closeButton.addEventListener('click', function() { BUDDYUP.closeModal(); });\n                }\n                startResendCooldown();\n                return;\n            }\n\n            resendButton.removeAttribute('disabled');\n            resendCountdown.classList.remove('hidden');\n            resendCountdown.textContent = 'Unable to resend right now. Please try again.';\n        };\n\n        resendButton.addEventListener('click', function() {\n            sendResendRequest();\n        });\n\n        startResendCooldown();\n    };\n\n    const showVerifyEmailState = function(emailAddress) {\n        accountWrapper.innerHTML = `\n            <div id=\"buddyUpVerifyEmailWrapper\">\n                <i class=\"fa fa-solid fa-envelope-open-text\"><\/i>\n                <h1>Verify your email<\/h1>\n                <p>Your free account has been created.<\/p>\n                <p>Please check <strong>${BUDDYUP.escapeHtml(emailAddress)}<\/strong> and verify your email before logging in.<\/p>\n                <p>If you do not see an email, check your spam folder or request a new verification email.<\/p>\n                <button id=\"buddyUpResendEmailButton\" class=\"buddyUpButton3\" type=\"button\">Resend verification email<\/button>\n                <button id=\"buddyUpGoToLoginAfterRegister\" class=\"buddyUpButton1\" type=\"button\">Continue to Login<\/button>\n                <div id=\"buddyUpEmailResendCountdown\" class=\"hidden\"><\/div>\n            <\/div>\n        `;\n\n        const loginButton = document.getElementById('buddyUpGoToLoginAfterRegister');\n        if (loginButton) {\n            loginButton.addEventListener('click', function() {\n                const loginUrl = buddyUpVariables && buddyUpVariables.login_link ? buddyUpVariables.login_link : '\/';\n                BUDDYUP.pjaxNavigate(loginUrl);\n            });\n        }\n\n        const resendButton = document.getElementById('buddyUpResendEmailButton');\n        if (resendButton) {\n            wireResendEmailButton(emailAddress);\n        }\n    };\n\n    const extractAuthenticatedUser = function(response) {\n        if (!response || typeof response !== 'object') return null;\n        if (response.user_token) return response;\n        if (response.data && typeof response.data === 'object' && response.data.user_token) return response.data;\n        return null;\n    };\n\n    const finishGoogleSession = async function(response) {\n        const user = extractAuthenticatedUser(response);\n        if (!user) return false;\n        await Promise.resolve(BUDDYUP.setUser(user));\n        try { sessionStorage.removeItem('buddyup_google_registration'); } catch (e) {}\n        const destination = String(fieldDestination ? fieldDestination.value : '').trim()\n            || (buddyUpVariables && (buddyUpVariables.for_me_link || buddyUpVariables.home_link))\n            || '\/';\n        window.location.assign(destination);\n        return true;\n    };\n\n    const setGoogleStatus = function(message, success) {\n        const status = document.getElementById('buddyUpGoogleRegisterStatus');\n        if (!status) return;\n        status.textContent = String(message || '');\n        status.classList.toggle('is-success', !!success);\n    };\n\n    const activateGoogleRegistration = function(credential, profile) {\n        googleCredential = String(credential || '').trim();\n        if (!googleCredential) return false;\n        profile = profile && typeof profile === 'object' ? profile : {};\n        googleAuthoritativeEmail = !!profile.authoritative_email;\n\n        if (fieldEmail) {\n            fieldEmail.value = String(profile.email || '').trim();\n            fieldEmail.readOnly = true;\n            fieldEmail.setAttribute('aria-readonly', 'true');\n        }\n        if (fieldFullName && !String(fieldFullName.value || '').trim()) {\n            fieldFullName.value = String(profile.name || `${profile.first_name || ''} ${profile.last_name || ''}`).trim();\n        }\n        if (fieldUsername && !String(fieldUsername.value || '').trim()) {\n            let suggested = String(profile.email || '').split('@')[0].toLowerCase().replace(\/[^a-z0-9_]\/g, '').slice(0, 24);\n            if (suggested.length < 3) suggested = `buddy${String(Date.now()).slice(-6)}`;\n            fieldUsername.value = suggested;\n        }\n\n        const passwordTitle = document.getElementById('buddyUpRegisterPasswordTitle');\n        const passwordLead = document.getElementById('buddyUpRegisterPasswordLead');\n        const passwordStep = document.getElementById('buddyUpRegisterPasswordStep');\n        if (googleAuthoritativeEmail) {\n            if (fieldPassword) {\n                fieldPassword.required = false;\n                fieldPassword.placeholder = 'Optional recovery password';\n            }\n            if (passwordTitle) passwordTitle.textContent = 'Password (optional)';\n            if (passwordLead) passwordLead.textContent = 'Google will secure your primary sign-in.';\n            if (passwordHint) passwordHint.textContent = 'Google will be your sign-in method. You may also add a BuddyUp password.';\n            if (passwordStep) passwordStep.setAttribute('data-google-passwordless', '1');\n        } else {\n            if (passwordTitle) passwordTitle.textContent = 'Create a password';\n            if (passwordLead) passwordLead.textContent = 'Use at least 8 characters with both letters and numbers.';\n            if (passwordHint) passwordHint.textContent = 'This email domain also needs BuddyUp email verification and a password.';\n        }\n\n        setGoogleStatus(`Google verified ${profile.email || 'your account'}. Complete the remaining BuddyUp profile steps.`, true);\n        [fieldEmail, fieldFullName, fieldUsername, fieldPassword].forEach((field) => {\n            if (field) field.dispatchEvent(new Event('input', { bubbles: true }));\n        });\n        refreshNavigationState();\n        return true;\n    };\n\n    const handleGoogleRegistration = async function(googleResponse) {\n        const credential = String(googleResponse && googleResponse.credential || '').trim();\n        if (!credential) return;\n        setGoogleStatus('Verifying your Google account...', false);\n        try {\n            const response = await BUDDYUP.apiRequest('google-login', { credential: credential });\n            if (await finishGoogleSession(response)) return;\n            if (response && response.status === 'registration_required') {\n                const pending = {\n                    credential: credential,\n                    profile: response.google_profile || {},\n                    expires_at: Date.now() + (50 * 60 * 1000),\n                };\n                try { sessionStorage.setItem('buddyup_google_registration', JSON.stringify(pending)); } catch (e) {}\n                activateGoogleRegistration(credential, pending.profile);\n                return;\n            }\n            setGoogleStatus(response && (response.message || response.data)\n                ? String(response.message || response.data)\n                : 'Google sign-up was not completed. Please try again.', false);\n        } catch (e) {\n            setGoogleStatus('Google sign-up could not be completed. Please try again.', false);\n        }\n    };\n\n    try {\n        const pendingRaw = sessionStorage.getItem('buddyup_google_registration');\n        const pending = pendingRaw ? JSON.parse(pendingRaw) : null;\n        if (pending && Number(pending.expires_at || 0) > Date.now()) {\n            activateGoogleRegistration(pending.credential, pending.profile);\n        } else if (pendingRaw) {\n            sessionStorage.removeItem('buddyup_google_registration');\n        }\n    } catch (e) {}\n\n    if (document.getElementById('buddyUpGoogleRegisterButton')) {\n        BUDDYUP.renderGoogleIdentityButton('buddyUpGoogleRegisterButton', {\n            callback: handleGoogleRegistration,\n            text: 'signup_with',\n        }).catch(() => setGoogleStatus('Google sign-up is temporarily unavailable.', false));\n    }\n\n    const submitRegistration = async function() {\n        if (createAccountButton) createAccountButton.setAttribute('disabled', 'disabled');\n        if (formError) formError.classList.add('hidden');\n\n        if (!validatePage(totalPages)) {\n            refreshNavigationState();\n            if (createAccountButton) createAccountButton.removeAttribute('disabled');\n            return;\n        }\n\n        const name = parseName(fieldFullName ? fieldFullName.value : '');\n        const fallbackLocation = String(fieldLocation ? fieldLocation.value : '').trim();\n        const interests = selectedInterests();\n        const fallbackPostal = extractPostalCode(fallbackLocation);\n\n        const userData = {\n            first_name: name.first,\n            last_name: name.last,\n            full_name: String(fieldFullName ? fieldFullName.value : '').trim(),\n            username: String(fieldUsername ? fieldUsername.value : '').trim(),\n            email_address: String(fieldEmail ? fieldEmail.value : '').trim(),\n            password: String(fieldPassword ? fieldPassword.value : ''),\n            mobile_phone: sanitizePhone(fieldPhone ? fieldPhone.value : ''),\n            date_of_birth: toIsoDate(parseDobDate(fieldDob ? fieldDob.value : '')),\n            user_age: toAge(parseDobDate(fieldDob ? fieldDob.value : '')),\n            location_zip: fallbackLocation,\n            city: String(fieldCity ? fieldCity.value : '').trim(),\n            state: String(fieldState ? fieldState.value : '').trim(),\n            postal_code: String(fieldPostal ? fieldPostal.value : '').trim() || fallbackPostal,\n            profile_image: '',\n            selfie: selfieDataUrl,\n            about_me: String(fieldAboutMe ? fieldAboutMe.value : '').trim(),\n            interests: interests.join(','),\n            user_agreement_check: 1,\n            register_source_screen: String(fieldSource ? fieldSource.value : '').trim(),\n            register_destination: String(fieldDestination ? fieldDestination.value : '').trim(),\n        };\n        if (googleCredential) userData.google_credential = googleCredential;\n\n        if (!userData.city && fallbackLocation) userData.city = fallbackLocation;\n        if (!userData.postal_code) {\n            if (formError) {\n                formError.textContent = 'Please choose a valid location suggestion so we can capture postal code for your area.';\n                formError.classList.remove('hidden');\n            }\n            if (createAccountButton) createAccountButton.removeAttribute('disabled');\n            return;\n        }\n\n        if (!userData.selfie || !selfieFaceVerified) {\n            if (formError) {\n                formError.textContent = 'A valid selfie with a detectable face is required to continue.';\n                formError.classList.remove('hidden');\n            }\n            if (createAccountButton) createAccountButton.removeAttribute('disabled');\n            return;\n        }\n\n        try {\n            const response = await BUDDYUP.apiRequest('register', userData);\n            if (!response || response.status === 'error') {\n                const message = response && (response.message || response.data) ? String(response.message || response.data) : '';\n                if (formError) {\n                    formError.textContent = message || 'There was an error registering your account. Please try again.';\n                    formError.classList.remove('hidden');\n                }\n                if (createAccountButton) createAccountButton.removeAttribute('disabled');\n                return;\n            }\n            if (await finishGoogleSession(response)) return;\n\n            const destinationValue = String(fieldDestination ? fieldDestination.value : '').trim();\n            if (destinationValue) storeDestination(destinationValue);\n\n            showVerifyEmailState(userData.email_address);\n        } catch (e) {\n            if (formError) {\n                formError.textContent = 'There was an error registering your account. Please try again.';\n                formError.classList.remove('hidden');\n            }\n            if (createAccountButton) createAccountButton.removeAttribute('disabled');\n        }\n    };\n\n    registerForm.addEventListener('submit', function(e) {\n        e.preventDefault();\n        submitRegistration();\n    });\n\n    document.addEventListener('buddyUpPageChange', updateProgress);\n\n    registerForm.addEventListener('click', function(e) {\n        const navButton = e.target.closest('.buddyUpGoToNextPage:not(.buddyUpGoBack)');\n        if (!navButton) return;\n\n        const page = navButton.closest('.buddyUpPage');\n        const pageNumber = page ? parseInt(page.getAttribute('data-page'), 10) : 0;\n        if (!validatePage(pageNumber)) {\n            e.preventDefault();\n            refreshNavigationState();\n        }\n    });\n\n    wireLocationAutocomplete();\n    wireDobCalendar();\n    wirePasswordToggle();\n    wireInterestsInput();\n    wireSelfieInput();\n    registerInputListeners();\n    updateProgress();\n})();\n<\/script><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/full-width-no-header.php","meta":{"footnotes":""},"class_list":["post-459","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/pages\/459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/comments?post=459"}],"version-history":[{"count":1,"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/pages\/459\/revisions"}],"predecessor-version":[{"id":460,"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/pages\/459\/revisions\/460"}],"wp:attachment":[{"href":"https:\/\/staging.buddyupgo.com\/api\/wp\/v2\/media?parent=459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}