{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/gm-auth.js?gmcb=20260809launch1"],
  "sourcesContent": ["(function() {\n  'use strict';\n  if (window.__gmAuthBooted) return;\n  window.__gmAuthBooted = true;\n\n  var SUPABASE_URL = 'https://tbzlhewcevuyopsytcwi.supabase.co';\n  var SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRiemxoZXdjZXZ1eW9wc3l0Y3dpIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzkzMTA3MzIsImV4cCI6MjA5NDg4NjczMn0.AgZa1dXiowhgqMlCOSN9EuUpYOkDCitCmvUxsk3C6OA';\n\n  var currentUser = null;\n  var currentProfile = null;\n  var accountDetailsEditMode = false;\n  var profileInlineEdit = null;\n  var profileChangePending = null;\n  var profileChangeConfirmEl = null;\n  var PROFILE_ACCOUNT_FIELDS = [\n    { key: 'firstname', label: 'first name', type: 'text' },\n    { key: 'lastname', label: 'last name', type: 'text' },\n    { key: 'username', label: 'username', type: 'text' },\n    { key: 'password', label: 'password', type: 'password' },\n    { key: 'email', label: 'email', type: 'email' },\n    { key: 'phone', label: 'phone', type: 'tel' },\n    { key: 'birthday', label: 'birthday', type: 'date' },\n    { key: 'marketing_opt_in', label: 'updates', type: 'toggle' }\n  ];\n  var profilePasswordEditOpen = false;\n  var profileActivePanel = 'orders';\n  var accountMessageTimer = null;\n  var authPopupTimer = null;\n  var SESSION_REFRESH_BUFFER_SEC = 60;\n  var TITLE_COLORS = ['#F3E9DF', '#B884C8', '#F5A08E', '#C42F86', '#2E5E8F', '#B7B66C', '#2A2333'];\n  var PROFILE_ROW_FIELDS = [\n    'email', 'username', 'firstname', 'lastname', 'phone', 'birthday',\n    'marketing_opt_in', 'marketing_opt_in_at', 'shopify_customer_id', 'shopify_synced_at',\n    'is_admin'\n  ];\n\n  async function readFetchError(res) {\n    try {\n      var data = await res.json();\n      if (!data) return 'request failed (' + res.status + ')';\n      if (typeof data.message === 'string') return data.message;\n      if (typeof data.error === 'string') return data.error;\n      if (data.error && typeof data.error === 'object') return data.error.message || data.error.details || JSON.stringify(data.error);\n      if (data.details) return String(data.details);\n      return JSON.stringify(data);\n    } catch (e) {\n      return 'request failed (' + res.status + ')';\n    }\n  }\n\n  async function fetchUserProfileRow(token, userId) {\n    if (!token || !userId) return null;\n    // Full PII comes from security-definer RPC (table SELECT is id/username only).\n    try {\n      var rpcRes = await fetch(SUPABASE_URL + '/rest/v1/rpc/get_my_profile', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          apikey: SUPABASE_ANON_KEY,\n          Authorization: 'Bearer ' + token\n        },\n        body: '{}'\n      });\n      if (rpcRes.ok) {\n        var rpcRows = await rpcRes.json();\n        if (Array.isArray(rpcRows) && rpcRows.length) return rpcRows[0];\n        if (rpcRows && typeof rpcRows === 'object' && rpcRows.id) return rpcRows;\n      }\n    } catch (e) { /* fall through */ }\n\n    var res = await fetch(\n      SUPABASE_URL + '/rest/v1/profiles?id=eq.' + encodeURIComponent(userId) + '&select=' + PROFILE_ROW_FIELDS.join(','),\n      { headers: { apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + token } }\n    );\n    if (!res.ok) return null;\n    var rows = await res.json();\n    if (!Array.isArray(rows) || !rows.length) return null;\n    return rows[0];\n  }\n\n  function getProfileDataSource(user) {\n    var meta = (user && user.user_metadata) || {};\n    var profile = currentProfile || {};\n    return {\n      email: (user && user.email) || profile.email || '',\n      username: profile.username != null ? profile.username : (meta.username || ''),\n      firstname: profile.firstname != null ? profile.firstname : (meta.firstname || ''),\n      lastname: profile.lastname != null ? profile.lastname : (meta.lastname || ''),\n      phone: profile.phone != null ? profile.phone : (meta.phone || ''),\n      birthday: profile.birthday != null ? profile.birthday : (meta.birthday || ''),\n      marketing_opt_in: profile.marketing_opt_in != null ? !!profile.marketing_opt_in : !!meta.marketing_opt_in,\n      marketing_opt_in_at: profile.marketing_opt_in_at || meta.marketing_opt_in_at || null\n    };\n  }\n\n  function mergeProfileRow(profileRow) {\n    currentProfile = profileRow || null;\n    syncAdminNav();\n  }\n  var PROFILE_SIGNIN_CLOSED = 'sign in';\n  var PROFILE_CREATE_CLOSED = 'Create Account';\n  var PROFILE_LABEL_OPEN = 'Fill Out Info Below';\n\n  var profileDropdown;\n  var loggedOutViewEl;\n  var signupFormEl;\n  var signinFormEl;\n  var profileToggleBtn;\n  var profileSigninBtn;\n  var profileInstagramBtn;\n  var accountOverlay;\n\n  function $(id) { return document.getElementById(id); }\n\n  function escHtml(value) {\n    return String(value || '')\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n  }\n\n  function getPageEl() {\n    return document.querySelector('.gm-page');\n  }\n\n  function isProfilePage() {\n    if (document.querySelector('.gm-profile-page')) return true;\n    if (document.getElementById('profile-sections-nav')) return true;\n    if (document.getElementById('profile-panel-account')) return true;\n    return /\\/pages\\/profile\\/?$/i.test(window.location.pathname);\n  }\n\n  var PROFILE_PANEL_IDS = ['orders', 'account', 'signout'];\n\n  function getInitialProfilePanel() {\n    var hash = (window.location.hash || '').replace(/^#/, '').toLowerCase();\n    if (hash === 'shipping' || hash === 'account') return 'account';\n    if (PROFILE_PANEL_IDS.indexOf(hash) >= 0) return hash;\n    return 'orders';\n  }\n\n  function openAccountOverlay() {\n    if (isProfilePage()) {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n      return;\n    }\n    if (!accountOverlay) return;\n    accountOverlay.classList.add('is-open');\n    accountOverlay.setAttribute('aria-hidden', 'false');\n  }\n\n  function closeAccountOverlay() {\n    if (isProfilePage()) return;\n    if (!accountOverlay) return;\n    accountOverlay.classList.remove('is-open');\n    accountOverlay.setAttribute('aria-hidden', 'true');\n    setProfilePanelOpen(false);\n  }\n\n  function colorizeLetters(text) {\n    var colors = (window.__gmTitleColors && window.__gmTitleColors.colors) || TITLE_COLORS;\n    var spread = (window.__gmTitleColors && window.__gmTitleColors.spreadIndex) ||\n      function(i, t) { return i % colors.length; };\n    var html = '';\n    var letterIndex = 0;\n    var nonSpace = 0;\n    for (var n = 0; n < text.length; n++) {\n      if (text.charAt(n) !== ' ') nonSpace++;\n    }\n    for (var i = 0; i < text.length; i++) {\n      var ch = text[i];\n      if (ch === ' ') {\n        html += '<span class=\"cs-greeting-letter cs-title-space\"> </span>';\n      } else {\n        var color = colors[spread(letterIndex, nonSpace || 1)];\n        html += '<span class=\"cs-greeting-letter\" style=\"color:' + color + '\">' + escHtml(ch) + '</span>';\n        letterIndex++;\n      }\n    }\n    return html;\n  }\n\n  function setGreeting(isReturning, firstname) {\n    var el = $('cs-greeting');\n    if (!el) return;\n    var name = firstname || 'friend';\n    var text = isReturning ? ('welcome back, ' + name) : ('hi, ' + name);\n    el.innerHTML = colorizeLetters(text);\n  }\n\n  function hideAccountMessage() {\n    var el = $('account-message');\n    if (!el) return;\n    el.classList.remove('visible', 'is-success');\n    el.textContent = '';\n    if (accountMessageTimer) clearTimeout(accountMessageTimer);\n  }\n\n  function showAccountMessage(message, isSuccess) {\n    var el = $('account-message');\n    if (!el) return;\n    el.textContent = toUserFacingMessage(message);\n    el.classList.toggle('is-success', !!isSuccess);\n    el.classList.add('visible');\n    if (accountMessageTimer) clearTimeout(accountMessageTimer);\n    accountMessageTimer = setTimeout(hideAccountMessage, isSuccess ? 4000 : 6000);\n  }\n\n  function toUserFacingMessage(message) {\n    var msg = String(message || '').trim();\n    if (!msg) return 'something went wrong \u2014 please try again';\n    if (/access token|expired|revoked|malformed|invalid for other reasons|jwt|not authenticated/i.test(msg)) {\n      return 'your session expired \u2014 please sign in again';\n    }\n    if (/rls|row level|postgres|supabase|shopify api|edge function|sql|policy|violates|duplicate key|pgrst/i.test(msg)) {\n      return 'could not save your changes \u2014 please try again';\n    }\n    if (/email.*confirm|confirmation/i.test(msg)) {\n      return 'check your email to confirm the new address';\n    }\n    return msg;\n  }\n\n  function initTouchDateField(inputId) {\n    var el = $(inputId);\n    if (!el || el.type !== 'date') return;\n    el.addEventListener('change', function() {\n      if (el.value) el.dataset.userSet = 'true';\n    });\n    if (!('ontouchstart' in window) && !navigator.maxTouchPoints) return;\n    el.setAttribute('readonly', 'readonly');\n    function openPicker() {\n      el.removeAttribute('readonly');\n      window.setTimeout(function() {\n        if (typeof el.showPicker === 'function') {\n          try { el.showPicker(); return; } catch (e) { /* focus fallback */ }\n        }\n        el.focus({ preventScroll: true });\n      }, 0);\n    }\n    el.addEventListener('click', openPicker);\n    el.addEventListener('blur', function() {\n      if (!el.value) el.setAttribute('readonly', 'readonly');\n    });\n  }\n\n  async function isUsernameTakenByOther(username, userId) {\n    try {\n      var rpcRes = await fetch(SUPABASE_URL + '/rest/v1/rpc/username_is_taken', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          apikey: SUPABASE_ANON_KEY,\n          Authorization: 'Bearer ' + SUPABASE_ANON_KEY\n        },\n        body: JSON.stringify({ uname: username, exclude_id: userId || null })\n      });\n      if (rpcRes.ok) {\n        var taken = await rpcRes.json();\n        if (typeof taken === 'boolean') return taken;\n      }\n    } catch (e) { /* fall through */ }\n\n    var res = await fetch(\n      SUPABASE_URL + '/rest/v1/profiles?username=eq.' + encodeURIComponent(username) + '&select=id',\n      { headers: { apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + SUPABASE_ANON_KEY } }\n    );\n    var rows = await res.json();\n    if (!Array.isArray(rows) || !rows.length) return false;\n    return rows[0].id !== userId;\n  }\n\n  async function saveUserProfile(token, userId, payload) {\n    var headers = {\n      'Content-Type': 'application/json',\n      apikey: SUPABASE_ANON_KEY,\n      Authorization: 'Bearer ' + token,\n      Prefer: 'return=minimal'\n    };\n    var res = await fetch(SUPABASE_URL + '/rest/v1/profiles?id=eq.' + encodeURIComponent(userId), {\n      method: 'PATCH', headers: headers, body: JSON.stringify(payload)\n    });\n    if (res.ok || res.status === 204) return { ok: true };\n    var patchError = await readFetchError(res);\n    res = await fetch(SUPABASE_URL + '/rest/v1/profiles?on_conflict=id', {\n      method: 'POST',\n      headers: Object.assign({}, headers, { Prefer: 'return=minimal,resolution=merge-duplicates' }),\n      body: JSON.stringify(Object.assign({ id: userId }, payload))\n    });\n    if (res.ok || res.status === 204) return { ok: true };\n    return { ok: false, error: patchError || (await readFetchError(res)) };\n  }\n\n  function getAccountEditIssue(fields) {\n    for (var i = 0; i < fields.length; i++) {\n      var el = $(fields[i].id);\n      if (!el) continue;\n      var value = el.type === 'checkbox' ? (el.checked ? '1' : '') : el.value.trim();\n      if (!value) return { el: el, label: fields[i].label };\n    }\n    var username = $('account-edit-username');\n    if (username && !/^[a-zA-Z0-9_]{3,30}$/.test(username.value.trim())) {\n      return { el: username, label: 'username (letters, numbers, underscore, 3\u201330 chars)' };\n    }\n    var email = $('account-edit-email');\n    if (email && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.value.trim())) {\n      return { el: email, label: 'a valid email' };\n    }\n    return null;\n  }\n\n  function getProfileAccountFieldStyles() {\n    return {\n      row: '',\n      label: '',\n      value: ''\n    };\n  }\n\n  function getProfileFieldDisplay(user, field) {\n    var source = getProfileDataSource(user);\n    if (field.key === 'email') return source.email || '';\n    if (field.key === 'password') return 'Click To Change';\n    if (field.key === 'marketing_opt_in') {\n      return source.marketing_opt_in ? 'texts and emails on' : 'texts and emails off';\n    }\n    return source[field.key] || '';\n  }\n\n  function getProfileFieldRaw(user, field) {\n    var source = getProfileDataSource(user);\n    if (field.key === 'email') return source.email || '';\n    if (field.key === 'password') return '';\n    if (field.key === 'marketing_opt_in') return !!source.marketing_opt_in;\n    return source[field.key] || '';\n  }\n\n  function getProfileFieldConfig(fieldKey) {\n    for (var i = 0; i < PROFILE_ACCOUNT_FIELDS.length; i++) {\n      if (PROFILE_ACCOUNT_FIELDS[i].key === fieldKey) return PROFILE_ACCOUNT_FIELDS[i];\n    }\n    return null;\n  }\n\n  function validateProfileFieldValue(fieldKey, profilePayload) {\n    var field = getProfileFieldConfig(fieldKey);\n    if (!field) return null;\n    if (fieldKey === 'marketing_opt_in' || fieldKey === 'password') return null;\n    var value = fieldKey === 'email' ? profilePayload.email : profilePayload[fieldKey];\n    value = String(value || '').trim();\n    if (!value) {\n      if (field.optional) return null;\n      return 'please enter ' + field.label;\n    }\n    if (fieldKey === 'username' && !/^[a-zA-Z0-9_]{3,30}$/.test(value)) {\n      return 'username must be 3\u201330 letters, numbers, or underscores';\n    }\n    if (fieldKey === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n      return 'please enter a valid email';\n    }\n    return null;\n  }\n\n  function buildProfileAccountDetailsRow(field, displayValue, rawValue, styles) {\n    if (field.key === 'marketing_opt_in') {\n      var checked = rawValue ? ' checked' : '';\n      return '<div class=\"cs-account-row gm-account-field gm-account-updates-field\" data-field=\"marketing_opt_in\">' +\n        '<span class=\"cs-account-label\">updates</span>' +\n        '<label class=\"gm-account-updates-check\">' +\n          '<span class=\"gm-account-updates-text\">texts and emails</span>' +\n          '<input type=\"checkbox\" class=\"gm-account-updates-input\" data-field=\"marketing_opt_in\"' +\n            checked + ' aria-label=\"receive texts and emails about updates\" />' +\n        '</label>' +\n      '</div>';\n    }\n\n    if (field.key === 'password') {\n      if (profilePasswordEditOpen) {\n        return '<div class=\"cs-account-row gm-account-field gm-account-password-field is-editing\" data-field=\"password\">' +\n          '<span class=\"cs-account-label\">password</span>' +\n          '<div class=\"gm-account-password-form\">' +\n            '<input class=\"gm-account-inline-input gm-account-password-input\" type=\"password\" id=\"profile-password-current\" name=\"current-password\" placeholder=\"current password\" autocomplete=\"current-password\" />' +\n            '<input class=\"gm-account-inline-input gm-account-password-input\" type=\"password\" id=\"profile-password-new\" name=\"new-password\" placeholder=\"new password\" autocomplete=\"new-password\" />' +\n            '<div class=\"gm-account-password-actions\">' +\n              '<button type=\"button\" class=\"gm-account-password-btn\" id=\"profile-password-cancel\">cancel</button>' +\n              '<button type=\"button\" class=\"gm-account-password-btn gm-account-password-btn--save\" id=\"profile-password-save\">save</button>' +\n            '</div>' +\n          '</div>' +\n        '</div>';\n      }\n\n      return '<div class=\"cs-account-row gm-account-field gm-account-password-field\" data-field=\"password\">' +\n        '<span class=\"cs-account-label gm-account-editable\" data-field=\"password\">password</span>' +\n        '<button type=\"button\" class=\"cs-account-value gm-account-editable gm-account-empty-value\" data-field=\"password\">Click To Change</button>' +\n      '</div>';\n    }\n\n    var isEmpty = !displayValue;\n    var placeholder = isEmpty ? 'enter' : displayValue;\n    var emptyClass = isEmpty ? ' gm-account-empty-value' : '';\n    return '<div class=\"cs-account-row gm-account-field\" data-field=\"' + field.key + '\">' +\n      '<span class=\"cs-account-label gm-account-editable\" data-field=\"' + field.key + '\">' +\n      escHtml(field.label) + '</span>' +\n      '<button type=\"button\" class=\"cs-account-value gm-account-editable' + emptyClass + '\" data-field=\"' + field.key + '\">' +\n      escHtml(placeholder) + '</button></div>';\n  }\n\n  function closePasswordEdit(rerender) {\n    profilePasswordEditOpen = false;\n    if (rerender && currentUser) renderAccountDetails(currentUser);\n  }\n\n  async function openPasswordEdit() {\n    if (!currentUser || !isProfilePage()) return;\n    if (profileInlineEdit) await commitProfileFieldEdit();\n    if (profileChangePending) cancelProfileChange();\n    profilePasswordEditOpen = true;\n    renderAccountDetails(currentUser);\n    window.setTimeout(function() {\n      var currentInput = $('profile-password-current');\n      if (currentInput) currentInput.focus();\n    }, 0);\n  }\n\n  async function submitPasswordChange() {\n    if (!currentUser) return;\n    var currentInput = $('profile-password-current');\n    var newInput = $('profile-password-new');\n    var saveBtn = $('profile-password-save');\n    var currentPassword = currentInput ? currentInput.value : '';\n    var newPassword = newInput ? newInput.value : '';\n\n    if (!currentPassword || !newPassword) {\n      showAccountMessage('enter your current password and a new password');\n      if (!currentPassword && currentInput) currentInput.focus();\n      else if (newInput) newInput.focus();\n      return;\n    }\n    if (newPassword.length < 6) {\n      showAccountMessage('new password must be at least 6 characters');\n      if (newInput) newInput.focus();\n      return;\n    }\n    if (currentPassword === newPassword) {\n      showAccountMessage('new password must be different from your current password');\n      if (newInput) newInput.focus();\n      return;\n    }\n\n    var email = (currentUser.email || '').trim().toLowerCase();\n    if (!email) {\n      showAccountMessage('could not update password \u2014 missing account email');\n      return;\n    }\n\n    if (saveBtn) saveBtn.disabled = true;\n    if (currentInput) currentInput.disabled = true;\n    if (newInput) newInput.disabled = true;\n\n    try {\n      var verifyRes = await fetch(SUPABASE_URL + '/auth/v1/token?grant_type=password', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          apikey: SUPABASE_ANON_KEY\n        },\n        body: JSON.stringify({ email: email, password: currentPassword })\n      });\n      var verifyData = {};\n      try { verifyData = await verifyRes.json(); } catch (e) { verifyData = {}; }\n\n      if (!verifyData.access_token) {\n        showAccountMessage('current password is incorrect');\n        if (currentInput) {\n          currentInput.disabled = false;\n          currentInput.focus();\n          currentInput.select();\n        }\n        if (newInput) newInput.disabled = false;\n        if (saveBtn) saveBtn.disabled = false;\n        return;\n      }\n\n      saveSession(verifyData, getStoredSession());\n\n      var updateRes = await fetch(SUPABASE_URL + '/auth/v1/user', {\n        method: 'PUT',\n        headers: {\n          'Content-Type': 'application/json',\n          apikey: SUPABASE_ANON_KEY,\n          Authorization: 'Bearer ' + verifyData.access_token\n        },\n        body: JSON.stringify({ password: newPassword })\n      });\n      var updateData = {};\n      try { updateData = await updateRes.json(); } catch (e) { updateData = {}; }\n\n      if (!updateRes.ok || isAuthErrorResponse(updateRes, updateData)) {\n        showAccountMessage(toUserFacingMessage(getErrorText(updateData) || 'could not update password'));\n        if (currentInput) currentInput.disabled = false;\n        if (newInput) newInput.disabled = false;\n        if (saveBtn) saveBtn.disabled = false;\n        return;\n      }\n\n      if (updateData && updateData.id) {\n        currentUser = updateData;\n        var session = getStoredSession();\n        if (session) {\n          session.user = updateData;\n          localStorage.setItem('gm_session', JSON.stringify(session));\n        }\n      }\n\n      profilePasswordEditOpen = false;\n      renderAccountDetails(currentUser);\n      showAccountMessage('password updated', true);\n    } catch (e) {\n      showAccountMessage('could not update password \u2014 try again');\n      if (currentInput) currentInput.disabled = false;\n      if (newInput) newInput.disabled = false;\n      if (saveBtn) saveBtn.disabled = false;\n    }\n  }\n\n  async function handleUpdatesCheckboxChange(input) {\n    if (!input || !currentUser || !isProfilePage() || accountDetailsEditMode || profileChangePending) {\n      return;\n    }\n    var nextValue = !!input.checked;\n    var currentValue = !!getProfileDataSource(currentUser).marketing_opt_in;\n    if (nextValue === currentValue) return;\n    input.disabled = true;\n    try {\n      await saveProfileFieldUpdate('marketing_opt_in', nextValue);\n    } finally {\n      if (input.isConnected) input.disabled = false;\n    }\n  }\n\n  function normalizeProfileFieldValue(fieldKey, rawValue) {\n    if (fieldKey === 'email') return String(rawValue || '').trim().toLowerCase();\n    return String(rawValue || '').trim();\n  }\n\n  function profileFieldValuesEqual(fieldKey, a, b) {\n    return normalizeProfileFieldValue(fieldKey, a) === normalizeProfileFieldValue(fieldKey, b);\n  }\n\n  function formatProfileConfirmValue(fieldKey, rawValue) {\n    var value = normalizeProfileFieldValue(fieldKey, rawValue);\n    if (!value) return '(empty)';\n    return value;\n  }\n\n  function ensureProfileChangeConfirmDialog() {\n    if (profileChangeConfirmEl) return profileChangeConfirmEl;\n    var root = document.createElement('div');\n    root.className = 'gm-profile-change-confirm';\n    root.id = 'gm-profile-change-confirm';\n    root.setAttribute('aria-hidden', 'true');\n    root.innerHTML =\n      '<div class=\"gm-profile-change-confirm__backdrop\" data-profile-change-dismiss></div>' +\n      '<div class=\"gm-profile-change-confirm__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"gm-profile-change-title\">' +\n        '<p class=\"gm-profile-change-confirm__title\" id=\"gm-profile-change-title\">Are You Sure You Want To Change?</p>' +\n        '<p class=\"gm-profile-change-confirm__field\" id=\"gm-profile-change-field\"></p>' +\n        '<div class=\"gm-profile-change-confirm__compare\">' +\n          '<div class=\"gm-profile-change-confirm__row\">' +\n            '<span class=\"gm-profile-change-confirm__label\">Before</span>' +\n            '<span class=\"gm-profile-change-confirm__value\" id=\"gm-profile-change-old\"></span>' +\n          '</div>' +\n          '<div class=\"gm-profile-change-confirm__row\">' +\n            '<span class=\"gm-profile-change-confirm__label\">After</span>' +\n            '<span class=\"gm-profile-change-confirm__value\" id=\"gm-profile-change-new\"></span>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"gm-profile-change-confirm__actions\">' +\n          '<button type=\"button\" class=\"gm-profile-change-confirm__btn\" id=\"gm-profile-change-cancel\">Cancel</button>' +\n          '<button type=\"button\" class=\"gm-profile-change-confirm__btn gm-profile-change-confirm__btn--confirm\" id=\"gm-profile-change-confirm-btn\">Confirm</button>' +\n        '</div>' +\n      '</div>';\n    document.body.appendChild(root);\n    root.querySelector('#gm-profile-change-cancel').addEventListener('click', cancelProfileChange);\n    root.querySelector('#gm-profile-change-confirm-btn').addEventListener('click', confirmProfileChange);\n    root.querySelector('[data-profile-change-dismiss]').addEventListener('click', cancelProfileChange);\n    root.addEventListener('keydown', function(e) {\n      if (!root.classList.contains('is-open')) return;\n      if (e.key === 'Escape') {\n        e.preventDefault();\n        cancelProfileChange();\n      }\n    });\n    profileChangeConfirmEl = root;\n    return root;\n  }\n\n  function closeProfileChangeConfirmUI() {\n    if (!profileChangeConfirmEl) return;\n    profileChangeConfirmEl.classList.remove('is-open');\n    profileChangeConfirmEl.setAttribute('aria-hidden', 'true');\n    document.body.classList.remove('gm-profile-change-confirm-open');\n  }\n\n  function showProfileChangeConfirm(pending) {\n    if (!pending) return;\n    var dialog = ensureProfileChangeConfirmDialog();\n    var fieldLabel = pending.field && pending.field.label ? pending.field.label : 'detail';\n    $('gm-profile-change-field').textContent = fieldLabel.toUpperCase();\n    $('gm-profile-change-old').textContent = formatProfileConfirmValue(pending.fieldKey, pending.oldRaw);\n    $('gm-profile-change-new').textContent = formatProfileConfirmValue(pending.fieldKey, pending.newRaw);\n    dialog.classList.add('is-open');\n    dialog.setAttribute('aria-hidden', 'false');\n    document.body.classList.add('gm-profile-change-confirm-open');\n    var confirmBtn = $('gm-profile-change-confirm-btn');\n    if (confirmBtn && confirmBtn.focus) confirmBtn.focus();\n  }\n\n  function cancelProfileChange() {\n    profileChangePending = null;\n    closeProfileChangeConfirmUI();\n  }\n\n  async function confirmProfileChange() {\n    if (!profileChangePending || !currentUser) return;\n    var pending = profileChangePending;\n    profileChangePending = null;\n    closeProfileChangeConfirmUI();\n    await saveProfileFieldUpdate(pending.fieldKey, pending.newRaw);\n  }\n\n  function cancelProfileFieldEdit() {\n    profileInlineEdit = null;\n    if (currentUser) renderAccountDetails(currentUser);\n  }\n\n  function focusProfileInlineInput(input, field) {\n    window.requestAnimationFrame(function() {\n      input.focus({ preventScroll: true });\n      if (field.type === 'date') {\n        if (typeof input.showPicker === 'function') {\n          try { input.showPicker(); return; } catch (e) { /* focus only */ }\n        }\n        return;\n      }\n      var len = input.value.length;\n      try {\n        input.setSelectionRange(len, len);\n      } catch (e) {\n        input.focus({ preventScroll: true });\n      }\n    });\n  }\n\n  function bindProfileInlineControl(control, field) {\n    control.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter') { e.preventDefault(); control.blur(); }\n      else if (e.key === 'Escape') { e.preventDefault(); cancelProfileFieldEdit(); }\n    });\n    control.addEventListener('blur', function() {\n      window.setTimeout(function() {\n        if (!profileInlineEdit || profileInlineEdit.input !== control) return;\n        commitProfileFieldEdit();\n      }, 0);\n    });\n  }\n\n  async function activateProfileFieldEdit(fieldKey, e) {\n    if (!currentUser || !isProfilePage() || accountDetailsEditMode || profileChangePending) return;\n    if (fieldKey === 'marketing_opt_in') {\n      if (e) e.preventDefault();\n      var source = getProfileDataSource(currentUser);\n      saveProfileFieldUpdate('marketing_opt_in', !source.marketing_opt_in);\n      return;\n    }\n    if (fieldKey === 'password') {\n      if (e) e.preventDefault();\n      openPasswordEdit();\n      return;\n    }\n    if (profilePasswordEditOpen) closePasswordEdit(true);\n    if (profileInlineEdit && profileInlineEdit.fieldKey === fieldKey) {\n      if (e) e.preventDefault();\n      focusProfileInlineInput(profileInlineEdit.input, getProfileFieldConfig(fieldKey));\n      return;\n    }\n    if (profileInlineEdit && profileInlineEdit.fieldKey !== fieldKey) {\n      await commitProfileFieldEdit();\n    }\n    if (e) e.preventDefault();\n    startProfileFieldEdit(fieldKey);\n  }\n\n  async function startProfileFieldEdit(fieldKey) {\n    if (!currentUser || !isProfilePage() || profileChangePending) return;\n    var field = getProfileFieldConfig(fieldKey);\n    if (!field || field.type === 'toggle' || field.type === 'password') return;\n    if (profileInlineEdit && profileInlineEdit.fieldKey === fieldKey) return;\n    if (profileInlineEdit) await commitProfileFieldEdit();\n    var row = document.querySelector('.gm-account-field[data-field=\"' + fieldKey + '\"]');\n    if (!row) return;\n    var trigger = row.querySelector('.cs-account-value.gm-account-editable') || row.querySelector('.cs-account-value');\n    if (!trigger) return;\n    var rawValue = getProfileFieldRaw(currentUser, field);\n    var control = document.createElement('input');\n    control.type = field.type;\n    control.className = 'gm-account-inline-input';\n    control.id = 'profile-inline-' + fieldKey;\n    control.value = rawValue;\n    control.setAttribute('aria-label', field.label);\n    trigger.replaceWith(control);\n    if (field.type === 'date') initTouchDateField(control.id);\n    profileInlineEdit = { fieldKey: fieldKey, input: control, originalValue: rawValue };\n    bindProfileInlineControl(control, field);\n    focusProfileInlineInput(control, field);\n  }\n\n  async function commitProfileFieldEdit() {\n    if (!profileInlineEdit || !currentUser) return;\n    var fieldKey = profileInlineEdit.fieldKey;\n    var input = profileInlineEdit.input;\n    var newRaw = input.value;\n    var oldRaw = profileInlineEdit.originalValue;\n    var field = getProfileFieldConfig(fieldKey);\n    profileInlineEdit = null;\n\n    if (profileFieldValuesEqual(fieldKey, oldRaw, newRaw)) {\n      renderAccountDetails(currentUser);\n      return;\n    }\n\n    profileChangePending = {\n      fieldKey: fieldKey,\n      newRaw: newRaw,\n      oldRaw: oldRaw,\n      field: field\n    };\n    renderAccountDetails(currentUser);\n    showProfileChangeConfirm(profileChangePending);\n  }\n\n  function setProfileActivePanel(panel) {\n    if (!isProfilePage()) return;\n    if (panel !== profileActivePanel) {\n      if (profileInlineEdit) cancelProfileFieldEdit();\n      if (profileChangePending) cancelProfileChange();\n      if (profilePasswordEditOpen) closePasswordEdit(false);\n    }\n    profileActivePanel = panel;\n    document.querySelectorAll('.gm-profile-nav-btn').forEach(function(btn) {\n      var isActive = btn.getAttribute('data-profile-panel') === panel;\n      btn.classList.toggle('is-active', isActive);\n      btn.setAttribute('aria-current', isActive ? 'page' : 'false');\n    });\n    document.querySelectorAll('.gm-profile-panel').forEach(function(section) {\n      section.classList.toggle('is-active', section.id === 'profile-panel-' + panel);\n    });\n    if (panel === 'orders' && !window.__gmProfileOrdersLocked) loadMyOrders();\n  }\n\n  function applyProfileAccountDetailsLayout() {\n    if (!isProfilePage()) return;\n    var profileSection = $('profile-section');\n    if (profileSection) profileSection.style.cssText = 'width:100%;max-width:100%;box-sizing:border-box;';\n    var loggedIn = $('logged-in-view');\n    if (loggedIn) {\n      loggedIn.style.alignItems = 'center';\n      loggedIn.style.width = '100%';\n    }\n    var panel = $('account-details-panel');\n    if (panel) panel.style.cssText = 'width:100%;max-width:100%;max-height:none;opacity:1;overflow:visible;margin-top:0;box-sizing:border-box;';\n    var content = $('account-details-content');\n    if (content) content.style.cssText = 'display:flex;justify-content:center;width:100%;max-width:100%;box-sizing:border-box;';\n  }\n\n  function renderProfileAccountPanel(user) {\n    var content = $('account-details-content');\n    if (!content || !user) return;\n    var styles = getProfileAccountFieldStyles();\n    content.classList.add('gm-account-details-view');\n    content.classList.remove('gm-account-details-edit');\n    content.innerHTML = '<div class=\"gm-account-details-stack\">' +\n      PROFILE_ACCOUNT_FIELDS.map(function(field) {\n        return buildProfileAccountDetailsRow(\n          field,\n          getProfileFieldDisplay(user, field),\n          getProfileFieldRaw(user, field),\n          styles\n        );\n      }).join('') +\n      '</div>';\n  }\n\n  function renderAccountDetails(user) {\n    var content = $('account-details-content');\n    var panel = $('account-details-panel');\n    if (!content || !user) return;\n    accountDetailsEditMode = false;\n    if (panel) panel.classList.remove('is-editing');\n    if (isProfilePage()) {\n      profileInlineEdit = null;\n      renderProfileAccountPanel(user);\n      applyProfileAccountDetailsLayout();\n      return;\n    }\n    profilePasswordEditOpen = false;\n    content.classList.add('gm-account-details-view');\n    content.classList.remove('gm-account-details-edit');\n    var meta = user.user_metadata || {};\n    var rows = [\n      ['first name', meta.firstname],\n      ['last name', meta.lastname],\n      ['username', meta.username],\n      ['email', user.email],\n      ['phone', meta.phone],\n      ['birthday', meta.birthday],\n      ['updates', meta.marketing_opt_in ? 'texts and emails on' : 'texts and emails off']\n    ].filter(function(row) { return row[1]; });\n    var html;\n    if (rows.length === 0) {\n      html = '<p class=\"cs-account-value\">no details on file</p>';\n    } else {\n      html = '<div class=\"gm-account-details-grid\">' + rows.map(function(row) {\n        return '<div class=\"cs-account-row\"><span class=\"cs-account-label\">' + row[0] +\n          '</span><span class=\"cs-account-value\">' + escHtml(row[1]) + '</span></div>';\n      }).join('') + '</div>';\n      html += '<button type=\"button\" class=\"cs-account-edit-btn\" id=\"account-edit-btn\">edit</button>';\n    }\n    content.innerHTML = html;\n    if (!isProfilePage()) applyProfileAccountDetailsLayout();\n  }\n\n  function renderAccountDetailsEdit(user) {\n    var content = $('account-details-content');\n    var panel = $('account-details-panel');\n    if (!content || !user) return;\n    accountDetailsEditMode = true;\n    content.classList.remove('gm-account-details-view');\n    content.classList.add('gm-account-details-edit');\n    if (panel) {\n      panel.classList.add('open', 'is-editing');\n      panel.setAttribute('aria-hidden', 'false');\n    }\n    var meta = user.user_metadata || {};\n    var marketing = !!meta.marketing_opt_in;\n    content.innerHTML =\n      '<form class=\"cs-account-form\" id=\"account-edit-form\" novalidate>' +\n        '<input class=\"cs-input\" type=\"text\" id=\"account-edit-firstname\" placeholder=\"first name\" value=\"' + escHtml(meta.firstname) + '\" />' +\n        '<input class=\"cs-input\" type=\"text\" id=\"account-edit-lastname\" placeholder=\"last name\" value=\"' + escHtml(meta.lastname) + '\" />' +\n        '<input class=\"cs-input\" type=\"text\" id=\"account-edit-username\" placeholder=\"username\" value=\"' + escHtml(meta.username) + '\" />' +\n        '<input class=\"cs-input\" type=\"email\" id=\"account-edit-email\" placeholder=\"email\" value=\"' + escHtml(user.email) + '\" />' +\n        '<input class=\"cs-input\" type=\"tel\" id=\"account-edit-phone\" placeholder=\"phone number\" value=\"' + escHtml(meta.phone) + '\" />' +\n        '<input class=\"cs-input\" type=\"date\" id=\"account-edit-birthday\" value=\"' + escHtml(meta.birthday) + '\" />' +\n        '<label class=\"cs-checkbox-field\" for=\"account-edit-marketing\">' +\n          '<input type=\"checkbox\" id=\"account-edit-marketing\"' + (marketing ? ' checked' : '') + ' />' +\n          '<span class=\"cs-checkbox-label\">i agree to receive texts and emails about future drops and new items</span>' +\n        '</label>' +\n        '<div class=\"cs-account-form-actions\">' +\n          '<button type=\"button\" class=\"cs-account-save-btn\" id=\"account-save-btn\">save</button>' +\n          '<button type=\"button\" class=\"cs-account-cancel-btn\" id=\"account-cancel-btn\">cancel</button>' +\n        '</div>' +\n      '</form>';\n    initTouchDateField('account-edit-birthday');\n  }\n\n  async function applyAccountProfileUpdate(profilePayload) {\n    if (!currentUser) return false;\n    var token = await getValidAccessToken();\n    if (!token) { handleAuthFailure('your session expired \u2014 please sign in again'); return false; }\n    var email = profilePayload.email;\n    var username = profilePayload.username;\n    var firstname = profilePayload.firstname;\n    var lastname = profilePayload.lastname;\n    var phone = profilePayload.phone;\n    var birthday = profilePayload.birthday;\n    var marketingOptIn = profilePayload.marketing_opt_in;\n    var meta = currentUser.user_metadata || {};\n    if (username.toLowerCase() !== String(meta.username || '').toLowerCase()) {\n      if (await isUsernameTakenByOther(username, currentUser.id)) {\n        showAccountMessage('that username is already taken');\n        return false;\n      }\n    }\n    hideAccountMessage();\n    var previousEmail = currentUser.email;\n    var profileSavedPayload = {\n      email: email, username: username, firstname: firstname, lastname: lastname,\n      phone: phone, birthday: birthday,\n      marketing_opt_in: marketingOptIn,\n      marketing_opt_in_at: profilePayload.marketing_opt_in_at\n    };\n    var authBody = {\n      email: email !== currentUser.email ? email : undefined,\n      data: {\n        username: username, firstname: firstname, lastname: lastname, phone: phone, birthday: birthday,\n        marketing_opt_in: marketingOptIn\n      }\n    };\n    if (!authBody.email) delete authBody.email;\n    var authRes = await fetch(SUPABASE_URL + '/auth/v1/user', {\n      method: 'PUT',\n      headers: { 'Content-Type': 'application/json', apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + token },\n      body: JSON.stringify(authBody)\n    });\n    var authData = null;\n    try { authData = await authRes.json(); } catch (e) { /* empty */ }\n    if (isAuthErrorResponse(authRes, authData)) {\n      handleAuthFailure(getErrorText(authData) || 'your session expired \u2014 please sign in again');\n      return false;\n    }\n    if (!authRes.ok) {\n      showAccountMessage(toUserFacingMessage(getErrorText(authData) || 'could not update your account'));\n      return false;\n    }\n    var profileSaved = await saveUserProfile(token, currentUser.id, profileSavedPayload);\n    if (!profileSaved.ok) {\n      showAccountMessage('could not save your profile \u2014 ' + (profileSaved.error || 'please try again'));\n      return false;\n    }\n    currentProfile = Object.assign({}, currentProfile || {}, profileSavedPayload);\n    var updatedUser = authData && authData.id ? authData : await fetchAuthUser(token);\n    if (updatedUser) {\n      currentUser = updatedUser;\n      var session = getStoredSession();\n      if (session) { session.user = updatedUser; localStorage.setItem('gm_session', JSON.stringify(session)); }\n    }\n    var syncResult = await syncMarketingIntegrations(token);\n    renderAccountDetails(currentUser);\n    if (!syncResult.shopify.ok) {\n      showAccountMessage('profile saved, but shopify sync failed \u2014 ' + (syncResult.shopify.error || 'please try again'));\n      return true;\n    }\n    if (!syncResult.klaviyo.ok && !syncResult.klaviyo.skipped) {\n      showAccountMessage('profile saved, but klaviyo sync failed \u2014 ' + (syncResult.klaviyo.error || 'please try again'));\n      return true;\n    }\n    if (syncResult.klaviyo.ok && syncResult.klaviyo.sms_skipped) {\n      showAccountMessage('profile updated \u2014 email synced; finish klaviyo SMS setup for texts', true);\n      return true;\n    }\n    showAccountMessage(email !== previousEmail ? 'check your email to confirm the new address' : 'profile updated', email === previousEmail);\n    return true;\n  }\n\n  function buildProfilePayloadFromUser(user, overrides) {\n    var source = getProfileDataSource(user);\n    var payload = {\n      email: source.email || '',\n      username: source.username || '',\n      firstname: source.firstname || '',\n      lastname: source.lastname || '',\n      phone: source.phone || '',\n      birthday: source.birthday || '',\n      marketing_opt_in: !!source.marketing_opt_in,\n      marketing_opt_in_at: source.marketing_opt_in ? (source.marketing_opt_in_at || new Date().toISOString()) : null\n    };\n    if (overrides) {\n      for (var key in overrides) {\n        if (Object.prototype.hasOwnProperty.call(overrides, key)) payload[key] = overrides[key];\n      }\n    }\n    return payload;\n  }\n\n  async function saveProfileFieldUpdate(fieldKey, rawValue) {\n    if (!currentUser) return false;\n    var overrides = {};\n    if (fieldKey === 'email') {\n      overrides.email = String(rawValue).trim().toLowerCase();\n    } else if (fieldKey === 'marketing_opt_in') {\n      overrides.marketing_opt_in = !!rawValue;\n      overrides.marketing_opt_in_at = rawValue ? new Date().toISOString() : null;\n    } else {\n      overrides[fieldKey] = String(rawValue).trim();\n    }\n    var profilePayload = buildProfilePayloadFromUser(currentUser, overrides);\n    var issue = validateProfileFieldValue(fieldKey, profilePayload);\n    if (issue) {\n      showAccountMessage(issue);\n      renderAccountDetails(currentUser);\n      return false;\n    }\n    var ok = await applyAccountProfileUpdate(profilePayload);\n    if (!ok) renderAccountDetails(currentUser);\n    return ok;\n  }\n\n  async function saveAccountDetails() {\n    if (!currentUser) return;\n    var fields = [\n      { id: 'account-edit-firstname', label: 'first name' },\n      { id: 'account-edit-lastname', label: 'last name' },\n      { id: 'account-edit-username', label: 'username' },\n      { id: 'account-edit-email', label: 'email' },\n      { id: 'account-edit-phone', label: 'phone number' },\n      { id: 'account-edit-birthday', label: 'birthday' }\n    ];\n    var missing = getAccountEditIssue(fields);\n    if (missing) {\n      showAccountMessage('please fill out ' + missing.label);\n      if (missing.el && missing.el.focus) missing.el.focus();\n      return;\n    }\n    var firstname = $('account-edit-firstname').value.trim();\n    var lastname = $('account-edit-lastname').value.trim();\n    var username = $('account-edit-username').value.trim();\n    var email = $('account-edit-email').value.trim().toLowerCase();\n    var phone = $('account-edit-phone').value.trim();\n    var birthday = $('account-edit-birthday').value;\n    var marketingOptIn = $('account-edit-marketing').checked;\n    var profilePayload = buildProfilePayloadFromUser(currentUser, {\n      email: email, username: username, firstname: firstname, lastname: lastname,\n      phone: phone, birthday: birthday, marketing_opt_in: marketingOptIn,\n      marketing_opt_in_at: marketingOptIn ? new Date().toISOString() : null\n    });\n    await applyAccountProfileUpdate(profilePayload);\n  }\n\n  function getTokenExpiry(accessToken) {\n    if (!accessToken) return null;\n    try {\n      var payload = JSON.parse(atob(accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));\n      return payload.exp || null;\n    } catch (e) { return null; }\n  }\n\n  function normalizeExpiry(expiresAt) {\n    if (!expiresAt) return null;\n    var value = Number(expiresAt);\n    if (!value) return null;\n    return value > 1e12 ? Math.floor(value / 1000) : value;\n  }\n\n  function getErrorText(data) {\n    if (!data) return '';\n    if (typeof data === 'string') return data;\n    if (typeof data.error === 'string') return [data.error, data.message, data.error_description].filter(Boolean).join(' ');\n    if (data.error && typeof data.error === 'object') return data.error.message || data.error.msg || data.error.error_description || '';\n    return data.message || data.error_description || data.msg || '';\n  }\n\n  function getFriendlyAuthMessage(message) {\n    var msg = String(message || '').toLowerCase();\n    if (/access token|expired|revoked|malformed|invalid for other reasons|invalid.*token|jwt|not authenticated/.test(msg)) {\n      return 'your session expired \u2014 please sign in again';\n    }\n    return message || 'something went wrong';\n  }\n\n  function clearStoredSession() {\n    try {\n      localStorage.removeItem('gm_session');\n    } catch (e) { /* ignore */ }\n    clearAuthOptimistic();\n  }\n\n  function normalizeSession(data) {\n    if (!data || !data.access_token) return null;\n    var session = Object.assign({}, data);\n    var now = Math.floor(Date.now() / 1000);\n    var tokenExp = getTokenExpiry(session.access_token);\n    if (tokenExp) session.expires_at = tokenExp;\n    else if (!session.expires_at && session.expires_in) session.expires_at = now + Number(session.expires_in);\n    else session.expires_at = normalizeExpiry(session.expires_at);\n    return session;\n  }\n\n  function saveSession(data, previousSession) {\n    var session = normalizeSession(data);\n    if (!session) return null;\n    if ((!session.user || !session.user.id) && previousSession && previousSession.user) session.user = previousSession.user;\n    localStorage.setItem('gm_session', JSON.stringify(session));\n    return session;\n  }\n\n  function getStoredSession() {\n    try {\n      var raw = localStorage.getItem('gm_session');\n      return raw ? JSON.parse(raw) : null;\n    } catch (e) { return null; }\n  }\n\n  function isSessionFresh(session) {\n    if (!session || !session.access_token) return false;\n    var now = Math.floor(Date.now() / 1000);\n    var expiresAt = normalizeExpiry(session.expires_at) || getTokenExpiry(session.access_token);\n    if (!expiresAt) return false;\n    session.expires_at = expiresAt;\n    return now < expiresAt - SESSION_REFRESH_BUFFER_SEC;\n  }\n\n  async function refreshSession(refreshToken, previousSession) {\n    if (!refreshToken) return null;\n    var res = await fetch(SUPABASE_URL + '/auth/v1/token?grant_type=refresh_token', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        apikey: SUPABASE_ANON_KEY,\n        Authorization: 'Bearer ' + SUPABASE_ANON_KEY\n      },\n      body: JSON.stringify({ refresh_token: refreshToken })\n    });\n    var data = {};\n    try { data = await res.json(); } catch (e) { data = {}; }\n    if (!data.access_token) return null;\n    return saveSession(data, previousSession);\n  }\n\n  async function fetchAuthUser(accessToken) {\n    var res = await fetch(SUPABASE_URL + '/auth/v1/user', {\n      headers: { apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + accessToken }\n    });\n    var data = await res.json();\n    if (!res.ok || !data || !data.id) return null;\n    return data;\n  }\n\n  function clearAuthOptimistic() {\n    document.documentElement.classList.remove('gm-auth-optimistic');\n  }\n\n  function emitAuthChange() {\n    syncAdminNav();\n    window.dispatchEvent(new CustomEvent('gm-auth-change', {\n      detail: { user: currentUser, profile: currentProfile }\n    }));\n  }\n\n  function isAdminUser() {\n    return !!(currentProfile && currentProfile.is_admin);\n  }\n\n  function syncAdminNav() {\n    var show = isAdminUser();\n    document.querySelectorAll('[data-gm-admin-nav]').forEach(function(link) {\n      link.hidden = !show;\n    });\n  }\n\n  function showLoggedOut() {\n    currentUser = null;\n    currentProfile = null;\n    profilePasswordEditOpen = false;\n    clearAuthOptimistic();\n    if (typeof window.gmResetProfileAuthDropdowns === 'function') {\n      window.gmResetProfileAuthDropdowns();\n    }\n    var page = getPageEl();\n    if (page) {\n      page.classList.add('gm-auth-logged-out');\n      page.classList.remove('gm-auth-logged-in');\n    }\n    var loggedIn = $('logged-in-view');\n    var loggedOut = $('logged-out-view');\n    if (loggedIn) {\n      loggedIn.style.display = 'none';\n      loggedIn.setAttribute('hidden', 'hidden');\n    }\n    if (loggedOut) {\n      loggedOut.style.display = 'flex';\n      loggedOut.removeAttribute('hidden');\n    }\n    try {\n      setProfilePanelOpen(false);\n    } catch (e) {\n      /* ignore */\n    }\n    emitAuthChange();\n  }\n\n  async function getValidSession() {\n    var session = getStoredSession();\n    if (!session) return null;\n    if (isSessionFresh(session)) return session;\n\n    var accessTokenBefore = session.access_token || '';\n    var refreshToken = session.refresh_token || '';\n    if (refreshToken) {\n      session = await refreshSession(refreshToken, session);\n      if (session && isSessionFresh(session)) return session;\n    }\n\n    // A newer login may have saved while refresh was in flight \u2014 keep only if still fresh.\n    var latest = getStoredSession();\n    if (latest && latest.access_token && latest.access_token !== accessTokenBefore && isSessionFresh(latest)) {\n      return latest;\n    }\n\n    if (!latest || latest.access_token === accessTokenBefore) {\n      clearStoredSession();\n    }\n    return null;\n  }\n\n  async function getValidAccessToken() {\n    var session = await getValidSession();\n    if (!session) return null;\n    var user = await fetchAuthUser(session.access_token);\n    if (!user) {\n      if (session.refresh_token) {\n        var refreshed = await refreshSession(session.refresh_token, session);\n        if (refreshed && refreshed.access_token) {\n          var refreshedUser = await fetchAuthUser(refreshed.access_token);\n          if (refreshedUser) {\n            refreshed.user = refreshedUser;\n            localStorage.setItem('gm_session', JSON.stringify(refreshed));\n            return refreshed.access_token;\n          }\n        }\n      }\n      clearStoredSession();\n      return null;\n    }\n    if (!session.user || session.user.id !== user.id) {\n      session.user = user;\n      localStorage.setItem('gm_session', JSON.stringify(session));\n    }\n    return session.access_token;\n  }\n\n  function isAuthErrorResponse(res, data) {\n    if (res.status === 401 || res.status === 403) return true;\n    return /expired|invalid.*token|access token|jwt|revoked|malformed|not authenticated|invalid for other reasons/i.test(getErrorText(data));\n  }\n\n  function handleAuthFailure(message) {\n    clearStoredSession();\n    showLoggedOut();\n    if (message) showAuthPopup(getFriendlyAuthMessage(message));\n    if (!isProfilePage()) openAccountOverlay();\n  }\n\n  async function syncProfileToShopify(accessToken) {\n    if (!accessToken) return { ok: false, error: 'missing session' };\n    try {\n      var res = await fetch(SUPABASE_URL + '/functions/v1/sync-shopify-customer', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + accessToken },\n        body: JSON.stringify({})\n      });\n      var data = null;\n      try { data = await res.json(); } catch (e) { /* empty */ }\n      if (!res.ok) {\n        return { ok: false, error: (data && data.error) || ('sync failed (' + res.status + ')') };\n      }\n      if (data && data.shopify_customer_id) {\n        currentProfile = Object.assign({}, currentProfile || {}, {\n          shopify_customer_id: data.shopify_customer_id,\n          shopify_synced_at: new Date().toISOString()\n        });\n      }\n      return {\n        ok: true,\n        shopify_customer_id: data && data.shopify_customer_id\n      };\n    } catch (e) {\n      return { ok: false, error: 'could not reach shopify sync' };\n    }\n  }\n\n  async function syncProfileToKlaviyo(accessToken, options) {\n    if (!accessToken) return { ok: false, error: 'missing session' };\n    var body = {};\n    if (options && typeof options.marketing_opt_in === 'boolean') {\n      body.marketing_opt_in = options.marketing_opt_in;\n    }\n    if (options && options.force_subscribe) {\n      body.force_subscribe = true;\n    }\n    if (options && options.email) body.email = options.email;\n    if (options && options.phone) body.phone = options.phone;\n    try {\n      var res = await fetch(SUPABASE_URL + '/functions/v1/sync-klaviyo-subscriber', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', apikey: SUPABASE_ANON_KEY, Authorization: 'Bearer ' + accessToken },\n        body: JSON.stringify(body)\n      });\n      var data = null;\n      try { data = await res.json(); } catch (e) { /* empty */ }\n      if (!res.ok) {\n        var failMsg = data && (data.error || data.msg || data.message);\n        if (failMsg && typeof failMsg === 'object') {\n          failMsg = failMsg.msg || failMsg.message || JSON.stringify(failMsg);\n        }\n        return {\n          ok: false,\n          skipped: !!(data && data.skipped),\n          error: failMsg || ('klaviyo sync failed (' + res.status + ')')\n        };\n      }\n      if (data) {\n        currentProfile = Object.assign({}, currentProfile || {}, {\n          klaviyo_profile_id: data.klaviyo_profile_id || (currentProfile && currentProfile.klaviyo_profile_id) || null,\n          klaviyo_status: data.klaviyo_status || null,\n          klaviyo_synced_at: new Date().toISOString()\n        });\n      }\n      return {\n        ok: true,\n        skipped: !!(data && data.skipped),\n        sms_skipped: !!(data && data.sms_skipped),\n        hint: data && data.hint,\n        klaviyo_profile_id: data && data.klaviyo_profile_id,\n        klaviyo_status: data && data.klaviyo_status\n      };\n    } catch (e) {\n      return { ok: false, error: 'could not reach klaviyo sync' };\n    }\n  }\n\n  async function syncMarketingIntegrations(accessToken, options) {\n    var shopify = await syncProfileToShopify(accessToken);\n    var klaviyo = { ok: true, skipped: true };\n    try {\n      klaviyo = await syncProfileToKlaviyo(accessToken, options);\n    } catch (e) {\n      klaviyo = { ok: false, error: 'could not reach klaviyo sync' };\n    }\n    return { shopify: shopify, klaviyo: klaviyo };\n  }\n\n  function shopifyRoutesRoot() {\n    return (window.Shopify && Shopify.routes ? Shopify.routes.root : '/');\n  }\n\n  function isLocalThemePreview() {\n    var host = window.location.hostname;\n    return host === '127.0.0.1' || host === 'localhost';\n  }\n\n  function storefrontOrigin() {\n    if (!isLocalThemePreview()) return window.location.origin;\n    if (window.Shopify && Shopify.shop) return 'https://' + Shopify.shop;\n    return 'https://vtcius-ge.myshopify.com';\n  }\n\n  function goToCheckoutUrl(queryParams, useCartCheckoutPath) {\n    var query = queryParams && queryParams.toString ? queryParams.toString() : '';\n    var path = useCartCheckoutPath ? 'cart/checkout' : 'checkout';\n\n    // Local theme preview proxies often return HTTP 401 on /checkout.\n    // Rebuild the cart on the real storefront domain, then go to checkout.\n    if (isLocalThemePreview()) {\n      fetchCartLines().then(function(lines) {\n        var origin = storefrontOrigin();\n        if (lines.length) {\n          var permalink = lines.map(function(line) {\n            return String(line.variant_id) + ':' + String(line.quantity);\n          }).join(',');\n          window.location.href = origin + '/cart/' + permalink + (query ? '?' + query + '&' : '?') + 'checkout';\n          return;\n        }\n        window.location.href = origin + '/' + path + (query ? '?' + query : '');\n      });\n      return;\n    }\n\n    var root = shopifyRoutesRoot();\n    window.location.href = root + path + (query ? '?' + query : '');\n  }\n\n  async function fetchCartLines() {\n    var root = shopifyRoutesRoot();\n    try {\n      var res = await fetch(root + 'cart.js', { headers: { Accept: 'application/json' } });\n      if (!res.ok) return [];\n      var cart = await res.json();\n      if (!cart || !Array.isArray(cart.items)) return [];\n      return cart.items.map(function(item) {\n        return { variant_id: item.variant_id, quantity: item.quantity };\n      }).filter(function(line) { return line.variant_id && line.quantity; });\n    } catch (e) {\n      return [];\n    }\n  }\n\n  async function stampCheckoutCartAttributes(user, source, shopifyCustomerId) {\n    var root = shopifyRoutesRoot();\n    var attributes = {\n      gm_supabase_user_id: user.id,\n      gm_profile_email: source.email || user.email || ''\n    };\n    if (shopifyCustomerId) attributes.gm_shopify_customer_id = String(shopifyCustomerId);\n    await fetch(root + 'cart/update.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ attributes: attributes })\n    });\n  }\n\n  async function requestPreparedCheckoutUrl(token, lines) {\n    var res = await fetch(SUPABASE_URL + '/functions/v1/prepare-shopify-checkout', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        apikey: SUPABASE_ANON_KEY,\n        Authorization: 'Bearer ' + token\n      },\n      body: JSON.stringify({ lines: lines })\n    });\n    var data = null;\n    try { data = await res.json(); } catch (e) { /* empty */ }\n    if (!res.ok || !data) {\n      return { ok: false, error: (data && data.error) || ('prepare checkout failed (' + res.status + ')') };\n    }\n    return { ok: true, data: data };\n  }\n\n  function buildCheckoutPrefillParams(source, user) {\n    var params = new URLSearchParams();\n    var email = String((source && source.email) || (user && user.email) || '').trim().toLowerCase();\n    if (email) params.set('checkout[email]', email);\n    if (source && source.firstname) params.set('checkout[shipping_address][first_name]', String(source.firstname).trim());\n    if (source && source.lastname) params.set('checkout[shipping_address][last_name]', String(source.lastname).trim());\n    if (source && source.phone) params.set('checkout[shipping_address][phone]', String(source.phone).trim());\n    return params;\n  }\n\n  async function prepareCheckoutAndGo(triggerEl) {\n    var token = await getValidAccessToken();\n    if (!token) {\n      goToCheckoutUrl(null, true);\n      return;\n    }\n\n    if (triggerEl) {\n      triggerEl.disabled = true;\n      triggerEl.classList.add('is-busy');\n    }\n\n    try {\n      var user = currentUser || await fetchAuthUser(token);\n      if (!user) {\n        goToCheckoutUrl(null, true);\n        return;\n      }\n\n      await hydrateCurrentProfile(token, user);\n      currentUser = user;\n\n      var lines = await fetchCartLines();\n      if (!lines.length) {\n        goToCheckoutUrl(null, true);\n        return;\n      }\n\n      var syncResult = await syncMarketingIntegrations(token);\n      if (!syncResult.shopify.ok) {\n        console.warn('shopify sync before checkout failed:', syncResult.shopify.error);\n      }\n      if (!syncResult.klaviyo.ok && !syncResult.klaviyo.skipped) {\n        console.warn('klaviyo sync before checkout failed:', syncResult.klaviyo.error);\n      }\n\n      var source = getProfileDataSource(user);\n      var shopifyCustomerId = (currentProfile && currentProfile.shopify_customer_id) || syncResult.shopify.shopify_customer_id;\n\n      try {\n        await stampCheckoutCartAttributes(user, source, shopifyCustomerId);\n      } catch (e) {\n        console.warn('could not stamp checkout cart attributes', e);\n      }\n\n      var prepared = await requestPreparedCheckoutUrl(token, lines);\n      if (prepared.ok && prepared.data) {\n        if (prepared.data.checkout_url) {\n          window.location.href = prepared.data.checkout_url;\n          return;\n        }\n        if (prepared.data.checkout_path) {\n          var checkoutPath = String(prepared.data.checkout_path);\n          if (checkoutPath.indexOf('http') === 0) {\n            window.location.href = checkoutPath;\n          } else {\n            window.location.href = storefrontOrigin() + (checkoutPath.charAt(0) === '/' ? '' : '/') + checkoutPath;\n          }\n          return;\n        }\n      } else if (prepared.error) {\n        console.warn('prepare-shopify-checkout failed:', prepared.error);\n      }\n\n      goToCheckoutUrl(buildCheckoutPrefillParams(source, user), true);\n    } finally {\n      if (triggerEl) {\n        triggerEl.disabled = false;\n        triggerEl.classList.remove('is-busy');\n      }\n    }\n  }\n\n  function initCheckoutLinking() {\n    document.addEventListener('click', function(e) {\n      var btn = e.target.closest('[data-gm-checkout]');\n      if (!btn || btn.disabled) return;\n      e.preventDefault();\n      prepareCheckoutAndGo(btn);\n    });\n  }\n\n  window.__gmAuth = {\n    getCurrentUser: function() { return currentUser; },\n    getCurrentProfile: function() { return currentProfile; },\n    getValidAccessToken: getValidAccessToken,\n    hydrateCurrentProfile: hydrateCurrentProfile,\n    isAdmin: isAdminUser\n  };\n\n  window.__gmCheckout = {\n    prepareAndGo: prepareCheckoutAndGo\n  };\n\n  function renderMyOrdersEmpty(message) {\n    var content = $('profile-orders-content');\n    if (!content) return;\n    content.innerHTML = '<p class=\"gm-profile-orders-empty\">' +\n      escHtml(message || 'you haven\\u2019t placed any orders yet.') +\n    '</p>';\n  }\n\n  function getGmOrdersScriptSrc() {\n    var scripts = document.querySelectorAll('script[src*=\"gm-auth.js\"]');\n    if (!scripts.length) return null;\n    return String(scripts[scripts.length - 1].src).replace('gm-auth.js', 'gm-orders-v2.js');\n  }\n\n  function ensureGmOrdersLoaded(maxMs) {\n    maxMs = maxMs || 6000;\n    if (window.__gmOrders && typeof window.__gmOrders.renderProfileOrders === 'function') {\n      return Promise.resolve(window.__gmOrders);\n    }\n    if (window.__gmOrders && typeof window.__gmOrders.waitForGmOrders === 'function') {\n      return window.__gmOrders.waitForGmOrders(maxMs);\n    }\n    return new Promise(function(resolve) {\n      var done = false;\n      function finish(api) {\n        if (done) return;\n        done = true;\n        window.removeEventListener('gm-orders-ready', onReady);\n        resolve(api || null);\n      }\n      function onReady() {\n        finish(window.__gmOrders || null);\n      }\n      window.addEventListener('gm-orders-ready', onReady);\n\n      if (!document.querySelector('script[src*=\"gm-orders-v2.js\"], script[src*=\"gm-orders.js\"]')) {\n        var src = getGmOrdersScriptSrc();\n        if (src) {\n          if (src.indexOf('gmcb=') < 0) {\n            src += (src.indexOf('?') >= 0 ? '&' : '?') + 'gmcb=20260802noflash';\n          }\n          var script = document.createElement('script');\n          script.src = src;\n          script.defer = true;\n          script.setAttribute('data-gm-orders-loader', '1');\n          document.head.appendChild(script);\n        }\n      }\n\n      window.setTimeout(function() {\n        finish(window.__gmOrders || null);\n      }, maxMs);\n    });\n  }\n\n  var profileOrdersLoadPromise = null;\n\n  async function loadMyOrders() {\n    var content = $('profile-orders-content');\n    if (!content) return;\n    if (window.__gmProfileOrdersLocked || content.dataset.gmOrdersReady === '1') return;\n    if (content.querySelector('.gm-order-track-view')) {\n      window.__gmProfileOrdersLocked = true;\n      content.dataset.gmOrdersReady = '1';\n      return;\n    }\n    if (window.__gmProfileOrdersLoadStarted) {\n      return profileOrdersLoadPromise || Promise.resolve();\n    }\n    window.__gmProfileOrdersLoadStarted = true;\n    if (profileOrdersLoadPromise) return profileOrdersLoadPromise;\n\n    profileOrdersLoadPromise = (async function() {\n      var ordersApi = await ensureGmOrdersLoaded(6000);\n\n      if (!ordersApi || typeof ordersApi.renderProfileOrders !== 'function') {\n        renderMyOrdersEmpty('orders could not load \u2014 refresh the page');\n        return;\n      }\n\n      function shouldUsePreviewProfileOrders() {\n        if (!isLocalThemePreview()) return false;\n        var search = window.location.search || '';\n        var hash = window.location.hash || '';\n        try {\n          if (localStorage.getItem('gm-preview-profile-orders') === '1') return true;\n        } catch (e) { /* ignore */ }\n        return /(?:\\?|&)preview_orders=1(?:&|$)/.test(search) ||\n          /preview_orders=1/.test(hash);\n      }\n\n      if (shouldUsePreviewProfileOrders() && typeof ordersApi.getPreviewOrders === 'function') {\n        var previewOrders = await ordersApi.getPreviewOrders();\n        if (typeof ordersApi.preloadOrderImages === 'function') {\n          await ordersApi.preloadOrderImages(previewOrders);\n        }\n        ordersApi.renderProfileOrders(content, previewOrders);\n        window.__gmProfileOrdersLocked = true;\n        content.dataset.gmOrdersReady = '1';\n        injectProfilePastGridStyles();\n        return;\n      }\n\n      var token = await getValidAccessToken();\n      if (!token) {\n        renderMyOrdersEmpty();\n        return;\n      }\n\n      var result = await ordersApi.fetchMyOrders(token);\n      if (!result.ok) {\n        renderMyOrdersEmpty(result.error || 'could not load orders');\n        return;\n      }\n\n      if (!result.orders.length) {\n        renderMyOrdersEmpty();\n        window.__gmProfileOrdersLocked = true;\n        content.dataset.gmOrdersReady = '1';\n        return;\n      }\n\n      if (typeof ordersApi.preloadOrderImages === 'function') {\n        await ordersApi.preloadOrderImages(result.orders);\n      }\n      ordersApi.renderProfileOrders(content, result.orders, result.hint);\n      window.__gmProfileOrdersLocked = true;\n      content.dataset.gmOrdersReady = '1';\n      injectProfilePastGridStyles();\n    })().finally(function() {\n      profileOrdersLoadPromise = null;\n    });\n\n    return profileOrdersLoadPromise;\n  }\n\n  async function hydrateCurrentProfile(token, user) {\n    if (!token || !user || !user.id) {\n      mergeProfileRow(null);\n      return null;\n    }\n    var profileRow = await fetchUserProfileRow(token, user.id);\n    mergeProfileRow(profileRow);\n    return profileRow;\n  }\n\n  function showLoggedIn(user, isReturning) {\n    currentUser = user;\n    clearAuthOptimistic();\n    var page = getPageEl();\n    if (page) {\n      page.classList.add('gm-auth-logged-in');\n      page.classList.remove('gm-auth-logged-out');\n    }\n    var loggedOut = $('logged-out-view');\n    var loggedIn = $('logged-in-view');\n    if (loggedOut) {\n      loggedOut.style.display = 'none';\n      loggedOut.classList.remove('is-open');\n      loggedOut.setAttribute('hidden', 'hidden');\n    }\n    if (loggedIn) {\n      loggedIn.style.display = 'flex';\n      loggedIn.removeAttribute('hidden');\n    }\n    if (typeof window.gmCloseProfileAuth === 'function') {\n      window.gmCloseProfileAuth();\n    }\n    renderAccountDetails(user);\n    setProfileActivePanel(getInitialProfilePanel());\n    try {\n      setProfilePanelOpen(false);\n    } catch (e) {\n      /* ignore legacy profile-toggle label errors */\n    }\n    emitAuthChange();\n  }\n\n  async function checkSession() {\n    var hadSession = !!localStorage.getItem('gm_session');\n    var sessionAtStart = getStoredSession();\n    var accessTokenAtStart = sessionAtStart && sessionAtStart.access_token;\n    var session = await getValidSession();\n    if (!session || !session.access_token) {\n      var latest = getStoredSession();\n      if (latest && isSessionFresh(latest)) {\n        session = latest;\n      } else {\n        clearStoredSession();\n        showLoggedOut();\n        return;\n      }\n    }\n\n    var user = await fetchAuthUser(session.access_token);\n    if (user) {\n      session.user = user;\n      localStorage.setItem('gm_session', JSON.stringify(session));\n      try {\n        await hydrateCurrentProfile(session.access_token, user);\n      } catch (e) { /* keep session even if profile row fetch fails */ }\n      showLoggedIn(user, true);\n      syncMarketingIntegrations(session.access_token, {\n        marketing_opt_in: !!getProfileDataSource(user).marketing_opt_in,\n        force_subscribe: true\n      });\n      return;\n    }\n\n    if (session.refresh_token) {\n      var refreshed = await refreshSession(session.refresh_token, session);\n      if (refreshed && refreshed.access_token) {\n        var refreshedUser = refreshed.user || await fetchAuthUser(refreshed.access_token);\n        if (refreshedUser) {\n          refreshed.user = refreshedUser;\n          localStorage.setItem('gm_session', JSON.stringify(refreshed));\n          try {\n            await hydrateCurrentProfile(refreshed.access_token, refreshedUser);\n          } catch (e) { /* ignore */ }\n          showLoggedIn(refreshedUser, true);\n          return;\n        }\n      }\n    }\n\n    var still = getStoredSession();\n    if (still && still.access_token && still.access_token !== accessTokenAtStart && isSessionFresh(still)) {\n      return;\n    }\n\n    clearStoredSession();\n    showLoggedOut();\n    // Only nudge the user if they had a session and are on profile (avoid scaring sign-in).\n    if (hadSession && isProfilePage() && !($('signin-form') && $('signin-form').style.display === 'flex')) {\n      showAuthPopup('your session expired \u2014 please sign in again');\n    }\n  }\n\n  function hideAuthPopup() {\n    var messageEl = $('form-message');\n    var noticeEl = $('auth-notice');\n    var signinErrorEl = $('signin-error');\n    var signupErrorEl = $('signup-error');\n    if (messageEl) { messageEl.classList.remove('visible'); messageEl.textContent = ''; }\n    if (noticeEl) { noticeEl.classList.remove('visible'); noticeEl.textContent = ''; }\n    if (signinErrorEl) {\n      signinErrorEl.classList.remove('is-visible');\n      signinErrorEl.textContent = '';\n      signinErrorEl.setAttribute('aria-hidden', 'true');\n    }\n    if (signupErrorEl) {\n      signupErrorEl.classList.remove('is-visible');\n      signupErrorEl.textContent = '';\n      signupErrorEl.setAttribute('aria-hidden', 'true');\n    }\n    if (authPopupTimer) clearTimeout(authPopupTimer);\n  }\n\n  function showAuthPopup(message) {\n    var friendly = getFriendlyAuthMessage(message);\n    var messageEl = $('form-message');\n    var noticeEl = $('auth-notice');\n    var signinErrorEl = $('signin-error');\n    var signupErrorEl = $('signup-error');\n    var signinVisible = signinFormEl && signinFormEl.style.display !== 'none';\n    var signupVisible = signupFormEl && signupFormEl.style.display !== 'none';\n\n    if (signinVisible && signinErrorEl) {\n      if (messageEl) { messageEl.classList.remove('visible'); messageEl.textContent = ''; }\n      if (noticeEl) { noticeEl.classList.remove('visible'); noticeEl.textContent = ''; }\n      if (signupErrorEl) {\n        signupErrorEl.classList.remove('is-visible');\n        signupErrorEl.textContent = '';\n        signupErrorEl.setAttribute('aria-hidden', 'true');\n      }\n      signinErrorEl.textContent = friendly;\n      signinErrorEl.classList.add('is-visible');\n      signinErrorEl.setAttribute('aria-hidden', 'false');\n    } else if (signupVisible && signupErrorEl) {\n      if (messageEl) { messageEl.classList.remove('visible'); messageEl.textContent = ''; }\n      if (noticeEl) { noticeEl.classList.remove('visible'); noticeEl.textContent = ''; }\n      if (signinErrorEl) {\n        signinErrorEl.classList.remove('is-visible');\n        signinErrorEl.textContent = '';\n        signinErrorEl.setAttribute('aria-hidden', 'true');\n      }\n      signupErrorEl.textContent = friendly;\n      signupErrorEl.classList.add('is-visible');\n      signupErrorEl.setAttribute('aria-hidden', 'false');\n    } else {\n      if (messageEl) { messageEl.textContent = friendly; messageEl.classList.add('visible'); }\n      if (noticeEl) { noticeEl.textContent = friendly; noticeEl.classList.add('visible'); }\n    }\n\n    if (authPopupTimer) clearTimeout(authPopupTimer);\n    authPopupTimer = setTimeout(hideAuthPopup, 5000);\n  }\n\n  function isSignupFormVisible() {\n    return signinFormEl && signinFormEl.style.display === 'none';\n  }\n\n  function usesProfileAuthChoices() {\n    return !!document.getElementById('profile-auth-choices');\n  }\n\n  function openProfileAuthMode(mode) {\n    if (typeof window.gmOpenProfileAuth === 'function') {\n      window.gmOpenProfileAuth(mode);\n      return;\n    }\n    setProfilePanelOpen(true);\n    if (mode === 'signup') showSignupForm();\n    else showSigninForm();\n  }\n\n  function closeProfileAuthMode() {\n    if (typeof window.gmCloseProfileAuth === 'function') {\n      window.gmCloseProfileAuth();\n      return;\n    }\n    setProfilePanelOpen(false);\n  }\n\n  function setProfileActionButtons(mode) {\n    if (!profileSigninBtn || !profileToggleBtn || !profileInstagramBtn) return;\n    if (mode === 'signup') {\n      profileSigninBtn.style.display = 'none';\n      profileToggleBtn.style.display = '';\n      profileInstagramBtn.style.display = 'none';\n    } else if (mode === 'signin') {\n      profileSigninBtn.style.display = '';\n      profileToggleBtn.style.display = 'none';\n      profileInstagramBtn.style.display = 'none';\n    } else {\n      profileSigninBtn.style.display = '';\n      profileToggleBtn.style.display = '';\n      profileInstagramBtn.style.display = '';\n    }\n  }\n\n  function setProfilePanelOpen(isOpen) {\n    if (!profileDropdown || !loggedOutViewEl) return;\n    profileDropdown.classList.toggle('open', isOpen);\n    loggedOutViewEl.classList.toggle('is-open', isOpen);\n    if (!isOpen) {\n      if (profileToggleBtn) profileToggleBtn.textContent = PROFILE_CREATE_CLOSED;\n      if (profileSigninBtn) profileSigninBtn.textContent = PROFILE_SIGNIN_CLOSED;\n      setProfileActionButtons('both');\n    } else if (isSignupFormVisible()) {\n      if (profileToggleBtn) profileToggleBtn.textContent = PROFILE_LABEL_OPEN;\n    } else {\n      if (profileSigninBtn) profileSigninBtn.textContent = PROFILE_LABEL_OPEN;\n    }\n  }\n\n  function showSignupForm() {\n    if (!signupFormEl || !signinFormEl) return;\n    signupFormEl.style.display = 'flex';\n    signinFormEl.style.display = 'none';\n    if (profileDropdown && profileDropdown.classList.contains('open')) {\n      if (profileToggleBtn) profileToggleBtn.textContent = PROFILE_LABEL_OPEN;\n      if (profileSigninBtn) profileSigninBtn.textContent = PROFILE_SIGNIN_CLOSED;\n      setProfileActionButtons('signup');\n    }\n  }\n\n  function showSigninForm() {\n    if (!signupFormEl || !signinFormEl) return;\n    signupFormEl.style.display = 'none';\n    signinFormEl.style.display = 'flex';\n    if (profileToggleBtn) profileToggleBtn.textContent = PROFILE_CREATE_CLOSED;\n    if (profileDropdown && profileDropdown.classList.contains('open')) {\n      if (profileSigninBtn) profileSigninBtn.textContent = PROFILE_LABEL_OPEN;\n      setProfileActionButtons('signin');\n    }\n  }\n\n  function getFirstMissingSignupField() {\n    var fields = [\n      { id: 'signup-firstname', label: 'first name' }, { id: 'signup-lastname', label: 'last name' },\n      { id: 'signup-username', label: 'username' }, { id: 'signup-email', label: 'email' },\n      { id: 'signup-password', label: 'password' }, { id: 'signup-phone', label: 'phone number' },\n      { id: 'signup-birthday', label: 'birthday' }\n    ];\n    for (var i = 0; i < fields.length; i++) {\n      var el = $(fields[i].id);\n      if (!el) continue;\n      var value = el.type === 'password' ? el.value : el.value.trim();\n      if (!value) return { el: el, label: fields[i].label };\n    }\n    return null;\n  }\n\n  function normalizeLoginIdentifier(login) {\n    var value = String(login || '').trim();\n    if (!value) return '';\n    if (value.charAt(0) === '@') value = value.slice(1).trim();\n    return value;\n  }\n\n  async function resolveLoginEmail(login) {\n    var value = normalizeLoginIdentifier(login);\n    if (!value) return null;\n    if (value.indexOf('@') !== -1) return value.toLowerCase();\n\n    var headers = {\n      apikey: SUPABASE_ANON_KEY,\n      Authorization: 'Bearer ' + SUPABASE_ANON_KEY,\n      'Content-Type': 'application/json'\n    };\n\n    // Username \u2192 email only via security-definer RPC (no public email SELECT).\n    try {\n      var rpcRes = await fetch(SUPABASE_URL + '/rest/v1/rpc/resolve_login_email', {\n        method: 'POST',\n        headers: headers,\n        body: JSON.stringify({ identifier: value })\n      });\n      if (rpcRes.ok) {\n        var rpcEmail = await rpcRes.json();\n        if (typeof rpcEmail === 'string' && rpcEmail.indexOf('@') !== -1) {\n          return rpcEmail.toLowerCase();\n        }\n      }\n    } catch (e) { /* ignore */ }\n\n    return null;\n  }\n\n  function getSignInErrorMessage(data, res) {\n    var text = getErrorText(data).toLowerCase();\n    var code = String((data && (data.error_code || data.code)) || '');\n    var combined = text + ' ' + code;\n    if (/email_not_confirmed|not confirmed/.test(combined)) {\n      return 'confirm your email before signing in';\n    }\n    if (/too many|rate limit|over_request/.test(combined)) {\n      return 'too many sign in attempts \u2014 wait a moment and try again';\n    }\n    if (/access token|expired|revoked|malformed|invalid for other reasons|jwt/.test(combined)) {\n      return 'your session expired \u2014 please sign in again';\n    }\n    if (!res || res.status >= 500) {\n      return 'sign in temporarily unavailable \u2014 try again';\n    }\n    return 'incorrect credentials';\n  }\n\n  function getSignUpErrorMessage(data, res) {\n    var text = getErrorText(data);\n    var lower = String(text || '').toLowerCase();\n    var code = String((data && (data.error_code || data.code)) || '').toLowerCase();\n    var combined = lower + ' ' + code;\n    if (/user_already_exists|already registered|already been registered|already exists/.test(combined)) {\n      return 'an account with that email already exists \u2014 try signing in';\n    }\n    if (/weak_password|at least \\d+ characters|password/.test(combined) && /weak|short|characters|least/.test(combined)) {\n      return text || 'password is too weak \u2014 use at least 6 characters';\n    }\n    if (/email_address_invalid|invalid.*email|valid email/.test(combined)) {\n      return 'please enter a valid email';\n    }\n    if (/too many|rate limit|over_request|email rate/.test(combined)) {\n      return 'too many sign up attempts \u2014 wait a moment and try again';\n    }\n    if (text) return getFriendlyAuthMessage(text);\n    if (!res || res.status >= 500) {\n      return 'sign up temporarily unavailable \u2014 try again';\n    }\n    return 'could not create account \u2014 try again';\n  }\n\n  async function attemptSignIn() {\n    var loginInput = $('signin-login');\n    var passwordInput = $('signin-password');\n    var login = normalizeLoginIdentifier(loginInput && loginInput.value);\n    var password = passwordInput ? passwordInput.value : '';\n    hideAuthPopup();\n\n    if (!login || !password) {\n      showAuthPopup('email or username and password required');\n      return;\n    }\n\n    // Drop any stale/revoked session so refresh races cannot overwrite a fresh login.\n    clearStoredSession();\n\n    try {\n      var email = await resolveLoginEmail(login);\n      if (!email) {\n        showAuthPopup('incorrect credentials');\n        return;\n      }\n\n      // Password grant should use the anon apikey only (no user Bearer token).\n      var res = await fetch(SUPABASE_URL + '/auth/v1/token?grant_type=password', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          apikey: SUPABASE_ANON_KEY\n        },\n        body: JSON.stringify({ email: email, password: password })\n      });\n\n      var data = {};\n      try {\n        data = await res.json();\n      } catch (e) {\n        data = {};\n      }\n\n      // Success is determined by an access token, not by legacy `error` field shape.\n      if (!data.access_token) {\n        showAuthPopup(getSignInErrorMessage(data, res));\n        return;\n      }\n\n      hideAuthPopup();\n      saveSession(data);\n\n      var user = data.user;\n      try {\n        if (!user || !user.id) {\n          user = await fetchAuthUser(data.access_token);\n        }\n        if (user) {\n          var stored = getStoredSession() || data;\n          stored.user = user;\n          localStorage.setItem('gm_session', JSON.stringify(stored));\n          await hydrateCurrentProfile(data.access_token, user);\n        }\n      } catch (e) {\n        /* keep the saved session even if profile hydration fails */\n      }\n\n      var signInOptIn = !!(user && getProfileDataSource(user).marketing_opt_in);\n      try {\n        await syncMarketingIntegrations(data.access_token, {\n          marketing_opt_in: signInOptIn,\n          force_subscribe: true\n        });\n      } catch (e) {\n        console.warn('marketing sync after sign in failed', e);\n      }\n\n      if (user && user.id) {\n        showLoggedIn(user, false);\n      } else {\n        showAuthPopup('signed in \u2014 refresh if profile does not appear');\n      }\n    } catch (e) {\n      showAuthPopup('could not reach sign in \u2014 check your connection and try again');\n    }\n  }\n\n  async function attemptSignUp() {\n    var firstnameEl = $('signup-firstname');\n    var lastnameEl = $('signup-lastname');\n    var usernameEl = $('signup-username');\n    var emailEl = $('signup-email');\n    var passwordEl = $('signup-password');\n    var phoneEl = $('signup-phone');\n    var birthdayEl = $('signup-birthday');\n    var marketingEl = $('signup-marketing-opt-in');\n    if (!firstnameEl || !lastnameEl || !usernameEl || !emailEl || !passwordEl || !phoneEl || !birthdayEl) {\n      showAuthPopup('sign up form is unavailable \u2014 refresh and try again');\n      return;\n    }\n\n    var firstname = firstnameEl.value.trim();\n    var lastname = lastnameEl.value.trim();\n    var username = usernameEl.value.trim();\n    var email = emailEl.value.trim();\n    var password = passwordEl.value;\n    var phone = phoneEl.value.trim();\n    var birthday = birthdayEl.value;\n    var marketingOptIn = !!(marketingEl && marketingEl.checked);\n    var missingField = getFirstMissingSignupField();\n    if (missingField) {\n      showAuthPopup('please fill out ' + missingField.label);\n      missingField.el.focus();\n      return;\n    }\n    hideAuthPopup();\n\n    try {\n      var res = await fetch(SUPABASE_URL + '/auth/v1/signup', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', apikey: SUPABASE_ANON_KEY },\n        body: JSON.stringify({\n          email: email, password: password,\n          data: { username: username, firstname: firstname, lastname: lastname, phone: phone, birthday: birthday, marketing_opt_in: marketingOptIn }\n        })\n      });\n      var data = {};\n      try { data = await res.json(); } catch (e) { data = {}; }\n\n      // Supabase often returns { msg, error_code } without a nested `error` object.\n      if (!data.access_token) {\n        if (data.user && data.user.id && !getErrorText(data)) {\n          showAuthPopup('check your email to confirm your account, then sign in');\n          return;\n        }\n        showAuthPopup(getSignUpErrorMessage(data, res));\n        return;\n      }\n\n      saveSession(data);\n      var user = data.user;\n      try {\n        if (user && user.id) {\n          await fetch(SUPABASE_URL + '/rest/v1/profiles?on_conflict=id', {\n            method: 'POST',\n            headers: {\n              'Content-Type': 'application/json', apikey: SUPABASE_ANON_KEY,\n              Authorization: 'Bearer ' + data.access_token,\n              Prefer: 'return=minimal,resolution=merge-duplicates'\n            },\n            body: JSON.stringify({\n              id: user.id, email: email, username: username, firstname: firstname,\n              lastname: lastname, phone: phone, birthday: birthday,\n              marketing_opt_in: marketingOptIn, marketing_opt_in_at: marketingOptIn ? new Date().toISOString() : null\n            })\n          });\n        }\n        if (!user || !user.id) {\n          user = await fetchAuthUser(data.access_token);\n        }\n        if (user) {\n          var stored = getStoredSession() || data;\n          stored.user = user;\n          localStorage.setItem('gm_session', JSON.stringify(stored));\n          await hydrateCurrentProfile(data.access_token, user);\n        }\n      } catch (e) {\n        /* keep the saved session even if profile upsert/hydration fails */\n      }\n\n      try {\n        var signupSync = await syncMarketingIntegrations(data.access_token, {\n          marketing_opt_in: marketingOptIn,\n          force_subscribe: true,\n          email: email,\n          phone: phone\n        });\n        if (marketingOptIn && signupSync.klaviyo && !signupSync.klaviyo.ok && !signupSync.klaviyo.skipped) {\n          console.warn('klaviyo sync after sign up failed', signupSync.klaviyo.error);\n        }\n      } catch (e) {\n        console.warn('marketing sync after sign up failed', e);\n      }\n\n      if (user && user.id) {\n        showLoggedIn(user, false);\n      } else {\n        showAuthPopup('account created \u2014 refresh if profile does not appear');\n      }\n    } catch (e) {\n      showAuthPopup('could not reach sign up \u2014 check your connection and try again');\n    }\n  }\n\n  function bindEvents() {\n    var accountClose = $('gm-account-close');\n    if (accountClose) accountClose.addEventListener('click', closeAccountOverlay);\n    if (accountOverlay) {\n      accountOverlay.addEventListener('click', function(e) {\n        if (e.target === accountOverlay) closeAccountOverlay();\n      });\n    }\n\n    if (profileSigninBtn && !usesProfileAuthChoices() && profileDropdown) {\n      profileSigninBtn.addEventListener('click', function() {\n        if (profileDropdown.classList.contains('open') && !isSignupFormVisible()) {\n          setProfilePanelOpen(false);\n          showSignupForm();\n          return;\n        }\n        setProfilePanelOpen(true);\n        showSigninForm();\n      });\n    }\n\n    if (profileToggleBtn && !usesProfileAuthChoices() && profileDropdown) {\n      profileToggleBtn.addEventListener('click', function() {\n        if (profileDropdown.classList.contains('open') && !isSignupFormVisible()) {\n          showSignupForm();\n          return;\n        }\n        setProfilePanelOpen(!profileDropdown.classList.contains('open'));\n        if (profileDropdown.classList.contains('open')) showSignupForm();\n      });\n    }\n\n    if (usesProfileAuthChoices()) {\n      var chatLocked = document.getElementById('chat-locked');\n      if (chatLocked) {\n        chatLocked.addEventListener('click', function() {\n          if (currentUser) return;\n          openProfileAuthMode('signup');\n        });\n      }\n    }\n\n    var toggleSignin = $('toggle-to-signin');\n    var toggleSignup = $('toggle-to-signup');\n    if (toggleSignin) toggleSignin.addEventListener('click', function() { openProfileAuthMode('signin'); });\n    if (toggleSignup) toggleSignup.addEventListener('click', function() { openProfileAuthMode('signup'); });\n\n    var signupBtn = $('signup-btn');\n    var signinBtn = $('signin-btn');\n    if (signupBtn) signupBtn.addEventListener('click', attemptSignUp);\n    if (signinBtn) signinBtn.addEventListener('click', attemptSignIn);\n\n    var signinLogin = $('signin-login');\n    var signinPassword = $('signin-password');\n    if (signinPassword) {\n      signinPassword.addEventListener('keydown', function(e) {\n        if (e.key === 'Enter') { e.preventDefault(); attemptSignIn(); }\n      });\n    }\n    [signinLogin, signinPassword].forEach(function(el) {\n      if (!el) return;\n      el.addEventListener('input', hideAuthPopup);\n    });\n\n    var profileSectionsContent = document.querySelector('.gm-profile-sections-content');\n    if (profileSectionsContent) {\n      profileSectionsContent.addEventListener('change', function(e) {\n        var updatesInput = e.target.closest('.gm-account-updates-input');\n        if (!updatesInput) return;\n        handleUpdatesCheckboxChange(updatesInput);\n      });\n      profileSectionsContent.addEventListener('click', function(e) {\n        if (e.target.id === 'profile-password-save') {\n          e.preventDefault();\n          submitPasswordChange();\n          return;\n        }\n        if (e.target.id === 'profile-password-cancel') {\n          e.preventDefault();\n          closePasswordEdit(true);\n          return;\n        }\n        if (e.target.closest('.gm-account-updates-check')) return;\n        if (e.target.closest('.gm-account-password-form')) return;\n        if (e.target.closest('.gm-account-editable') && isProfilePage() && currentUser && !accountDetailsEditMode) {\n          e.preventDefault();\n          return;\n        }\n        if (e.target.id === 'account-edit-btn') {\n          e.preventDefault();\n          if (currentUser) renderAccountDetailsEdit(currentUser);\n        } else if (e.target.id === 'account-cancel-btn') {\n          e.preventDefault();\n          hideAccountMessage();\n          if (currentUser) renderAccountDetails(currentUser);\n        } else if (e.target.id === 'account-save-btn') {\n          e.preventDefault();\n          saveAccountDetails();\n        }\n      });\n      profileSectionsContent.addEventListener('keydown', function(e) {\n        if (!e.target.closest('.gm-account-password-form')) return;\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          submitPasswordChange();\n        } else if (e.key === 'Escape') {\n          e.preventDefault();\n          closePasswordEdit(true);\n        }\n      });\n      profileSectionsContent.addEventListener('mousedown', function(e) {\n        if (e.target.closest('.gm-account-updates-check')) return;\n        if (e.target.closest('.gm-account-password-form')) return;\n        var editable = e.target.closest('.gm-account-editable');\n        if (!editable || !isProfilePage() || !currentUser || accountDetailsEditMode) return;\n        var fieldKey = editable.getAttribute('data-field');\n        if (!fieldKey || fieldKey === 'marketing_opt_in') return;\n        activateProfileFieldEdit(fieldKey, e);\n      });\n    }\n\n    var profileSectionsNav = $('profile-sections-nav');\n    if (profileSectionsNav) {\n      profileSectionsNav.addEventListener('click', function(e) {\n        var btn = e.target.closest('[data-profile-panel]');\n        if (!btn) return;\n        var panel = btn.getAttribute('data-profile-panel');\n        setProfileActivePanel(panel);\n      });\n    }\n\n    var accountContent = $('account-details-content');\n    if (accountContent && !profileSectionsContent) {\n      accountContent.addEventListener('mousedown', function(e) {\n        var editable = e.target.closest('.gm-account-editable');\n        if (!editable || !isProfilePage() || !currentUser || accountDetailsEditMode) return;\n        var fieldKey = editable.getAttribute('data-field');\n        if (!fieldKey) return;\n        activateProfileFieldEdit(fieldKey, e);\n      });\n      accountContent.addEventListener('click', function(e) {\n        if (e.target.closest('.gm-account-editable') && isProfilePage() && currentUser && !accountDetailsEditMode) {\n          e.preventDefault();\n          return;\n        }\n        if (e.target.id === 'account-edit-btn') {\n          e.preventDefault();\n          if (currentUser) renderAccountDetailsEdit(currentUser);\n        } else if (e.target.id === 'account-cancel-btn') {\n          e.preventDefault();\n          hideAccountMessage();\n          if (currentUser) renderAccountDetails(currentUser);\n        } else if (e.target.id === 'account-save-btn') {\n          e.preventDefault();\n          saveAccountDetails();\n        }\n      });\n    }\n\n    var signoutBtn = $('signout-btn');\n    if (signoutBtn) {\n      signoutBtn.addEventListener('click', function() {\n        localStorage.removeItem('gm_session');\n        window.location.reload();\n      });\n    }\n  }\n\n  function injectProfilePastGridStyles() {\n    if (!isProfilePage()) return;\n    if (document.getElementById('gm-profile-past-grid-styles')) return;\n    var style = document.createElement('style');\n    style.id = 'gm-profile-past-grid-styles';\n    style.textContent = '@media (max-width:749px){.gm-profile-page .gm-order-past-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:1.25rem .65rem!important;justify-content:stretch!important}.gm-profile-page .gm-order-past-card{width:100%!important;min-width:0!important}.gm-profile-page .gm-order-past-title{font-size:.78rem!important;letter-spacing:.08em!important;margin-bottom:.5rem!important}.gm-profile-page .gm-order-past-hero-media,.gm-profile-page .gm-order-past-hero-placeholder{width:min(7.5rem,36vw)!important;height:min(7.5rem,36vw)!important;max-width:100%!important}.gm-profile-page .gm-order-past-thumb,.gm-profile-page .gm-order-past-thumb-more{width:min(2.35rem,11vw)!important;height:min(2.35rem,11vw)!important}.gm-profile-page .gm-order-past-status{font-size:.72rem!important;margin-top:.45rem!important}.gm-profile-page .gm-order-past-items:not(.is-single-item){width:100%!important;max-width:100%!important;gap:.35rem!important}}';\n    document.head.appendChild(style);\n  }\n\n  injectProfilePastGridStyles();\n\n  document.addEventListener('gm-orders-ready', function() {\n    if (isProfilePage() && currentUser && $('profile-orders-content')) {\n      if (!window.__gmProfileOrdersLocked) loadMyOrders();\n    }\n  });\n\n  document.addEventListener('DOMContentLoaded', function() {\n    if (!document.querySelector('.gm-page')) return;\n    profileDropdown = $('profile-dropdown');\n    loggedOutViewEl = $('logged-out-view');\n    signupFormEl = $('signup-form');\n    signinFormEl = $('signin-form');\n    profileToggleBtn = $('profile-toggle-btn');\n    profileSigninBtn = $('profile-signin-btn');\n    profileInstagramBtn = $('profile-instagram-btn');\n    accountOverlay = $('gm-account-overlay');\n    bindEvents();\n    initCheckoutLinking();\n    checkSession();\n    if (isProfilePage()) injectProfilePastGridStyles();\n  });\n})();\n"],
  "mappings": "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",
  "names": ["i"]
}
